@seriousme/opifex 2.0.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/client/ConnectionState.ts +1 -1
  2. package/client/client.ts +41 -9
  3. package/client/context.ts +11 -13
  4. package/client/deps.ts +8 -5
  5. package/client/handlers/handleConnack.ts +2 -2
  6. package/client/mod.ts +13 -2
  7. package/client/store/memoryStore.ts +11 -10
  8. package/client/store/store.ts +1 -1
  9. package/deno/mod.ts +7 -0
  10. package/deno/tcpClient.ts +21 -8
  11. package/deno/tcpServer.ts +21 -4
  12. package/deno/tlsServer.ts +20 -4
  13. package/deno/wsServer.ts +23 -0
  14. package/dist/client/ConnectionState.d.ts +1 -1
  15. package/dist/client/ConnectionState.d.ts.map +1 -1
  16. package/dist/client/client.d.ts +39 -9
  17. package/dist/client/client.d.ts.map +1 -1
  18. package/dist/client/client.js +24 -0
  19. package/dist/client/client.js.map +1 -1
  20. package/dist/client/context.d.ts +8 -8
  21. package/dist/client/context.d.ts.map +1 -1
  22. package/dist/client/context.js.map +1 -1
  23. package/dist/client/deps.d.ts +3 -3
  24. package/dist/client/deps.d.ts.map +1 -1
  25. package/dist/client/deps.js.map +1 -1
  26. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  27. package/dist/client/handlers/handleConnack.js.map +1 -1
  28. package/dist/client/mod.d.ts +3 -2
  29. package/dist/client/mod.d.ts.map +1 -1
  30. package/dist/client/mod.js +1 -1
  31. package/dist/client/mod.js.map +1 -1
  32. package/dist/client/store/memoryStore.d.ts +3 -3
  33. package/dist/client/store/memoryStore.d.ts.map +1 -1
  34. package/dist/client/store/memoryStore.js +2 -2
  35. package/dist/client/store/memoryStore.js.map +1 -1
  36. package/dist/client/store/store.d.ts +1 -1
  37. package/dist/client/store/store.d.ts.map +1 -1
  38. package/dist/examples/authHandler.test.js +3 -3
  39. package/dist/examples/authHandler.test.js.map +1 -1
  40. package/dist/mqttConn/mqttConn.d.ts +2 -17
  41. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  42. package/dist/mqttConn/mqttConn.js +1 -1
  43. package/dist/mqttConn/mqttConn.js.map +1 -1
  44. package/dist/mqttPacket/AuthenticationResult.d.ts +4 -0
  45. package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
  46. package/dist/mqttPacket/AuthenticationResult.js.map +1 -1
  47. package/dist/mqttPacket/PacketType.d.ts +4 -0
  48. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  49. package/dist/mqttPacket/Properties.d.ts +2 -2
  50. package/dist/mqttPacket/Properties.d.ts.map +1 -1
  51. package/dist/mqttPacket/ReasonCode.d.ts +3 -5
  52. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
  53. package/dist/mqttPacket/ReasonCode.js.map +1 -1
  54. package/dist/mqttPacket/RetainHandling.d.ts +4 -0
  55. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
  56. package/dist/mqttPacket/auth.d.ts +6 -5
  57. package/dist/mqttPacket/auth.d.ts.map +1 -1
  58. package/dist/mqttPacket/auth.js +2 -2
  59. package/dist/mqttPacket/auth.js.map +1 -1
  60. package/dist/mqttPacket/codec.d.ts.map +1 -1
  61. package/dist/mqttPacket/codec.js.map +1 -1
  62. package/dist/mqttPacket/connack.d.ts +9 -7
  63. package/dist/mqttPacket/connack.d.ts.map +1 -1
  64. package/dist/mqttPacket/connack.js +2 -2
  65. package/dist/mqttPacket/connack.js.map +1 -1
  66. package/dist/mqttPacket/connect.d.ts +5 -4
  67. package/dist/mqttPacket/connect.d.ts.map +1 -1
  68. package/dist/mqttPacket/connect.js.map +1 -1
  69. package/dist/mqttPacket/decoder.d.ts +6 -4
  70. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  71. package/dist/mqttPacket/decoder.js +1 -1
  72. package/dist/mqttPacket/decoder.js.map +1 -1
  73. package/dist/mqttPacket/disconnect.d.ts +7 -5
  74. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  75. package/dist/mqttPacket/disconnect.js +2 -2
  76. package/dist/mqttPacket/disconnect.js.map +1 -1
  77. package/dist/mqttPacket/encoder.d.ts +7 -5
  78. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  79. package/dist/mqttPacket/encoder.js +1 -1
  80. package/dist/mqttPacket/encoder.js.map +1 -1
  81. package/dist/mqttPacket/mod.d.ts +1 -1
  82. package/dist/mqttPacket/mod.d.ts.map +1 -1
  83. package/dist/mqttPacket/pingreq.d.ts +4 -3
  84. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  85. package/dist/mqttPacket/pingreq.js.map +1 -1
  86. package/dist/mqttPacket/pingres.d.ts +4 -3
  87. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  88. package/dist/mqttPacket/pingres.js.map +1 -1
  89. package/dist/mqttPacket/protocolLevels.d.ts +2 -0
  90. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  91. package/dist/mqttPacket/pubblishAcks.d.ts +7 -7
  92. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
  93. package/dist/mqttPacket/pubblishAcks.js +2 -2
  94. package/dist/mqttPacket/pubblishAcks.js.map +1 -1
  95. package/dist/mqttPacket/publish.d.ts +5 -4
  96. package/dist/mqttPacket/publish.d.ts.map +1 -1
  97. package/dist/mqttPacket/publish.js.map +1 -1
  98. package/dist/mqttPacket/suback.d.ts +7 -5
  99. package/dist/mqttPacket/suback.d.ts.map +1 -1
  100. package/dist/mqttPacket/suback.js +2 -2
  101. package/dist/mqttPacket/suback.js.map +1 -1
  102. package/dist/mqttPacket/subscribe.d.ts +7 -5
  103. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  104. package/dist/mqttPacket/subscribe.js.map +1 -1
  105. package/dist/mqttPacket/types.d.ts +1 -21
  106. package/dist/mqttPacket/types.d.ts.map +1 -1
  107. package/dist/mqttPacket/unsuback.d.ts +7 -5
  108. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  109. package/dist/mqttPacket/unsuback.js +1 -1
  110. package/dist/mqttPacket/unsuback.js.map +1 -1
  111. package/dist/mqttPacket/unsubscribe.d.ts +5 -4
  112. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  113. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  114. package/dist/node/tcpClient.d.ts +21 -1
  115. package/dist/node/tcpClient.d.ts.map +1 -1
  116. package/dist/node/tcpClient.js +18 -4
  117. package/dist/node/tcpClient.js.map +1 -1
  118. package/dist/node/tcpServer.d.ts +18 -0
  119. package/dist/node/tcpServer.d.ts.map +1 -1
  120. package/dist/node/tcpServer.js +17 -2
  121. package/dist/node/tcpServer.js.map +1 -1
  122. package/dist/node/tlsServer.d.ts +18 -0
  123. package/dist/node/tlsServer.d.ts.map +1 -1
  124. package/dist/node/tlsServer.js +17 -2
  125. package/dist/node/tlsServer.js.map +1 -1
  126. package/dist/persistence/basicPersistence.d.ts +4 -4
  127. package/dist/persistence/basicPersistence.d.ts.map +1 -1
  128. package/dist/persistence/basicPersistence.js.map +1 -1
  129. package/dist/persistence/deps.d.ts +1 -1
  130. package/dist/persistence/deps.d.ts.map +1 -1
  131. package/dist/persistence/memory/memoryStorage.d.ts +3 -3
  132. package/dist/persistence/memory/memoryStorage.d.ts.map +1 -1
  133. package/dist/persistence/mod.d.ts +1 -1
  134. package/dist/persistence/mod.d.ts.map +1 -1
  135. package/dist/persistence/persistence.d.ts +3 -3
  136. package/dist/persistence/persistence.d.ts.map +1 -1
  137. package/dist/persistence/sqlite/sqliteStorage.d.ts +2 -2
  138. package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -1
  139. package/dist/persistence/storage.d.ts +1 -1
  140. package/dist/persistence/storage.d.ts.map +1 -1
  141. package/dist/server/context.d.ts +4 -4
  142. package/dist/server/context.d.ts.map +1 -1
  143. package/dist/server/context.js.map +1 -1
  144. package/dist/server/deps.d.ts +2 -2
  145. package/dist/server/deps.d.ts.map +1 -1
  146. package/dist/server/deps.js.map +1 -1
  147. package/dist/server/handlers/completeConnect.d.ts +3 -2
  148. package/dist/server/handlers/completeConnect.d.ts.map +1 -1
  149. package/dist/server/handlers/completeConnect.js.map +1 -1
  150. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  151. package/dist/server/handlers/handlePublish.js.map +1 -1
  152. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  153. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  154. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  155. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  156. package/dist/server/mod.d.ts +1 -1
  157. package/dist/server/mod.d.ts.map +1 -1
  158. package/dist/server/server.d.ts +3 -3
  159. package/dist/server/server.d.ts.map +1 -1
  160. package/dist/server/server.js.map +1 -1
  161. package/dist/socket/socket.d.ts +22 -0
  162. package/dist/socket/socket.d.ts.map +1 -1
  163. package/dist/socket/socket.js +5 -0
  164. package/dist/socket/socket.js.map +1 -1
  165. package/dist/utils/logger.d.ts +3 -3
  166. package/dist/utils/logger.d.ts.map +1 -1
  167. package/dist/utils/logger.js +1 -1
  168. package/dist/utils/logger.js.map +1 -1
  169. package/dist/web/wsClient.d.ts +12 -0
  170. package/dist/web/wsClient.d.ts.map +1 -1
  171. package/dist/web/wsClient.js +12 -1
  172. package/dist/web/wsClient.js.map +1 -1
  173. package/examples/authHandler.test.ts +3 -3
  174. package/mqttConn/mqttConn.ts +2 -18
  175. package/mqttPacket/AuthenticationResult.ts +6 -0
  176. package/mqttPacket/PacketType.ts +5 -0
  177. package/mqttPacket/Properties.ts +2 -2
  178. package/mqttPacket/ReasonCode.ts +6 -8
  179. package/mqttPacket/RetainHandling.ts +5 -0
  180. package/mqttPacket/auth.ts +7 -7
  181. package/mqttPacket/codec.ts +3 -2
  182. package/mqttPacket/connack.ts +11 -10
  183. package/mqttPacket/connect.ts +4 -11
  184. package/mqttPacket/decoder.ts +9 -11
  185. package/mqttPacket/disconnect.ts +7 -7
  186. package/mqttPacket/encoder.test.ts +2 -2
  187. package/mqttPacket/encoder.ts +9 -7
  188. package/mqttPacket/mod.ts +0 -4
  189. package/mqttPacket/pingreq.ts +3 -3
  190. package/mqttPacket/pingres.ts +3 -3
  191. package/mqttPacket/protocolLevels.ts +2 -0
  192. package/mqttPacket/pubblishAcks.ts +9 -9
  193. package/mqttPacket/publish.ts +4 -11
  194. package/mqttPacket/publishAcks.test.ts +3 -3
  195. package/mqttPacket/suback.ts +8 -13
  196. package/mqttPacket/subscribe.ts +6 -12
  197. package/mqttPacket/types.ts +1 -26
  198. package/mqttPacket/unsuback.ts +8 -7
  199. package/mqttPacket/unsubscribe.ts +4 -10
  200. package/node/mod.ts +7 -0
  201. package/node/tcpClient.ts +21 -6
  202. package/node/tcpServer.ts +23 -6
  203. package/node/tlsServer.ts +23 -7
  204. package/package.json +6 -1
  205. package/persistence/basicPersistence.ts +5 -5
  206. package/persistence/deps.ts +1 -1
  207. package/persistence/memory/memoryStorage.ts +3 -3
  208. package/persistence/mod.ts +1 -1
  209. package/persistence/persistence.testing.ts +4 -4
  210. package/persistence/persistence.ts +3 -3
  211. package/persistence/sqlite/sqliteStorage.ts +2 -2
  212. package/persistence/storage.ts +1 -1
  213. package/server/context.ts +5 -5
  214. package/server/deps.ts +1 -2
  215. package/server/handlers/completeConnect.ts +2 -2
  216. package/server/handlers/handlePublish.ts +3 -4
  217. package/server/handlers/handleSubscribe.ts +3 -4
  218. package/server/handlers/handleUnsubscribe.ts +2 -2
  219. package/server/mod.ts +1 -1
  220. package/server/server.ts +3 -3
  221. package/socket/socket.ts +31 -2
  222. package/tools/benchmarks/receiver.ts +2 -2
  223. package/tools/benchmarks/sender.ts +2 -2
  224. package/utils/logger.ts +3 -3
  225. package/web/wsClient.ts +13 -1
@@ -20,5 +20,5 @@ export const ConnectionState = {
20
20
  /**
21
21
  * @description Type representing the possible values of ConnectionState
22
22
  */
23
- export type TConnectionState =
23
+ export type ConnectionState =
24
24
  (typeof ConnectionState)[keyof typeof ConnectionState];
package/client/client.ts CHANGED
@@ -8,19 +8,20 @@ import {
8
8
  } from "./deps.ts";
9
9
 
10
10
  import type {
11
+ AuthenticationResult,
11
12
  ConnectPacket,
12
- IStore,
13
+ ProtocolLevel,
13
14
  PublishPacket,
14
15
  SockConn,
16
+ Store,
15
17
  SubscribePacket,
16
- TAuthenticationResult,
17
18
  } from "./deps.ts";
18
19
 
19
20
  import { noop } from "../utils/mod.ts";
20
21
 
21
22
  import { Context } from "./context.ts";
22
23
  import type { AuthenticatedResult } from "./context.ts";
23
- import type { TConnectionState } from "./ConnectionState.ts";
24
+ import type { ConnectionState } from "./ConnectionState.ts";
24
25
  import { BufferedAsyncIterable } from "./deps.ts";
25
26
 
26
27
  /**
@@ -32,18 +33,25 @@ function generateClientId(prefix: string): string {
32
33
  return `${prefix}-${Math.random().toString().slice(-10)}`;
33
34
  }
34
35
 
35
- type ConnectOptions = Omit<
36
+ /** All properties of a connect packet, except for type and protocol name */
37
+ export type ConnectOptions = Omit<
36
38
  ConnectPacket,
37
39
  "type" | "protocolName"
38
40
  >;
39
41
 
40
42
  /** ConnectParameters define how to connect */
41
43
  export type ConnectParameters = {
44
+ /** the URL to connect to */
42
45
  url?: URL | undefined;
46
+ /** any CA Certs to trust */
43
47
  caCerts?: string[] | undefined;
48
+ /** the clients certificate */
44
49
  cert?: string | undefined;
50
+ /** the clients private key*/
45
51
  key?: string | undefined;
52
+ /** number of retries before stopping connection attempts */
46
53
  numberOfRetries?: number | undefined;
54
+ /** connect options */
47
55
  options?: ConnectOptions | undefined;
48
56
  };
49
57
 
@@ -80,7 +88,7 @@ function backOffSleep(random: boolean, attempt: number): Promise<void> {
80
88
  /** the default MQTT URL to connect to */
81
89
  export const DEFAULT_URL = "mqtt://localhost:1883/";
82
90
  /** the default protocol level to connect with*/
83
- export const DEFAULT_PROTOCOLLEVEL = MQTTLevel.v4;
91
+ export const DEFAULT_PROTOCOLLEVEL = MQTTLevel.v4 as ProtocolLevel;
84
92
  /** the default keepalive time */
85
93
  export const DEFAULT_KEEPALIVE = 60; // 60 seconds
86
94
  const DEFAULT_RETRIES = 3; // on first connect
@@ -110,6 +118,7 @@ function normalizeError(err: unknown): Error {
110
118
  * connection type that is supported by the subclass.
111
119
  */
112
120
  export class Client {
121
+ /** callback to handle v5 extended authentication, see /examples folder */
113
122
  public onAuth: (
114
123
  authMethod: string,
115
124
  authData: Uint8Array,
@@ -119,21 +128,36 @@ export class Client {
119
128
  reasonString: "No authentication method configured",
120
129
  };
121
130
  };
131
+ /** callback for errors */
122
132
  public onError: (err: Error) => void = noop;
133
+ /** callback for publish packets */
123
134
  public onPacket: (pkt: PublishPacket) => void | Promise<void> = noop;
135
+ /** callback once connected */
124
136
  public onConnected: () => void = noop;
137
+ /** callback once disconnected */
125
138
  public onDisconnected: () => void = noop;
139
+ /** callback when reconnecting */
126
140
  public onReconnecting: () => void = noop;
127
141
 
142
+ /** clientId prefix used when automatically generating a client Id */
128
143
  protected clientIdPrefix = CLIENTID_PREFIX;
144
+ /** number of times to retry connect */
129
145
  protected numberOfRetries = DEFAULT_RETRIES;
146
+ /** the URL to connect to */
130
147
  protected connectUrl: URL = new URL(DEFAULT_URL);
148
+ /** the keepAlive value in number of seconds */
131
149
  protected keepAlive = DEFAULT_KEEPALIVE;
150
+ /** the requested protocol level */
132
151
  protected protocolLevel = DEFAULT_PROTOCOLLEVEL;
152
+ /** try auto reconnect if connection is lost */
133
153
  protected autoReconnect = true;
154
+ /** any CA Certs to trust */
134
155
  protected caCerts?: string[] | undefined;
156
+ /** the clients certificate */
135
157
  protected cert?: string | undefined;
158
+ /** the clients private key*/
136
159
  protected key?: string | undefined;
160
+ /** the MQTT clientId */
137
161
  protected clientId: string;
138
162
  private ctx: Context;
139
163
  private connectPacket?: ConnectPacket;
@@ -141,17 +165,25 @@ export class Client {
141
165
  /**
142
166
  * Creates a new MQTT client instance
143
167
  */
144
- constructor(store?: IStore) {
168
+ constructor(store?: Store) {
145
169
  const cStore = store ? store : new MemoryStore();
146
170
  this.ctx = new Context(cStore, this);
147
171
  this.clientId = generateClientId(this.clientIdPrefix);
148
172
  this.numberOfRetries = DEFAULT_RETRIES;
149
173
  }
150
174
 
151
- public get connectionState(): TConnectionState {
175
+ /**
176
+ * Current connection state
177
+ * @returns connectionState as ConnectionState
178
+ */
179
+ public get connectionState(): ConnectionState {
152
180
  return this.ctx.connectionState;
153
181
  }
154
182
 
183
+ /**
184
+ * Current configured connection URL
185
+ * @returns URL object
186
+ */
155
187
  public get url(): URL {
156
188
  return this.connectUrl;
157
189
  }
@@ -222,7 +254,7 @@ export class Client {
222
254
  * @param params - Connection parameters
223
255
  * @returns Promise resolving to authentication result
224
256
  */
225
- connect(params: ConnectParameters = {}): Promise<TAuthenticationResult> {
257
+ connect(params: ConnectParameters = {}): Promise<AuthenticationResult> {
226
258
  this.connectUrl = params?.url || this.connectUrl;
227
259
  this.numberOfRetries = params.numberOfRetries || this.numberOfRetries;
228
260
  this.caCerts = params?.caCerts;
@@ -240,7 +272,7 @@ export class Client {
240
272
  type: PacketType.connect,
241
273
  ...options,
242
274
  };
243
- const deferred = new Deferred<TAuthenticationResult>();
275
+ const deferred = new Deferred<AuthenticationResult>();
244
276
  this.ctx.unresolvedConnect = deferred;
245
277
  this.doConnect();
246
278
  return deferred.promise;
package/client/context.ts CHANGED
@@ -8,22 +8,20 @@ import {
8
8
  } from "./deps.ts";
9
9
  import type {
10
10
  AnyPacket,
11
+ AuthenticationResult,
11
12
  ConnectPacket,
12
- IStore,
13
13
  PacketId,
14
14
  ProtocolLevel,
15
15
  PublishPacket,
16
+ ReasonCode,
16
17
  ReturnCodes,
17
18
  SockConn,
19
+ Store,
18
20
  SubscribePacket,
19
- TAuthenticationResult,
20
- TPacketType,
21
- TReasonCode,
22
21
  UnsubscribePacket,
23
22
  } from "./deps.ts";
24
23
 
25
24
  import { handlePacket } from "./handlers/handlePacket.ts";
26
- import type { TConnectionState } from "./ConnectionState.ts";
27
25
  import { ConnectionState } from "./ConnectionState.ts";
28
26
  import type { Client } from "./client.ts";
29
27
  import { assert } from "../utils/assert.ts";
@@ -31,7 +29,7 @@ import { assert } from "../utils/assert.ts";
31
29
  /**
32
30
  * packets not allowed during authentication
33
31
  */
34
- function blockedDuringAuthentication(pktType: TPacketType) {
32
+ function blockedDuringAuthentication(pktType: PacketType) {
35
33
  return (
36
34
  pktType === PacketType.publish ||
37
35
  pktType === PacketType.subscribe ||
@@ -41,24 +39,24 @@ function blockedDuringAuthentication(pktType: TPacketType) {
41
39
 
42
40
  /** Possible results from authHandler */
43
41
  export type AuthenticatedResult = {
44
- reasonCode: TReasonCode;
42
+ reasonCode: ReasonCode;
45
43
  reasonString?: string;
46
44
  authData?: Uint8Array;
47
45
  };
48
46
 
49
47
  export class Context {
50
48
  mqttConn?: MqttConn;
51
- #connectionState: TConnectionState;
49
+ #connectionState: ConnectionState;
52
50
  protocolLevel: ProtocolLevel;
53
51
  pingTimer?: Timer;
54
- unresolvedConnect?: Deferred<TAuthenticationResult>;
52
+ unresolvedConnect?: Deferred<AuthenticationResult>;
55
53
  unresolvedPublish: Map<PacketId, Deferred<void>>;
56
54
  unresolvedSubscribe: Map<PacketId, Deferred<ReturnCodes>>;
57
55
  unresolvedUnSubscribe: Map<PacketId, Deferred<void>>;
58
- store: IStore;
56
+ store: Store;
59
57
  #client: Client;
60
58
 
61
- constructor(store: IStore, client: Client) {
59
+ constructor(store: Store, client: Client) {
62
60
  this.#client = client;
63
61
  this.store = store;
64
62
  this.#connectionState = ConnectionState.offline;
@@ -68,11 +66,11 @@ export class Context {
68
66
  this.unresolvedUnSubscribe = new Map();
69
67
  }
70
68
 
71
- get connectionState(): TConnectionState {
69
+ get connectionState(): ConnectionState {
72
70
  return this.#connectionState;
73
71
  }
74
72
 
75
- set connectionState(state: TConnectionState) {
73
+ set connectionState(state: ConnectionState) {
76
74
  this.#connectionState = state;
77
75
  switch (state) {
78
76
  case "connected":
package/client/deps.ts CHANGED
@@ -17,10 +17,7 @@ export type {
17
17
  ReturnCodes,
18
18
  SubackPacket,
19
19
  SubscribePacket,
20
- TAuthenticationResult,
21
20
  Topic,
22
- TPacketType,
23
- TReasonCode,
24
21
  UnsubackPacket,
25
22
  UnsubscribePacket,
26
23
  } from "../mqttPacket/mod.ts";
@@ -38,8 +35,14 @@ export {
38
35
  } from "../mqttPacket/mod.ts";
39
36
 
40
37
  export { MqttConn } from "../mqttConn/mqttConn.ts";
41
- export type { SockConn } from "../socket/socket.ts";
38
+ export type {
39
+ NetAddr,
40
+ SockAddr,
41
+ SockConn,
42
+ UnixAddr,
43
+ VsockAddr,
44
+ } from "../socket/socket.ts";
42
45
  export { Timer } from "../timer/timer.ts";
43
46
  export { BufferedAsyncIterable, Deferred, logger } from "../utils/mod.ts";
44
47
  export { MemoryStore } from "./store/memoryStore.ts";
45
- export type { IStore } from "./store/store.ts";
48
+ export type { Store } from "./store/store.ts";
@@ -1,7 +1,7 @@
1
1
  import type { Context } from "../context.ts";
2
2
  import { ConnectionState } from "../ConnectionState.ts";
3
3
  import { AuthenticationResultByNumber, ReasonCodeByNumber } from "../deps.ts";
4
- import type { ConnackPacket, TReasonCode } from "../deps.ts";
4
+ import type { ConnackPacket, ReasonCode } from "../deps.ts";
5
5
 
6
6
  /**
7
7
  * Handles the CONNACK packet received from the MQTT broker
@@ -38,7 +38,7 @@ export async function handleConnack(ctx: Context, packet: ConnackPacket) {
38
38
  }
39
39
 
40
40
  const errMsg = packet.protocolLevel === 5
41
- ? ReasonCodeByNumber[result as TReasonCode]
41
+ ? ReasonCodeByNumber[result as ReasonCode]
42
42
  : AuthenticationResultByNumber[result];
43
43
 
44
44
  const err = new Error(
package/client/mod.ts CHANGED
@@ -8,10 +8,21 @@ export {
8
8
  DEFAULT_PROTOCOLLEVEL,
9
9
  DEFAULT_URL,
10
10
  } from "./client.ts";
11
- export { MQTTLevel, ReasonCode } from "./deps.ts";
12
- export type { ProtocolLevel, QoS } from "./deps.ts";
11
+ export { logger, MQTTLevel, ReasonCode } from "./deps.ts";
12
+ export type {
13
+ AuthenticationResult,
14
+ NetAddr,
15
+ ProtocolLevel,
16
+ QoS,
17
+ SockAddr,
18
+ SockConn,
19
+ UnixAddr,
20
+ VsockAddr,
21
+ } from "./deps.ts";
13
22
  export type {
14
23
  ConnectParameters,
15
24
  PublishParameters,
16
25
  SubscribeParameters,
17
26
  } from "./client.ts";
27
+
28
+ export type { ConnectionState } from "./ConnectionState.ts";
@@ -5,20 +5,21 @@
5
5
  import { assert } from "./deps.ts";
6
6
  import type { PacketId } from "./deps.ts";
7
7
 
8
- import {
9
- type IStore,
10
- MAX_PACKET_ID,
11
- type PacketStore,
12
- type PendingAckOutgoing,
13
- type pendingIncoming,
14
- type PendingOutgoing,
15
- type PendingOutgoingPackets,
8
+ import { MAX_PACKET_ID } from "./store.ts";
9
+
10
+ import type {
11
+ PacketStore,
12
+ PendingAckOutgoing,
13
+ pendingIncoming,
14
+ PendingOutgoing,
15
+ PendingOutgoingPackets,
16
+ Store,
16
17
  } from "./store.ts";
17
18
 
18
19
  /**
19
- * In-memory implementation of the IStore interface for managing MQTT packet storage
20
+ * In-memory implementation of the Store interface for managing MQTT packet storage
20
21
  */
21
- export class MemoryStore implements IStore {
22
+ export class MemoryStore implements Store {
22
23
  /** Current packet ID counter */
23
24
  private packetId: PacketId;
24
25
 
@@ -46,7 +46,7 @@ export type PendingOutgoingPackets = PendingAckOutgoing | PendingOutgoing;
46
46
  /**
47
47
  * Interface defining the storage requirements for MQTT packet state management
48
48
  */
49
- export interface IStore {
49
+ export interface Store {
50
50
  /** Store for incoming packets pending processing */
51
51
  pendingIncoming: PacketStore<pendingIncoming>;
52
52
 
package/deno/mod.ts ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Opifex default exports for Deno
3
+ * @module
4
+ */
5
+
6
+ export * from "../client/mod.ts";
7
+ export * from "../server/mod.ts";
package/deno/tcpClient.ts CHANGED
@@ -3,16 +3,16 @@
3
3
  * it extends the platform agnostic Client class
4
4
  * @module
5
5
  */
6
- import { Client } from "../client/client.ts";
7
- import { logger } from "../client/deps.ts";
8
- import type { SockConn } from "../client/deps.ts";
6
+
7
+ import { Client, logger } from "../client/mod.ts";
8
+ import type { SockConn } from "../client/mod.ts";
9
9
 
10
10
  /**
11
- * @function getFileData
11
+ * Fetches data from a file and returns it as a string
12
+ *
12
13
  * @param filename
13
14
  * @returns Promise
14
15
  *
15
- * Fetches data from a file and returns it as a string
16
16
  * @example
17
17
  * const data = await getFileData("data.txt");
18
18
  */
@@ -29,12 +29,16 @@ export async function getFileData(
29
29
  return data;
30
30
  }
31
31
 
32
- /*
33
- * TCPclient extends the Client class to provide TCP based clients
32
+ /**
33
+ * TcpClient extends the Client class to provide TCP based clients
34
34
  * it is used by the MQTTclient to connect to the broker
35
35
  * see mqtt.ts in the /bin folder as an example
36
36
  */
37
37
  export class TcpClient extends Client {
38
+ /** Connect using MQTT over TCP
39
+ * @param hostname the name of the host to connect to
40
+ * @param port the port number
41
+ */
38
42
  protected async connectMQTT(
39
43
  hostname: string,
40
44
  port = 1883,
@@ -43,6 +47,15 @@ export class TcpClient extends Client {
43
47
  return await Deno.connect({ hostname, port });
44
48
  }
45
49
 
50
+ /**
51
+ * Connect using MQTT over TLS
52
+ * @param hostname the name of the host to connect to
53
+ * @param port the port number
54
+ * @param caCerts the CA certificates to trust
55
+ * @param cert the clients certificate
56
+ * @param key the clients private key
57
+ * @returns a Deno.TlsConn object
58
+ */
46
59
  protected async connectMQTTS(
47
60
  hostname: string,
48
61
  port = 8883,
@@ -61,7 +74,7 @@ export class TcpClient extends Client {
61
74
  return await Deno.connectTls(connectOpts);
62
75
  }
63
76
 
64
- // overload createConn from the base client class
77
+ /** createConn is used by the base client class */
65
78
  protected override createConn(): Promise<SockConn> {
66
79
  const { protocol, hostname, port: portStr } = this.connectUrl;
67
80
  const port = Number(portStr);
package/deno/tcpServer.ts CHANGED
@@ -7,12 +7,16 @@
7
7
  import { MqttServer } from "../server/mod.ts";
8
8
  import type { MqttServerOptions } from "../server/mod.ts";
9
9
 
10
- /*
11
- * TCP server that wraps a MqttServer, see demoServer.ts in the /bin folder
10
+ /**
11
+ * TCP server that wraps a MqttServer, see the /examples folder
12
12
  */
13
13
  export class TcpServer {
14
14
  private listener: Deno.Listener<Deno.Conn>;
15
15
  private mqttServer: MqttServer;
16
+
17
+ /**
18
+ * Create a new TCP server
19
+ */
16
20
  constructor(
17
21
  serverOptions: Deno.TcpListenOptions,
18
22
  mqttOptions: MqttServerOptions,
@@ -21,16 +25,26 @@ export class TcpServer {
21
25
  this.mqttServer = new MqttServer(mqttOptions);
22
26
  }
23
27
 
24
- async start() {
28
+ /**
29
+ * Start listening
30
+ */
31
+ async start(): Promise<void> {
25
32
  for await (const conn of this.listener) {
26
33
  this.mqttServer.serve(conn);
27
34
  }
28
35
  }
29
- stop() {
36
+
37
+ /**
38
+ * Stop listening
39
+ */
40
+ stop(): void {
30
41
  this.mqttServer.close(true);
31
42
  this.listener.close();
32
43
  }
33
44
 
45
+ /**
46
+ * The port number the server is listening on
47
+ */
34
48
  get port(): number | undefined {
35
49
  // deno-coverage-ignore-start
36
50
  if (this.listener.addr.transport === "tcp") {
@@ -40,6 +54,9 @@ export class TcpServer {
40
54
  // deno-coverage-ignore-stop
41
55
  }
42
56
 
57
+ /**
58
+ * The address the server is listening on
59
+ */
43
60
  get address(): string | undefined {
44
61
  // deno-coverage-ignore-start
45
62
  if (this.listener.addr.transport === "tcp") {
package/deno/tlsServer.ts CHANGED
@@ -7,12 +7,15 @@
7
7
  import { MqttServer } from "../server/mod.ts";
8
8
  import type { MqttServerOptions } from "../server/mod.ts";
9
9
 
10
- /*
11
- * TCP server that wraps a MqttServer, see demoServer.ts in the /bin folder
10
+ /**
11
+ * TLS server that wraps a MqttServer, see the /examples folder
12
12
  */
13
13
  export class TlsServer {
14
14
  private listener: Deno.TlsListener;
15
15
  private mqttServer: MqttServer;
16
+ /**
17
+ * Create a new TLS server
18
+ */
16
19
  constructor(
17
20
  serverOptions: Deno.ListenTlsOptions & Deno.TlsCertifiedKeyPem,
18
21
  mqttOptions: MqttServerOptions,
@@ -21,20 +24,33 @@ export class TlsServer {
21
24
  this.mqttServer = new MqttServer(mqttOptions);
22
25
  }
23
26
 
24
- async start() {
27
+ /**
28
+ * Start listening
29
+ */
30
+ async start(): Promise<void> {
25
31
  for await (const conn of this.listener) {
26
32
  this.mqttServer.serve(conn);
27
33
  }
28
34
  }
29
- stop() {
35
+
36
+ /**
37
+ * Stop listening
38
+ */
39
+ stop(): void {
30
40
  this.mqttServer.close();
31
41
  this.listener.close();
32
42
  }
43
+ /**
44
+ * The port number the server is listening on
45
+ */
33
46
  // deno-coverage-ignore-start
34
47
  get port(): number | undefined {
35
48
  return this.listener.addr.port;
36
49
  }
37
50
 
51
+ /**
52
+ * The address the server is listening on
53
+ */
38
54
  get address(): string | undefined {
39
55
  return this.listener.addr.hostname;
40
56
  }
package/deno/wsServer.ts CHANGED
@@ -1,9 +1,16 @@
1
+ /**
2
+ * This a Deno specific implementation of a WebSocket server
3
+ * @module
4
+ */
1
5
  import { MqttServer } from "../server/mod.ts";
2
6
  import type { MqttServerOptions } from "../server/mod.ts";
3
7
  import { logger } from "../utils/logger.ts";
4
8
  import { wrapWebSocket } from "../web/wrapWebSocket.ts";
5
9
  import type { HostnamePort } from "../web/wrapWebSocket.ts";
6
10
 
11
+ /**
12
+ * WebSocket server that wraps a MqttServer, see the /examples folder
13
+ */
7
14
  export class WsServer {
8
15
  private server?: Deno.HttpServer;
9
16
  private mqttServer: MqttServer;
@@ -12,6 +19,9 @@ export class WsServer {
12
19
  hostname?: string;
13
20
  };
14
21
 
22
+ /**
23
+ * Create a new WebSocket server
24
+ */
15
25
  constructor(
16
26
  serverOptions: Deno.ServeOptions & { port: number; hostname?: string },
17
27
  mqttOptions: MqttServerOptions,
@@ -19,6 +29,7 @@ export class WsServer {
19
29
  this.listenOptions = serverOptions;
20
30
  this.mqttServer = new MqttServer(mqttOptions);
21
31
  }
32
+
22
33
  private async handleWsClient(socket: WebSocket, remoteAddr: HostnamePort) {
23
34
  const conn = await wrapWebSocket(socket, remoteAddr);
24
35
  logger.debug("created conn");
@@ -26,6 +37,9 @@ export class WsServer {
26
37
  logger.debug("serving mqtt");
27
38
  }
28
39
 
40
+ /**
41
+ * Start listening
42
+ */
29
43
  async start(): Promise<void> {
30
44
  this.server = Deno.serve(this.listenOptions, (req, info) => {
31
45
  const { hostname, port } = info.remoteAddr;
@@ -46,6 +60,9 @@ export class WsServer {
46
60
  await this.server.finished;
47
61
  }
48
62
 
63
+ /**
64
+ * Stop listening
65
+ */
49
66
  stop(): void {
50
67
  this.mqttServer.close(true);
51
68
  if (this.server) {
@@ -53,6 +70,9 @@ export class WsServer {
53
70
  }
54
71
  }
55
72
 
73
+ /**
74
+ * The port number the server is listening on
75
+ */
56
76
  get port(): number | undefined {
57
77
  // deno-coverage-ignore-start
58
78
  if (this.server?.addr.transport === "tcp") {
@@ -62,6 +82,9 @@ export class WsServer {
62
82
  // deno-coverage-ignore-stop
63
83
  }
64
84
 
85
+ /**
86
+ * The address the server is listening on
87
+ */
65
88
  get address(): string | undefined {
66
89
  // deno-coverage-ignore-start
67
90
  if (this.server?.addr.transport === "tcp") {
@@ -19,5 +19,5 @@ export declare const ConnectionState: {
19
19
  /**
20
20
  * @description Type representing the possible values of ConnectionState
21
21
  */
22
- export type TConnectionState = (typeof ConnectionState)[keyof typeof ConnectionState];
22
+ export type ConnectionState = (typeof ConnectionState)[keyof typeof ConnectionState];
23
23
  //# sourceMappingURL=ConnectionState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionState.d.ts","sourceRoot":"","sources":["../../client/ConnectionState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,sDAAsD;aACtD,OAAO,EAAE,SAAS;IAClB,4DAA4D;aAC5D,UAAU,EAAE,YAAY;IACxB,sCAAsC;aACtC,SAAS,EAAE,WAAW;IACtB,gDAAgD;aAChD,aAAa,EAAE,eAAe;IAC9B,mCAAmC;aACnC,YAAY,EAAE,cAAc;IAC5B,2CAA2C;aAC3C,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"ConnectionState.d.ts","sourceRoot":"","sources":["../../client/ConnectionState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,sDAAsD;aACtD,OAAO,EAAE,SAAS;IAClB,4DAA4D;aAC5D,UAAU,EAAE,YAAY;IACxB,sCAAsC;aACtC,SAAS,EAAE,WAAW;IACtB,gDAAgD;aAChD,aAAa,EAAE,eAAe;IAC9B,mCAAmC;aACnC,YAAY,EAAE,cAAc;IAC5B,2CAA2C;aAC3C,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,eAAe,GACzB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}