@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.
Files changed (41) hide show
  1. package/dist/cjs/namespaces/account.js +1 -1
  2. package/dist/cjs/namespaces/account.js.map +1 -1
  3. package/dist/cjs/sender/enveloperesolver.js +32 -5
  4. package/dist/cjs/sender/enveloperesolver.js.map +1 -1
  5. package/dist/cjs/sender/sender.js +4 -0
  6. package/dist/cjs/sender/sender.js.map +1 -1
  7. package/dist/cjs/sender/tcp/json-parser.js +50 -0
  8. package/dist/cjs/sender/tcp/json-parser.js.map +1 -0
  9. package/dist/cjs/sender/tcp/tcpsender.js +6 -56
  10. package/dist/cjs/sender/tcp/tcpsender.js.map +1 -1
  11. package/dist/cjs/sender/websocket/websocketsender.js +1 -0
  12. package/dist/cjs/sender/websocket/websocketsender.js.map +1 -1
  13. package/dist/esm/namespaces/account.js +1 -1
  14. package/dist/esm/namespaces/account.js.map +1 -1
  15. package/dist/esm/sender/enveloperesolver.js +32 -5
  16. package/dist/esm/sender/enveloperesolver.js.map +1 -1
  17. package/dist/esm/sender/sender.js +4 -0
  18. package/dist/esm/sender/sender.js.map +1 -1
  19. package/dist/esm/sender/tcp/json-parser.js +47 -0
  20. package/dist/esm/sender/tcp/json-parser.js.map +1 -0
  21. package/dist/esm/sender/tcp/tcpsender.js +6 -56
  22. package/dist/esm/sender/tcp/tcpsender.js.map +1 -1
  23. package/dist/esm/sender/websocket/websocketsender.js +1 -0
  24. package/dist/esm/sender/websocket/websocketsender.js.map +1 -1
  25. package/dist/types/namespaces/account.d.ts +1 -1
  26. package/dist/types/namespaces/account.d.ts.map +1 -1
  27. package/dist/types/sender/enveloperesolver.d.ts +4 -1
  28. package/dist/types/sender/enveloperesolver.d.ts.map +1 -1
  29. package/dist/types/sender/sender.d.ts +1 -1
  30. package/dist/types/sender/sender.d.ts.map +1 -1
  31. package/dist/types/sender/tcp/json-parser.d.ts +6 -0
  32. package/dist/types/sender/tcp/json-parser.d.ts.map +1 -0
  33. package/dist/types/sender/tcp/tcpsender.d.ts.map +1 -1
  34. package/dist/types/sender/websocket/websocketsender.d.ts.map +1 -1
  35. package/package.json +1 -1
  36. package/src/namespaces/account.ts +3 -2
  37. package/src/sender/enveloperesolver.ts +51 -6
  38. package/src/sender/sender.ts +5 -1
  39. package/src/sender/tcp/json-parser.ts +50 -0
  40. package/src/sender/tcp/tcpsender.ts +7 -60
  41. 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 }).setEncoding('utf8')
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 = this.tryParseJSON(buffer + chunk)
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
  }
@@ -94,6 +94,7 @@ export class WebSocketSender extends OpenConnectionSender {
94
94
  public async close() {
95
95
  this.sessionNegotiator?.finish()
96
96
  await this.connectionHandle.close()
97
+ await super.close()
97
98
  }
98
99
 
99
100
  public static login = ConnectionSender.login<WebSocketSender>