@monterosa/sdk-connect-kit 0.19.0-rc.6 → 2.0.0-rc.2

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/connect.d.ts CHANGED
@@ -17,7 +17,8 @@ declare const getConnectMemoized: (...args: any[]) => Promise<Connect>;
17
17
  * host. If host is not provided, it returns Connect instance for
18
18
  * the host associated with the default sdk.
19
19
  *
20
- * @param sdk - Monterosa SDK.
20
+ * @param host - The host URL. If not provided, uses the host
21
+ * from the default SDK instance.
21
22
  */
22
23
  declare function getConnect(host?: string): Promise<Connect>;
23
24
  /**
@@ -33,7 +34,7 @@ declare function onConnected(conn: Connect, callback: (timestamp: number) => voi
33
34
  *
34
35
  * @param conn - The {@link Connect} instance
35
36
  * @param callback - callback triggered on connecting state. Two parameters
36
- * are provided: `attempt` sequential number of connect attempt and
37
+ * are provided: `attempt`, the sequential number of connect attempt, and
37
38
  * `delay` - delay in seconds before the next attempt
38
39
  */
39
40
  declare function onConnecting(conn: Connect, callback: (attempt: number, delay: number) => void): Unsubscribe;
@@ -59,11 +60,10 @@ declare function onDisconnected(conn: Connect, callback: () => void): Unsubscrib
59
60
  */
60
61
  declare function onMessage(conn: Connect, callback: (message: Message) => void): Unsubscribe;
61
62
  /**
62
- * @internal
63
- */
64
- declare const connectMemoized: (...args: any[]) => Promise<void>;
65
- /**
66
- * Starts a connection process. If connect is successful a promise resolved by
63
+ * Starts a connection process.
64
+ *
65
+ * @remarks
66
+ * If connect is successful a promise resolved by
67
67
  * and {@link onConnected} is triggered, otherwise a next attempt will be
68
68
  * automatically invoked and {@link onConnecting} is triggered.
69
69
  *
@@ -112,6 +112,7 @@ declare const subscribeMemoized: (...args: any[]) => Promise<void>;
112
112
  /**
113
113
  * Subscribe to the server channel.
114
114
  *
115
+ * @remarks
115
116
  * Any message published to a channel is {@link onMessage | received}
116
117
  * only by subscribers to that channel. The sdk out of the box handles
117
118
  * all required subscriptions internally and {@link onMessage | handles messages}
@@ -126,6 +127,7 @@ declare function subscribe(conn: Connect, channel: string): Promise<void>;
126
127
  /**
127
128
  * Unsubscribe from the server channel.
128
129
  *
130
+ * @remarks
129
131
  * Removes subscription to the channel so that recipient no longer receive
130
132
  * messages from that channel.
131
133
  *
@@ -136,6 +138,7 @@ declare function unsubscribe(conn: Connect, channel: string): void;
136
138
  /**
137
139
  * Send message to the server.
138
140
  *
141
+ * @remarks
139
142
  * The sdk out of the box provides more high level functions that uses
140
143
  * this function to send data to the server. Though a developer still can
141
144
  * use it if he knows a message protocol (klass and body) and a channel
@@ -148,6 +151,16 @@ declare function unsubscribe(conn: Connect, channel: string): void;
148
151
  * @param body - Message payload
149
152
  */
150
153
  declare function send(conn: Connect, channel: string, klass: Klass | string, body: (string | number)[]): void;
154
+ /**
155
+ * Authenticates the connection with user credentials.
156
+ *
157
+ * @param conn - The Connect instance
158
+ * @param userId - The user identifier
159
+ * @param timestamp - The signature timestamp in seconds
160
+ * @param signature - The session signature string
161
+ *
162
+ * @public
163
+ */
151
164
  declare function login(conn: Connect, userId: string, timestamp: number, signature: string): Promise<void>;
152
165
  declare function logout(conn: Connect): Promise<void>;
153
- export { onConnected, onConnecting, onDisconnected, onMessage, disconnect, unsubscribe, send, getConnect, getConnectMemoized, connect, connectMemoized, subscribe, subscribeMemoized, login, logout, };
166
+ export { onConnected, onConnecting, onDisconnected, onMessage, disconnect, unsubscribe, send, getConnect, getConnectMemoized, connect, subscribe, subscribeMemoized, login, logout, };
@@ -16,6 +16,7 @@ export declare class ConnectImpl extends Emitter implements Connect {
16
16
  private static instance;
17
17
  initState: InitState;
18
18
  private initPromise;
19
+ private connectPromise;
19
20
  private constructor();
20
21
  get state(): ConnState;
21
22
  get sessionId(): string | null;
@@ -28,6 +29,6 @@ export declare class ConnectImpl extends Emitter implements Connect {
28
29
  unsubscribe(channel: string): void;
29
30
  send(channel: string, klass: string, body: (string | number)[]): void;
30
31
  login(userId: string, timestamp: number, signature: string): Promise<void>;
31
- logout(): void;
32
+ logout(): Promise<void>;
32
33
  delete(): void;
33
34
  }
package/dist/index.d.ts CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Establishes real-time connections to events and projects.
3
+ *
4
+ * @packageDocumentation
5
+ */
1
6
  /**
2
7
  * @license
3
8
  * @monterosa/sdk-connect-kit
@@ -6,11 +11,6 @@
6
11
  *
7
12
  * More details on the license can be found at https://www.monterosa.co/sdk/license
8
13
  */
9
- /**
10
- * Monterosa SDK / Connect Kit
11
- *
12
- * @packageDocumentation
13
- */
14
14
  export * from './connect';
15
15
  export * from './connect_impl';
16
16
  export * from './types';
@@ -24,8 +24,10 @@ var InitState;
24
24
  InitState["Initialising"] = "initialising";
25
25
  })(InitState || (InitState = {}));
26
26
  /**
27
- * A list of possible connection states. Can be used with
28
- * {@link Connect.state} to determine the current state.
27
+ * A list of possible connection states.
28
+ *
29
+ * @remarks
30
+ * Can be used with {@link Connect | Connect.state} to determine the current state.
29
31
  *
30
32
  * By default {@link Connect} is in the disconnected state.
31
33
  * When {@link connect} invoked `Connect` state switches to
@@ -151,6 +153,7 @@ class ConnectImpl extends Emitter {
151
153
  super();
152
154
  this.initState = InitState.NotInitialised;
153
155
  this.initPromise = Promise.resolve();
156
+ this.connectPromise = null;
154
157
  Enmasse.bind(Enmasse.ON_STATE, (state, ...rest) => {
155
158
  if (state === Enmasse.STATE_CONNECTED) {
156
159
  const [timestamp] = rest;
@@ -210,35 +213,47 @@ class ConnectImpl extends Emitter {
210
213
  });
211
214
  return this.initPromise;
212
215
  }
213
- async connect() {
216
+ connect() {
214
217
  if (this.initState !== InitState.Initialised) {
215
- throw new Error('must be initialised before connecting');
218
+ return Promise.reject(new Error('must be initialised before connecting'));
216
219
  }
217
220
  if (this.state === ConnState.Connected) {
218
- throw new Error('already connected');
221
+ return Promise.resolve();
219
222
  }
220
223
  if (this.state === ConnState.Connecting) {
221
- throw new Error('already connecting');
224
+ if (this.connectPromise) {
225
+ return this.connectPromise;
226
+ }
227
+ // This should never happen - indicates a bug in state management
228
+ return Promise.reject(new Error('BUG: Connection state is Connecting but connectPromise is null - ' +
229
+ 'this indicates an internal inconsistency'));
222
230
  }
223
- return new Promise((resolve, reject) => {
231
+ this.connectPromise = new Promise((resolve, reject) => {
224
232
  const handler = (state) => {
225
- if (state === ConnState.Connected) {
226
- Enmasse.unbind(Enmasse.ON_STATE, handler);
227
- resolve();
228
- }
229
- if (state === ConnState.Disconnected) {
230
- Enmasse.unbind(Enmasse.ON_STATE, handler);
231
- reject(new Error('disconnected'));
233
+ switch (state) {
234
+ case ConnState.Connected:
235
+ Enmasse.unbind(Enmasse.ON_STATE, handler);
236
+ this.connectPromise = null;
237
+ resolve();
238
+ break;
239
+ case ConnState.Disconnected:
240
+ Enmasse.unbind(Enmasse.ON_STATE, handler);
241
+ this.connectPromise = null;
242
+ reject(new Error('disconnected'));
243
+ break;
244
+ case ConnState.Connecting:
245
+ // The Enmasse library may emit the "connecting" state multiple
246
+ // times. This is expected and does not impact the connection
247
+ // process, so we safely ignore it.
248
+ break;
232
249
  }
233
250
  };
234
251
  Enmasse.bind(Enmasse.ON_STATE, handler);
235
252
  Enmasse.connect();
236
253
  });
254
+ return this.connectPromise;
237
255
  }
238
256
  disconnect() {
239
- if (this.state !== ConnState.Connected) {
240
- throw new Error('must be connected before disconnecting');
241
- }
242
257
  Enmasse.disconnect();
243
258
  }
244
259
  subscribe(channel) {
@@ -266,8 +281,9 @@ class ConnectImpl extends Emitter {
266
281
  });
267
282
  });
268
283
  }
269
- logout() {
284
+ async logout() {
270
285
  Enmasse.logout();
286
+ return Promise.resolve();
271
287
  }
272
288
  delete() { }
273
289
  }
@@ -293,7 +309,8 @@ const getConnectMemoized = memoizePromise(async (host) => {
293
309
  * host. If host is not provided, it returns Connect instance for
294
310
  * the host associated with the default sdk.
295
311
  *
296
- * @param sdk - Monterosa SDK.
312
+ * @param host - The host URL. If not provided, uses the host
313
+ * from the default SDK instance.
297
314
  */
298
315
  function getConnect(host) {
299
316
  if (host === undefined) {
@@ -317,7 +334,7 @@ function onConnected(conn, callback) {
317
334
  *
318
335
  * @param conn - The {@link Connect} instance
319
336
  * @param callback - callback triggered on connecting state. Two parameters
320
- * are provided: `attempt` sequential number of connect attempt and
337
+ * are provided: `attempt`, the sequential number of connect attempt, and
321
338
  * `delay` - delay in seconds before the next attempt
322
339
  */
323
340
  function onConnecting(conn, callback) {
@@ -353,16 +370,10 @@ function onMessage(conn, callback) {
353
370
  return () => conn.off('message', handler);
354
371
  }
355
372
  /**
356
- * @internal
357
- */
358
- const connectMemoized = memoizePromise(async (conn) => {
359
- await conn.connect();
360
- }, (conn) => conn, {
361
- clearOnResolve: true,
362
- clearOnReject: true,
363
- });
364
- /**
365
- * Starts a connection process. If connect is successful a promise resolved by
373
+ * Starts a connection process.
374
+ *
375
+ * @remarks
376
+ * If connect is successful a promise resolved by
366
377
  * and {@link onConnected} is triggered, otherwise a next attempt will be
367
378
  * automatically invoked and {@link onConnecting} is triggered.
368
379
  *
@@ -398,7 +409,9 @@ const connectMemoized = memoizePromise(async (conn) => {
398
409
  * Can be found in Project Settings in API tab
399
410
  */
400
411
  function connect(conn) {
401
- return connectMemoized(conn);
412
+ // No need to memoize this, it's already memoized
413
+ // in the ConnectImpl class implementation
414
+ return conn.connect();
402
415
  }
403
416
  /**
404
417
  * Disconnect from the server and triggers {@link onDisconnected}
@@ -415,6 +428,7 @@ const subscribeMemoized = memoizePromise(async (conn, channel) => conn.subscribe
415
428
  /**
416
429
  * Subscribe to the server channel.
417
430
  *
431
+ * @remarks
418
432
  * Any message published to a channel is {@link onMessage | received}
419
433
  * only by subscribers to that channel. The sdk out of the box handles
420
434
  * all required subscriptions internally and {@link onMessage | handles messages}
@@ -431,6 +445,7 @@ function subscribe(conn, channel) {
431
445
  /**
432
446
  * Unsubscribe from the server channel.
433
447
  *
448
+ * @remarks
434
449
  * Removes subscription to the channel so that recipient no longer receive
435
450
  * messages from that channel.
436
451
  *
@@ -443,6 +458,7 @@ function unsubscribe(conn, channel) {
443
458
  /**
444
459
  * Send message to the server.
445
460
  *
461
+ * @remarks
446
462
  * The sdk out of the box provides more high level functions that uses
447
463
  * this function to send data to the server. Though a developer still can
448
464
  * use it if he knows a message protocol (klass and body) and a channel
@@ -457,6 +473,16 @@ function unsubscribe(conn, channel) {
457
473
  function send(conn, channel, klass, body) {
458
474
  conn.send(channel, klass, body);
459
475
  }
476
+ /**
477
+ * Authenticates the connection with user credentials.
478
+ *
479
+ * @param conn - The Connect instance
480
+ * @param userId - The user identifier
481
+ * @param timestamp - The signature timestamp in seconds
482
+ * @param signature - The session signature string
483
+ *
484
+ * @public
485
+ */
460
486
  async function login(conn, userId, timestamp, signature) {
461
487
  const result = await conn.login(userId, timestamp, signature);
462
488
  return result;
@@ -466,5 +492,5 @@ async function logout(conn) {
466
492
  return result;
467
493
  }
468
494
 
469
- export { ConnState, ConnectImpl, InitState, KIT_NAME, Klass, connect, connectMemoized, disconnect, getConnect, getConnectMemoized, login, logout, onConnected, onConnecting, onDisconnected, onMessage, send, subscribe, subscribeMemoized, unsubscribe };
470
- //# sourceMappingURL=index.esm.js.map
495
+ export { ConnState, ConnectImpl, InitState, KIT_NAME, Klass, connect, disconnect, getConnect, getConnectMemoized, login, logout, onConnected, onConnecting, onDisconnected, onMessage, send, subscribe, subscribeMemoized, unsubscribe };
496
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/types.ts","../src/helpers.ts","../src/connect_impl.ts","../src/connect.ts"],"sourcesContent":["/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { MonterosaKit } from '@monterosa/sdk-core';\nimport { Emitter } from '@monterosa/sdk-util';\n\n/**\n * @internal\n */\nexport const KIT_NAME = 'connect';\n\n/**\n * Represents a Connect Kit instance. Obtain one via {@link getConnect}.\n */\nexport interface Connect extends MonterosaKit, Emitter {\n /**\n * Connection state\n */\n state: ConnState;\n\n /**\n * Session ID\n */\n sessionId: string | null;\n\n /**\n * @internal\n */\n initState: InitState;\n\n /**\n * @internal\n */\n init(host: string): Promise<void>;\n\n /**\n * @internal\n */\n connect(): Promise<void>;\n\n /**\n * @internal\n */\n disconnect(): void;\n\n /**\n * @internal\n */\n subscribe(channel: string): Promise<void>;\n\n /**\n * @internal\n */\n unsubscribe(channel: string): void;\n\n /**\n * @internal\n */\n send(channel: string, klass: string, body: (string | number)[]): void;\n\n /**\n * @internal\n */\n login(userId: string, timestamp: number, signature: string): Promise<void>;\n\n logout(): void;\n}\n\n/**\n * @internal\n */\nexport enum InitState {\n NotInitialised = 'not_initialised',\n Initialised = 'initialised',\n Initialising = 'initialising',\n}\n\n/**\n * A list of possible connection states.\n *\n * @remarks\n * Can be used with {@link Connect | Connect.state} to determine the current state.\n *\n * By default {@link Connect} is in the disconnected state.\n * When {@link connect} invoked `Connect` state switches to\n * `ConnState.Connecting` and connection is maintained permanently until\n * {@link disconnect} method is invoked. If connection was unsucessful,\n * a new attempt will start after a short delay and `ConnState.connecting`\n * is triggered. Delays between attempts increased based on this sequence:\n * 0, 3, 5, 10, 20, 30, 45, 60 where 60 seconds is the max.\n *\n * If `Connect` was previously connected and for any reason connection is lost,\n * the state changed to `ConnState.Connecting` again and the connection process\n * starts again automatically.\n *\n * @example\n * ```javascript\n * if (conn.state === ConnState.Connecting) {\n * // display \"connecting\" message\n * }\n * ```\n */\nexport enum ConnState {\n /**\n * Disconnected state\n */\n Disconnected = 'disconnected',\n /**\n * Connecting state\n */\n Connecting = 'connecting',\n /**\n * Connected state\n */\n Connected = 'connected',\n}\n\n/**\n * Class of the {@link Message}\n */\nexport enum Klass {\n /**\n * Authentication request. Sent by server on client connection.\n */\n Authenticate = 'auth',\n /**\n * Authentication response. Sent by client as response\n * to authentication request.\n */\n AuthenticateResponse = 'authr',\n /**\n * Authentication acknowledgement. Sent by the server as confirmation\n * of successful authentication.\n */\n AuthenticateSuccess = 'authok',\n /**\n * Ping message is sent by server periodically as a keep-alive.\n * Ping message is only sent if no messages are sent for specific time\n * period, meaning if there are other messages sent frequently enough\n * then ping messages are not sent at all.\n */\n Ping = 'ping',\n /**\n * Subscribe to a channel. Sent by the client to subscribe to a channel\n */\n Subscribe = 'sub',\n /**\n * Unsubscribe from a channel. Sent by the client to unsubscribe from a channel\n */\n Unsububscribe = 'unsub',\n /**\n * End of cache. Sent by the server to notify that all messages are sent from\n * a channel cache\n */\n EndOfCache = 'eoc',\n /**\n * User login. Sent by client to supply verified user identity to the server.\n */\n Login = 'login',\n /**\n * User login success\n */\n LoginSuccess = 'login_ok',\n /**\n * User login failure\n */\n LoginFail = 'login_fail',\n /**\n * Averages counters. Client can submit a counter which is processed together\n * with other counters to determine the average of all counters within specific\n * demographics segment.\n */\n Counter = 'counter',\n /**\n * Client votes. Sents by a user to vote for a poll option\n */\n Vote = 'v',\n}\n\n/**\n * Represents a message received from or sent to the server.\n * Subscribe via {@link onMessage} to receive messages.\n */\nexport interface Message {\n /**\n * The channel on which this message was received. You must\n * {@link subscribe} to a channel to start receiving messages.\n */\n channel: string;\n /**\n * The class indicates the desired action to be performed or the result of\n * the action. E.g. in order to authenticate a developer should {@link send}\n * {@link Klass | Klass.AuthenticateResponse} klass message as a response on\n * a received {@link Klass | Klass.Authenticate} message\n */\n klass: Klass | string;\n /**\n * The timestamp (in seconds) when this message was sent\n */\n sent_at: number;\n /**\n * The message payload. Each piece of data is a `string`\n */\n body: string[];\n}\n","/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Unsubscribe } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState } from './types';\n\nexport function onState(\n conn: Connect,\n needle: ConnState,\n callback: Function,\n): Unsubscribe {\n const handler = (state: ConnState, ...rest: unknown[]) => {\n if (state === needle) {\n callback(...rest);\n }\n };\n\n conn.on('state', handler);\n\n return () => conn.off('state', handler);\n}\n","/* eslint class-methods-use-this: \"off\" */\n\n/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport Enmasse from '@monterosa/sdk-enmasse-kit';\nimport { Emitter, setTimestamp } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState, InitState, Message } from './types';\n\n/**\n * @internal\n */\nexport class ConnectImpl extends Emitter implements Connect {\n private static instance: ConnectImpl;\n public initState: InitState = InitState.NotInitialised;\n private initPromise: Promise<void> = Promise.resolve();\n private connectPromise: Promise<void> | null = null;\n\n private constructor() {\n super();\n\n Enmasse.bind(\n Enmasse.ON_STATE,\n (state: Enmasse.States, ...rest: unknown[]) => {\n if (state === Enmasse.STATE_CONNECTED) {\n const [timestamp] = rest as [number];\n\n setTimestamp(timestamp);\n }\n\n this.emit('state', ConnectImpl.toConnState(state), ...rest);\n },\n );\n\n Enmasse.bind(Enmasse.ON_MESSAGE, (message: Enmasse.Message) => {\n this.emit('message', <Message>message);\n });\n }\n\n get state() {\n return ConnectImpl.toConnState(Enmasse.getState());\n }\n\n get sessionId() {\n return Enmasse.getSessionId();\n }\n\n public static getInstance(): ConnectImpl {\n if (!ConnectImpl.instance) {\n ConnectImpl.instance = new ConnectImpl();\n }\n\n return ConnectImpl.instance;\n }\n\n static toConnState(state: Enmasse.States): ConnState {\n switch (state) {\n default:\n case Enmasse.STATE_DISCONNECTED:\n return ConnState.Disconnected;\n case Enmasse.STATE_CONNECTING:\n return ConnState.Connecting;\n case Enmasse.STATE_CONNECTED:\n return ConnState.Connected;\n }\n }\n\n async init(host: string): Promise<void> {\n if (\n this.initState === InitState.Initialising ||\n this.initState === InitState.Initialised\n ) {\n return this.initPromise;\n }\n\n this.initPromise = new Promise((resolve, reject) => {\n this.initState = InitState.Initialising;\n\n Enmasse.bind(Enmasse.ON_READY, () => {\n this.initState = InitState.Initialised;\n\n Enmasse.unbind(Enmasse.ON_READY);\n Enmasse.unbind(Enmasse.ON_ERROR);\n\n resolve();\n });\n\n Enmasse.bind(Enmasse.ON_ERROR, (err: string) => {\n this.initState = InitState.NotInitialised;\n\n Enmasse.unbind(Enmasse.ON_READY);\n Enmasse.unbind(Enmasse.ON_ERROR);\n\n reject(new Error(`Unable to initialise connect kit: ${err}`));\n });\n\n Enmasse.init({\n config: `https://${host}/config/enmasse.json`,\n });\n });\n\n return this.initPromise;\n }\n\n connect(): Promise<void> {\n if (this.initState !== InitState.Initialised) {\n return Promise.reject(new Error('must be initialised before connecting'));\n }\n\n if (this.state === ConnState.Connected) {\n return Promise.resolve();\n }\n\n if (this.state === ConnState.Connecting) {\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n // This should never happen - indicates a bug in state management\n return Promise.reject(\n new Error(\n 'BUG: Connection state is Connecting but connectPromise is null - ' +\n 'this indicates an internal inconsistency',\n ),\n );\n }\n\n this.connectPromise = new Promise((resolve, reject) => {\n const handler = (state: ConnState) => {\n switch (state) {\n case ConnState.Connected:\n Enmasse.unbind(Enmasse.ON_STATE, handler);\n\n this.connectPromise = null;\n\n resolve();\n break;\n case ConnState.Disconnected:\n Enmasse.unbind(Enmasse.ON_STATE, handler);\n\n this.connectPromise = null;\n\n reject(new Error('disconnected'));\n break;\n case ConnState.Connecting:\n // The Enmasse library may emit the \"connecting\" state multiple\n // times. This is expected and does not impact the connection\n // process, so we safely ignore it.\n break;\n }\n };\n\n Enmasse.bind(Enmasse.ON_STATE, handler);\n\n Enmasse.connect();\n });\n\n return this.connectPromise;\n }\n\n disconnect() {\n Enmasse.disconnect();\n }\n\n subscribe(channel: string): Promise<void> {\n return new Promise((resolve) => {\n const handler = (ch: string) => {\n if (ch !== channel) return;\n\n Enmasse.unbind(Enmasse.ON_EOC, handler);\n\n resolve();\n };\n\n Enmasse.bind(Enmasse.ON_EOC, handler);\n\n Enmasse.subscribe(channel);\n });\n }\n\n unsubscribe(channel: string): void {\n Enmasse.unsubscribe(channel);\n }\n\n send(channel: string, klass: string, body: (string | number)[]): void {\n Enmasse.send(channel, klass, body);\n }\n\n async login(\n userId: string,\n timestamp: number,\n signature: string,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n Enmasse.login(userId, timestamp, signature, resolve, () => {\n reject(new Error('Login failure'));\n });\n });\n }\n\n async logout(): Promise<void> {\n Enmasse.logout();\n\n return Promise.resolve();\n }\n\n delete() {}\n}\n","/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { getSdk } from '@monterosa/sdk-core';\nimport { memoizePromise, Unsubscribe } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState, Message, Klass } from './types';\nimport { onState } from './helpers';\nimport { ConnectImpl } from './connect_impl';\n\n/**\n * @internal\n */\nconst getConnectMemoized = memoizePromise(\n async (host: string): Promise<Connect> => {\n const conn = ConnectImpl.getInstance();\n\n await conn.init(host);\n\n return conn;\n },\n (host: string): string => host,\n);\n\n/**\n * Returns the {@link Connect} instance associated with the provided\n * host. If host is not provided, it returns Connect instance for\n * the host associated with the default sdk.\n *\n * @param host - The host URL. If not provided, uses the host\n * from the default SDK instance.\n */\nfunction getConnect(host?: string): Promise<Connect> {\n if (host === undefined) {\n const sdk = getSdk();\n\n host = sdk.options.host;\n }\n\n return getConnectMemoized(host);\n}\n\n/**\n * Adds an observer for when connection state changed to connected.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - The callback triggered when {@link ConnState | state}\n * changed to connected\n */\nfunction onConnected(\n conn: Connect,\n callback: (timestamp: number) => void,\n): Unsubscribe {\n return onState(conn, ConnState.Connected, callback);\n}\n\n/**\n * Adds an observer for when connection state changed to connecting.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - callback triggered on connecting state. Two parameters\n * are provided: `attempt`, the sequential number of connect attempt, and\n * `delay` - delay in seconds before the next attempt\n */\nfunction onConnecting(\n conn: Connect,\n callback: (attempt: number, delay: number) => void,\n): Unsubscribe {\n return onState(conn, ConnState.Connecting, callback);\n}\n\n/**\n * Adds an observer for when connection state changed to disconnected.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - callback triggered on disconnected state\n */\nfunction onDisconnected(conn: Connect, callback: () => void): Unsubscribe {\n return onState(conn, ConnState.Disconnected, callback);\n}\n\n/**\n * Adds an observer for when a new message received\n *\n * @example\n * ```javascript\n * const unsubscribe = onMessage(conn, (message) => {\n * console.log(message.body);\n * });\n * ```\n *\n * @param conn - The {@link Connect} instance\n * @param callback - The callback function triggered on message receive\n */\nfunction onMessage(\n conn: Connect,\n callback: (message: Message) => void,\n): Unsubscribe {\n const handler = (message: Message) => {\n callback(message);\n };\n\n conn.on('message', handler);\n\n return () => conn.off('message', handler);\n}\n\n/**\n * Starts a connection process.\n *\n * @remarks\n * If connect is successful a promise resolved by\n * and {@link onConnected} is triggered, otherwise a next attempt will be\n * automatically invoked and {@link onConnecting} is triggered.\n *\n * SDK connects automatically when its created. Connection procedure can be\n * aborted by calling {@link disconnect} function and the promise is rejected.\n *\n * @example\n * ```javascript\n * try {\n * const conn = await getConnect();\n *\n * await connect(conn);\n *\n * console.log('connected!');\n * } catch (err) {\n * console.log(err)\n * }\n * ```\n *\n * State of the connection can be handled separately\n *\n * @example\n * ```javascript\n * onConnected(() => console.log('connected'));\n *\n * onConnecting((attempt, delay) => console.log('connecting'));\n *\n * onDisconnected(() => console.log('disconnected'));\n * ```\n *\n * @param conn - The {@link Connect} instance\n * @param host - Interaction Cloud Studio host.\n * Can be found in Project Settings in API tab\n */\nfunction connect(conn: Connect): Promise<void> {\n // No need to memoize this, it's already memoized\n // in the ConnectImpl class implementation\n return conn.connect();\n}\n\n/**\n * Disconnect from the server and triggers {@link onDisconnected}\n *\n * @param conn - The {@link Connect} instance\n */\nfunction disconnect(conn: Connect): void {\n conn.disconnect();\n}\n\n/**\n * @internal\n */\nconst subscribeMemoized = memoizePromise(\n async (conn: Connect, channel: string): Promise<void> =>\n conn.subscribe(channel),\n (conn: Connect, channel: string): string => channel,\n);\n\n/**\n * Subscribe to the server channel.\n *\n * @remarks\n * Any message published to a channel is {@link onMessage | received}\n * only by subscribers to that channel. The sdk out of the box handles\n * all required subscriptions internally and {@link onMessage | handles messages}\n * so there is no need in to subscribe by developers.\n *\n * To stop receiving messages on a channel {@link unsubscribe} should be called.\n *\n * @param conn - The {@link Connect} instance\n * @param channel - Channel name\n */\nfunction subscribe(conn: Connect, channel: string): Promise<void> {\n return subscribeMemoized(conn, channel);\n}\n\n/**\n * Unsubscribe from the server channel.\n *\n * @remarks\n * Removes subscription to the channel so that recipient no longer receive\n * messages from that channel.\n *\n * @param conn - The {@link Connect} instance\n * @param channel - Channel name\n */\nfunction unsubscribe(conn: Connect, channel: string): void {\n conn.unsubscribe(channel);\n}\n\n/**\n * Send message to the server.\n *\n * @remarks\n * The sdk out of the box provides more high level functions that uses\n * this function to send data to the server. Though a developer still can\n * use it if he knows a message protocol (klass and body) and a channel\n * that expect the message.\n *\n * @param conn - The Connect instance\n * @param channel - Channel name. Only {@link subscribe | subscribers}\n * to that channel can send messages.\n * @param klass - Message class name.\n * @param body - Message payload\n */\nfunction send(\n conn: Connect,\n channel: string,\n klass: Klass | string,\n body: (string | number)[],\n): void {\n conn.send(channel, klass, body);\n}\n\n/**\n * Authenticates the connection with user credentials.\n *\n * @param conn - The Connect instance\n * @param userId - The user identifier\n * @param timestamp - The signature timestamp in seconds\n * @param signature - The session signature string\n *\n * @public\n */\nasync function login(\n conn: Connect,\n userId: string,\n timestamp: number,\n signature: string,\n): Promise<void> {\n const result = await conn.login(userId, timestamp, signature);\n\n return result;\n}\n\nasync function logout(conn: Connect): Promise<void> {\n const result = await conn.logout();\n\n return result;\n}\n\nexport {\n onConnected,\n onConnecting,\n onDisconnected,\n onMessage,\n disconnect,\n unsubscribe,\n send,\n getConnect,\n getConnectMemoized,\n connect,\n subscribe,\n subscribeMemoized,\n login,\n logout,\n};\n"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -13,7 +13,7 @@ import { Emitter } from '@monterosa/sdk-util';
13
13
  */
14
14
  export declare const KIT_NAME = "connect";
15
15
  /**
16
- * Interface representing Connect kit.
16
+ * Represents a Connect Kit instance. Obtain one via {@link getConnect}.
17
17
  */
18
18
  export interface Connect extends MonterosaKit, Emitter {
19
19
  /**
@@ -52,6 +52,9 @@ export interface Connect extends MonterosaKit, Emitter {
52
52
  * @internal
53
53
  */
54
54
  send(channel: string, klass: string, body: (string | number)[]): void;
55
+ /**
56
+ * @internal
57
+ */
55
58
  login(userId: string, timestamp: number, signature: string): Promise<void>;
56
59
  logout(): void;
57
60
  }
@@ -64,8 +67,10 @@ export declare enum InitState {
64
67
  Initialising = "initialising"
65
68
  }
66
69
  /**
67
- * A list of possible connection states. Can be used with
68
- * {@link Connect.state} to determine the current state.
70
+ * A list of possible connection states.
71
+ *
72
+ * @remarks
73
+ * Can be used with {@link Connect | Connect.state} to determine the current state.
69
74
  *
70
75
  * By default {@link Connect} is in the disconnected state.
71
76
  * When {@link connect} invoked `Connect` state switches to
@@ -162,20 +167,20 @@ export declare enum Klass {
162
167
  Vote = "v"
163
168
  }
164
169
  /**
165
- * A Message to be sent to the Monterosa / Interaction Cloud
170
+ * Represents a message received from or sent to the server.
171
+ * Subscribe via {@link onMessage} to receive messages.
166
172
  */
167
173
  export interface Message {
168
174
  /**
169
- * The channel id on which this message was received. It s required to be
170
- * {@link subscribe} to that channel in order to start receiving
171
- * messages
175
+ * The channel on which this message was received. You must
176
+ * {@link subscribe} to a channel to start receiving messages.
172
177
  */
173
178
  channel: string;
174
179
  /**
175
180
  * The class indicates the desired action to be performed or the result of
176
181
  * the action. E.g. in order to authenticate a developer should {@link send}
177
- * {@link Klass.AuthenticateResponse} klass message as a response on
178
- * a received {@link Klass.Authenticate} message
182
+ * {@link Klass | Klass.AuthenticateResponse} klass message as a response on
183
+ * a received {@link Klass | Klass.Authenticate} message
179
184
  */
180
185
  klass: Klass | string;
181
186
  /**
@@ -183,7 +188,7 @@ export interface Message {
183
188
  */
184
189
  sent_at: number;
185
190
  /**
186
- * The message payload. Each peace of data is a `string`
191
+ * The message payload. Each piece of data is a `string`
187
192
  */
188
193
  body: string[];
189
194
  }
package/package.json CHANGED
@@ -1,13 +1,17 @@
1
1
  {
2
2
  "name": "@monterosa/sdk-connect-kit",
3
- "version": "0.19.0-rc.6",
3
+ "version": "2.0.0-rc.2",
4
4
  "description": "Monterosa JS SDK / Connect",
5
5
  "author": "Monterosa Productions Limited <hello@monterosa.co.uk> (https://www.monterosa.co/)",
6
- "main": "dist/index.cjs.js",
7
- "browser": "dist/index.esm.js",
8
- "module": "dist/index.esm.js",
6
+ "main": "./dist/index.js",
9
7
  "types": "./dist/index.d.ts",
10
- "cdn": "../../dist",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
11
15
  "files": [
12
16
  "dist"
13
17
  ],
@@ -19,21 +23,19 @@
19
23
  "test:ci": "jest --color --coverage --ci --reporters=jest-junit",
20
24
  "api-report": "api-extractor run --local --verbose"
21
25
  },
22
- "keywords": [],
26
+ "keywords": [
27
+ "monterosa",
28
+ "sdk",
29
+ "interaction-cloud",
30
+ "connect"
31
+ ],
23
32
  "license": "MIT",
24
- "peerDependencies": {
25
- "@monterosa/sdk-core": "0.x",
26
- "@monterosa/sdk-enmasse-kit": "0.x",
27
- "@monterosa/sdk-util": "0.x"
28
- },
29
33
  "dependencies": {
30
- "@babel/runtime": "^7.15.4",
31
- "@monterosa/sdk-core": "^0.19.0-rc.6",
32
- "@monterosa/sdk-enmasse-kit": "^0.19.0-rc.6",
33
- "@monterosa/sdk-util": "^0.19.0-rc.6"
34
+ "@monterosa/sdk-core": "2.0.0-rc.2",
35
+ "@monterosa/sdk-enmasse-kit": "2.0.0-rc.2",
36
+ "@monterosa/sdk-util": "2.0.0-rc.2"
34
37
  },
35
38
  "devDependencies": {
36
- "@rollup/plugin-commonjs": "^21.1.0",
37
39
  "@rollup/plugin-json": "^4.1.0",
38
40
  "@rollup/plugin-node-resolve": "^13.3.0",
39
41
  "@rollup/plugin-terser": "^0.4.4",
@@ -51,5 +53,5 @@
51
53
  "publishConfig": {
52
54
  "access": "public"
53
55
  },
54
- "gitHead": "8d0f5703fdcc56ea1422cf24d42f077a6b8651a2"
56
+ "gitHead": "0e2d4cd71055bf0ab38ec5a73d6040c55151da1c"
55
57
  }
package/dist/index.cjs.js DELETED
@@ -1,645 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var sdkCore = require('@monterosa/sdk-core');
6
- var sdkUtil = require('@monterosa/sdk-util');
7
- var Enmasse = require('@monterosa/sdk-enmasse-kit');
8
-
9
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
-
11
- var Enmasse__default = /*#__PURE__*/_interopDefaultLegacy(Enmasse);
12
-
13
- /******************************************************************************
14
- Copyright (c) Microsoft Corporation.
15
-
16
- Permission to use, copy, modify, and/or distribute this software for any
17
- purpose with or without fee is hereby granted.
18
-
19
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
20
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
21
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
22
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
23
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
24
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
25
- PERFORMANCE OF THIS SOFTWARE.
26
- ***************************************************************************** */
27
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
28
-
29
- var extendStatics = function(d, b) {
30
- extendStatics = Object.setPrototypeOf ||
31
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
32
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
33
- return extendStatics(d, b);
34
- };
35
-
36
- function __extends(d, b) {
37
- if (typeof b !== "function" && b !== null)
38
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
39
- extendStatics(d, b);
40
- function __() { this.constructor = d; }
41
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
42
- }
43
-
44
- function __awaiter(thisArg, _arguments, P, generator) {
45
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
46
- return new (P || (P = Promise))(function (resolve, reject) {
47
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
48
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
49
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
50
- step((generator = generator.apply(thisArg, _arguments || [])).next());
51
- });
52
- }
53
-
54
- function __generator(thisArg, body) {
55
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
56
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
57
- function verb(n) { return function (v) { return step([n, v]); }; }
58
- function step(op) {
59
- if (f) throw new TypeError("Generator is already executing.");
60
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
61
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
62
- if (y = 0, t) op = [op[0] & 2, t.value];
63
- switch (op[0]) {
64
- case 0: case 1: t = op; break;
65
- case 4: _.label++; return { value: op[1], done: false };
66
- case 5: _.label++; y = op[1]; op = [0]; continue;
67
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
68
- default:
69
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
70
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
71
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
72
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
73
- if (t[2]) _.ops.pop();
74
- _.trys.pop(); continue;
75
- }
76
- op = body.call(thisArg, _);
77
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
78
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
79
- }
80
- }
81
-
82
- function __spreadArray(to, from, pack) {
83
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
84
- if (ar || !(i in from)) {
85
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
86
- ar[i] = from[i];
87
- }
88
- }
89
- return to.concat(ar || Array.prototype.slice.call(from));
90
- }
91
-
92
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
93
- var e = new Error(message);
94
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
95
- };
96
-
97
- /**
98
- * @license
99
- * @monterosa/sdk-connect-kit
100
- *
101
- * Copyright © 2022 Monterosa Productions Limited. All rights reserved.
102
- *
103
- * More details on the license can be found at https://www.monterosa.co/sdk/license
104
- */
105
- /**
106
- * @internal
107
- */
108
- var KIT_NAME = 'connect';
109
- /**
110
- * @internal
111
- */
112
- exports.InitState = void 0;
113
- (function (InitState) {
114
- InitState["NotInitialised"] = "not_initialised";
115
- InitState["Initialised"] = "initialised";
116
- InitState["Initialising"] = "initialising";
117
- })(exports.InitState || (exports.InitState = {}));
118
- /**
119
- * A list of possible connection states. Can be used with
120
- * {@link Connect.state} to determine the current state.
121
- *
122
- * By default {@link Connect} is in the disconnected state.
123
- * When {@link connect} invoked `Connect` state switches to
124
- * `ConnState.Connecting` and connection is maintained permanently until
125
- * {@link disconnect} method is invoked. If connection was unsucessful,
126
- * a new attempt will start after a short delay and `ConnState.connecting`
127
- * is triggered. Delays between attempts increased based on this sequence:
128
- * 0, 3, 5, 10, 20, 30, 45, 60 where 60 seconds is the max.
129
- *
130
- * If `Connect` was previously connected and for any reason connection is lost,
131
- * the state changed to `ConnState.Connecting` again and the connection process
132
- * starts again automatically.
133
- *
134
- * @example
135
- * ```javascript
136
- * if (conn.state === ConnState.Connecting) {
137
- * // display "connecting" message
138
- * }
139
- * ```
140
- */
141
- exports.ConnState = void 0;
142
- (function (ConnState) {
143
- /**
144
- * Disconnected state
145
- */
146
- ConnState["Disconnected"] = "disconnected";
147
- /**
148
- * Connecting state
149
- */
150
- ConnState["Connecting"] = "connecting";
151
- /**
152
- * Connected state
153
- */
154
- ConnState["Connected"] = "connected";
155
- })(exports.ConnState || (exports.ConnState = {}));
156
- /**
157
- * Class of the {@link Message}
158
- */
159
- exports.Klass = void 0;
160
- (function (Klass) {
161
- /**
162
- * Authentication request. Sent by server on client connection.
163
- */
164
- Klass["Authenticate"] = "auth";
165
- /**
166
- * Authentication response. Sent by client as response
167
- * to authentication request.
168
- */
169
- Klass["AuthenticateResponse"] = "authr";
170
- /**
171
- * Authentication acknowledgement. Sent by the server as confirmation
172
- * of successful authentication.
173
- */
174
- Klass["AuthenticateSuccess"] = "authok";
175
- /**
176
- * Ping message is sent by server periodically as a keep-alive.
177
- * Ping message is only sent if no messages are sent for specific time
178
- * period, meaning if there are other messages sent frequently enough
179
- * then ping messages are not sent at all.
180
- */
181
- Klass["Ping"] = "ping";
182
- /**
183
- * Subscribe to a channel. Sent by the client to subscribe to a channel
184
- */
185
- Klass["Subscribe"] = "sub";
186
- /**
187
- * Unsubscribe from a channel. Sent by the client to unsubscribe from a channel
188
- */
189
- Klass["Unsububscribe"] = "unsub";
190
- /**
191
- * End of cache. Sent by the server to notify that all messages are sent from
192
- * a channel cache
193
- */
194
- Klass["EndOfCache"] = "eoc";
195
- /**
196
- * User login. Sent by client to supply verified user identity to the server.
197
- */
198
- Klass["Login"] = "login";
199
- /**
200
- * User login success
201
- */
202
- Klass["LoginSuccess"] = "login_ok";
203
- /**
204
- * User login failure
205
- */
206
- Klass["LoginFail"] = "login_fail";
207
- /**
208
- * Averages counters. Client can submit a counter which is processed together
209
- * with other counters to determine the average of all counters within specific
210
- * demographics segment.
211
- */
212
- Klass["Counter"] = "counter";
213
- /**
214
- * Client votes. Sents by a user to vote for a poll option
215
- */
216
- Klass["Vote"] = "v";
217
- })(exports.Klass || (exports.Klass = {}));
218
-
219
- /**
220
- * @license
221
- * @monterosa/sdk-connect-kit
222
- *
223
- * Copyright © 2022 Monterosa Productions Limited. All rights reserved.
224
- *
225
- * More details on the license can be found at https://www.monterosa.co/sdk/license
226
- */
227
- function onState(conn, needle, callback) {
228
- var handler = function (state) {
229
- var rest = [];
230
- for (var _i = 1; _i < arguments.length; _i++) {
231
- rest[_i - 1] = arguments[_i];
232
- }
233
- if (state === needle) {
234
- callback.apply(void 0, rest);
235
- }
236
- };
237
- conn.on('state', handler);
238
- return function () { return conn.off('state', handler); };
239
- }
240
-
241
- /* eslint class-methods-use-this: "off" */
242
- /**
243
- * @internal
244
- */
245
- var ConnectImpl = /** @class */ (function (_super) {
246
- __extends(ConnectImpl, _super);
247
- function ConnectImpl() {
248
- var _this = _super.call(this) || this;
249
- _this.initState = exports.InitState.NotInitialised;
250
- _this.initPromise = Promise.resolve();
251
- Enmasse__default["default"].bind(Enmasse__default["default"].ON_STATE, function (state) {
252
- var rest = [];
253
- for (var _i = 1; _i < arguments.length; _i++) {
254
- rest[_i - 1] = arguments[_i];
255
- }
256
- if (state === Enmasse__default["default"].STATE_CONNECTED) {
257
- var timestamp = rest[0];
258
- sdkUtil.setTimestamp(timestamp);
259
- }
260
- _this.emit.apply(_this, __spreadArray(['state', ConnectImpl.toConnState(state)], rest, false));
261
- });
262
- Enmasse__default["default"].bind(Enmasse__default["default"].ON_MESSAGE, function (message) {
263
- _this.emit('message', message);
264
- });
265
- return _this;
266
- }
267
- Object.defineProperty(ConnectImpl.prototype, "state", {
268
- get: function () {
269
- return ConnectImpl.toConnState(Enmasse__default["default"].getState());
270
- },
271
- enumerable: false,
272
- configurable: true
273
- });
274
- Object.defineProperty(ConnectImpl.prototype, "sessionId", {
275
- get: function () {
276
- return Enmasse__default["default"].getSessionId();
277
- },
278
- enumerable: false,
279
- configurable: true
280
- });
281
- ConnectImpl.getInstance = function () {
282
- if (!ConnectImpl.instance) {
283
- ConnectImpl.instance = new ConnectImpl();
284
- }
285
- return ConnectImpl.instance;
286
- };
287
- ConnectImpl.toConnState = function (state) {
288
- switch (state) {
289
- default:
290
- case Enmasse__default["default"].STATE_DISCONNECTED:
291
- return exports.ConnState.Disconnected;
292
- case Enmasse__default["default"].STATE_CONNECTING:
293
- return exports.ConnState.Connecting;
294
- case Enmasse__default["default"].STATE_CONNECTED:
295
- return exports.ConnState.Connected;
296
- }
297
- };
298
- ConnectImpl.prototype.init = function (host) {
299
- return __awaiter(this, void 0, void 0, function () {
300
- var _this = this;
301
- return __generator(this, function (_a) {
302
- if (this.initState === exports.InitState.Initialising ||
303
- this.initState === exports.InitState.Initialised) {
304
- return [2 /*return*/, this.initPromise];
305
- }
306
- this.initPromise = new Promise(function (resolve, reject) {
307
- _this.initState = exports.InitState.Initialising;
308
- Enmasse__default["default"].bind(Enmasse__default["default"].ON_READY, function () {
309
- _this.initState = exports.InitState.Initialised;
310
- Enmasse__default["default"].unbind(Enmasse__default["default"].ON_READY);
311
- Enmasse__default["default"].unbind(Enmasse__default["default"].ON_ERROR);
312
- resolve();
313
- });
314
- Enmasse__default["default"].bind(Enmasse__default["default"].ON_ERROR, function (err) {
315
- _this.initState = exports.InitState.NotInitialised;
316
- Enmasse__default["default"].unbind(Enmasse__default["default"].ON_READY);
317
- Enmasse__default["default"].unbind(Enmasse__default["default"].ON_ERROR);
318
- reject(new Error("Unable to initialise connect kit: ".concat(err)));
319
- });
320
- Enmasse__default["default"].init({
321
- config: "https://".concat(host, "/config/enmasse.json"),
322
- });
323
- });
324
- return [2 /*return*/, this.initPromise];
325
- });
326
- });
327
- };
328
- ConnectImpl.prototype.connect = function () {
329
- return __awaiter(this, void 0, void 0, function () {
330
- return __generator(this, function (_a) {
331
- if (this.initState !== exports.InitState.Initialised) {
332
- throw new Error('must be initialised before connecting');
333
- }
334
- if (this.state === exports.ConnState.Connected) {
335
- throw new Error('already connected');
336
- }
337
- if (this.state === exports.ConnState.Connecting) {
338
- throw new Error('already connecting');
339
- }
340
- return [2 /*return*/, new Promise(function (resolve, reject) {
341
- var handler = function (state) {
342
- if (state === exports.ConnState.Connected) {
343
- Enmasse__default["default"].unbind(Enmasse__default["default"].ON_STATE, handler);
344
- resolve();
345
- }
346
- if (state === exports.ConnState.Disconnected) {
347
- Enmasse__default["default"].unbind(Enmasse__default["default"].ON_STATE, handler);
348
- reject(new Error('disconnected'));
349
- }
350
- };
351
- Enmasse__default["default"].bind(Enmasse__default["default"].ON_STATE, handler);
352
- Enmasse__default["default"].connect();
353
- })];
354
- });
355
- });
356
- };
357
- ConnectImpl.prototype.disconnect = function () {
358
- if (this.state !== exports.ConnState.Connected) {
359
- throw new Error('must be connected before disconnecting');
360
- }
361
- Enmasse__default["default"].disconnect();
362
- };
363
- ConnectImpl.prototype.subscribe = function (channel) {
364
- return new Promise(function (resolve) {
365
- var handler = function (ch) {
366
- if (ch !== channel)
367
- return;
368
- Enmasse__default["default"].unbind(Enmasse__default["default"].ON_EOC, handler);
369
- resolve();
370
- };
371
- Enmasse__default["default"].bind(Enmasse__default["default"].ON_EOC, handler);
372
- Enmasse__default["default"].subscribe(channel);
373
- });
374
- };
375
- ConnectImpl.prototype.unsubscribe = function (channel) {
376
- Enmasse__default["default"].unsubscribe(channel);
377
- };
378
- ConnectImpl.prototype.send = function (channel, klass, body) {
379
- Enmasse__default["default"].send(channel, klass, body);
380
- };
381
- ConnectImpl.prototype.login = function (userId, timestamp, signature) {
382
- return __awaiter(this, void 0, void 0, function () {
383
- return __generator(this, function (_a) {
384
- return [2 /*return*/, new Promise(function (resolve, reject) {
385
- Enmasse__default["default"].login(userId, timestamp, signature, resolve, function () {
386
- reject(new Error('Login failure'));
387
- });
388
- })];
389
- });
390
- });
391
- };
392
- ConnectImpl.prototype.logout = function () {
393
- Enmasse__default["default"].logout();
394
- };
395
- ConnectImpl.prototype.delete = function () { };
396
- return ConnectImpl;
397
- }(sdkUtil.Emitter));
398
-
399
- /**
400
- * @license
401
- * @monterosa/sdk-connect-kit
402
- *
403
- * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.
404
- *
405
- * More details on the license can be found at https://www.monterosa.co/sdk/license
406
- */
407
- /**
408
- * @internal
409
- */
410
- var getConnectMemoized = sdkUtil.memoizePromise(function (host) { return __awaiter(void 0, void 0, void 0, function () {
411
- var conn;
412
- return __generator(this, function (_a) {
413
- switch (_a.label) {
414
- case 0:
415
- conn = ConnectImpl.getInstance();
416
- return [4 /*yield*/, conn.init(host)];
417
- case 1:
418
- _a.sent();
419
- return [2 /*return*/, conn];
420
- }
421
- });
422
- }); }, function (host) { return host; });
423
- /**
424
- * Returns the {@link Connect} instance associated with the provided
425
- * host. If host is not provided, it returns Connect instance for
426
- * the host associated with the default sdk.
427
- *
428
- * @param sdk - Monterosa SDK.
429
- */
430
- function getConnect(host) {
431
- if (host === undefined) {
432
- var sdk = sdkCore.getSdk();
433
- host = sdk.options.host;
434
- }
435
- return getConnectMemoized(host);
436
- }
437
- /**
438
- * Adds an observer for when connection state changed to connected.
439
- *
440
- * @param conn - The {@link Connect} instance
441
- * @param callback - The callback triggered when {@link ConnState | state}
442
- * changed to connected
443
- */
444
- function onConnected(conn, callback) {
445
- return onState(conn, exports.ConnState.Connected, callback);
446
- }
447
- /**
448
- * Adds an observer for when connection state changed to connecting.
449
- *
450
- * @param conn - The {@link Connect} instance
451
- * @param callback - callback triggered on connecting state. Two parameters
452
- * are provided: `attempt` — sequential number of connect attempt and
453
- * `delay` - delay in seconds before the next attempt
454
- */
455
- function onConnecting(conn, callback) {
456
- return onState(conn, exports.ConnState.Connecting, callback);
457
- }
458
- /**
459
- * Adds an observer for when connection state changed to disconnected.
460
- *
461
- * @param conn - The {@link Connect} instance
462
- * @param callback - callback triggered on disconnected state
463
- */
464
- function onDisconnected(conn, callback) {
465
- return onState(conn, exports.ConnState.Disconnected, callback);
466
- }
467
- /**
468
- * Adds an observer for when a new message received
469
- *
470
- * @example
471
- * ```javascript
472
- * const unsubscribe = onMessage(conn, (message) => {
473
- * console.log(message.body);
474
- * });
475
- * ```
476
- *
477
- * @param conn - The {@link Connect} instance
478
- * @param callback - The callback function triggered on message receive
479
- */
480
- function onMessage(conn, callback) {
481
- var handler = function (message) {
482
- callback(message);
483
- };
484
- conn.on('message', handler);
485
- return function () { return conn.off('message', handler); };
486
- }
487
- /**
488
- * @internal
489
- */
490
- var connectMemoized = sdkUtil.memoizePromise(function (conn) { return __awaiter(void 0, void 0, void 0, function () {
491
- return __generator(this, function (_a) {
492
- switch (_a.label) {
493
- case 0: return [4 /*yield*/, conn.connect()];
494
- case 1:
495
- _a.sent();
496
- return [2 /*return*/];
497
- }
498
- });
499
- }); }, function (conn) { return conn; }, {
500
- clearOnResolve: true,
501
- clearOnReject: true,
502
- });
503
- /**
504
- * Starts a connection process. If connect is successful a promise resolved by
505
- * and {@link onConnected} is triggered, otherwise a next attempt will be
506
- * automatically invoked and {@link onConnecting} is triggered.
507
- *
508
- * SDK connects automatically when its created. Connection procedure can be
509
- * aborted by calling {@link disconnect} function and the promise is rejected.
510
- *
511
- * @example
512
- * ```javascript
513
- * try {
514
- * const conn = await getConnect();
515
- *
516
- * await connect(conn);
517
- *
518
- * console.log('connected!');
519
- * } catch (err) {
520
- * console.log(err)
521
- * }
522
- * ```
523
- *
524
- * State of the connection can be handled separately
525
- *
526
- * @example
527
- * ```javascript
528
- * onConnected(() => console.log('connected'));
529
- *
530
- * onConnecting((attempt, delay) => console.log('connecting'));
531
- *
532
- * onDisconnected(() => console.log('disconnected'));
533
- * ```
534
- *
535
- * @param conn - The {@link Connect} instance
536
- * @param host - Interaction Cloud Studio host.
537
- * Can be found in Project Settings in API tab
538
- */
539
- function connect(conn) {
540
- return connectMemoized(conn);
541
- }
542
- /**
543
- * Disconnect from the server and triggers {@link onDisconnected}
544
- *
545
- * @param conn - The {@link Connect} instance
546
- */
547
- function disconnect(conn) {
548
- conn.disconnect();
549
- }
550
- /**
551
- * @internal
552
- */
553
- var subscribeMemoized = sdkUtil.memoizePromise(function (conn, channel) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
554
- return [2 /*return*/, conn.subscribe(channel)];
555
- }); }); }, function (conn, channel) { return channel; });
556
- /**
557
- * Subscribe to the server channel.
558
- *
559
- * Any message published to a channel is {@link onMessage | received}
560
- * only by subscribers to that channel. The sdk out of the box handles
561
- * all required subscriptions internally and {@link onMessage | handles messages}
562
- * so there is no need in to subscribe by developers.
563
- *
564
- * To stop receiving messages on a channel {@link unsubscribe} should be called.
565
- *
566
- * @param conn - The {@link Connect} instance
567
- * @param channel - Channel name
568
- */
569
- function subscribe(conn, channel) {
570
- return subscribeMemoized(conn, channel);
571
- }
572
- /**
573
- * Unsubscribe from the server channel.
574
- *
575
- * Removes subscription to the channel so that recipient no longer receive
576
- * messages from that channel.
577
- *
578
- * @param conn - The {@link Connect} instance
579
- * @param channel - Channel name
580
- */
581
- function unsubscribe(conn, channel) {
582
- conn.unsubscribe(channel);
583
- }
584
- /**
585
- * Send message to the server.
586
- *
587
- * The sdk out of the box provides more high level functions that uses
588
- * this function to send data to the server. Though a developer still can
589
- * use it if he knows a message protocol (klass and body) and a channel
590
- * that expect the message.
591
- *
592
- * @param conn - The Connect instance
593
- * @param channel - Channel name. Only {@link subscribe | subscribers}
594
- * to that channel can send messages.
595
- * @param klass - Message class name.
596
- * @param body - Message payload
597
- */
598
- function send(conn, channel, klass, body) {
599
- conn.send(channel, klass, body);
600
- }
601
- function login(conn, userId, timestamp, signature) {
602
- return __awaiter(this, void 0, void 0, function () {
603
- var result;
604
- return __generator(this, function (_a) {
605
- switch (_a.label) {
606
- case 0: return [4 /*yield*/, conn.login(userId, timestamp, signature)];
607
- case 1:
608
- result = _a.sent();
609
- return [2 /*return*/, result];
610
- }
611
- });
612
- });
613
- }
614
- function logout(conn) {
615
- return __awaiter(this, void 0, void 0, function () {
616
- var result;
617
- return __generator(this, function (_a) {
618
- switch (_a.label) {
619
- case 0: return [4 /*yield*/, conn.logout()];
620
- case 1:
621
- result = _a.sent();
622
- return [2 /*return*/, result];
623
- }
624
- });
625
- });
626
- }
627
-
628
- exports.ConnectImpl = ConnectImpl;
629
- exports.KIT_NAME = KIT_NAME;
630
- exports.connect = connect;
631
- exports.connectMemoized = connectMemoized;
632
- exports.disconnect = disconnect;
633
- exports.getConnect = getConnect;
634
- exports.getConnectMemoized = getConnectMemoized;
635
- exports.login = login;
636
- exports.logout = logout;
637
- exports.onConnected = onConnected;
638
- exports.onConnecting = onConnecting;
639
- exports.onDisconnected = onDisconnected;
640
- exports.onMessage = onMessage;
641
- exports.send = send;
642
- exports.subscribe = subscribe;
643
- exports.subscribeMemoized = subscribeMemoized;
644
- exports.unsubscribe = unsubscribe;
645
- //# sourceMappingURL=index.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/types.ts","../src/helpers.ts","../src/connect_impl.ts","../src/connect.ts"],"sourcesContent":["/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { MonterosaKit } from '@monterosa/sdk-core';\nimport { Emitter } from '@monterosa/sdk-util';\n\n/**\n * @internal\n */\nexport const KIT_NAME = 'connect';\n\n/**\n * Interface representing Connect kit.\n */\nexport interface Connect extends MonterosaKit, Emitter {\n /**\n * Connection state\n */\n state: ConnState;\n\n /**\n * Session ID\n */\n sessionId: string | null;\n\n /**\n * @internal\n */\n initState: InitState;\n\n /**\n * @internal\n */\n init(host: string): Promise<void>;\n\n /**\n * @internal\n */\n connect(): Promise<void>;\n\n /**\n * @internal\n */\n disconnect(): void;\n\n /**\n * @internal\n */\n subscribe(channel: string): Promise<void>;\n\n /**\n * @internal\n */\n unsubscribe(channel: string): void;\n\n /**\n * @internal\n */\n send(channel: string, klass: string, body: (string | number)[]): void;\n\n login(userId: string, timestamp: number, signature: string): Promise<void>;\n\n logout(): void;\n}\n\n/**\n * @internal\n */\nexport enum InitState {\n NotInitialised = 'not_initialised',\n Initialised = 'initialised',\n Initialising = 'initialising',\n}\n\n/**\n * A list of possible connection states. Can be used with\n * {@link Connect.state} to determine the current state.\n *\n * By default {@link Connect} is in the disconnected state.\n * When {@link connect} invoked `Connect` state switches to\n * `ConnState.Connecting` and connection is maintained permanently until\n * {@link disconnect} method is invoked. If connection was unsucessful,\n * a new attempt will start after a short delay and `ConnState.connecting`\n * is triggered. Delays between attempts increased based on this sequence:\n * 0, 3, 5, 10, 20, 30, 45, 60 where 60 seconds is the max.\n *\n * If `Connect` was previously connected and for any reason connection is lost,\n * the state changed to `ConnState.Connecting` again and the connection process\n * starts again automatically.\n *\n * @example\n * ```javascript\n * if (conn.state === ConnState.Connecting) {\n * // display \"connecting\" message\n * }\n * ```\n */\nexport enum ConnState {\n /**\n * Disconnected state\n */\n Disconnected = 'disconnected',\n /**\n * Connecting state\n */\n Connecting = 'connecting',\n /**\n * Connected state\n */\n Connected = 'connected',\n}\n\n/**\n * Class of the {@link Message}\n */\nexport enum Klass {\n /**\n * Authentication request. Sent by server on client connection.\n */\n Authenticate = 'auth',\n /**\n * Authentication response. Sent by client as response\n * to authentication request.\n */\n AuthenticateResponse = 'authr',\n /**\n * Authentication acknowledgement. Sent by the server as confirmation\n * of successful authentication.\n */\n AuthenticateSuccess = 'authok',\n /**\n * Ping message is sent by server periodically as a keep-alive.\n * Ping message is only sent if no messages are sent for specific time\n * period, meaning if there are other messages sent frequently enough\n * then ping messages are not sent at all.\n */\n Ping = 'ping',\n /**\n * Subscribe to a channel. Sent by the client to subscribe to a channel\n */\n Subscribe = 'sub',\n /**\n * Unsubscribe from a channel. Sent by the client to unsubscribe from a channel\n */\n Unsububscribe = 'unsub',\n /**\n * End of cache. Sent by the server to notify that all messages are sent from\n * a channel cache\n */\n EndOfCache = 'eoc',\n /**\n * User login. Sent by client to supply verified user identity to the server.\n */\n Login = 'login',\n /**\n * User login success\n */\n LoginSuccess = 'login_ok',\n /**\n * User login failure\n */\n LoginFail = 'login_fail',\n /**\n * Averages counters. Client can submit a counter which is processed together\n * with other counters to determine the average of all counters within specific\n * demographics segment.\n */\n Counter = 'counter',\n /**\n * Client votes. Sents by a user to vote for a poll option\n */\n Vote = 'v',\n}\n\n/**\n * A Message to be sent to the Monterosa / Interaction Cloud\n */\nexport interface Message {\n /**\n * The channel id on which this message was received. It s required to be\n * {@link subscribe} to that channel in order to start receiving\n * messages\n */\n channel: string;\n /**\n * The class indicates the desired action to be performed or the result of\n * the action. E.g. in order to authenticate a developer should {@link send}\n * {@link Klass.AuthenticateResponse} klass message as a response on\n * a received {@link Klass.Authenticate} message\n */\n klass: Klass | string;\n /**\n * The timestamp (in seconds) when this message was sent\n */\n sent_at: number;\n /**\n * The message payload. Each peace of data is a `string`\n */\n body: string[];\n}\n","/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Unsubscribe } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState } from './types';\n\nexport function onState(\n conn: Connect,\n needle: ConnState,\n callback: Function,\n): Unsubscribe {\n const handler = (state: ConnState, ...rest: unknown[]) => {\n if (state === needle) {\n callback(...rest);\n }\n };\n\n conn.on('state', handler);\n\n return () => conn.off('state', handler);\n}\n","/* eslint class-methods-use-this: \"off\" */\n\n/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport Enmasse from '@monterosa/sdk-enmasse-kit';\nimport { Emitter, setTimestamp } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState, InitState, Message } from './types';\n\n/**\n * @internal\n */\nexport class ConnectImpl extends Emitter implements Connect {\n private static instance: ConnectImpl;\n public initState: InitState = InitState.NotInitialised;\n private initPromise: Promise<void> = Promise.resolve();\n\n private constructor() {\n super();\n\n Enmasse.bind(\n Enmasse.ON_STATE,\n (state: Enmasse.States, ...rest: unknown[]) => {\n if (state === Enmasse.STATE_CONNECTED) {\n const [timestamp] = rest as [number];\n\n setTimestamp(timestamp);\n }\n\n this.emit('state', ConnectImpl.toConnState(state), ...rest);\n },\n );\n\n Enmasse.bind(Enmasse.ON_MESSAGE, (message: Enmasse.Message) => {\n this.emit('message', <Message>message);\n });\n }\n\n get state() {\n return ConnectImpl.toConnState(Enmasse.getState());\n }\n\n get sessionId() {\n return Enmasse.getSessionId();\n }\n\n public static getInstance(): ConnectImpl {\n if (!ConnectImpl.instance) {\n ConnectImpl.instance = new ConnectImpl();\n }\n\n return ConnectImpl.instance;\n }\n\n static toConnState(state: Enmasse.States): ConnState {\n switch (state) {\n default:\n case Enmasse.STATE_DISCONNECTED:\n return ConnState.Disconnected;\n case Enmasse.STATE_CONNECTING:\n return ConnState.Connecting;\n case Enmasse.STATE_CONNECTED:\n return ConnState.Connected;\n }\n }\n\n async init(host: string): Promise<void> {\n if (\n this.initState === InitState.Initialising ||\n this.initState === InitState.Initialised\n ) {\n return this.initPromise;\n }\n\n this.initPromise = new Promise((resolve, reject) => {\n this.initState = InitState.Initialising;\n\n Enmasse.bind(Enmasse.ON_READY, () => {\n this.initState = InitState.Initialised;\n\n Enmasse.unbind(Enmasse.ON_READY);\n Enmasse.unbind(Enmasse.ON_ERROR);\n\n resolve();\n });\n\n Enmasse.bind(Enmasse.ON_ERROR, (err: string) => {\n this.initState = InitState.NotInitialised;\n\n Enmasse.unbind(Enmasse.ON_READY);\n Enmasse.unbind(Enmasse.ON_ERROR);\n\n reject(new Error(`Unable to initialise connect kit: ${err}`));\n });\n\n Enmasse.init({\n config: `https://${host}/config/enmasse.json`,\n });\n });\n\n return this.initPromise;\n }\n\n async connect(): Promise<void> {\n if (this.initState !== InitState.Initialised) {\n throw new Error('must be initialised before connecting');\n }\n\n if (this.state === ConnState.Connected) {\n throw new Error('already connected');\n }\n\n if (this.state === ConnState.Connecting) {\n throw new Error('already connecting');\n }\n\n return new Promise((resolve, reject) => {\n const handler = (state: ConnState) => {\n if (state === ConnState.Connected) {\n Enmasse.unbind(Enmasse.ON_STATE, handler);\n\n resolve();\n }\n\n if (state === ConnState.Disconnected) {\n Enmasse.unbind(Enmasse.ON_STATE, handler);\n\n reject(new Error('disconnected'));\n }\n };\n\n Enmasse.bind(Enmasse.ON_STATE, handler);\n\n Enmasse.connect();\n });\n }\n\n disconnect() {\n if (this.state !== ConnState.Connected) {\n throw new Error('must be connected before disconnecting');\n }\n\n Enmasse.disconnect();\n }\n\n subscribe(channel: string): Promise<void> {\n return new Promise((resolve) => {\n const handler = (ch: string) => {\n if (ch !== channel) return;\n\n Enmasse.unbind(Enmasse.ON_EOC, handler);\n\n resolve();\n };\n\n Enmasse.bind(Enmasse.ON_EOC, handler);\n\n Enmasse.subscribe(channel);\n });\n }\n\n unsubscribe(channel: string): void {\n Enmasse.unsubscribe(channel);\n }\n\n send(channel: string, klass: string, body: (string | number)[]): void {\n Enmasse.send(channel, klass, body);\n }\n\n async login(\n userId: string,\n timestamp: number,\n signature: string,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n Enmasse.login(userId, timestamp, signature, resolve, () => {\n reject(new Error('Login failure'));\n });\n });\n }\n\n logout(): void {\n Enmasse.logout();\n }\n\n delete() {}\n}\n","/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { getSdk } from '@monterosa/sdk-core';\nimport { memoizePromise, Unsubscribe } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState, Message, Klass } from './types';\nimport { onState } from './helpers';\nimport { ConnectImpl } from './connect_impl';\n\n/**\n * @internal\n */\nconst getConnectMemoized = memoizePromise(\n async (host: string): Promise<Connect> => {\n const conn = ConnectImpl.getInstance();\n\n await conn.init(host);\n\n return conn;\n },\n (host: string): string => host,\n);\n\n/**\n * Returns the {@link Connect} instance associated with the provided\n * host. If host is not provided, it returns Connect instance for\n * the host associated with the default sdk.\n *\n * @param sdk - Monterosa SDK.\n */\nfunction getConnect(host?: string): Promise<Connect> {\n if (host === undefined) {\n const sdk = getSdk();\n\n host = sdk.options.host;\n }\n\n return getConnectMemoized(host);\n}\n\n/**\n * Adds an observer for when connection state changed to connected.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - The callback triggered when {@link ConnState | state}\n * changed to connected\n */\nfunction onConnected(\n conn: Connect,\n callback: (timestamp: number) => void,\n): Unsubscribe {\n return onState(conn, ConnState.Connected, callback);\n}\n\n/**\n * Adds an observer for when connection state changed to connecting.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - callback triggered on connecting state. Two parameters\n * are provided: `attempt` — sequential number of connect attempt and\n * `delay` - delay in seconds before the next attempt\n */\nfunction onConnecting(\n conn: Connect,\n callback: (attempt: number, delay: number) => void,\n): Unsubscribe {\n return onState(conn, ConnState.Connecting, callback);\n}\n\n/**\n * Adds an observer for when connection state changed to disconnected.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - callback triggered on disconnected state\n */\nfunction onDisconnected(conn: Connect, callback: () => void): Unsubscribe {\n return onState(conn, ConnState.Disconnected, callback);\n}\n\n/**\n * Adds an observer for when a new message received\n *\n * @example\n * ```javascript\n * const unsubscribe = onMessage(conn, (message) => {\n * console.log(message.body);\n * });\n * ```\n *\n * @param conn - The {@link Connect} instance\n * @param callback - The callback function triggered on message receive\n */\nfunction onMessage(\n conn: Connect,\n callback: (message: Message) => void,\n): Unsubscribe {\n const handler = (message: Message) => {\n callback(message);\n };\n\n conn.on('message', handler);\n\n return () => conn.off('message', handler);\n}\n\n/**\n * @internal\n */\nconst connectMemoized = memoizePromise(\n async (conn: Connect): Promise<void> => {\n await conn.connect();\n },\n (conn: Connect): Connect => conn,\n {\n clearOnResolve: true,\n clearOnReject: true,\n },\n);\n\n/**\n * Starts a connection process. If connect is successful a promise resolved by\n * and {@link onConnected} is triggered, otherwise a next attempt will be\n * automatically invoked and {@link onConnecting} is triggered.\n *\n * SDK connects automatically when its created. Connection procedure can be\n * aborted by calling {@link disconnect} function and the promise is rejected.\n *\n * @example\n * ```javascript\n * try {\n * const conn = await getConnect();\n *\n * await connect(conn);\n *\n * console.log('connected!');\n * } catch (err) {\n * console.log(err)\n * }\n * ```\n *\n * State of the connection can be handled separately\n *\n * @example\n * ```javascript\n * onConnected(() => console.log('connected'));\n *\n * onConnecting((attempt, delay) => console.log('connecting'));\n *\n * onDisconnected(() => console.log('disconnected'));\n * ```\n *\n * @param conn - The {@link Connect} instance\n * @param host - Interaction Cloud Studio host.\n * Can be found in Project Settings in API tab\n */\nfunction connect(conn: Connect): Promise<void> {\n return connectMemoized(conn);\n}\n\n/**\n * Disconnect from the server and triggers {@link onDisconnected}\n *\n * @param conn - The {@link Connect} instance\n */\nfunction disconnect(conn: Connect): void {\n conn.disconnect();\n}\n\n/**\n * @internal\n */\nconst subscribeMemoized = memoizePromise(\n async (conn: Connect, channel: string): Promise<void> =>\n conn.subscribe(channel),\n (conn: Connect, channel: string): string => channel,\n);\n\n/**\n * Subscribe to the server channel.\n *\n * Any message published to a channel is {@link onMessage | received}\n * only by subscribers to that channel. The sdk out of the box handles\n * all required subscriptions internally and {@link onMessage | handles messages}\n * so there is no need in to subscribe by developers.\n *\n * To stop receiving messages on a channel {@link unsubscribe} should be called.\n *\n * @param conn - The {@link Connect} instance\n * @param channel - Channel name\n */\nfunction subscribe(conn: Connect, channel: string): Promise<void> {\n return subscribeMemoized(conn, channel);\n}\n\n/**\n * Unsubscribe from the server channel.\n *\n * Removes subscription to the channel so that recipient no longer receive\n * messages from that channel.\n *\n * @param conn - The {@link Connect} instance\n * @param channel - Channel name\n */\nfunction unsubscribe(conn: Connect, channel: string): void {\n conn.unsubscribe(channel);\n}\n\n/**\n * Send message to the server.\n *\n * The sdk out of the box provides more high level functions that uses\n * this function to send data to the server. Though a developer still can\n * use it if he knows a message protocol (klass and body) and a channel\n * that expect the message.\n *\n * @param conn - The Connect instance\n * @param channel - Channel name. Only {@link subscribe | subscribers}\n * to that channel can send messages.\n * @param klass - Message class name.\n * @param body - Message payload\n */\nfunction send(\n conn: Connect,\n channel: string,\n klass: Klass | string,\n body: (string | number)[],\n): void {\n conn.send(channel, klass, body);\n}\n\nasync function login(\n conn: Connect,\n userId: string,\n timestamp: number,\n signature: string,\n): Promise<void> {\n const result = await conn.login(userId, timestamp, signature);\n\n return result;\n}\n\nasync function logout(conn: Connect): Promise<void> {\n const result = await conn.logout();\n\n return result;\n}\n\nexport {\n onConnected,\n onConnecting,\n onDisconnected,\n onMessage,\n disconnect,\n unsubscribe,\n send,\n getConnect,\n getConnectMemoized,\n connect,\n connectMemoized,\n subscribe,\n subscribeMemoized,\n login,\n logout,\n};\n"],"names":["InitState","ConnState","Klass","Enmasse","setTimestamp","Emitter","memoizePromise","getSdk"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/types.ts","../src/helpers.ts","../src/connect_impl.ts","../src/connect.ts"],"sourcesContent":["/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { MonterosaKit } from '@monterosa/sdk-core';\nimport { Emitter } from '@monterosa/sdk-util';\n\n/**\n * @internal\n */\nexport const KIT_NAME = 'connect';\n\n/**\n * Interface representing Connect kit.\n */\nexport interface Connect extends MonterosaKit, Emitter {\n /**\n * Connection state\n */\n state: ConnState;\n\n /**\n * Session ID\n */\n sessionId: string | null;\n\n /**\n * @internal\n */\n initState: InitState;\n\n /**\n * @internal\n */\n init(host: string): Promise<void>;\n\n /**\n * @internal\n */\n connect(): Promise<void>;\n\n /**\n * @internal\n */\n disconnect(): void;\n\n /**\n * @internal\n */\n subscribe(channel: string): Promise<void>;\n\n /**\n * @internal\n */\n unsubscribe(channel: string): void;\n\n /**\n * @internal\n */\n send(channel: string, klass: string, body: (string | number)[]): void;\n\n login(userId: string, timestamp: number, signature: string): Promise<void>;\n\n logout(): void;\n}\n\n/**\n * @internal\n */\nexport enum InitState {\n NotInitialised = 'not_initialised',\n Initialised = 'initialised',\n Initialising = 'initialising',\n}\n\n/**\n * A list of possible connection states. Can be used with\n * {@link Connect.state} to determine the current state.\n *\n * By default {@link Connect} is in the disconnected state.\n * When {@link connect} invoked `Connect` state switches to\n * `ConnState.Connecting` and connection is maintained permanently until\n * {@link disconnect} method is invoked. If connection was unsucessful,\n * a new attempt will start after a short delay and `ConnState.connecting`\n * is triggered. Delays between attempts increased based on this sequence:\n * 0, 3, 5, 10, 20, 30, 45, 60 where 60 seconds is the max.\n *\n * If `Connect` was previously connected and for any reason connection is lost,\n * the state changed to `ConnState.Connecting` again and the connection process\n * starts again automatically.\n *\n * @example\n * ```javascript\n * if (conn.state === ConnState.Connecting) {\n * // display \"connecting\" message\n * }\n * ```\n */\nexport enum ConnState {\n /**\n * Disconnected state\n */\n Disconnected = 'disconnected',\n /**\n * Connecting state\n */\n Connecting = 'connecting',\n /**\n * Connected state\n */\n Connected = 'connected',\n}\n\n/**\n * Class of the {@link Message}\n */\nexport enum Klass {\n /**\n * Authentication request. Sent by server on client connection.\n */\n Authenticate = 'auth',\n /**\n * Authentication response. Sent by client as response\n * to authentication request.\n */\n AuthenticateResponse = 'authr',\n /**\n * Authentication acknowledgement. Sent by the server as confirmation\n * of successful authentication.\n */\n AuthenticateSuccess = 'authok',\n /**\n * Ping message is sent by server periodically as a keep-alive.\n * Ping message is only sent if no messages are sent for specific time\n * period, meaning if there are other messages sent frequently enough\n * then ping messages are not sent at all.\n */\n Ping = 'ping',\n /**\n * Subscribe to a channel. Sent by the client to subscribe to a channel\n */\n Subscribe = 'sub',\n /**\n * Unsubscribe from a channel. Sent by the client to unsubscribe from a channel\n */\n Unsububscribe = 'unsub',\n /**\n * End of cache. Sent by the server to notify that all messages are sent from\n * a channel cache\n */\n EndOfCache = 'eoc',\n /**\n * User login. Sent by client to supply verified user identity to the server.\n */\n Login = 'login',\n /**\n * User login success\n */\n LoginSuccess = 'login_ok',\n /**\n * User login failure\n */\n LoginFail = 'login_fail',\n /**\n * Averages counters. Client can submit a counter which is processed together\n * with other counters to determine the average of all counters within specific\n * demographics segment.\n */\n Counter = 'counter',\n /**\n * Client votes. Sents by a user to vote for a poll option\n */\n Vote = 'v',\n}\n\n/**\n * A Message to be sent to the Monterosa / Interaction Cloud\n */\nexport interface Message {\n /**\n * The channel id on which this message was received. It s required to be\n * {@link subscribe} to that channel in order to start receiving\n * messages\n */\n channel: string;\n /**\n * The class indicates the desired action to be performed or the result of\n * the action. E.g. in order to authenticate a developer should {@link send}\n * {@link Klass.AuthenticateResponse} klass message as a response on\n * a received {@link Klass.Authenticate} message\n */\n klass: Klass | string;\n /**\n * The timestamp (in seconds) when this message was sent\n */\n sent_at: number;\n /**\n * The message payload. Each peace of data is a `string`\n */\n body: string[];\n}\n","/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Unsubscribe } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState } from './types';\n\nexport function onState(\n conn: Connect,\n needle: ConnState,\n callback: Function,\n): Unsubscribe {\n const handler = (state: ConnState, ...rest: unknown[]) => {\n if (state === needle) {\n callback(...rest);\n }\n };\n\n conn.on('state', handler);\n\n return () => conn.off('state', handler);\n}\n","/* eslint class-methods-use-this: \"off\" */\n\n/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport Enmasse from '@monterosa/sdk-enmasse-kit';\nimport { Emitter, setTimestamp } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState, InitState, Message } from './types';\n\n/**\n * @internal\n */\nexport class ConnectImpl extends Emitter implements Connect {\n private static instance: ConnectImpl;\n public initState: InitState = InitState.NotInitialised;\n private initPromise: Promise<void> = Promise.resolve();\n\n private constructor() {\n super();\n\n Enmasse.bind(\n Enmasse.ON_STATE,\n (state: Enmasse.States, ...rest: unknown[]) => {\n if (state === Enmasse.STATE_CONNECTED) {\n const [timestamp] = rest as [number];\n\n setTimestamp(timestamp);\n }\n\n this.emit('state', ConnectImpl.toConnState(state), ...rest);\n },\n );\n\n Enmasse.bind(Enmasse.ON_MESSAGE, (message: Enmasse.Message) => {\n this.emit('message', <Message>message);\n });\n }\n\n get state() {\n return ConnectImpl.toConnState(Enmasse.getState());\n }\n\n get sessionId() {\n return Enmasse.getSessionId();\n }\n\n public static getInstance(): ConnectImpl {\n if (!ConnectImpl.instance) {\n ConnectImpl.instance = new ConnectImpl();\n }\n\n return ConnectImpl.instance;\n }\n\n static toConnState(state: Enmasse.States): ConnState {\n switch (state) {\n default:\n case Enmasse.STATE_DISCONNECTED:\n return ConnState.Disconnected;\n case Enmasse.STATE_CONNECTING:\n return ConnState.Connecting;\n case Enmasse.STATE_CONNECTED:\n return ConnState.Connected;\n }\n }\n\n async init(host: string): Promise<void> {\n if (\n this.initState === InitState.Initialising ||\n this.initState === InitState.Initialised\n ) {\n return this.initPromise;\n }\n\n this.initPromise = new Promise((resolve, reject) => {\n this.initState = InitState.Initialising;\n\n Enmasse.bind(Enmasse.ON_READY, () => {\n this.initState = InitState.Initialised;\n\n Enmasse.unbind(Enmasse.ON_READY);\n Enmasse.unbind(Enmasse.ON_ERROR);\n\n resolve();\n });\n\n Enmasse.bind(Enmasse.ON_ERROR, (err: string) => {\n this.initState = InitState.NotInitialised;\n\n Enmasse.unbind(Enmasse.ON_READY);\n Enmasse.unbind(Enmasse.ON_ERROR);\n\n reject(new Error(`Unable to initialise connect kit: ${err}`));\n });\n\n Enmasse.init({\n config: `https://${host}/config/enmasse.json`,\n });\n });\n\n return this.initPromise;\n }\n\n async connect(): Promise<void> {\n if (this.initState !== InitState.Initialised) {\n throw new Error('must be initialised before connecting');\n }\n\n if (this.state === ConnState.Connected) {\n throw new Error('already connected');\n }\n\n if (this.state === ConnState.Connecting) {\n throw new Error('already connecting');\n }\n\n return new Promise((resolve, reject) => {\n const handler = (state: ConnState) => {\n if (state === ConnState.Connected) {\n Enmasse.unbind(Enmasse.ON_STATE, handler);\n\n resolve();\n }\n\n if (state === ConnState.Disconnected) {\n Enmasse.unbind(Enmasse.ON_STATE, handler);\n\n reject(new Error('disconnected'));\n }\n };\n\n Enmasse.bind(Enmasse.ON_STATE, handler);\n\n Enmasse.connect();\n });\n }\n\n disconnect() {\n if (this.state !== ConnState.Connected) {\n throw new Error('must be connected before disconnecting');\n }\n\n Enmasse.disconnect();\n }\n\n subscribe(channel: string): Promise<void> {\n return new Promise((resolve) => {\n const handler = (ch: string) => {\n if (ch !== channel) return;\n\n Enmasse.unbind(Enmasse.ON_EOC, handler);\n\n resolve();\n };\n\n Enmasse.bind(Enmasse.ON_EOC, handler);\n\n Enmasse.subscribe(channel);\n });\n }\n\n unsubscribe(channel: string): void {\n Enmasse.unsubscribe(channel);\n }\n\n send(channel: string, klass: string, body: (string | number)[]): void {\n Enmasse.send(channel, klass, body);\n }\n\n async login(\n userId: string,\n timestamp: number,\n signature: string,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n Enmasse.login(userId, timestamp, signature, resolve, () => {\n reject(new Error('Login failure'));\n });\n });\n }\n\n logout(): void {\n Enmasse.logout();\n }\n\n delete() {}\n}\n","/**\n * @license\n * @monterosa/sdk-connect-kit\n *\n * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { getSdk } from '@monterosa/sdk-core';\nimport { memoizePromise, Unsubscribe } from '@monterosa/sdk-util';\n\nimport { Connect, ConnState, Message, Klass } from './types';\nimport { onState } from './helpers';\nimport { ConnectImpl } from './connect_impl';\n\n/**\n * @internal\n */\nconst getConnectMemoized = memoizePromise(\n async (host: string): Promise<Connect> => {\n const conn = ConnectImpl.getInstance();\n\n await conn.init(host);\n\n return conn;\n },\n (host: string): string => host,\n);\n\n/**\n * Returns the {@link Connect} instance associated with the provided\n * host. If host is not provided, it returns Connect instance for\n * the host associated with the default sdk.\n *\n * @param sdk - Monterosa SDK.\n */\nfunction getConnect(host?: string): Promise<Connect> {\n if (host === undefined) {\n const sdk = getSdk();\n\n host = sdk.options.host;\n }\n\n return getConnectMemoized(host);\n}\n\n/**\n * Adds an observer for when connection state changed to connected.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - The callback triggered when {@link ConnState | state}\n * changed to connected\n */\nfunction onConnected(\n conn: Connect,\n callback: (timestamp: number) => void,\n): Unsubscribe {\n return onState(conn, ConnState.Connected, callback);\n}\n\n/**\n * Adds an observer for when connection state changed to connecting.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - callback triggered on connecting state. Two parameters\n * are provided: `attempt` — sequential number of connect attempt and\n * `delay` - delay in seconds before the next attempt\n */\nfunction onConnecting(\n conn: Connect,\n callback: (attempt: number, delay: number) => void,\n): Unsubscribe {\n return onState(conn, ConnState.Connecting, callback);\n}\n\n/**\n * Adds an observer for when connection state changed to disconnected.\n *\n * @param conn - The {@link Connect} instance\n * @param callback - callback triggered on disconnected state\n */\nfunction onDisconnected(conn: Connect, callback: () => void): Unsubscribe {\n return onState(conn, ConnState.Disconnected, callback);\n}\n\n/**\n * Adds an observer for when a new message received\n *\n * @example\n * ```javascript\n * const unsubscribe = onMessage(conn, (message) => {\n * console.log(message.body);\n * });\n * ```\n *\n * @param conn - The {@link Connect} instance\n * @param callback - The callback function triggered on message receive\n */\nfunction onMessage(\n conn: Connect,\n callback: (message: Message) => void,\n): Unsubscribe {\n const handler = (message: Message) => {\n callback(message);\n };\n\n conn.on('message', handler);\n\n return () => conn.off('message', handler);\n}\n\n/**\n * @internal\n */\nconst connectMemoized = memoizePromise(\n async (conn: Connect): Promise<void> => {\n await conn.connect();\n },\n (conn: Connect): Connect => conn,\n {\n clearOnResolve: true,\n clearOnReject: true,\n },\n);\n\n/**\n * Starts a connection process. If connect is successful a promise resolved by\n * and {@link onConnected} is triggered, otherwise a next attempt will be\n * automatically invoked and {@link onConnecting} is triggered.\n *\n * SDK connects automatically when its created. Connection procedure can be\n * aborted by calling {@link disconnect} function and the promise is rejected.\n *\n * @example\n * ```javascript\n * try {\n * const conn = await getConnect();\n *\n * await connect(conn);\n *\n * console.log('connected!');\n * } catch (err) {\n * console.log(err)\n * }\n * ```\n *\n * State of the connection can be handled separately\n *\n * @example\n * ```javascript\n * onConnected(() => console.log('connected'));\n *\n * onConnecting((attempt, delay) => console.log('connecting'));\n *\n * onDisconnected(() => console.log('disconnected'));\n * ```\n *\n * @param conn - The {@link Connect} instance\n * @param host - Interaction Cloud Studio host.\n * Can be found in Project Settings in API tab\n */\nfunction connect(conn: Connect): Promise<void> {\n return connectMemoized(conn);\n}\n\n/**\n * Disconnect from the server and triggers {@link onDisconnected}\n *\n * @param conn - The {@link Connect} instance\n */\nfunction disconnect(conn: Connect): void {\n conn.disconnect();\n}\n\n/**\n * @internal\n */\nconst subscribeMemoized = memoizePromise(\n async (conn: Connect, channel: string): Promise<void> =>\n conn.subscribe(channel),\n (conn: Connect, channel: string): string => channel,\n);\n\n/**\n * Subscribe to the server channel.\n *\n * Any message published to a channel is {@link onMessage | received}\n * only by subscribers to that channel. The sdk out of the box handles\n * all required subscriptions internally and {@link onMessage | handles messages}\n * so there is no need in to subscribe by developers.\n *\n * To stop receiving messages on a channel {@link unsubscribe} should be called.\n *\n * @param conn - The {@link Connect} instance\n * @param channel - Channel name\n */\nfunction subscribe(conn: Connect, channel: string): Promise<void> {\n return subscribeMemoized(conn, channel);\n}\n\n/**\n * Unsubscribe from the server channel.\n *\n * Removes subscription to the channel so that recipient no longer receive\n * messages from that channel.\n *\n * @param conn - The {@link Connect} instance\n * @param channel - Channel name\n */\nfunction unsubscribe(conn: Connect, channel: string): void {\n conn.unsubscribe(channel);\n}\n\n/**\n * Send message to the server.\n *\n * The sdk out of the box provides more high level functions that uses\n * this function to send data to the server. Though a developer still can\n * use it if he knows a message protocol (klass and body) and a channel\n * that expect the message.\n *\n * @param conn - The Connect instance\n * @param channel - Channel name. Only {@link subscribe | subscribers}\n * to that channel can send messages.\n * @param klass - Message class name.\n * @param body - Message payload\n */\nfunction send(\n conn: Connect,\n channel: string,\n klass: Klass | string,\n body: (string | number)[],\n): void {\n conn.send(channel, klass, body);\n}\n\nasync function login(\n conn: Connect,\n userId: string,\n timestamp: number,\n signature: string,\n): Promise<void> {\n const result = await conn.login(userId, timestamp, signature);\n\n return result;\n}\n\nasync function logout(conn: Connect): Promise<void> {\n const result = await conn.logout();\n\n return result;\n}\n\nexport {\n onConnected,\n onConnecting,\n onDisconnected,\n onMessage,\n disconnect,\n unsubscribe,\n send,\n getConnect,\n getConnectMemoized,\n connect,\n connectMemoized,\n subscribe,\n subscribeMemoized,\n login,\n logout,\n};\n"],"names":[],"mappings":"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"}