@rool-dev/sdk 0.6.4 → 0.6.5-dev.0033a3a

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.
@@ -10,27 +10,9 @@ export interface ClientSubscriptionConfig {
10
10
  onError: (error: Error) => void;
11
11
  }
12
12
  export declare class ClientSubscriptionManager {
13
- private config;
14
- private client;
15
- private unsubscribe;
16
- private reconnectDelay;
17
- private reconnectTimeoutId;
18
- private isIntentionalClose;
19
- private _isSubscribed;
20
- private logger;
21
- private lastMessageAt;
22
- private heartbeatIntervalId;
13
+ private subscription;
23
14
  constructor(config: ClientSubscriptionConfig);
24
- get isSubscribed(): boolean;
25
15
  subscribe(): Promise<void>;
26
- unsubscribeFromEvents(): void;
27
- private connect;
28
- private disconnect;
29
- private scheduleReconnect;
30
- private cancelReconnect;
31
- private resetHeartbeat;
32
- private stopHeartbeatCheck;
33
- private parseClientEvent;
34
16
  destroy(): void;
35
17
  }
36
18
  export interface SpaceSubscriptionConfig {
@@ -43,33 +25,9 @@ export interface SpaceSubscriptionConfig {
43
25
  onError: (error: Error) => void;
44
26
  }
45
27
  export declare class SpaceSubscriptionManager {
46
- private config;
47
- private client;
48
- private unsubscribe;
49
- private reconnectDelay;
50
- private reconnectTimeoutId;
51
- private isIntentionalClose;
52
- private _isSubscribed;
53
- private _initialConnectPromise;
54
- private logger;
55
- private lastMessageAt;
56
- private heartbeatIntervalId;
28
+ private subscription;
57
29
  constructor(config: SpaceSubscriptionConfig);
58
- get isSubscribed(): boolean;
59
- /**
60
- * Start the subscription. Returns a promise that resolves when connected.
61
- * If the initial connection fails, the promise rejects.
62
- * After initial connection, disconnects trigger auto-reconnect.
63
- */
64
30
  subscribe(): Promise<void>;
65
- unsubscribeFromEvents(): void;
66
- private connect;
67
- private disconnect;
68
- private scheduleReconnect;
69
- private cancelReconnect;
70
- private resetHeartbeat;
71
- private stopHeartbeatCheck;
72
- private parseSpaceEvent;
73
31
  destroy(): void;
74
32
  }
75
33
  //# sourceMappingURL=subscription.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAsG,MAAM,YAAY,CAAC;AACjL,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAa1C,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,mBAAmB,CAA+C;gBAE9D,MAAM,EAAE,wBAAwB;IAK5C,IAAI,YAAY,IAAI,OAAO,CAE1B;IAEK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,qBAAqB,IAAI,IAAI;YAOf,OAAO;IA0FrB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,IAAI,IAAI;CAGhB;AAQD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,sBAAsB,CAAoE;IAClG,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,mBAAmB,CAA+C;gBAE9D,MAAM,EAAE,uBAAuB;IAK3C,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAW1B,qBAAqB,IAAI,IAAI;YAOf,OAAO;IAkHrB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,eAAe;IAmCvB,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAsG,MAAM,YAAY,CAAC;AACjL,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA0W1C,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,EAAE,wBAAwB;IAoBtC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,IAAI,IAAI;CAGhB;AA4DD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,YAAY,CAA6B;gBAErC,MAAM,EAAE,uBAAuB;IAqBrC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,IAAI,IAAI;CAGhB"}
@@ -1,453 +1,430 @@
1
1
  // =============================================================================
2
2
  // Subscription Managers
3
- // SSE-based GraphQL subscriptions with auto-reconnect
3
+ // SSE-based GraphQL subscriptions with auto-reconnect.
4
+ // See SUBSCRIPTION.md for the state machine spec.
4
5
  // =============================================================================
5
6
  import { createClient } from 'graphql-sse';
6
7
  const INITIAL_RECONNECT_DELAY = 1000;
7
8
  const MAX_RECONNECT_DELAY = 30000;
8
9
  const RECONNECT_MULTIPLIER = 2;
9
10
  const HEARTBEAT_TIMEOUT = 5_000; // Server sends heartbeats every 2s; reconnect if no message within 5s
10
- const HEARTBEAT_CHECK_INTERVAL = 1_000; // How often to check for stale connection
11
- export class ClientSubscriptionManager {
11
+ const HEARTBEAT_CHECK_INTERVAL = 1_000;
12
+ function makeDeferred() {
13
+ let resolve;
14
+ let reject;
15
+ const promise = new Promise((res, rej) => { resolve = res; reject = rej; });
16
+ return { promise, resolve, reject };
17
+ }
18
+ class Subscription {
12
19
  config;
13
- client = null;
14
- unsubscribe = null;
15
- reconnectDelay = INITIAL_RECONNECT_DELAY;
16
- reconnectTimeoutId = null;
17
- isIntentionalClose = false;
18
- _isSubscribed = false;
19
- logger;
20
+ state = { kind: 'idle' };
21
+ backoffDelay = INITIAL_RECONNECT_DELAY;
20
22
  lastMessageAt = 0;
21
- heartbeatIntervalId = null;
23
+ initDeferred = null;
24
+ boundOnlineHandler = null;
22
25
  constructor(config) {
23
26
  this.config = config;
24
- this.logger = config.logger;
25
27
  }
26
- get isSubscribed() {
27
- return this._isSubscribed;
28
+ get isLive() {
29
+ return this.state.kind === 'live';
28
30
  }
29
- async subscribe() {
30
- if (this._isSubscribed)
31
- return;
32
- this.isIntentionalClose = false;
33
- await this.connect();
31
+ start() {
32
+ if (this.state.kind === 'live')
33
+ return Promise.resolve();
34
+ if (this.state.kind === 'closed')
35
+ return Promise.reject(new Error('Subscription is closed'));
36
+ if (this.initDeferred)
37
+ return this.initDeferred.promise;
38
+ this.initDeferred = makeDeferred();
39
+ if (this.state.kind === 'idle') {
40
+ this.listenForOnline();
41
+ this.handle({ kind: 'start' });
42
+ }
43
+ // Otherwise the subscription is already running (backoff/awaiting_auth/probing)
44
+ // and the new deferred will resolve/reject on the next terminal transition.
45
+ return this.initDeferred.promise;
34
46
  }
35
- unsubscribeFromEvents() {
36
- this.isIntentionalClose = true;
37
- this.cancelReconnect();
38
- this.stopHeartbeatCheck();
39
- this.disconnect();
47
+ stop() {
48
+ this.handle({ kind: 'stop' });
40
49
  }
41
- async connect() {
42
- const tokens = await this.config.authManager.getTokens();
43
- if (!tokens) {
44
- // Token not available - may be refreshing or network not ready after wake
45
- // Schedule retry instead of giving up
46
- if (!this.isIntentionalClose) {
47
- this.scheduleReconnect();
48
- }
49
- return;
50
+ // ===========================================================================
51
+ // State machine the only place this.state is written.
52
+ // ===========================================================================
53
+ handle(input) {
54
+ const state = this.state;
55
+ switch (input.kind) {
56
+ case 'start':
57
+ if (state.kind !== 'idle')
58
+ return;
59
+ this.enterAwaitingAuth();
60
+ return;
61
+ case 'stop':
62
+ if (state.kind === 'closed')
63
+ return;
64
+ this.enterClosed();
65
+ return;
66
+ case 'auth_resolved':
67
+ if (state.kind !== 'awaiting_auth')
68
+ return;
69
+ this.enterProbing(input.tokens);
70
+ return;
71
+ case 'auth_failed':
72
+ if (state.kind !== 'awaiting_auth')
73
+ return;
74
+ this.config.onError(input.error);
75
+ this.rejectInitIfPending(input.error);
76
+ this.enterBackoff();
77
+ return;
78
+ case 'message_received':
79
+ if (state.kind !== 'probing' && state.kind !== 'live')
80
+ return;
81
+ this.handleMessage(input.raw);
82
+ return;
83
+ case 'server_closed':
84
+ if (state.kind !== 'probing' && state.kind !== 'live')
85
+ return;
86
+ this.rejectInitIfPending(input.error ?? new Error('Subscription closed before established'));
87
+ this.enterBackoff();
88
+ return;
89
+ case 'watchdog_stale':
90
+ if (state.kind !== 'probing' && state.kind !== 'live')
91
+ return;
92
+ this.config.logger.info(`${this.config.logPrefix} heartbeat timeout`);
93
+ this.rejectInitIfPending(new Error('Heartbeat timeout'));
94
+ this.backoffDelay = INITIAL_RECONNECT_DELAY;
95
+ this.enterBackoff();
96
+ return;
97
+ case 'backoff_fired':
98
+ if (state.kind !== 'backoff')
99
+ return;
100
+ this.enterAwaitingAuth();
101
+ return;
102
+ case 'online_event':
103
+ if (state.kind === 'closed')
104
+ return;
105
+ this.backoffDelay = INITIAL_RECONNECT_DELAY;
106
+ return;
107
+ }
108
+ }
109
+ // ===========================================================================
110
+ // State entry functions.
111
+ // INVARIANT: update this.state BEFORE any side effects so that re-entrant
112
+ // callbacks (e.g., graphql-sse firing complete inside unsubscribe()) observe
113
+ // the new state and no-op.
114
+ // ===========================================================================
115
+ enterAwaitingAuth() {
116
+ // From idle or backoff.
117
+ const prev = this.state;
118
+ if (prev.kind === 'backoff') {
119
+ clearTimeout(prev.timer);
50
120
  }
121
+ this.state = { kind: 'awaiting_auth' };
51
122
  this.config.onConnectionStateChanged('reconnecting');
52
- try {
53
- const headers = {
123
+ this.config.authManager.getTokens().then((tokens) => {
124
+ if (tokens)
125
+ this.handle({ kind: 'auth_resolved', tokens });
126
+ else
127
+ this.handle({ kind: 'auth_failed', error: new Error('Not authenticated') });
128
+ }, (err) => {
129
+ this.handle({ kind: 'auth_failed', error: err instanceof Error ? err : new Error(String(err)) });
130
+ });
131
+ }
132
+ enterProbing(tokens) {
133
+ // From awaiting_auth.
134
+ const client = createClient({
135
+ url: this.config.graphqlUrl,
136
+ headers: {
54
137
  Authorization: `Bearer ${tokens.accessToken}`,
55
138
  'X-Rool-Token': tokens.roolToken,
56
- };
57
- this.client = createClient({
58
- url: this.config.graphqlUrl,
59
- headers,
60
- });
61
- const query = `
62
- subscription ClientEvents {
63
- clientEvents
64
- }
65
- `;
66
- this.unsubscribe = this.client.subscribe({ query }, {
139
+ },
140
+ });
141
+ this.lastMessageAt = Date.now();
142
+ const watchdog = setInterval(() => {
143
+ if (Date.now() - this.lastMessageAt > HEARTBEAT_TIMEOUT) {
144
+ this.handle({ kind: 'watchdog_stale' });
145
+ }
146
+ }, HEARTBEAT_CHECK_INTERVAL);
147
+ // Indirect unsubscribe so state can be set before client.subscribe() is
148
+ // called, even though the real unsubscribe fn isn't available until it
149
+ // returns. If a callback fires synchronously during subscribe(), the
150
+ // state will already be 'probing'.
151
+ let realUnsubscribe = () => { };
152
+ const unsubscribe = () => realUnsubscribe();
153
+ this.state = { kind: 'probing', client, unsubscribe, watchdog };
154
+ this.config.logger.info(`${this.config.logPrefix} connecting...`);
155
+ try {
156
+ realUnsubscribe = client.subscribe({ query: this.config.query, variables: this.config.variables }, {
67
157
  next: (result) => {
68
- this.reconnectDelay = INITIAL_RECONNECT_DELAY;
69
- this.resetHeartbeat();
70
- if (result.data?.clientEvents) {
71
- try {
72
- const eventData = result.data.clientEvents;
73
- const rawEvent = JSON.parse(eventData);
74
- const event = this.parseClientEvent(rawEvent);
75
- if (event) {
76
- // Handle connected event
77
- if (event.type === 'connected') {
78
- this.logger.info(`[RoolClient] Connected, server version: ${event.serverVersion}`);
79
- if (!this._isSubscribed) {
80
- this._isSubscribed = true;
81
- this.config.onConnectionStateChanged('connected');
82
- }
83
- }
84
- this.config.onEvent(event);
85
- }
86
- }
87
- catch (e) {
88
- this.logger.error('[RoolClient] Failed to parse client event:', e);
89
- }
158
+ const data = result.data?.[this.config.dataField];
159
+ if (typeof data !== 'string')
160
+ return;
161
+ let raw;
162
+ try {
163
+ raw = JSON.parse(data);
90
164
  }
165
+ catch (e) {
166
+ this.config.logger.error(`${this.config.logPrefix} failed to parse event:`, e);
167
+ return;
168
+ }
169
+ this.handle({ kind: 'message_received', raw });
91
170
  },
92
171
  error: (error) => {
93
- this.logger.info('[RoolClient] Client subscription disconnected');
94
- this.logger.error('[RoolClient] Client subscription error:', error);
95
- this._isSubscribed = false;
96
- this.config.onConnectionStateChanged('disconnected');
97
- if (!this.isIntentionalClose) {
98
- this.scheduleReconnect();
99
- }
172
+ const err = error instanceof Error ? error : new Error(String(error));
173
+ this.handle({ kind: 'server_closed', error: err });
100
174
  },
101
175
  complete: () => {
102
- this.logger.info('[RoolClient] Client subscription disconnected');
103
- this._isSubscribed = false;
104
- this.config.onConnectionStateChanged('disconnected');
105
- if (!this.isIntentionalClose) {
106
- this.scheduleReconnect();
107
- }
176
+ this.handle({ kind: 'server_closed' });
108
177
  },
109
178
  });
110
179
  }
111
180
  catch (error) {
112
- this.logger.error('[RoolClient] Failed to establish client subscription:', error);
113
- this._isSubscribed = false;
114
- this.config.onConnectionStateChanged('disconnected');
115
- if (!this.isIntentionalClose) {
116
- this.scheduleReconnect();
117
- }
181
+ const err = error instanceof Error ? error : new Error(String(error));
182
+ this.config.logger.error(`${this.config.logPrefix} failed to create subscription:`, err);
183
+ this.handle({ kind: 'server_closed', error: err });
118
184
  }
119
185
  }
120
- disconnect() {
121
- if (this.unsubscribe) {
122
- this.unsubscribe();
123
- this.unsubscribe = null;
186
+ enterBackoff() {
187
+ // From awaiting_auth (after auth_failed) or probing/live (after server_closed/watchdog_stale).
188
+ const prev = this.state;
189
+ const delay = this.backoffDelay;
190
+ const timer = setTimeout(() => this.handle({ kind: 'backoff_fired' }), delay);
191
+ this.state = { kind: 'backoff', timer };
192
+ this.backoffDelay = Math.min(this.backoffDelay * RECONNECT_MULTIPLIER, MAX_RECONNECT_DELAY);
193
+ this.config.logger.info(`${this.config.logPrefix} reconnecting in ${delay}ms...`);
194
+ if (prev.kind === 'probing' || prev.kind === 'live') {
195
+ this.config.onConnectionStateChanged('disconnected');
196
+ this.tearDown(prev);
197
+ this.config.onConnectionStateChanged('reconnecting');
124
198
  }
125
- this.client = null;
126
- this._isSubscribed = false;
127
- this.config.onConnectionStateChanged('disconnected');
128
- }
129
- scheduleReconnect() {
130
- this.cancelReconnect();
131
- this.logger.info(`[RoolClient] Client reconnecting in ${this.reconnectDelay}ms...`);
132
- this.config.onConnectionStateChanged('reconnecting');
133
- this.reconnectTimeoutId = setTimeout(() => {
134
- this.reconnectTimeoutId = null;
135
- void this.connect();
136
- }, this.reconnectDelay);
137
- this.reconnectDelay = Math.min(this.reconnectDelay * RECONNECT_MULTIPLIER, MAX_RECONNECT_DELAY);
199
+ // awaiting_auth → backoff: consumer was already in 'reconnecting', no emission.
138
200
  }
139
- cancelReconnect() {
140
- if (this.reconnectTimeoutId !== null) {
141
- clearTimeout(this.reconnectTimeoutId);
142
- this.reconnectTimeoutId = null;
201
+ enterClosed() {
202
+ // From any non-closed state.
203
+ const prev = this.state;
204
+ this.state = { kind: 'closed' };
205
+ switch (prev.kind) {
206
+ case 'probing':
207
+ case 'live':
208
+ this.config.onConnectionStateChanged('disconnected');
209
+ this.tearDown(prev);
210
+ break;
211
+ case 'backoff':
212
+ clearTimeout(prev.timer);
213
+ this.config.onConnectionStateChanged('disconnected');
214
+ break;
215
+ case 'awaiting_auth':
216
+ this.config.onConnectionStateChanged('disconnected');
217
+ break;
218
+ case 'idle':
219
+ case 'closed':
220
+ break;
143
221
  }
222
+ this.removeOnlineListener();
223
+ this.rejectInitIfPending(new Error('Subscription stopped before connected'));
144
224
  }
145
- resetHeartbeat() {
225
+ handleMessage(raw) {
226
+ const state = this.state;
227
+ if (state.kind !== 'probing' && state.kind !== 'live')
228
+ return;
229
+ // Every message (including heartbeats) counts for liveness and backoff reset.
146
230
  this.lastMessageAt = Date.now();
147
- if (!this.heartbeatIntervalId) {
148
- this.heartbeatIntervalId = setInterval(() => {
149
- if (this.isIntentionalClose)
150
- return;
151
- if (Date.now() - this.lastMessageAt > HEARTBEAT_TIMEOUT) {
152
- this.logger.info('[RoolClient] Heartbeat timeout, forcing reconnect');
153
- this.stopHeartbeatCheck();
154
- this.disconnect();
155
- this.reconnectDelay = INITIAL_RECONNECT_DELAY;
156
- void this.connect();
157
- }
158
- }, HEARTBEAT_CHECK_INTERVAL);
231
+ this.backoffDelay = INITIAL_RECONNECT_DELAY;
232
+ const event = this.config.parseEvent(raw);
233
+ if (!event)
234
+ return;
235
+ if (state.kind === 'probing' && this.config.isConnectedEvent(event)) {
236
+ this.state = {
237
+ kind: 'live',
238
+ client: state.client,
239
+ unsubscribe: state.unsubscribe,
240
+ watchdog: state.watchdog,
241
+ };
242
+ this.config.logger.info(`${this.config.logPrefix} connected`);
243
+ this.config.onConnectionStateChanged('connected');
244
+ if (this.initDeferred) {
245
+ const { resolve } = this.initDeferred;
246
+ this.initDeferred = null;
247
+ resolve();
248
+ }
159
249
  }
250
+ this.config.onEvent(event);
160
251
  }
161
- stopHeartbeatCheck() {
162
- if (this.heartbeatIntervalId !== null) {
163
- clearInterval(this.heartbeatIntervalId);
164
- this.heartbeatIntervalId = null;
252
+ // ===========================================================================
253
+ // Helpers.
254
+ // ===========================================================================
255
+ tearDown(prev) {
256
+ clearInterval(prev.watchdog);
257
+ try {
258
+ prev.unsubscribe();
165
259
  }
166
- }
167
- parseClientEvent(raw) {
168
- if (raw.type === 'heartbeat')
169
- return null;
170
- const type = raw.type;
171
- const timestamp = raw.timestamp;
172
- if (!type)
173
- return null;
174
- switch (type) {
175
- case 'connected':
176
- return { type, timestamp, serverVersion: raw.serverVersion };
177
- case 'space_created':
178
- return {
179
- type, timestamp, spaceId: raw.spaceId, name: raw.name,
180
- ownerId: raw.ownerId, size: raw.size,
181
- createdAt: raw.createdAt, updatedAt: raw.updatedAt,
182
- role: raw.role,
183
- };
184
- case 'space_renamed':
185
- return { type, timestamp, spaceId: raw.spaceId, name: raw.name };
186
- case 'space_deleted':
187
- return { type, timestamp, spaceId: raw.spaceId };
188
- case 'space_access_changed':
189
- return {
190
- type, timestamp, spaceId: raw.spaceId, name: raw.name,
191
- ownerId: raw.ownerId, size: raw.size,
192
- createdAt: raw.createdAt, updatedAt: raw.updatedAt,
193
- role: raw.role, linkAccess: raw.linkAccess,
194
- memberCount: raw.memberCount,
195
- };
196
- case 'user_storage_changed':
197
- return { type, timestamp, key: raw.key, value: raw.value };
198
- case 'channel_created':
199
- return {
200
- type, timestamp, spaceId: raw.spaceId,
201
- channelId: raw.channelId, name: raw.name,
202
- channelCreatedAt: raw.createdAt,
203
- channelCreatedBy: raw.createdBy,
204
- channelCreatedByName: raw.createdByName,
205
- channelExtensionUrl: raw.extensionUrl,
206
- channelExtensionId: raw.extensionId,
207
- channelManifest: raw.manifest,
208
- };
209
- case 'channel_renamed':
210
- return { type, timestamp, spaceId: raw.spaceId, channelId: raw.channelId, name: raw.name };
211
- case 'channel_deleted':
212
- return { type, timestamp, spaceId: raw.spaceId, channelId: raw.channelId };
213
- default:
214
- this.logger.warn('[RoolClient] Unknown client event type:', type);
215
- return null;
260
+ catch (e) {
261
+ this.config.logger.warn(`${this.config.logPrefix} unsubscribe threw:`, e);
216
262
  }
217
263
  }
218
- destroy() {
219
- this.unsubscribeFromEvents();
264
+ rejectInitIfPending(error) {
265
+ if (!this.initDeferred)
266
+ return;
267
+ const { reject } = this.initDeferred;
268
+ this.initDeferred = null;
269
+ reject(error);
220
270
  }
221
- }
222
- export class SpaceSubscriptionManager {
223
- config;
224
- client = null;
225
- unsubscribe = null;
226
- reconnectDelay = INITIAL_RECONNECT_DELAY;
227
- reconnectTimeoutId = null;
228
- isIntentionalClose = false;
229
- _isSubscribed = false;
230
- _initialConnectPromise = null;
231
- logger;
232
- lastMessageAt = 0;
233
- heartbeatIntervalId = null;
234
- constructor(config) {
235
- this.config = config;
236
- this.logger = config.logger;
271
+ listenForOnline() {
272
+ if (typeof window === 'undefined')
273
+ return;
274
+ if (this.boundOnlineHandler)
275
+ return;
276
+ this.boundOnlineHandler = () => this.handle({ kind: 'online_event' });
277
+ window.addEventListener('online', this.boundOnlineHandler);
237
278
  }
238
- get isSubscribed() {
239
- return this._isSubscribed;
279
+ removeOnlineListener() {
280
+ if (typeof window === 'undefined')
281
+ return;
282
+ if (!this.boundOnlineHandler)
283
+ return;
284
+ window.removeEventListener('online', this.boundOnlineHandler);
285
+ this.boundOnlineHandler = null;
240
286
  }
241
- /**
242
- * Start the subscription. Returns a promise that resolves when connected.
243
- * If the initial connection fails, the promise rejects.
244
- * After initial connection, disconnects trigger auto-reconnect.
245
- */
246
- subscribe() {
247
- if (this._isSubscribed)
248
- return Promise.resolve();
249
- this.isIntentionalClose = false;
250
- return new Promise((resolve, reject) => {
251
- this._initialConnectPromise = { resolve, reject };
252
- void this.connect();
287
+ }
288
+ export class ClientSubscriptionManager {
289
+ subscription;
290
+ constructor(config) {
291
+ this.subscription = new Subscription({
292
+ graphqlUrl: config.graphqlUrl,
293
+ authManager: config.authManager,
294
+ logger: config.logger,
295
+ logPrefix: '[RoolClient]',
296
+ query: `
297
+ subscription ClientEvents {
298
+ clientEvents
299
+ }
300
+ `,
301
+ dataField: 'clientEvents',
302
+ parseEvent: (raw) => parseClientEvent(raw, config.logger),
303
+ isConnectedEvent: (event) => event.type === 'connected',
304
+ onEvent: config.onEvent,
305
+ onConnectionStateChanged: config.onConnectionStateChanged,
306
+ onError: config.onError,
253
307
  });
254
308
  }
255
- unsubscribeFromEvents() {
256
- this.isIntentionalClose = true;
257
- this.cancelReconnect();
258
- this.stopHeartbeatCheck();
259
- this.disconnect();
309
+ async subscribe() {
310
+ await this.subscription.start();
260
311
  }
261
- async connect() {
262
- const tokens = await this.config.authManager.getTokens();
263
- if (!tokens) {
264
- const error = new Error('Cannot subscribe: not authenticated');
265
- this.config.onError(error);
266
- if (this._initialConnectPromise) {
267
- // Initial connection - reject so caller knows it failed
268
- this._initialConnectPromise.reject(error);
269
- this._initialConnectPromise = null;
270
- }
271
- else if (!this.isIntentionalClose) {
272
- // Reconnect attempt - token may be refreshing, retry
273
- this.scheduleReconnect();
274
- }
275
- return;
276
- }
277
- this.logger.info(`[RoolChannel] Space ${this.config.spaceId} connecting...`);
278
- this.config.onConnectionStateChanged('reconnecting');
279
- try {
280
- const headers = {
281
- Authorization: `Bearer ${tokens.accessToken}`,
282
- 'X-Rool-Token': tokens.roolToken,
312
+ destroy() {
313
+ this.subscription.stop();
314
+ }
315
+ }
316
+ function parseClientEvent(raw, logger) {
317
+ if (raw.type === 'heartbeat')
318
+ return null;
319
+ const type = raw.type;
320
+ const timestamp = raw.timestamp;
321
+ if (!type)
322
+ return null;
323
+ switch (type) {
324
+ case 'connected':
325
+ return { type, timestamp, serverVersion: raw.serverVersion };
326
+ case 'space_created':
327
+ return {
328
+ type, timestamp, spaceId: raw.spaceId, name: raw.name,
329
+ ownerId: raw.ownerId, size: raw.size,
330
+ createdAt: raw.createdAt, updatedAt: raw.updatedAt,
331
+ role: raw.role,
283
332
  };
284
- this.client = createClient({
285
- url: this.config.graphqlUrl,
286
- headers,
287
- });
288
- const query = `
333
+ case 'space_renamed':
334
+ return { type, timestamp, spaceId: raw.spaceId, name: raw.name };
335
+ case 'space_deleted':
336
+ return { type, timestamp, spaceId: raw.spaceId };
337
+ case 'space_access_changed':
338
+ return {
339
+ type, timestamp, spaceId: raw.spaceId, name: raw.name,
340
+ ownerId: raw.ownerId, size: raw.size,
341
+ createdAt: raw.createdAt, updatedAt: raw.updatedAt,
342
+ role: raw.role, linkAccess: raw.linkAccess,
343
+ memberCount: raw.memberCount,
344
+ };
345
+ case 'user_storage_changed':
346
+ return { type, timestamp, key: raw.key, value: raw.value };
347
+ case 'channel_created':
348
+ return {
349
+ type, timestamp, spaceId: raw.spaceId,
350
+ channelId: raw.channelId, name: raw.name,
351
+ channelCreatedAt: raw.createdAt,
352
+ channelCreatedBy: raw.createdBy,
353
+ channelCreatedByName: raw.createdByName,
354
+ channelExtensionUrl: raw.extensionUrl,
355
+ channelExtensionId: raw.extensionId,
356
+ channelManifest: raw.manifest,
357
+ };
358
+ case 'channel_renamed':
359
+ return { type, timestamp, spaceId: raw.spaceId, channelId: raw.channelId, name: raw.name };
360
+ case 'channel_deleted':
361
+ return { type, timestamp, spaceId: raw.spaceId, channelId: raw.channelId };
362
+ default:
363
+ logger.warn('[RoolClient] Unknown client event type:', type);
364
+ return null;
365
+ }
366
+ }
367
+ export class SpaceSubscriptionManager {
368
+ subscription;
369
+ constructor(config) {
370
+ this.subscription = new Subscription({
371
+ graphqlUrl: config.graphqlUrl,
372
+ authManager: config.authManager,
373
+ logger: config.logger,
374
+ logPrefix: `[RoolChannel] Space ${config.spaceId}`,
375
+ query: `
289
376
  subscription SpaceEvents($spaceId: String!) {
290
377
  spaceEvents(spaceId: $spaceId)
291
378
  }
292
- `;
293
- this.unsubscribe = this.client.subscribe({
294
- query,
295
- variables: {
296
- spaceId: this.config.spaceId,
297
- },
298
- }, {
299
- next: (result) => {
300
- this.reconnectDelay = INITIAL_RECONNECT_DELAY;
301
- this.resetHeartbeat();
302
- if (result.data?.spaceEvents) {
303
- try {
304
- const eventData = result.data.spaceEvents;
305
- const rawEvent = JSON.parse(eventData);
306
- const event = this.parseSpaceEvent(rawEvent);
307
- if (event) {
308
- // Handle connected event - resolve initial promise
309
- if (event.type === 'connected') {
310
- this.logger.info(`[RoolChannel] Connected to space ${event.spaceId}, server version: ${event.serverVersion}`);
311
- if (!this._isSubscribed) {
312
- this._isSubscribed = true;
313
- this.config.onConnectionStateChanged('connected');
314
- if (this._initialConnectPromise) {
315
- this._initialConnectPromise.resolve();
316
- this._initialConnectPromise = null;
317
- }
318
- }
319
- }
320
- this.config.onEvent(event);
321
- }
322
- }
323
- catch (e) {
324
- this.logger.error('[RoolChannel] Failed to parse space event:', e);
325
- }
326
- }
327
- },
328
- error: (error) => {
329
- this.logger.info(`[RoolChannel] Space ${this.config.spaceId} subscription disconnected`);
330
- this.logger.error(`[RoolChannel] Space ${this.config.spaceId} subscription error:`, error);
331
- this._isSubscribed = false;
332
- this.config.onConnectionStateChanged('disconnected');
333
- if (this._initialConnectPromise) {
334
- this._initialConnectPromise.reject(error instanceof Error ? error : new Error(String(error)));
335
- this._initialConnectPromise = null;
336
- }
337
- else if (!this.isIntentionalClose) {
338
- this.scheduleReconnect();
339
- }
340
- },
341
- complete: () => {
342
- this.logger.info(`[RoolChannel] Space ${this.config.spaceId} subscription disconnected`);
343
- this._isSubscribed = false;
344
- this.config.onConnectionStateChanged('disconnected');
345
- if (this._initialConnectPromise) {
346
- this._initialConnectPromise.reject(new Error('Connection closed before establishing'));
347
- this._initialConnectPromise = null;
348
- }
349
- else if (!this.isIntentionalClose) {
350
- this.scheduleReconnect();
351
- }
352
- },
353
- });
354
- }
355
- catch (error) {
356
- this.logger.error('[RoolChannel] Failed to establish space subscription:', error);
357
- this._isSubscribed = false;
358
- this.config.onConnectionStateChanged('disconnected');
359
- if (this._initialConnectPromise) {
360
- this._initialConnectPromise.reject(error instanceof Error ? error : new Error(String(error)));
361
- this._initialConnectPromise = null;
362
- }
363
- else if (!this.isIntentionalClose) {
364
- this.scheduleReconnect();
365
- }
366
- }
367
- }
368
- disconnect() {
369
- if (this.unsubscribe) {
370
- this.unsubscribe();
371
- this.unsubscribe = null;
372
- }
373
- this.client = null;
374
- this._isSubscribed = false;
375
- this.config.onConnectionStateChanged('disconnected');
376
- }
377
- scheduleReconnect() {
378
- this.cancelReconnect();
379
- this.logger.info(`[RoolChannel] Space ${this.config.spaceId} reconnecting in ${this.reconnectDelay}ms...`);
380
- this.config.onConnectionStateChanged('reconnecting');
381
- this.reconnectTimeoutId = setTimeout(() => {
382
- this.reconnectTimeoutId = null;
383
- void this.connect();
384
- }, this.reconnectDelay);
385
- this.reconnectDelay = Math.min(this.reconnectDelay * RECONNECT_MULTIPLIER, MAX_RECONNECT_DELAY);
386
- }
387
- cancelReconnect() {
388
- if (this.reconnectTimeoutId !== null) {
389
- clearTimeout(this.reconnectTimeoutId);
390
- this.reconnectTimeoutId = null;
391
- }
379
+ `,
380
+ variables: { spaceId: config.spaceId },
381
+ dataField: 'spaceEvents',
382
+ parseEvent: (raw) => parseSpaceEvent(raw, config.logger),
383
+ isConnectedEvent: (event) => event.type === 'connected',
384
+ onEvent: config.onEvent,
385
+ onConnectionStateChanged: config.onConnectionStateChanged,
386
+ onError: config.onError,
387
+ });
392
388
  }
393
- resetHeartbeat() {
394
- this.lastMessageAt = Date.now();
395
- if (!this.heartbeatIntervalId) {
396
- this.heartbeatIntervalId = setInterval(() => {
397
- if (this.isIntentionalClose)
398
- return;
399
- if (Date.now() - this.lastMessageAt > HEARTBEAT_TIMEOUT) {
400
- this.logger.info(`[RoolChannel] Heartbeat timeout, forcing reconnect for space ${this.config.spaceId}`);
401
- this.stopHeartbeatCheck();
402
- this.disconnect();
403
- this.reconnectDelay = INITIAL_RECONNECT_DELAY;
404
- void this.connect();
405
- }
406
- }, HEARTBEAT_CHECK_INTERVAL);
407
- }
389
+ async subscribe() {
390
+ await this.subscription.start();
408
391
  }
409
- stopHeartbeatCheck() {
410
- if (this.heartbeatIntervalId !== null) {
411
- clearInterval(this.heartbeatIntervalId);
412
- this.heartbeatIntervalId = null;
413
- }
392
+ destroy() {
393
+ this.subscription.stop();
414
394
  }
415
- parseSpaceEvent(raw) {
416
- if (raw.type === 'heartbeat')
417
- return null;
418
- const type = raw.type;
419
- const spaceId = raw.spaceId;
420
- const timestamp = raw.timestamp;
421
- const source = raw.source ?? 'user';
422
- if (!type || !spaceId)
395
+ }
396
+ function parseSpaceEvent(raw, logger) {
397
+ if (raw.type === 'heartbeat')
398
+ return null;
399
+ const type = raw.type;
400
+ const spaceId = raw.spaceId;
401
+ const timestamp = raw.timestamp;
402
+ const source = raw.source ?? 'user';
403
+ if (!type || !spaceId)
404
+ return null;
405
+ switch (type) {
406
+ case 'connected':
407
+ return { type, spaceId, timestamp, source, serverVersion: raw.serverVersion };
408
+ case 'space_changed':
409
+ return { type, spaceId, timestamp, source };
410
+ case 'object_created':
411
+ case 'object_updated':
412
+ return { type, spaceId, timestamp, source, objectId: raw.objectId, object: raw.object, objectStat: raw.objectStat };
413
+ case 'object_deleted':
414
+ return { type, spaceId, timestamp, source, objectId: raw.objectId };
415
+ case 'schema_updated':
416
+ return { type, spaceId, timestamp, source, schema: raw.schema };
417
+ case 'metadata_updated':
418
+ return { type, spaceId, timestamp, source, metadata: raw.metadata };
419
+ case 'channel_updated':
420
+ return { type, spaceId, timestamp, source, channelId: raw.channelId, channel: raw.channel };
421
+ case 'conversation_updated':
422
+ return { type, spaceId, timestamp, source, channelId: raw.channelId, conversationId: raw.conversationId, conversation: raw.conversation };
423
+ case 'channel_deleted':
424
+ return { type, spaceId, timestamp, source, channelId: raw.channelId };
425
+ default:
426
+ logger.warn('[RoolChannel] Unknown space event type:', type);
423
427
  return null;
424
- switch (type) {
425
- case 'connected':
426
- return { type, spaceId, timestamp, source, serverVersion: raw.serverVersion };
427
- case 'space_changed':
428
- return { type, spaceId, timestamp, source };
429
- case 'object_created':
430
- case 'object_updated':
431
- return { type, spaceId, timestamp, source, objectId: raw.objectId, object: raw.object, objectStat: raw.objectStat };
432
- case 'object_deleted':
433
- return { type, spaceId, timestamp, source, objectId: raw.objectId };
434
- case 'schema_updated':
435
- return { type, spaceId, timestamp, source, schema: raw.schema };
436
- case 'metadata_updated':
437
- return { type, spaceId, timestamp, source, metadata: raw.metadata };
438
- case 'channel_updated':
439
- return { type, spaceId, timestamp, source, channelId: raw.channelId, channel: raw.channel };
440
- case 'conversation_updated':
441
- return { type, spaceId, timestamp, source, channelId: raw.channelId, conversationId: raw.conversationId, conversation: raw.conversation };
442
- case 'channel_deleted':
443
- return { type, spaceId, timestamp, source, channelId: raw.channelId };
444
- default:
445
- this.logger.warn('[RoolChannel] Unknown space event type:', type);
446
- return null;
447
- }
448
- }
449
- destroy() {
450
- this.unsubscribeFromEvents();
451
428
  }
452
429
  }
453
430
  //# sourceMappingURL=subscription.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rool-dev/sdk",
3
- "version": "0.6.4",
3
+ "version": "0.6.5-dev.0033a3a",
4
4
  "description": "TypeScript SDK for working with Rool Spaces",
5
5
  "packageManager": "pnpm@10.17.1",
6
6
  "type": "module",