@vex-chat/spire 0.7.4 → 1.0.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 +82 -26
- package/dist/ClientManager.d.ts +24 -25
- package/dist/ClientManager.js +232 -509
- package/dist/ClientManager.js.map +1 -0
- package/dist/Database.d.ts +49 -41
- package/dist/Database.js +698 -716
- package/dist/Database.js.map +1 -0
- package/dist/Spire.d.ts +23 -15
- package/dist/Spire.js +518 -218
- package/dist/Spire.js.map +1 -0
- package/dist/__tests__/Database.spec.js +113 -73
- package/dist/__tests__/Database.spec.js.map +1 -0
- package/dist/db/schema.d.ts +134 -0
- package/dist/db/schema.js +2 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -0
- package/dist/middleware/validate.d.ts +12 -0
- package/dist/middleware/validate.js +35 -0
- package/dist/middleware/validate.js.map +1 -0
- package/dist/migrations/2026-04-06_initial-schema.d.ts +3 -0
- package/dist/migrations/2026-04-06_initial-schema.js +192 -0
- package/dist/migrations/2026-04-06_initial-schema.js.map +1 -0
- package/dist/run.js +26 -21
- package/dist/run.js.map +1 -0
- package/dist/server/avatar.d.ts +3 -4
- package/dist/server/avatar.js +85 -67
- package/dist/server/avatar.js.map +1 -0
- package/dist/server/errors.d.ts +59 -0
- package/dist/server/errors.js +94 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/file.d.ts +3 -4
- package/dist/server/file.js +101 -61
- package/dist/server/file.js.map +1 -0
- package/dist/server/index.d.ts +9 -6
- package/dist/server/index.js +595 -70
- package/dist/server/index.js.map +1 -0
- package/dist/server/invite.d.ts +4 -5
- package/dist/server/invite.js +21 -103
- package/dist/server/invite.js.map +1 -0
- package/dist/server/openapi.d.ts +2 -0
- package/dist/server/openapi.js +40 -0
- package/dist/server/openapi.js.map +1 -0
- package/dist/server/permissions.d.ts +16 -0
- package/dist/server/permissions.js +22 -0
- package/dist/server/permissions.js.map +1 -0
- package/dist/server/rateLimit.d.ts +28 -0
- package/dist/server/rateLimit.js +58 -0
- package/dist/server/rateLimit.js.map +1 -0
- package/dist/server/user.d.ts +4 -7
- package/dist/server/user.js +66 -76
- package/dist/server/user.js.map +1 -0
- package/dist/server/utils.d.ts +35 -7
- package/dist/server/utils.js +50 -6
- package/dist/server/utils.js.map +1 -0
- package/dist/types/express.d.ts +20 -0
- package/dist/types/express.js +2 -0
- package/dist/types/express.js.map +1 -0
- package/dist/utils/createLogger.js +13 -19
- package/dist/utils/createLogger.js.map +1 -0
- package/dist/utils/createUint8UUID.js +6 -10
- package/dist/utils/createUint8UUID.js.map +1 -0
- package/dist/utils/jwtSecret.d.ts +7 -0
- package/dist/utils/jwtSecret.js +15 -0
- package/dist/utils/jwtSecret.js.map +1 -0
- package/dist/utils/loadEnv.js +7 -22
- package/dist/utils/loadEnv.js.map +1 -0
- package/dist/utils/msgpack.d.ts +2 -0
- package/dist/utils/msgpack.js +4 -0
- package/dist/utils/msgpack.js.map +1 -0
- package/package.json +91 -63
- package/src/ClientManager.ts +434 -0
- package/src/Database.ts +925 -0
- package/src/Spire.ts +878 -0
- package/src/__tests__/Database.spec.ts +167 -0
- package/src/ambient-modules.d.ts +1 -0
- package/src/db/schema.ts +165 -0
- package/src/index.ts +3 -0
- package/src/middleware/validate.ts +38 -0
- package/src/migrations/2026-04-06_initial-schema.ts +218 -0
- package/src/run.ts +37 -0
- package/src/server/avatar.ts +141 -0
- package/src/server/errors.ts +133 -0
- package/src/server/file.ts +172 -0
- package/src/server/index.ts +855 -0
- package/src/server/invite.ts +65 -0
- package/src/server/openapi.ts +51 -0
- package/src/server/permissions.ts +40 -0
- package/src/server/rateLimit.ts +86 -0
- package/src/server/user.ts +125 -0
- package/src/server/utils.ts +59 -0
- package/src/types/express.ts +23 -0
- package/src/utils/createLogger.ts +47 -0
- package/src/utils/createUint8UUID.ts +9 -0
- package/src/utils/jwtSecret.ts +16 -0
- package/src/utils/loadEnv.ts +15 -0
- package/src/utils/msgpack.ts +4 -0
- package/avatars/169d76cb-6e7c-4e24-8224-017673eed8ff +0 -0
- package/avatars/1cae8d0b-0c6b-4c73-b25c-2d2349a57122 +0 -0
- package/avatars/1d87bc2b-71fc-4818-8004-40d04093e5fc +0 -0
- package/avatars/1f2c3d62-8b4d-465a-9895-51a24caef00d +0 -0
- package/avatars/245ee7fc-1004-41ab-adab-a04c9ceb9d7a +0 -0
- package/avatars/2465c28c-bdaf-4fa2-b42a-d054f04dc39b +0 -0
- package/avatars/3900a674-a2dd-4996-a61d-8c29b3270f41 +0 -0
- package/avatars/3c3b9c77-ea50-45e7-bb25-65d6f3d2a219 +0 -0
- package/avatars/414a2ff4-ad2f-4a7d-aa27-3b09ad3522b2 +0 -0
- package/avatars/522fe504-f0ad-4ed4-9dc6-e5dc2338e531 +0 -0
- package/avatars/53e5eb29-e7d1-4d58-add9-d44f39f0cfb7 +0 -0
- package/avatars/54d3f757-1038-41c8-bfb9-efd37b6e8ebe +0 -0
- package/avatars/623e86d7-c49c-46f6-9b76-ca70c9dbc43b +0 -0
- package/avatars/66e2abae-60f5-4dd1-b9fb-297a4bedfeb0 +0 -0
- package/avatars/6f37980e-f6fa-4d6d-9206-24050b403f45 +0 -0
- package/avatars/80138ece-eb5c-4b20-817b-903d6b0f54ae +0 -0
- package/avatars/841c77d3-37c4-431b-be22-672888062874 +0 -0
- package/avatars/88051a61-2bda-4750-95a3-5fb0b4918149 +0 -0
- package/avatars/89540973-c421-4bf1-8b89-9f1eaa51c1b5 +0 -0
- package/avatars/8a802fad-8c99-4942-8f80-47cec600149c +0 -0
- package/avatars/90531d8a-907a-4a1a-ac45-c85e4acb0df9 +0 -0
- package/avatars/9b7d0da9-b8d6-4801-b128-9993f79f464a +0 -0
- package/avatars/9bc456f1-c4c4-48a1-b9e6-fd44dd744a72 +0 -0
- package/avatars/9cf878bf-7430-49ec-a47a-78f3c93793dd +0 -0
- package/avatars/9ee82847-6ad3-45e5-92b9-f474a6c54d96 +0 -0
- package/avatars/ab44c857-d81d-4c88-85db-32f9532e5376 +0 -0
- package/avatars/b396a8d2-dc14-48d2-aac4-3755dc637051 +0 -0
- package/avatars/b6ac11c5-a8b2-4e0a-995a-9c87f1e58787 +0 -0
- package/avatars/b79d6855-b738-434c-be32-809637e62b9b +0 -0
- package/avatars/bbcd0188-d6a5-48ae-90fb-be5ff30599ab +0 -0
- package/avatars/bc7a9e0e-4720-4a6e-a90d-c11fec94d380 +0 -0
- package/avatars/c1c4889f-8383-4041-8bdd-9fded4046f37 +0 -0
- package/avatars/c4c7203c-d93a-4749-ade2-17053acf1d2a +0 -0
- package/avatars/ca974a70-0a23-4668-8b80-c4304dc7f793 +0 -0
- package/avatars/cf119a0d-eb3f-4bed-905b-f14a876c3535 +0 -0
- package/avatars/d464b03d-30c2-49e3-a666-80aefa8a1b35 +0 -0
- package/avatars/da0eee89-82f0-4d45-ab48-7d2786b634c5 +0 -0
- package/avatars/de4c77a5-68e9-4bb2-b40d-d964bf377d61 +0 -0
- package/avatars/dea95395-7d0b-42aa-a9ed-40c7d4fb4c48 +0 -0
- package/avatars/edb30749-59ba-4aa2-9c52-0fb22048f4cf +0 -0
- package/avatars/f17c245a-af7d-445b-9365-49f7f54b1eeb +0 -0
- package/avatars/f1ee6a35-b262-4dbf-99f5-3d011e3b98ec +0 -0
- package/avatars/f802bdd0-345d-41f6-9184-0f30e1258fb3 +0 -0
- package/dist/migrations/20210103192527_users.d.ts +0 -3
- package/dist/migrations/20210103192527_users.js +0 -30
- package/dist/migrations/20210103193502_mail.d.ts +0 -3
- package/dist/migrations/20210103193502_mail.js +0 -35
- package/dist/migrations/20210103193525_preKeys.d.ts +0 -3
- package/dist/migrations/20210103193525_preKeys.js +0 -30
- package/dist/migrations/20210103193553_oneTimeKeys.d.ts +0 -3
- package/dist/migrations/20210103193553_oneTimeKeys.js +0 -30
- package/dist/migrations/20210103193615_servers.d.ts +0 -3
- package/dist/migrations/20210103193615_servers.js +0 -28
- package/dist/migrations/20210103193729_channels.d.ts +0 -3
- package/dist/migrations/20210103193729_channels.js +0 -28
- package/dist/migrations/20210103193749_permissions.d.ts +0 -3
- package/dist/migrations/20210103193749_permissions.js +0 -30
- package/dist/migrations/20210103193801_files.d.ts +0 -3
- package/dist/migrations/20210103193801_files.js +0 -28
- package/files/00ea7368-45a7-4f6a-a199-974da14be1a0 +0 -0
- package/files/039503d2-a170-4962-b921-c97994ba64ff +0 -0
- package/files/14b6fa02-4cbb-40df-be4f-a07187cb619e +0 -0
- package/files/15c04cb1-dc6a-4f19-aa6f-4a3b92d05bf7 +0 -0
- package/files/2a8d411c-8b92-4532-b84d-d64c638d6293 +0 -0
- package/files/37de2cd3-08a8-4044-9c37-e13386765f3d +0 -0
- package/files/42452029-284e-4c81-9f18-feb6ce309eed +0 -0
- package/files/43d09f2f-29c8-415f-8c4a-23f2a32eb79e +0 -0
- package/files/52992923-33ab-44a1-8118-605e9b4856a7 +0 -0
- package/files/53180681-36e2-49c0-8382-94dca0da09bf +0 -0
- package/files/5a56cd7b-1d04-4619-b60f-1e5515b9164a +0 -0
- package/files/5ced7676-20c4-4219-a4f2-70a25eb7eea8 +0 -0
- package/files/60e787ff-8ec5-444d-b963-0aaf5313b53e +0 -0
- package/files/67a17729-fcb7-4339-9499-1fc08fea72ca +0 -0
- package/files/68d09565-908d-4a67-8f09-e183f8708eb4 +0 -0
- package/files/70e587c5-56e8-47f0-bd36-691efcb0cc2e +0 -4
- package/files/7a227619-b715-4e2c-a79d-b2158d56a799 +0 -0
- package/files/7e3cc3ea-b706-4835-994d-65d33acaf369 +0 -0
- package/files/816f72a0-65dc-40c1-8862-1d22065cca3c +0 -0
- package/files/8bf84972-5086-4631-a752-093d7b1a098b +0 -0
- package/files/8c46e3bc-3f2e-441d-b8cc-17428fc3d219 +0 -0
- package/files/8eb83364-8826-4eee-895a-ba5cd3ab85e9 +0 -0
- package/files/8faefaea-14e3-49e4-ac74-9710622bfae9 +0 -0
- package/files/91af08c2-9dca-41f4-b6c6-b7bf33505df9 +0 -0
- package/files/9349dffa-35dd-49a0-a651-10b438038f95 +0 -0
- package/files/b0a12a41-6283-4f27-b2c8-66774991d96c +0 -0
- package/files/b28afb08-d18b-48a8-93c3-6a59c66d8fee +0 -0
- package/files/be60fe01-1578-4363-a908-41500092b77d +0 -0
- package/files/cf7b90e3-734a-4453-9ff3-9a331404b5ef +0 -0
- package/files/d1be30aa-8ff4-41c1-b360-f65922029047 +0 -0
- package/files/d2d31a57-a413-443c-9b97-fa9ca394ef0b +0 -0
- package/files/d357f223-b786-478d-a113-b53cb62acdab +0 -0
- package/files/d4a69ee0-05c4-4ff0-8753-624cdd0f24e9 +0 -0
- package/files/d57f411b-1874-4f00-a6b0-2f86de6b229d +0 -0
- package/files/d85aaa33-7f70-4a70-b3d2-cad667beb38c +0 -0
- package/files/db2fc236-dbe0-4d24-bfaf-884829fd090a +0 -0
- package/files/df2e20ec-6dcc-4402-94ee-7d1163f84197 +0 -0
- package/files/e0880ab5-6d49-4dc0-a5ec-0d3793a8a7b8 +0 -0
- package/files/e59ee9c6-5aea-48ea-b3d9-94a324dc2260 +0 -0
- package/files/e6d7aad6-4220-4ce7-85f8-89d0b1f0cc89 +0 -0
- package/files/f0bfc98c-3534-459d-931a-7c6e77bde153 +0 -0
- package/files/f8443740-050c-4714-9bf6-334783ae6ffd +0 -0
- package/files/fc405ae7-f9fb-455d-ac8c-0ca0d88d4115 +0 -0
- package/jest.config.js +0 -13
- package/spire.sqlite +0 -0
package/README.md
CHANGED
|
@@ -1,50 +1,106 @@
|
|
|
1
|
-
# spire
|
|
1
|
+
# @vex-chat/spire
|
|
2
2
|
|
|
3
|
-
](https://www.npmjs.com/package/@vex-chat/spire)
|
|
4
|
+
[](https://github.com/vex-protocol/spire/actions/workflows/build.yml)
|
|
5
|
+
[](https://github.com/vex-protocol/spire/releases)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
[](https://github.com/plantain-00/type-coverage)
|
|
8
|
+
[](./package.json)
|
|
9
|
+
[](https://securityscorecards.dev/viewer/?uri=github.com/vex-protocol/spire)
|
|
10
|
+
[](https://socket.dev/npm/package/@vex-chat/spire)
|
|
4
11
|
|
|
5
|
-
|
|
12
|
+
Reference server implementation for the [Vex](https://vex.wtf) encrypted chat platform. NodeJS + SQLite + TypeScript, running the wire protocol defined in [@vex-chat/types](https://github.com/vex-protocol/types-js).
|
|
6
13
|
|
|
7
|
-
##
|
|
14
|
+
## What's in the box
|
|
8
15
|
|
|
9
|
-
|
|
16
|
+
- **REST API** (Express 5) for auth, registration, users, servers, channels, invites, and file upload.
|
|
17
|
+
- **WebSocket server** (native `ws`) for real-time messaging, presence, and push notifications. Frames are msgpack-encoded per the AsyncAPI spec in `@vex-chat/types`.
|
|
18
|
+
- **SQLite persistence** via Kysely + better-sqlite3. Single-file DB, zero external services.
|
|
19
|
+
- **Runtime validation** on every trust boundary: every request body, query string, and WebSocket payload is parsed through a Zod schema before any logic runs.
|
|
20
|
+
- **Interactive docs** — [Scalar](https://scalar.com) at `/docs` for the OpenAPI spec, the [AsyncAPI web component](https://www.asyncapi.com) at `/async-docs` for the WebSocket protocol. Both production-gated for security.
|
|
21
|
+
- **Authentication** via `@vex-chat/crypto` signing keys plus JWT session tokens. Password hashing via native `node:crypto` PBKDF2.
|
|
10
22
|
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
From public npm:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npm install @vex-chat/spire
|
|
11
29
|
```
|
|
12
|
-
|
|
30
|
+
|
|
31
|
+
Or clone the repo:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
git clone git@github.com:vex-protocol/spire
|
|
13
35
|
cd spire
|
|
36
|
+
npm ci
|
|
14
37
|
```
|
|
15
38
|
|
|
16
|
-
|
|
39
|
+
## Running the server
|
|
17
40
|
|
|
18
|
-
|
|
41
|
+
Spire runs directly from source via `node --experimental-strip-types` — no pre-compile step needed in dev or prod. From a clone:
|
|
19
42
|
|
|
43
|
+
```sh
|
|
44
|
+
npm start
|
|
20
45
|
```
|
|
21
|
-
SQL_HOST=localhost
|
|
22
|
-
SQL_PORT=3306
|
|
23
|
-
SQL_PASSWORD=hunter2
|
|
24
|
-
SQL_USER=vex
|
|
25
|
-
SQL_DB_NAME=spire
|
|
26
|
-
DB_TYPE=mysql
|
|
27
46
|
|
|
28
|
-
|
|
29
|
-
SOCKET_PORT=16778
|
|
47
|
+
Or equivalently:
|
|
30
48
|
|
|
31
|
-
|
|
49
|
+
```sh
|
|
50
|
+
node --experimental-strip-types src/run.ts
|
|
32
51
|
```
|
|
33
52
|
|
|
34
|
-
|
|
53
|
+
From an npm install, the source ships in the tarball under `node_modules/@vex-chat/spire/src/`, so you can run it directly:
|
|
35
54
|
|
|
55
|
+
```sh
|
|
56
|
+
node --experimental-strip-types node_modules/@vex-chat/spire/src/run.ts
|
|
36
57
|
```
|
|
37
|
-
DB_TYPE=sqlite3
|
|
38
58
|
|
|
39
|
-
|
|
40
|
-
SOCKET_PORT=16778
|
|
59
|
+
## Configuration
|
|
41
60
|
|
|
42
|
-
|
|
43
|
-
|
|
61
|
+
Spire reads configuration from environment variables. Use a `.env` file at the repo root (or wherever you run it from) — `dotenv` picks it up automatically.
|
|
62
|
+
|
|
63
|
+
### Required
|
|
44
64
|
|
|
45
|
-
|
|
65
|
+
| Variable | Description |
|
|
66
|
+
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
67
|
+
| `SPK` | Server private key, hex-encoded. Generate one with `npm run gen-spk`. Used for server identity signing and as the default JWT secret if `JWT_SECRET` isn't set. |
|
|
68
|
+
| `DB_TYPE` | `sqlite`, `sqlite3`, or `sqlite3mem`. Controls database backend. `sqlite3mem` runs an in-memory database useful for tests. (MySQL support was removed in `1.0.0`; operators on older deploys should migrate out.) |
|
|
69
|
+
| `CANARY` | `true` to enable canary mode (runs extra runtime assertions). `false` for standard production. |
|
|
46
70
|
|
|
71
|
+
### Optional
|
|
72
|
+
|
|
73
|
+
| Variable | Default | Description |
|
|
74
|
+
| ------------ | ------------- | -------------------------------------------------------------------------------------------------- |
|
|
75
|
+
| `API_PORT` | `16777` | Port for the REST API and WebSocket server. |
|
|
76
|
+
| `NODE_ENV` | `development` | `production` enables hardened Helmet CSP and disables interactive `/docs` / `/async-docs` viewers. |
|
|
77
|
+
| `JWT_SECRET` | `SPK` | Override the JWT signing secret. Falls back to `SPK` if unset. |
|
|
78
|
+
|
|
79
|
+
### Sample `.env`
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
SPK=a1b2c3... # generate with `npm run gen-spk`
|
|
83
|
+
DB_TYPE=sqlite
|
|
84
|
+
CANARY=false
|
|
85
|
+
API_PORT=16777
|
|
86
|
+
NODE_ENV=production
|
|
47
87
|
```
|
|
48
|
-
|
|
49
|
-
|
|
88
|
+
|
|
89
|
+
## Development
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
npm run build # tsc (sanity check — runtime uses --experimental-strip-types)
|
|
93
|
+
npm run lint # eslint strictTypeChecked
|
|
94
|
+
npm run lint:fix # eslint --fix
|
|
95
|
+
npm run format # prettier --write
|
|
96
|
+
npm run format:check
|
|
97
|
+
npm test # vitest run
|
|
98
|
+
npx type-coverage # type-coverage (≥95%)
|
|
99
|
+
npm run license:check # license allowlist gate
|
|
50
100
|
```
|
|
101
|
+
|
|
102
|
+
See [AGENTS.md](./AGENTS.md) for the release flow (changesets → publish → deploy-hook) and the rules for writing changesets.
|
|
103
|
+
|
|
104
|
+
## License
|
|
105
|
+
|
|
106
|
+
[AGPL-3.0-or-later](./LICENSE)
|
package/dist/ClientManager.d.ts
CHANGED
|
@@ -1,45 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
import type { Database } from "./Database.ts";
|
|
2
|
+
import type { BaseMsg, Device, User, UserRecord } from "@vex-chat/types";
|
|
3
|
+
import type WebSocket from "ws";
|
|
3
4
|
import { EventEmitter } from "events";
|
|
4
|
-
import
|
|
5
|
-
import { Database } from "./Database";
|
|
6
|
-
import { ICensoredUser } from "./server/utils";
|
|
7
|
-
import { ISpireOptions } from "./Spire";
|
|
5
|
+
import { type SpireOptions } from "./Spire.ts";
|
|
8
6
|
export declare const POWER_LEVELS: {
|
|
9
|
-
INVITE: number;
|
|
10
7
|
CREATE: number;
|
|
11
8
|
DELETE: number;
|
|
9
|
+
EMOJI: number;
|
|
10
|
+
INVITE: number;
|
|
12
11
|
};
|
|
13
12
|
export declare class ClientManager extends EventEmitter {
|
|
14
|
-
private authed;
|
|
15
13
|
private alive;
|
|
16
|
-
private
|
|
14
|
+
private authed;
|
|
17
15
|
private challengeID;
|
|
18
|
-
private
|
|
16
|
+
private conn;
|
|
19
17
|
private db;
|
|
20
|
-
private user;
|
|
21
|
-
private jwtDetails;
|
|
22
18
|
private device;
|
|
19
|
+
private failed;
|
|
23
20
|
private log;
|
|
24
21
|
private notify;
|
|
25
|
-
|
|
22
|
+
private user;
|
|
23
|
+
private userDetails;
|
|
24
|
+
constructor(ws: WebSocket, db: Database, notify: (userID: string, event: string, transmissionID: string) => void, userDetails: User, options?: SpireOptions);
|
|
25
|
+
getDevice(): Device;
|
|
26
|
+
getUser(): UserRecord;
|
|
27
|
+
send(msg: BaseMsg, header?: Uint8Array): void;
|
|
26
28
|
toString(): string;
|
|
27
|
-
getUser(): XTypes.SQL.IUser;
|
|
28
|
-
send(msg: any, header?: Uint8Array): Promise<void>;
|
|
29
|
-
getDevice(): XTypes.SQL.IDevice;
|
|
30
29
|
private authorize;
|
|
31
|
-
private
|
|
30
|
+
private challenge;
|
|
32
31
|
private fail;
|
|
33
|
-
private
|
|
34
|
-
private
|
|
32
|
+
private handleReceipt;
|
|
33
|
+
private initListeners;
|
|
34
|
+
private parseResourceMsg;
|
|
35
35
|
private ping;
|
|
36
|
+
private pingLoop;
|
|
36
37
|
private pong;
|
|
37
|
-
private verifyResponse;
|
|
38
|
-
private challenge;
|
|
39
|
-
private sendErr;
|
|
40
38
|
private sendAuthedMessage;
|
|
39
|
+
private sendAuthError;
|
|
40
|
+
private sendErr;
|
|
41
41
|
private sendSuccess;
|
|
42
|
-
private
|
|
43
|
-
private
|
|
44
|
-
private initListeners;
|
|
42
|
+
private setAlive;
|
|
43
|
+
private verifyResponse;
|
|
45
44
|
}
|