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.
- package/README.md +59 -572
- package/client/README.md +73 -14
- package/client/auth/crypto/aead.js +214 -0
- package/client/auth/crypto/constants.js +32 -0
- package/client/auth/crypto/encoding.js +104 -0
- package/client/auth/crypto/files.md +27 -0
- package/client/auth/crypto/kdf.js +217 -0
- package/client/auth/crypto-utils.js +118 -0
- package/client/auth/files.md +52 -0
- package/client/auth/key-recovery.js +288 -0
- package/client/auth/recovery/constants.js +37 -0
- package/client/auth/recovery/files.md +23 -0
- package/client/auth/recovery/key-derivation.js +61 -0
- package/client/auth/recovery/sss-browser.js +189 -0
- package/client/auth/share-storage.js +205 -0
- package/client/auth/storage/constants.js +18 -0
- package/client/auth/storage/db.js +132 -0
- package/client/auth/storage/files.md +27 -0
- package/client/auth/storage/keys.js +173 -0
- package/client/auth/storage/shares.js +200 -0
- package/client/browser.js +190 -23
- package/client/connectSocket.js +418 -988
- package/client/connection/README.md +23 -0
- package/client/connection/fileDownload.js +256 -0
- package/client/connection/fileHandling.js +450 -0
- package/client/connection/fileUtils.js +346 -0
- package/client/connection/files.md +71 -0
- package/client/connection/messageHandler.js +105 -0
- package/client/connection/network.js +350 -0
- package/client/connection/proxy.js +233 -0
- package/client/connection/sender.js +333 -0
- package/client/connection/state.js +321 -0
- package/client/connection/subscriptions.js +151 -0
- package/client/files.md +53 -0
- package/client/index.js +298 -142
- package/client/transports/README.md +50 -0
- package/client/transports/files.md +41 -0
- package/client/transports/streamParser.js +195 -0
- package/client/transports/streaming.js +555 -203
- package/dist/ape.js +6 -1
- package/dist/ape.js.map +4 -4
- package/index.d.ts +38 -16
- package/package.json +31 -6
- package/server/README.md +272 -67
- package/server/adapters/README.md +23 -14
- package/server/adapters/files.md +68 -0
- package/server/adapters/firebase.js +543 -160
- package/server/adapters/index.js +362 -112
- package/server/adapters/mongo.js +530 -140
- package/server/adapters/postgres.js +534 -155
- package/server/adapters/redis.js +508 -143
- package/server/adapters/supabase.js +555 -186
- package/server/client/README.md +43 -0
- package/server/client/connection.js +586 -0
- package/server/client/files.md +40 -0
- package/server/client/index.js +342 -0
- package/server/files.md +54 -0
- package/server/index.js +322 -71
- package/server/lib/README.md +26 -0
- package/server/lib/broadcast/clients.js +219 -0
- package/server/lib/broadcast/files.md +58 -0
- package/server/lib/broadcast/index.js +57 -0
- package/server/lib/broadcast/publishProxy.js +110 -0
- package/server/lib/broadcast/pubsub.js +137 -0
- package/server/lib/broadcast/sendProxy.js +103 -0
- package/server/lib/bun.js +315 -99
- package/server/lib/fileTransfer/README.md +63 -0
- package/server/lib/fileTransfer/files.md +30 -0
- package/server/lib/fileTransfer/streaming.js +435 -0
- package/server/lib/fileTransfer.js +710 -326
- package/server/lib/files.md +111 -0
- package/server/lib/httpUtils.js +283 -0
- package/server/lib/loader.js +208 -7
- package/server/lib/longPolling/README.md +63 -0
- package/server/lib/longPolling/files.md +44 -0
- package/server/lib/longPolling/getHandler.js +365 -0
- package/server/lib/longPolling/postHandler.js +327 -0
- package/server/lib/longPolling.js +174 -219
- package/server/lib/main.js +369 -532
- package/server/lib/runtimes/README.md +42 -0
- package/server/lib/runtimes/bun.js +586 -0
- package/server/lib/runtimes/files.md +56 -0
- package/server/lib/runtimes/node.js +511 -0
- package/server/lib/wiring.js +539 -98
- package/server/lib/ws/README.md +35 -0
- package/server/lib/ws/adapters/README.md +54 -0
- package/server/lib/ws/adapters/bun.js +538 -170
- package/server/lib/ws/adapters/deno.js +623 -149
- package/server/lib/ws/adapters/files.md +42 -0
- package/server/lib/ws/files.md +74 -0
- package/server/lib/ws/frames.js +532 -154
- package/server/lib/ws/index.js +207 -10
- package/server/lib/ws/server.js +385 -92
- package/server/lib/ws/socket.js +549 -181
- package/server/lib/wsProvider.js +363 -89
- package/server/plugins/binary.js +282 -0
- package/server/security/README.md +92 -0
- package/server/security/auth/README.md +319 -0
- package/server/security/auth/adapters/files.md +95 -0
- package/server/security/auth/adapters/ldap/constants.js +37 -0
- package/server/security/auth/adapters/ldap/files.md +19 -0
- package/server/security/auth/adapters/ldap/helpers.js +111 -0
- package/server/security/auth/adapters/ldap.js +353 -0
- package/server/security/auth/adapters/oauth2/constants.js +41 -0
- package/server/security/auth/adapters/oauth2/files.md +19 -0
- package/server/security/auth/adapters/oauth2/helpers.js +123 -0
- package/server/security/auth/adapters/oauth2.js +273 -0
- package/server/security/auth/adapters/opaque-handlers.js +314 -0
- package/server/security/auth/adapters/opaque.js +205 -0
- package/server/security/auth/adapters/saml/constants.js +52 -0
- package/server/security/auth/adapters/saml/files.md +19 -0
- package/server/security/auth/adapters/saml/helpers.js +74 -0
- package/server/security/auth/adapters/saml.js +173 -0
- package/server/security/auth/adapters/totp.js +703 -0
- package/server/security/auth/adapters/webauthn.js +625 -0
- package/server/security/auth/files.md +61 -0
- package/server/security/auth/framework/constants.js +27 -0
- package/server/security/auth/framework/files.md +23 -0
- package/server/security/auth/framework/handlers.js +272 -0
- package/server/security/auth/framework/socket-auth.js +177 -0
- package/server/security/auth/handlers/auth-messages.js +143 -0
- package/server/security/auth/handlers/files.md +28 -0
- package/server/security/auth/index.js +290 -0
- package/server/security/auth/mfa/crypto/aead.js +148 -0
- package/server/security/auth/mfa/crypto/constants.js +35 -0
- package/server/security/auth/mfa/crypto/files.md +27 -0
- package/server/security/auth/mfa/crypto/kdf.js +120 -0
- package/server/security/auth/mfa/crypto/utils.js +68 -0
- package/server/security/auth/mfa/crypto-utils.js +80 -0
- package/server/security/auth/mfa/files.md +77 -0
- package/server/security/auth/mfa/ledger/constants.js +75 -0
- package/server/security/auth/mfa/ledger/errors.js +73 -0
- package/server/security/auth/mfa/ledger/files.md +23 -0
- package/server/security/auth/mfa/ledger/share-record.js +32 -0
- package/server/security/auth/mfa/ledger.js +255 -0
- package/server/security/auth/mfa/recovery/constants.js +67 -0
- package/server/security/auth/mfa/recovery/files.md +19 -0
- package/server/security/auth/mfa/recovery/handlers.js +216 -0
- package/server/security/auth/mfa/recovery.js +191 -0
- package/server/security/auth/mfa/sss/constants.js +21 -0
- package/server/security/auth/mfa/sss/files.md +23 -0
- package/server/security/auth/mfa/sss/gf256.js +103 -0
- package/server/security/auth/mfa/sss/serialization.js +82 -0
- package/server/security/auth/mfa/sss.js +161 -0
- package/server/security/auth/mfa/two-of-three/constants.js +58 -0
- package/server/security/auth/mfa/two-of-three/files.md +23 -0
- package/server/security/auth/mfa/two-of-three/handlers.js +241 -0
- package/server/security/auth/mfa/two-of-three/helpers.js +71 -0
- package/server/security/auth/mfa/two-of-three.js +136 -0
- package/server/security/auth/nonce-manager.js +89 -0
- package/server/security/auth/state-machine-mfa.js +269 -0
- package/server/security/auth/state-machine.js +257 -0
- package/server/security/extractRootDomain.js +144 -16
- package/server/security/files.md +51 -0
- package/server/security/origin.js +197 -15
- package/server/security/reply.js +274 -16
- package/server/socket/README.md +119 -0
- package/server/socket/authMiddleware.js +299 -0
- package/server/socket/files.md +86 -0
- package/server/socket/open.js +154 -8
- package/server/socket/pluginHooks.js +334 -0
- package/server/socket/receive.js +184 -224
- package/server/socket/receiveContext.js +117 -0
- package/server/socket/send.js +416 -78
- package/server/socket/tagUtils.js +402 -0
- package/server/utils/README.md +19 -0
- package/server/utils/deepRequire.js +255 -30
- package/server/utils/files.md +57 -0
- package/server/utils/genId.js +182 -20
- package/server/utils/parseUserAgent.js +313 -251
- package/server/utils/userAgent/README.md +65 -0
- package/server/utils/userAgent/files.md +46 -0
- package/server/utils/userAgent/patterns.js +545 -0
- package/utils/README.md +21 -0
- package/utils/files.md +66 -0
- package/utils/jss/README.md +21 -0
- package/utils/jss/decode.js +471 -0
- package/utils/jss/encode.js +312 -0
- package/utils/jss/files.md +68 -0
- package/utils/jss/plugins.js +210 -0
- package/utils/jss.js +219 -273
- package/utils/messageHash.js +238 -35
- package/dist/api-ape.min.js +0 -2
- package/dist/api-ape.min.js.map +0 -7
- package/server/client.js +0 -311
- package/server/lib/broadcast.js +0 -146
package/server/lib/ws/index.js
CHANGED
|
@@ -1,15 +1,212 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WebSocket
|
|
3
|
-
*
|
|
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(
|
|
7
|
-
const { WebSocket, READY_STATES } = require(
|
|
8
|
-
const { OPCODES } = require(
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
+
};
|