api-ape 3.0.2 → 4.1.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 (186) hide show
  1. package/README.md +59 -572
  2. package/client/README.md +73 -14
  3. package/client/auth/crypto/aead.js +214 -0
  4. package/client/auth/crypto/constants.js +32 -0
  5. package/client/auth/crypto/encoding.js +104 -0
  6. package/client/auth/crypto/files.md +27 -0
  7. package/client/auth/crypto/kdf.js +217 -0
  8. package/client/auth/crypto-utils.js +118 -0
  9. package/client/auth/files.md +52 -0
  10. package/client/auth/key-recovery.js +288 -0
  11. package/client/auth/recovery/constants.js +37 -0
  12. package/client/auth/recovery/files.md +23 -0
  13. package/client/auth/recovery/key-derivation.js +61 -0
  14. package/client/auth/recovery/sss-browser.js +189 -0
  15. package/client/auth/share-storage.js +205 -0
  16. package/client/auth/storage/constants.js +18 -0
  17. package/client/auth/storage/db.js +132 -0
  18. package/client/auth/storage/files.md +27 -0
  19. package/client/auth/storage/keys.js +173 -0
  20. package/client/auth/storage/shares.js +200 -0
  21. package/client/browser.js +190 -23
  22. package/client/connectSocket.js +418 -988
  23. package/client/connection/README.md +23 -0
  24. package/client/connection/fileDownload.js +256 -0
  25. package/client/connection/fileHandling.js +450 -0
  26. package/client/connection/fileUtils.js +346 -0
  27. package/client/connection/files.md +71 -0
  28. package/client/connection/messageHandler.js +105 -0
  29. package/client/connection/network.js +350 -0
  30. package/client/connection/proxy.js +233 -0
  31. package/client/connection/sender.js +333 -0
  32. package/client/connection/state.js +321 -0
  33. package/client/connection/subscriptions.js +151 -0
  34. package/client/files.md +53 -0
  35. package/client/index.js +298 -142
  36. package/client/transports/README.md +50 -0
  37. package/client/transports/files.md +41 -0
  38. package/client/transports/streamParser.js +195 -0
  39. package/client/transports/streaming.js +555 -203
  40. package/dist/ape.js +6 -1
  41. package/dist/ape.js.map +4 -4
  42. package/index.d.ts +38 -16
  43. package/package.json +31 -6
  44. package/server/README.md +272 -67
  45. package/server/adapters/README.md +23 -14
  46. package/server/adapters/files.md +68 -0
  47. package/server/adapters/firebase.js +543 -160
  48. package/server/adapters/index.js +362 -112
  49. package/server/adapters/mongo.js +530 -140
  50. package/server/adapters/postgres.js +534 -155
  51. package/server/adapters/redis.js +508 -143
  52. package/server/adapters/supabase.js +555 -186
  53. package/server/client/README.md +43 -0
  54. package/server/client/connection.js +586 -0
  55. package/server/client/files.md +40 -0
  56. package/server/client/index.js +342 -0
  57. package/server/files.md +54 -0
  58. package/server/index.js +322 -71
  59. package/server/lib/README.md +26 -0
  60. package/server/lib/broadcast/clients.js +219 -0
  61. package/server/lib/broadcast/files.md +58 -0
  62. package/server/lib/broadcast/index.js +57 -0
  63. package/server/lib/broadcast/publishProxy.js +110 -0
  64. package/server/lib/broadcast/pubsub.js +137 -0
  65. package/server/lib/broadcast/sendProxy.js +103 -0
  66. package/server/lib/bun.js +315 -99
  67. package/server/lib/fileTransfer/README.md +63 -0
  68. package/server/lib/fileTransfer/files.md +30 -0
  69. package/server/lib/fileTransfer/streaming.js +435 -0
  70. package/server/lib/fileTransfer.js +710 -326
  71. package/server/lib/files.md +111 -0
  72. package/server/lib/httpUtils.js +283 -0
  73. package/server/lib/loader.js +208 -7
  74. package/server/lib/longPolling/README.md +63 -0
  75. package/server/lib/longPolling/files.md +44 -0
  76. package/server/lib/longPolling/getHandler.js +365 -0
  77. package/server/lib/longPolling/postHandler.js +327 -0
  78. package/server/lib/longPolling.js +174 -219
  79. package/server/lib/main.js +369 -532
  80. package/server/lib/runtimes/README.md +42 -0
  81. package/server/lib/runtimes/bun.js +586 -0
  82. package/server/lib/runtimes/files.md +56 -0
  83. package/server/lib/runtimes/node.js +511 -0
  84. package/server/lib/wiring.js +539 -98
  85. package/server/lib/ws/README.md +35 -0
  86. package/server/lib/ws/adapters/README.md +54 -0
  87. package/server/lib/ws/adapters/bun.js +538 -170
  88. package/server/lib/ws/adapters/deno.js +623 -149
  89. package/server/lib/ws/adapters/files.md +42 -0
  90. package/server/lib/ws/files.md +74 -0
  91. package/server/lib/ws/frames.js +532 -154
  92. package/server/lib/ws/index.js +207 -10
  93. package/server/lib/ws/server.js +385 -92
  94. package/server/lib/ws/socket.js +549 -181
  95. package/server/lib/wsProvider.js +363 -89
  96. package/server/plugins/binary.js +282 -0
  97. package/server/security/README.md +92 -0
  98. package/server/security/auth/README.md +319 -0
  99. package/server/security/auth/adapters/files.md +95 -0
  100. package/server/security/auth/adapters/ldap/constants.js +37 -0
  101. package/server/security/auth/adapters/ldap/files.md +19 -0
  102. package/server/security/auth/adapters/ldap/helpers.js +111 -0
  103. package/server/security/auth/adapters/ldap.js +353 -0
  104. package/server/security/auth/adapters/oauth2/constants.js +41 -0
  105. package/server/security/auth/adapters/oauth2/files.md +19 -0
  106. package/server/security/auth/adapters/oauth2/helpers.js +123 -0
  107. package/server/security/auth/adapters/oauth2.js +273 -0
  108. package/server/security/auth/adapters/opaque-handlers.js +314 -0
  109. package/server/security/auth/adapters/opaque.js +205 -0
  110. package/server/security/auth/adapters/saml/constants.js +52 -0
  111. package/server/security/auth/adapters/saml/files.md +19 -0
  112. package/server/security/auth/adapters/saml/helpers.js +74 -0
  113. package/server/security/auth/adapters/saml.js +173 -0
  114. package/server/security/auth/adapters/totp.js +703 -0
  115. package/server/security/auth/adapters/webauthn.js +625 -0
  116. package/server/security/auth/files.md +61 -0
  117. package/server/security/auth/framework/constants.js +27 -0
  118. package/server/security/auth/framework/files.md +23 -0
  119. package/server/security/auth/framework/handlers.js +272 -0
  120. package/server/security/auth/framework/socket-auth.js +177 -0
  121. package/server/security/auth/handlers/auth-messages.js +143 -0
  122. package/server/security/auth/handlers/files.md +28 -0
  123. package/server/security/auth/index.js +290 -0
  124. package/server/security/auth/mfa/crypto/aead.js +148 -0
  125. package/server/security/auth/mfa/crypto/constants.js +35 -0
  126. package/server/security/auth/mfa/crypto/files.md +27 -0
  127. package/server/security/auth/mfa/crypto/kdf.js +120 -0
  128. package/server/security/auth/mfa/crypto/utils.js +68 -0
  129. package/server/security/auth/mfa/crypto-utils.js +80 -0
  130. package/server/security/auth/mfa/files.md +77 -0
  131. package/server/security/auth/mfa/ledger/constants.js +75 -0
  132. package/server/security/auth/mfa/ledger/errors.js +73 -0
  133. package/server/security/auth/mfa/ledger/files.md +23 -0
  134. package/server/security/auth/mfa/ledger/share-record.js +32 -0
  135. package/server/security/auth/mfa/ledger.js +255 -0
  136. package/server/security/auth/mfa/recovery/constants.js +67 -0
  137. package/server/security/auth/mfa/recovery/files.md +19 -0
  138. package/server/security/auth/mfa/recovery/handlers.js +216 -0
  139. package/server/security/auth/mfa/recovery.js +191 -0
  140. package/server/security/auth/mfa/sss/constants.js +21 -0
  141. package/server/security/auth/mfa/sss/files.md +23 -0
  142. package/server/security/auth/mfa/sss/gf256.js +103 -0
  143. package/server/security/auth/mfa/sss/serialization.js +82 -0
  144. package/server/security/auth/mfa/sss.js +161 -0
  145. package/server/security/auth/mfa/two-of-three/constants.js +58 -0
  146. package/server/security/auth/mfa/two-of-three/files.md +23 -0
  147. package/server/security/auth/mfa/two-of-three/handlers.js +241 -0
  148. package/server/security/auth/mfa/two-of-three/helpers.js +71 -0
  149. package/server/security/auth/mfa/two-of-three.js +136 -0
  150. package/server/security/auth/nonce-manager.js +89 -0
  151. package/server/security/auth/state-machine-mfa.js +269 -0
  152. package/server/security/auth/state-machine.js +257 -0
  153. package/server/security/extractRootDomain.js +144 -16
  154. package/server/security/files.md +51 -0
  155. package/server/security/origin.js +197 -15
  156. package/server/security/reply.js +274 -16
  157. package/server/socket/README.md +119 -0
  158. package/server/socket/authMiddleware.js +299 -0
  159. package/server/socket/files.md +86 -0
  160. package/server/socket/open.js +154 -8
  161. package/server/socket/pluginHooks.js +334 -0
  162. package/server/socket/receive.js +184 -224
  163. package/server/socket/receiveContext.js +117 -0
  164. package/server/socket/send.js +416 -78
  165. package/server/socket/tagUtils.js +402 -0
  166. package/server/utils/README.md +19 -0
  167. package/server/utils/deepRequire.js +255 -30
  168. package/server/utils/files.md +57 -0
  169. package/server/utils/genId.js +182 -20
  170. package/server/utils/parseUserAgent.js +313 -251
  171. package/server/utils/userAgent/README.md +65 -0
  172. package/server/utils/userAgent/files.md +46 -0
  173. package/server/utils/userAgent/patterns.js +545 -0
  174. package/utils/README.md +21 -0
  175. package/utils/files.md +66 -0
  176. package/utils/jss/README.md +21 -0
  177. package/utils/jss/decode.js +471 -0
  178. package/utils/jss/encode.js +312 -0
  179. package/utils/jss/files.md +68 -0
  180. package/utils/jss/plugins.js +210 -0
  181. package/utils/jss.js +219 -273
  182. package/utils/messageHash.js +238 -35
  183. package/dist/api-ape.min.js +0 -2
  184. package/dist/api-ape.min.js.map +0 -7
  185. package/server/client.js +0 -311
  186. package/server/lib/broadcast.js +0 -146
@@ -1,15 +1,212 @@
1
1
  /**
2
- * WebSocket polyfill entry point
3
- * Provides WebSocketServer compatible with the ws library API
2
+ * @fileoverview WebSocket Polyfill Entry Point
3
+ *
4
+ * This module provides a pure JavaScript WebSocket implementation that is
5
+ * compatible with the popular `ws` library API. It serves as a fallback
6
+ * when native WebSocket support is not available or when running in
7
+ * environments without the `ws` package installed.
8
+ *
9
+ * The implementation is fully RFC 6455 compliant and includes:
10
+ * - **WebSocketServer**: Server-side WebSocket handling with HTTP upgrade
11
+ * - **WebSocket**: Client/connection wrapper with frame protocol
12
+ * - **Frame encoding/decoding**: Binary frame parsing and building
13
+ * - **Control frames**: Ping, pong, and close frame handling
14
+ *
15
+ * Why a Polyfill?
16
+ * - Zero external dependencies for WebSocket support
17
+ * - Consistent behavior across Node.js versions
18
+ * - Works in environments where `ws` package can't be installed
19
+ * - Lightweight alternative for simple use cases
20
+ *
21
+ * API Compatibility:
22
+ * The exported classes are designed to be drop-in replacements for the
23
+ * `ws` library, supporting the same patterns:
24
+ * - `new WebSocketServer({ noServer: true })`
25
+ * - `wss.handleUpgrade(req, socket, head, callback)`
26
+ * - `wss.on('connection', (ws, req) => { ... })`
27
+ * - `ws.send(data)`, `ws.close(code, reason)`
28
+ * - `ws.on('message', handler)`, `ws.on('close', handler)`
29
+ *
30
+ * @module server/lib/ws
31
+ * @see {@link module:server/lib/ws/server} - WebSocketServer implementation
32
+ * @see {@link module:server/lib/ws/socket} - WebSocket connection wrapper
33
+ * @see {@link module:server/lib/ws/frames} - Frame encoding/decoding
34
+ * @see {@link https://tools.ietf.org/html/rfc6455} - RFC 6455 WebSocket Protocol
35
+ *
36
+ * @example
37
+ * // Basic server setup
38
+ * const { WebSocketServer } = require('./ws')
39
+ *
40
+ * const wss = new WebSocketServer({ noServer: true })
41
+ *
42
+ * wss.on('connection', (ws, req) => {
43
+ * console.log('Client connected')
44
+ *
45
+ * ws.on('message', (data) => {
46
+ * console.log('Received:', data.toString())
47
+ * ws.send('Echo: ' + data.toString())
48
+ * })
49
+ *
50
+ * ws.on('close', () => {
51
+ * console.log('Client disconnected')
52
+ * })
53
+ * })
54
+ *
55
+ * @example
56
+ * // Integration with HTTP server
57
+ * const http = require('http')
58
+ * const { WebSocketServer } = require('./ws')
59
+ *
60
+ * const server = http.createServer()
61
+ * const wss = new WebSocketServer({ noServer: true })
62
+ *
63
+ * server.on('upgrade', (req, socket, head) => {
64
+ * if (req.url === '/ws') {
65
+ * wss.handleUpgrade(req, socket, head, (ws) => {
66
+ * wss.emit('connection', ws, req)
67
+ * })
68
+ * } else {
69
+ * socket.destroy()
70
+ * }
71
+ * })
72
+ *
73
+ * server.listen(8080)
74
+ *
75
+ * @example
76
+ * // Using OPCODES for custom frame handling
77
+ * const { OPCODES } = require('./ws')
78
+ *
79
+ * console.log(OPCODES.TEXT) // 0x01
80
+ * console.log(OPCODES.BINARY) // 0x02
81
+ * console.log(OPCODES.CLOSE) // 0x08
82
+ * console.log(OPCODES.PING) // 0x09
83
+ * console.log(OPCODES.PONG) // 0x0A
4
84
  */
5
85
 
6
- const { WebSocketServer } = require('./server')
7
- const { WebSocket, READY_STATES } = require('./socket')
8
- const { OPCODES } = require('./frames')
86
+ const { WebSocketServer } = require("./server");
87
+ const { WebSocket, READY_STATES } = require("./socket");
88
+ const { OPCODES } = require("./frames");
89
+
90
+ /**
91
+ * WebSocket ready state constants.
92
+ *
93
+ * These constants represent the possible states of a WebSocket connection,
94
+ * matching the standard WebSocket API.
95
+ *
96
+ * @type {Object}
97
+ * @property {number} CONNECTING - Connection is being established (0)
98
+ * @property {number} OPEN - Connection is open and ready to communicate (1)
99
+ * @property {number} CLOSING - Connection is in the process of closing (2)
100
+ * @property {number} CLOSED - Connection is closed (3)
101
+ *
102
+ * @example
103
+ * if (ws.readyState === READY_STATES.OPEN) {
104
+ * ws.send('Hello')
105
+ * }
106
+ *
107
+ * @example
108
+ * switch (ws.readyState) {
109
+ * case READY_STATES.CONNECTING:
110
+ * console.log('Connecting...')
111
+ * break
112
+ * case READY_STATES.OPEN:
113
+ * console.log('Connected!')
114
+ * break
115
+ * case READY_STATES.CLOSING:
116
+ * console.log('Closing...')
117
+ * break
118
+ * case READY_STATES.CLOSED:
119
+ * console.log('Closed')
120
+ * break
121
+ * }
122
+ */
123
+
124
+ /**
125
+ * WebSocket frame opcodes as defined in RFC 6455.
126
+ *
127
+ * These opcodes identify the type of each WebSocket frame:
128
+ * - Data frames: TEXT (0x01), BINARY (0x02)
129
+ * - Control frames: CLOSE (0x08), PING (0x09), PONG (0x0A)
130
+ * - CONTINUATION (0x00) for fragmented messages
131
+ *
132
+ * @type {Object}
133
+ * @property {number} CONTINUATION - Continuation frame (0x00)
134
+ * @property {number} TEXT - Text data frame (0x01)
135
+ * @property {number} BINARY - Binary data frame (0x02)
136
+ * @property {number} CLOSE - Connection close frame (0x08)
137
+ * @property {number} PING - Ping frame (0x09)
138
+ * @property {number} PONG - Pong frame (0x0A)
139
+ *
140
+ * @example
141
+ * const { OPCODES, buildFrame } = require('./ws/frames')
142
+ *
143
+ * // Build a text frame
144
+ * const textFrame = buildFrame('Hello', OPCODES.TEXT)
145
+ *
146
+ * // Build a binary frame
147
+ * const binaryFrame = buildFrame(buffer, OPCODES.BINARY)
148
+ */
9
149
 
10
150
  module.exports = {
11
- WebSocketServer,
12
- WebSocket,
13
- READY_STATES,
14
- OPCODES
15
- }
151
+ /**
152
+ * WebSocket server class for handling WebSocket connections.
153
+ *
154
+ * Handles HTTP upgrade requests and manages connected clients.
155
+ * Compatible with the `ws` library's WebSocketServer API.
156
+ *
157
+ * @type {typeof import('./server').WebSocketServer}
158
+ *
159
+ * @example
160
+ * const wss = new WebSocketServer({ noServer: true })
161
+ *
162
+ * wss.on('connection', (ws, req) => {
163
+ * console.log('New connection from:', req.socket.remoteAddress)
164
+ * })
165
+ *
166
+ * // Get all connected clients
167
+ * console.log('Connected clients:', wss.clients.size)
168
+ */
169
+ WebSocketServer,
170
+
171
+ /**
172
+ * WebSocket connection class wrapping a TCP socket.
173
+ *
174
+ * Provides the standard WebSocket interface for sending/receiving
175
+ * messages and handling connection events.
176
+ *
177
+ * @type {typeof import('./socket').WebSocket}
178
+ *
179
+ * @example
180
+ * // WebSocket is typically created by WebSocketServer.handleUpgrade()
181
+ * wss.handleUpgrade(req, socket, head, (ws) => {
182
+ * ws.send('Welcome!')
183
+ *
184
+ * ws.on('message', (data) => {
185
+ * console.log('Received:', data)
186
+ * })
187
+ *
188
+ * ws.on('close', (code, reason) => {
189
+ * console.log('Closed:', code, reason)
190
+ * })
191
+ *
192
+ * ws.on('error', (err) => {
193
+ * console.error('Error:', err)
194
+ * })
195
+ * })
196
+ */
197
+ WebSocket,
198
+
199
+ /**
200
+ * WebSocket ready state constants.
201
+ *
202
+ * @type {{ CONNECTING: 0, OPEN: 1, CLOSING: 2, CLOSED: 3 }}
203
+ */
204
+ READY_STATES,
205
+
206
+ /**
207
+ * WebSocket frame opcode constants.
208
+ *
209
+ * @type {{ CONTINUATION: 0x00, TEXT: 0x01, BINARY: 0x02, CLOSE: 0x08, PING: 0x09, PONG: 0x0A }}
210
+ */
211
+ OPCODES,
212
+ };