@powersync/service-rsocket-router 0.1.3 → 0.2.0

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/LICENSE CHANGED
@@ -1,12 +1,12 @@
1
- # Functional Source License, Version 1.1, Apache 2.0 Future License
1
+ # Functional Source License, Version 1.1, ALv2 Future License
2
2
 
3
3
  ## Abbreviation
4
4
 
5
- FSL-1.1-Apache-2.0
5
+ FSL-1.1-ALv2
6
6
 
7
7
  ## Notice
8
8
 
9
- Copyright 2023-2024 Journey Mobile, Inc.
9
+ Copyright 2023-2025 Journey Mobile, Inc.
10
10
 
11
11
  ## Terms and Conditions
12
12
 
@@ -7,6 +7,7 @@ import { Logger } from '@powersync/lib-services-framework';
7
7
  import * as http from 'http';
8
8
  import { Payload } from 'rsocket-core';
9
9
  import { SocketRouterObserver } from './SocketRouterListener.js';
10
+ import { WebsocketDuplexConnection } from './transport/WebsocketDuplexConnection.js';
10
11
  import { CommonParams, IReactiveStream, IReactiveStreamInput, ReactiveSocketRouterOptions, SocketResponder } from './types.js';
11
12
  export interface ReactiveStreamRequest {
12
13
  payload: Payload;
@@ -14,6 +15,7 @@ export interface ReactiveStreamRequest {
14
15
  dataMimeType: string;
15
16
  initialN: number;
16
17
  responder: SocketResponder;
18
+ connection: WebsocketDuplexConnection;
17
19
  }
18
20
  export interface SocketBaseContext {
19
21
  logger: Logger;
@@ -31,7 +31,30 @@ export class ReactiveSocketRouter {
31
31
  * This follows a similar pattern to the Journey Micro
32
32
  * web sockets router.
33
33
  */
34
- const wss = new ws.WebSocketServer({ noServer: true });
34
+ const wss = new ws.WebSocketServer({
35
+ noServer: true,
36
+ perMessageDeflate: {
37
+ zlibDeflateOptions: {
38
+ chunkSize: 128 * 1024, // default is 16kb - increased for better efficiency
39
+ memLevel: 7, // default is 8
40
+ level: 3
41
+ },
42
+ zlibInflateOptions: {
43
+ // for decompressing messages from the client
44
+ chunkSize: 32 * 1024
45
+ },
46
+ // don't keep client context between messages
47
+ clientNoContextTakeover: true,
48
+ // keep context between messages from the server
49
+ serverNoContextTakeover: false,
50
+ // bigger window uses more memory and potentially more cpu. 10-15 is a good range.
51
+ serverMaxWindowBits: 12,
52
+ // Limit concurrent compression threads
53
+ concurrencyLimit: 8,
54
+ // Size (in bytes) below which messages should not be compressed _if context takeover is disabled_.
55
+ threshold: 1024
56
+ }
57
+ });
35
58
  server.on('upgrade', (request, socket, head) => {
36
59
  wss.handleUpgrade(request, socket, head, (ws) => {
37
60
  wss.emit('connection', ws, request);
@@ -44,7 +67,8 @@ export class ReactiveSocketRouter {
44
67
  const rSocketServer = new RSocketServer({
45
68
  transport,
46
69
  acceptor: {
47
- accept: async (payload) => {
70
+ accept: async (payload, rsocket) => {
71
+ const connection = rsocket.connection;
48
72
  const { max_concurrent_connections } = this.options ?? {};
49
73
  logger.info(`Currently have ${wss.clients.size} active WebSocket connection(s)`);
50
74
  // wss.clients.size includes this connection, so we check for greater than
@@ -75,7 +99,7 @@ export class ReactiveSocketRouter {
75
99
  const observer = new SocketRouterObserver();
76
100
  const abortController = new AbortController();
77
101
  // TODO: Consider limiting the number of active streams per connection to prevent abuse
78
- handleReactiveStream(context, { payload, initialN, responder, dataMimeType, metadataMimeType }, observer, abortController, params).catch((ex) => {
102
+ handleReactiveStream(context, { payload, initialN, responder, dataMimeType, metadataMimeType, connection }, observer, abortController, params).catch((ex) => {
79
103
  context.logger.error(ex);
80
104
  responder.onError(ex);
81
105
  responder.onComplete();
@@ -138,6 +162,7 @@ export async function handleReactiveStream(context, request, observer, abortCont
138
162
  context,
139
163
  observer,
140
164
  signal: abortController.signal,
165
+ connection: request.connection,
141
166
  responder
142
167
  });
143
168
  if (!isAuthorized.authorized) {
@@ -151,6 +176,7 @@ export async function handleReactiveStream(context, request, observer, abortCont
151
176
  observer,
152
177
  signal: abortController.signal,
153
178
  responder,
179
+ connection: request.connection,
154
180
  initialN
155
181
  });
156
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReactiveSocketRouter.js","sourceRoot":"","sources":["../../src/router/ReactiveSocketRouter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAU,MAAM,mCAAmC,CAAC;AAEtF,OAAO,EAAW,aAAa,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAIL,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAcpB,MAAM,OAAO,oBAAoB;IACT;IAAtB,YAAsB,OAAwC;QAAxC,YAAO,GAAP,OAAO,CAAiC;IAAG,CAAC;IAElE,cAAc,CAAO,IAAY,EAAE,MAAqC;QACtE,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,gBAAgB,CAAC,MAAM;YAC7B,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,uBAAuB,CAAI,MAAmB,EAAE,MAAuB;QACrE;;;;WAIG;QACH,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC7C,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,MAAa,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBACrD,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAEtC,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC;YAC7C,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG;SACrB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;YACtC,SAAS;YACT,QAAQ,EAAE;gBACR,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBACxB,MAAM,EAAE,0BAA0B,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,OAAO,CAAC,IAAI,iCAAiC,CAAC,CAAC;oBACjF,0EAA0E;oBAC1E,wEAAwE;oBACxE,IAAI,0BAA0B,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,0BAA0B,EAAE,CAAC;wBAChF,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC;4BAClC,MAAM,EAAE,GAAG;4BACX,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;4BAClC,WAAW,EAAE,8DAA8D;yBAC5E,CAAC,CAAC;wBACH,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACjB,MAAM,GAAG,CAAC;oBACZ,CAAC;oBAED,oFAAoF;oBACpF,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACtB,2DAA2D;wBAC3D,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;oBAC9F,CAAC;oBAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;oBAClD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;oBAE1C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;wBAC3C,QAAQ,EAAE,OAAO,CAAC,gBAAgB;wBAClC,QAAQ,EAAE,OAAO,CAAC,QAAS;qBAC5B,CAAC,CAAC;oBAEH,OAAO;wBACL,gEAAgE;wBAChE,aAAa,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;4BAC9C,MAAM,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;4BAC5C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;4BAE9C,uFAAuF;4BACvF,oBAAoB,CAClB,OAAO,EACP,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAChE,QAAQ,EACR,eAAe,EACf,MAAM,CACP,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;gCACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCACzB,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gCACtB,SAAS,CAAC,UAAU,EAAE,CAAC;4BACzB,CAAC,CAAC,CAAC;4BACH,OAAO;gCACL,MAAM,EAAE,GAAG,EAAE;oCACX,eAAe,CAAC,KAAK,EAAE,CAAC;gCAC1B,CAAC;gCACD,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE;gCAC9C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;6BAC3C,CAAC;wBACJ,CAAC;qBACF,CAAC;gBACJ,CAAC;aACF;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1B,8DAA8D;YAC9D,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAgB,EAChB,OAA8B,EAC9B,QAA8B,EAC9B,eAAgC,EAChC,MAA6B;IAE7B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7B,MAAM,aAAa,GAAG,CAAC,KAAU,EAAE,EAAE;QACnC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,aAAa,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;QACpC,QAAQ,EAAE,OAAO,CAAC,gBAAgB;QAClC,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEH,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEtB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEhG,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,aAAa,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC;IACjF,MAAM,cAAc,GAAG,MAAM,OAAO,CAClC,OAAO,CAAC,IAAI;QACV,CAAC,CAAC;YACE,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,QAAQ,EAAE,OAAO,CAAC,YAAY;SAC/B;QACH,CAAC,CAAC,SAAS,CACd,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,aAAa,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC;YACnC,MAAM,EAAE,cAAc;YACtB,OAAO;YACP,QAAQ;YACR,MAAM,EAAE,eAAe,CAAC,MAAM;YAC9B,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAC7B,OAAO,aAAa,CAClB,YAAY,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,sBAAsB,CAAC,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,CAAC;YACZ,MAAM,EAAE,cAAc;YACtB,OAAO;YACP,QAAQ;YACR,MAAM,EAAE,eAAe,CAAC,MAAM;YAC9B,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjB,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtB,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE;YACpC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;SACrF,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ReactiveSocketRouter.js","sourceRoot":"","sources":["../../src/router/ReactiveSocketRouter.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare class WebsocketDuplexConnection extends Deferred implements Duple
5
5
  private websocketDuplex;
6
6
  private rawSocket;
7
7
  readonly multiplexerDemultiplexer: Multiplexer & Demultiplexer & FrameHandler;
8
+ readonly tracker: WebSocketTracker;
8
9
  constructor(websocketDuplex: Duplex, frame: Frame, multiplexerDemultiplexerFactory: (frame: Frame, outbound: Outbound & Closeable) => Multiplexer & Demultiplexer & FrameHandler, rawSocket: WebSocket.WebSocket);
9
10
  get availability(): number;
10
11
  close(error?: Error): void;
@@ -14,3 +15,16 @@ export declare class WebsocketDuplexConnection extends Deferred implements Duple
14
15
  private handleMessage;
15
16
  static create(socket: Duplex, connectionAcceptor: (frame: Frame, connection: DuplexConnection) => Promise<void>, multiplexerDemultiplexerFactory: (frame: Frame, outbound: Outbound & Closeable) => Multiplexer & Demultiplexer & FrameHandler, rawSocket: WebSocket.WebSocket): void;
16
17
  }
18
+ /**
19
+ * Tracks encoding and bytes written on a websocket connection, catering for compressed data.
20
+ */
21
+ export declare class WebSocketTracker {
22
+ private lastBytesWritten;
23
+ private socket;
24
+ readonly encoding: 'permessage-deflate' | undefined;
25
+ constructor(ws: WebSocket);
26
+ /**
27
+ * Consumes and returns the number of bytes sent.
28
+ */
29
+ getBytesWritten(): number;
30
+ }
@@ -20,6 +20,7 @@ export class WebsocketDuplexConnection extends Deferred {
20
20
  websocketDuplex;
21
21
  rawSocket;
22
22
  multiplexerDemultiplexer;
23
+ tracker;
23
24
  constructor(websocketDuplex, frame, multiplexerDemultiplexerFactory, rawSocket) {
24
25
  super();
25
26
  this.websocketDuplex = websocketDuplex;
@@ -28,6 +29,7 @@ export class WebsocketDuplexConnection extends Deferred {
28
29
  websocketDuplex.on('error', this.handleError);
29
30
  websocketDuplex.on('data', this.handleMessage);
30
31
  this.multiplexerDemultiplexer = multiplexerDemultiplexerFactory(frame, this);
32
+ this.tracker = new WebSocketTracker(this.rawSocket);
31
33
  }
32
34
  get availability() {
33
35
  return this.websocketDuplex.destroyed ? 0 : 1;
@@ -66,7 +68,9 @@ export class WebsocketDuplexConnection extends Deferred {
66
68
  this.close(new Error(e?.reason || 'WebsocketDuplexConnection: Socket closed unexpectedly.'));
67
69
  };
68
70
  handleError = (e) => {
69
- logger.error(`Error in WebSocket duplex connection: ${e}`);
71
+ // Example:
72
+ // Error: The socket was closed while data was being compressed
73
+ logger.warn(`Error in WebSocket duplex connection: ${e}`);
70
74
  if (!this.done) {
71
75
  this.close(e.error);
72
76
  }
@@ -110,4 +114,31 @@ export class WebsocketDuplexConnection extends Deferred {
110
114
  });
111
115
  }
112
116
  }
117
+ /**
118
+ * Tracks encoding and bytes written on a websocket connection, catering for compressed data.
119
+ */
120
+ export class WebSocketTracker {
121
+ lastBytesWritten;
122
+ socket;
123
+ encoding;
124
+ constructor(ws) {
125
+ this.socket = ws._socket;
126
+ this.lastBytesWritten = this.socket.bytesWritten;
127
+ // Crude check, but this is the only extension that would actually be used
128
+ if (ws.extensions.includes('permessage-deflate')) {
129
+ this.encoding = 'permessage-deflate';
130
+ }
131
+ else {
132
+ this.encoding = undefined;
133
+ }
134
+ }
135
+ /**
136
+ * Consumes and returns the number of bytes sent.
137
+ */
138
+ getBytesWritten() {
139
+ const written = this.socket.bytesWritten - this.lastBytesWritten;
140
+ this.lastBytesWritten = this.socket.bytesWritten;
141
+ return written;
142
+ }
143
+ }
113
144
  //# sourceMappingURL=WebsocketDuplexConnection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebsocketDuplexConnection.js","sourceRoot":"","sources":["../../../src/router/transport/WebsocketDuplexConnection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebsocketDuplexConnection.js","sourceRoot":"","sources":["../../../src/router/transport/WebsocketDuplexConnection.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as t from 'ts-codec';
2
2
  import { router } from '@powersync/lib-services-framework';
3
3
  import { OnExtensionSubscriber, OnNextSubscriber, OnTerminalSubscriber } from 'rsocket-core';
4
4
  import { SocketRouterObserver } from './SocketRouterListener.js';
5
+ import { WebsocketDuplexConnection } from './transport/WebsocketDuplexConnection.js';
5
6
  export declare enum RS_ENDPOINT_TYPE {
6
7
  STREAM = "stream"
7
8
  }
@@ -17,6 +18,10 @@ export type CommonStreamPayload = {
17
18
  observer: SocketRouterObserver;
18
19
  responder: SocketResponder;
19
20
  signal: AbortSignal;
21
+ /**
22
+ * The underlying websocket connection. Should not be used directly apart from tracking metadata.
23
+ */
24
+ connection: WebsocketDuplexConnection;
20
25
  };
21
26
  export type ReactiveStreamPayload<O> = CommonStreamPayload & {
22
27
  initialN: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAO9B,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,sEAAsE;IACtE,qCAAiB,CAAA;AACnB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM;CACf,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAQ9B,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,sEAAsE;IACtE,qCAAiB,CAAA;AACnB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM;CACf,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@powersync/service-rsocket-router",
3
3
  "repository": "https://github.com/powersync-ja/powersync-service",
4
- "version": "0.1.3",
4
+ "version": "0.2.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
- "license": "FSL-1.1-Apache-2.0",
7
+ "license": "FSL-1.1-ALv2",
8
8
  "publishConfig": {
9
9
  "access": "public"
10
10
  },
@@ -17,7 +17,7 @@
17
17
  "ts-codec": "^1.3.0",
18
18
  "uuid": "^11.1.0",
19
19
  "ws": "^8.17.0",
20
- "@powersync/lib-services-framework": "0.7.2"
20
+ "@powersync/lib-services-framework": "0.7.3"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/ws": "~8.2.0",