@whitewall/blip-sdk 0.0.141 → 0.0.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/namespaces/account.js +1 -1
- package/dist/cjs/namespaces/account.js.map +1 -1
- package/dist/cjs/sender/enveloperesolver.js +32 -5
- package/dist/cjs/sender/enveloperesolver.js.map +1 -1
- package/dist/cjs/sender/sender.js +4 -0
- package/dist/cjs/sender/sender.js.map +1 -1
- package/dist/cjs/sender/tcp/json-parser.js +50 -0
- package/dist/cjs/sender/tcp/json-parser.js.map +1 -0
- package/dist/cjs/sender/tcp/tcpsender.js +6 -56
- package/dist/cjs/sender/tcp/tcpsender.js.map +1 -1
- package/dist/cjs/sender/websocket/websocketsender.js +1 -0
- package/dist/cjs/sender/websocket/websocketsender.js.map +1 -1
- package/dist/esm/namespaces/account.js +1 -1
- package/dist/esm/namespaces/account.js.map +1 -1
- package/dist/esm/sender/enveloperesolver.js +32 -5
- package/dist/esm/sender/enveloperesolver.js.map +1 -1
- package/dist/esm/sender/sender.js +4 -0
- package/dist/esm/sender/sender.js.map +1 -1
- package/dist/esm/sender/tcp/json-parser.js +47 -0
- package/dist/esm/sender/tcp/json-parser.js.map +1 -0
- package/dist/esm/sender/tcp/tcpsender.js +6 -56
- package/dist/esm/sender/tcp/tcpsender.js.map +1 -1
- package/dist/esm/sender/websocket/websocketsender.js +1 -0
- package/dist/esm/sender/websocket/websocketsender.js.map +1 -1
- package/dist/types/namespaces/account.d.ts +1 -1
- package/dist/types/namespaces/account.d.ts.map +1 -1
- package/dist/types/sender/enveloperesolver.d.ts +4 -1
- package/dist/types/sender/enveloperesolver.d.ts.map +1 -1
- package/dist/types/sender/sender.d.ts +1 -1
- package/dist/types/sender/sender.d.ts.map +1 -1
- package/dist/types/sender/tcp/json-parser.d.ts +6 -0
- package/dist/types/sender/tcp/json-parser.d.ts.map +1 -0
- package/dist/types/sender/tcp/tcpsender.d.ts.map +1 -1
- package/dist/types/sender/websocket/websocketsender.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/namespaces/account.ts +3 -2
- package/src/sender/enveloperesolver.ts +51 -6
- package/src/sender/sender.ts +5 -1
- package/src/sender/tcp/json-parser.ts +50 -0
- package/src/sender/tcp/tcpsender.ts +7 -60
- package/src/sender/websocket/websocketsender.ts +1 -0
|
@@ -13,6 +13,7 @@ import { BlipError } from '../bliperror.ts'
|
|
|
13
13
|
import { ConnectionSender, type ConnectionSenderConstructor, OpenConnectionSender } from '../sender.ts'
|
|
14
14
|
import { SessionNegotiator } from '../sessionnegotiator.ts'
|
|
15
15
|
import { EnvelopeThrottler } from '../throttler.ts'
|
|
16
|
+
import { tryParseJSON } from './json-parser.ts'
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* @remarks
|
|
@@ -97,6 +98,7 @@ export class TCPSender extends OpenConnectionSender {
|
|
|
97
98
|
public async close() {
|
|
98
99
|
this.sessionNegotiator?.finish()
|
|
99
100
|
await this.connectionHandle.close()
|
|
101
|
+
await super.close()
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
public static login = ConnectionSender.login<TCPSender>
|
|
@@ -142,8 +144,7 @@ class TCPHandle<T> {
|
|
|
142
144
|
if (!this.closing && this.currentSocketPromise) {
|
|
143
145
|
this.closing = true
|
|
144
146
|
const current = await this.currentSocketPromise
|
|
145
|
-
current.end()
|
|
146
|
-
current.destroy()
|
|
147
|
+
current.end().removeAllListeners().destroySoon()
|
|
147
148
|
}
|
|
148
149
|
}
|
|
149
150
|
|
|
@@ -155,8 +156,8 @@ class TCPHandle<T> {
|
|
|
155
156
|
): Promise<Socket> {
|
|
156
157
|
const { connect } = await import('node:net')
|
|
157
158
|
|
|
158
|
-
const socket = connect({ host, port }).
|
|
159
|
-
let buffer =
|
|
159
|
+
const socket = connect({ host, port }).setKeepAlive(true)
|
|
160
|
+
let buffer = Buffer.alloc(0)
|
|
160
161
|
|
|
161
162
|
await new Promise<void>((resolve) => {
|
|
162
163
|
socket.once('connect', () => {
|
|
@@ -180,8 +181,8 @@ class TCPHandle<T> {
|
|
|
180
181
|
}
|
|
181
182
|
})
|
|
182
183
|
|
|
183
|
-
socket.on('data', (chunk) => {
|
|
184
|
-
const result =
|
|
184
|
+
socket.on('data', (chunk: Buffer<ArrayBuffer>) => {
|
|
185
|
+
const result = tryParseJSON<T>(buffer.length === 0 ? chunk : Buffer.concat([buffer, chunk]))
|
|
185
186
|
buffer = result.remainingBuffer
|
|
186
187
|
|
|
187
188
|
for (const parsed of result.parsedObjects) {
|
|
@@ -195,58 +196,4 @@ class TCPHandle<T> {
|
|
|
195
196
|
|
|
196
197
|
return socket
|
|
197
198
|
}
|
|
198
|
-
|
|
199
|
-
private tryParseJSON(buffer: string): { parsedObjects: Array<T>; remainingBuffer: string } {
|
|
200
|
-
const parsedObjects: Array<T> = []
|
|
201
|
-
let currBuffer = buffer
|
|
202
|
-
let startIndex = buffer.indexOf('{')
|
|
203
|
-
|
|
204
|
-
while (startIndex !== -1) {
|
|
205
|
-
let braceCount = 0
|
|
206
|
-
let inString = false
|
|
207
|
-
let escaped = false
|
|
208
|
-
let foundEnd = false
|
|
209
|
-
let endIndex = startIndex
|
|
210
|
-
|
|
211
|
-
for (let i = startIndex; i < currBuffer.length; i++) {
|
|
212
|
-
const char = currBuffer[i]
|
|
213
|
-
|
|
214
|
-
if (inString) {
|
|
215
|
-
if (escaped) {
|
|
216
|
-
escaped = false
|
|
217
|
-
} else if (char === '\\') {
|
|
218
|
-
escaped = true
|
|
219
|
-
} else if (char === '"') {
|
|
220
|
-
inString = false
|
|
221
|
-
}
|
|
222
|
-
} else if (char === '"') {
|
|
223
|
-
inString = true
|
|
224
|
-
} else if (char === '{') {
|
|
225
|
-
braceCount++
|
|
226
|
-
} else if (char === '}') {
|
|
227
|
-
braceCount--
|
|
228
|
-
// When all opened braces are closed, we found the end.
|
|
229
|
-
if (braceCount === 0) {
|
|
230
|
-
endIndex = i
|
|
231
|
-
foundEnd = true
|
|
232
|
-
break
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// If we haven't found a complete JSON object, break and wait for more data.
|
|
238
|
-
if (!foundEnd) {
|
|
239
|
-
break
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
const rawMessage = currBuffer.slice(startIndex, endIndex + 1).trim()
|
|
243
|
-
const parsed = JSON.parse(rawMessage) as T
|
|
244
|
-
parsedObjects.push(parsed)
|
|
245
|
-
|
|
246
|
-
currBuffer = currBuffer.slice(endIndex + 1)
|
|
247
|
-
startIndex = currBuffer.indexOf('{')
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
return { parsedObjects, remainingBuffer: currBuffer }
|
|
251
|
-
}
|
|
252
199
|
}
|