@eleven-am/pondsocket-client 0.0.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/browser/client.d.ts +34 -0
- package/browser/client.js +105 -0
- package/browser/client.test.d.ts +1 -0
- package/browser/client.test.js +123 -0
- package/core/channel.d.ts +125 -0
- package/core/channel.js +302 -0
- package/core/channel.test.d.ts +1 -0
- package/core/channel.test.js +762 -0
- package/index.d.ts +3 -0
- package/index.js +8 -0
- package/node/node.d.ts +7 -0
- package/node/node.js +31 -0
- package/package.json +66 -0
- package/types.d.ts +54 -0
- package/types.js +2 -0
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const client_1 = __importDefault(require("./browser/client"));
|
|
7
|
+
const node_1 = __importDefault(require("./node/node"));
|
|
8
|
+
exports.default = typeof window === 'undefined' ? node_1.default : client_1.default;
|
package/node/node.d.ts
ADDED
package/node/node.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const client_1 = __importDefault(require("../browser/client"));
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
8
|
+
const WebSocket = require('websocket').w3cwebsocket;
|
|
9
|
+
class PondClient extends client_1.default {
|
|
10
|
+
/**
|
|
11
|
+
* @desc Connects to the server and returns the socket.
|
|
12
|
+
*/
|
|
13
|
+
connect(backoff = 1) {
|
|
14
|
+
const socket = new WebSocket(this._address.toString());
|
|
15
|
+
socket.onopen = () => {
|
|
16
|
+
this._connectionState.publish(true);
|
|
17
|
+
};
|
|
18
|
+
socket.onmessage = (message) => {
|
|
19
|
+
const data = JSON.parse(message.data);
|
|
20
|
+
this._broadcaster.publish(data);
|
|
21
|
+
};
|
|
22
|
+
socket.onerror = () => {
|
|
23
|
+
this._connectionState.publish(false);
|
|
24
|
+
setTimeout(() => {
|
|
25
|
+
this.connect(backoff * 2);
|
|
26
|
+
}, backoff * 1000);
|
|
27
|
+
};
|
|
28
|
+
this._socket = socket;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.default = PondClient;
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@eleven-am/pondsocket-client",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "PondSocket is a fast simple socket server",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"socket",
|
|
7
|
+
"server",
|
|
8
|
+
"ws",
|
|
9
|
+
"websocket",
|
|
10
|
+
"pubsub",
|
|
11
|
+
"presence",
|
|
12
|
+
"realtime",
|
|
13
|
+
"realtime server"
|
|
14
|
+
],
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"author": "Roy OSSAI",
|
|
19
|
+
"main": "./index.js",
|
|
20
|
+
"types": "./index.d.ts",
|
|
21
|
+
"license": "GPL-3.0",
|
|
22
|
+
"scripts": {
|
|
23
|
+
"test": "jest --coverage --verbose",
|
|
24
|
+
"build": "rimraf dist && tsc",
|
|
25
|
+
"lint": "eslint --ext .ts src",
|
|
26
|
+
"lint:fix": "eslint --fix --ext .ts src",
|
|
27
|
+
"push": "npm version patch && cp package.json dist && cd dist && npm publish && cd ..",
|
|
28
|
+
"pipeline": "npm run lint && npm run test && npm run build && npm run push"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@eleven-am/pondsocket-common": "^0.0.5",
|
|
32
|
+
"websocket": "^1.0.34",
|
|
33
|
+
"zod": "^3.22.4"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/jest": "^29.5.11",
|
|
37
|
+
"@types/websocket": "^1.0.10",
|
|
38
|
+
"@typescript-eslint/eslint-plugin": "^6.17.0",
|
|
39
|
+
"eslint-plugin-file-progress": "^1.3.0",
|
|
40
|
+
"eslint-plugin-import": "^2.29.1",
|
|
41
|
+
"jest": "^29.7.0",
|
|
42
|
+
"prettier": "^3.1.1",
|
|
43
|
+
"supertest": "^6.3.3",
|
|
44
|
+
"ts-jest": "^29.1.1",
|
|
45
|
+
"ts-loader": "^9.5.1",
|
|
46
|
+
"ts-node": "^10.9.2",
|
|
47
|
+
"typescript": "^5.3.3"
|
|
48
|
+
},
|
|
49
|
+
"jest": {
|
|
50
|
+
"moduleFileExtensions": [
|
|
51
|
+
"js",
|
|
52
|
+
"json",
|
|
53
|
+
"ts"
|
|
54
|
+
],
|
|
55
|
+
"rootDir": "src",
|
|
56
|
+
"testRegex": ".*\\.test\\.ts$",
|
|
57
|
+
"transform": {
|
|
58
|
+
"^.+\\.(t|j)s$": "ts-jest"
|
|
59
|
+
},
|
|
60
|
+
"collectCoverageFrom": [
|
|
61
|
+
"**/*.(t|j)s"
|
|
62
|
+
],
|
|
63
|
+
"coverageDirectory": "../coverage",
|
|
64
|
+
"testEnvironment": "node"
|
|
65
|
+
}
|
|
66
|
+
}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ChannelReceiver, PresenceEventTypes, ClientActions } from '@eleven-am/pondsocket-common';
|
|
2
|
+
export type Unsubscribe = () => void;
|
|
3
|
+
export interface ClientMessage {
|
|
4
|
+
addresses: ChannelReceivers | string[];
|
|
5
|
+
action: ClientActions;
|
|
6
|
+
event: string;
|
|
7
|
+
payload: PondMessage;
|
|
8
|
+
channelName: string;
|
|
9
|
+
requestId: string;
|
|
10
|
+
}
|
|
11
|
+
type Primitives = number | string | boolean | null | undefined;
|
|
12
|
+
type PondObject = {
|
|
13
|
+
[key: string]: Primitives | PondObject | PondObject[];
|
|
14
|
+
};
|
|
15
|
+
export type PondPresence = PondObject;
|
|
16
|
+
export type PondMessage = PondObject;
|
|
17
|
+
export type PondAssigns = PondObject;
|
|
18
|
+
export type JoinParams = PondObject;
|
|
19
|
+
export interface PresencePayload extends PondObject {
|
|
20
|
+
changed: PondPresence;
|
|
21
|
+
presence: PondPresence[];
|
|
22
|
+
}
|
|
23
|
+
export interface UserPresences {
|
|
24
|
+
[userId: string]: PondPresence;
|
|
25
|
+
}
|
|
26
|
+
export interface UserAssigns {
|
|
27
|
+
[userId: string]: PondAssigns;
|
|
28
|
+
}
|
|
29
|
+
export type ChannelReceivers = ChannelReceiver | string[];
|
|
30
|
+
export interface Event {
|
|
31
|
+
action: 'SYSTEM' | 'BROADCAST' | 'ERROR';
|
|
32
|
+
event: string;
|
|
33
|
+
payload: PondMessage;
|
|
34
|
+
channelName: string;
|
|
35
|
+
requestId: string;
|
|
36
|
+
}
|
|
37
|
+
interface PresenceEventMessage {
|
|
38
|
+
action: 'PRESENCE';
|
|
39
|
+
event: PresenceEventTypes;
|
|
40
|
+
channelName: string;
|
|
41
|
+
payload: PresencePayload;
|
|
42
|
+
requestId: string;
|
|
43
|
+
}
|
|
44
|
+
export type ChannelEvent = Event | PresenceEventMessage;
|
|
45
|
+
export type Publisher = (data: ClientMessage) => void;
|
|
46
|
+
export type PondEventMap = {
|
|
47
|
+
[key: string]: PondMessage | [PondMessage, PondMessage];
|
|
48
|
+
};
|
|
49
|
+
export type EventWithResponse<EventMap extends PondEventMap> = {
|
|
50
|
+
[Event in keyof EventMap]: EventMap[Event] extends [PondMessage, PondMessage] ? Event : never;
|
|
51
|
+
}[keyof EventMap];
|
|
52
|
+
export type PayloadForResponse<EventMap extends PondEventMap, Event extends EventWithResponse<EventMap>> = EventMap[Event] extends [PondMessage, PondMessage] ? EventMap[Event][0] : never;
|
|
53
|
+
export type ResponseForEvent<EventMap extends PondEventMap, Event extends EventWithResponse<EventMap>> = EventMap[Event] extends [PondMessage, PondMessage] ? EventMap[Event][1] : never;
|
|
54
|
+
export {};
|
package/types.js
ADDED