js-rpc2 1.0.5 → 1.0.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "js-rpc2",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "js web websocket http rpc",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/src/lib.js CHANGED
@@ -538,25 +538,32 @@ export function parseRpcItemData(array) {
538
538
  * @param {object} extension
539
539
  * @param {WritableStreamDefaultWriter<Uint8Array>} writer
540
540
  * @param {Uint8Array} buffer
541
+ * @param {(msg:string)=>void} [logger]
541
542
  */
542
- export async function rpcRunServerDecodeBuffer(extension, writer, buffer) {
543
+ export async function rpcRunServerDecodeBuffer(extension, writer, buffer, logger) {
543
544
  /** @type{RPC_DATA} */
544
545
  let box = null
545
546
  let dataId = 0
547
+ let fnName = null
548
+ let params = []
549
+ let time = Date.now()
546
550
  try {
547
551
  let o = parseRpcData(buffer)
548
552
  dataId = o.id
549
553
  let items = parseRpcItemData(o.data)
550
- let fnName = items.at(0).data
554
+ fnName = items.at(0).data
551
555
  let args = items.slice(1)
552
- let params = []
553
556
  for (let i = 0; i < args.length; i++) {
554
557
  const p = args[i]
555
558
  if (p.type == RPC_DATA_ARG_TYPE_FUNCTION) {
556
559
  const callback = async (/** @type {any[]} */ ...args) => {
557
560
  /** @type{RPC_DATA} */
558
561
  let box = { id: p.data, type: RPC_TYPE_CALLBACK, data: buildRpcItemData(args), }
559
- await writer.write(buildRpcData(box))
562
+ try {
563
+ await writer.write(buildRpcData(box))
564
+ } catch (error) {
565
+ throw new Error(`rpc callback writer.write()`, { cause: error })
566
+ }
560
567
  }
561
568
  params.push(callback)
562
569
  } else {
@@ -570,13 +577,22 @@ export async function rpcRunServerDecodeBuffer(extension, writer, buffer) {
570
577
  box = { id: o.id, type: RPC_TYPE_RETURN, data: buildRpcItemData([ret]), }
571
578
  }
572
579
  } catch (error) {
573
- console.error(error)
580
+ console.error('rpcRunServerDecodeBuffer', fnName, params.map(o => {
581
+ if (typeof o == 'function') { return 'function' }
582
+ return o
583
+ }), error)
574
584
  box = {
575
585
  id: dataId,
576
586
  type: RPC_TYPE_ERROR,
577
587
  data: buildRpcItemData([error.message, error.stack]),
578
588
  }
579
589
  }
590
+ if (logger) {
591
+ logger(`time: ${Date.now() - time}ms ${fnName}(${params.map(o => {
592
+ if (typeof o == 'function') { return Function }
593
+ return o
594
+ }).join(', ')})`)
595
+ }
580
596
  await writer.write(buildRpcData(box))
581
597
  }
582
598
 
@@ -618,6 +634,8 @@ export function createRPCProxy(apiInvoke) {
618
634
  * @param {{
619
635
  * rpcKey: string;
620
636
  * extension: object;
637
+ * logger?: (msg:string)=>void;
638
+ * async?: boolean;
621
639
  * }} param
622
640
  */
623
641
  export function createRpcServerHelper(param) {
@@ -627,14 +645,16 @@ export function createRpcServerHelper(param) {
627
645
  let writer = encode.writable.getWriter()
628
646
  decode.readable.pipeTo(new WritableStream({
629
647
  async write(buffer) {
630
- await rpcRunServerDecodeBuffer(param.extension, writer, buffer)
648
+ if (param.async) {
649
+ rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger).catch(console.error)
650
+ } else {
651
+ await rpcRunServerDecodeBuffer(param.extension, writer, buffer, param.logger)
652
+ }
631
653
  },
632
654
  async close() {
633
655
  await writer.close()
634
656
  }
635
- })).catch(e => {
636
- console.error(e)
637
- })
657
+ })).catch(console.error)
638
658
 
639
659
  /** @type{RPC_HELPER_SERVER} */
640
660
  let ret = { writable: decode.writable, readable: encode.readable }
@@ -764,6 +784,7 @@ export function createRpcClientHelper(param) {
764
784
  * url:string;
765
785
  * rpcKey:string;
766
786
  * signal:AbortSignal;
787
+ * intercept?:(e:Event)=>void;
767
788
  * }} param
768
789
  */
769
790
  export function createRpcClientWebSocket(param) {
@@ -799,6 +820,9 @@ export function createRpcClientWebSocket(param) {
799
820
  signal.resolve()
800
821
  })
801
822
  ws.addEventListener('error', (e) => {
823
+ if (param.intercept) {
824
+ param.intercept(e)
825
+ }
802
826
  console.error('createRpcClientWebSocket createWebSocket ws error', e)
803
827
  promise.resolve()
804
828
  })
package/src/server.js CHANGED
@@ -25,7 +25,7 @@ export function createRpcServerWebSocket(param) {
25
25
  if (url != param.path) {
26
26
  return
27
27
  }
28
- let helper = createRpcServerHelper({ rpcKey: param.rpcKey, extension: param.extension })
28
+ let helper = createRpcServerHelper({ rpcKey: param.rpcKey, extension: param.extension, async: true, })
29
29
  let writer = helper.writable.getWriter()
30
30
  helper.readable.pipeTo(new WritableStream({
31
31
  async write(chunk) {
@@ -58,12 +58,13 @@ export function createRpcServerWebSocket(param) {
58
58
  * path: string;
59
59
  * router: Router<any, {}>;
60
60
  * rpcKey?:string;
61
+ * logger?:(msg:string)=>void;
61
62
  * extension: Object;
62
63
  * }} param
63
64
  */
64
65
  export function createRpcServerKoaRouter(param) {
65
66
  param.router.post(param.path, async (ctx) => {
66
- let helper = createRpcServerHelper({ rpcKey: param.rpcKey, extension: param.extension })
67
+ let helper = createRpcServerHelper({ rpcKey: param.rpcKey, extension: param.extension, logger: param.logger })
67
68
  /** @type{ReadableStream} */
68
69
  let a = Readable.toWeb(ctx.req)
69
70
  await a.pipeTo(helper.writable)