@synnaxlabs/freighter 0.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/LICENSE +21 -0
- package/README.md +3 -0
- package/build/main/index.d.ts +7 -0
- package/build/main/index.js +27 -0
- package/build/main/lib/caseconv.d.ts +2 -0
- package/build/main/lib/caseconv.js +14 -0
- package/build/main/lib/encoder.d.ts +60 -0
- package/build/main/lib/encoder.js +61 -0
- package/build/main/lib/encoder.spec.d.ts +1 -0
- package/build/main/lib/encoder.spec.js +26 -0
- package/build/main/lib/errors.d.ts +77 -0
- package/build/main/lib/errors.js +171 -0
- package/build/main/lib/errors.spec.d.ts +1 -0
- package/build/main/lib/errors.spec.js +76 -0
- package/build/main/lib/http.d.ts +46 -0
- package/build/main/lib/http.js +99 -0
- package/build/main/lib/http.spec.d.ts +1 -0
- package/build/main/lib/http.spec.js +49 -0
- package/build/main/lib/runtime.d.ts +5 -0
- package/build/main/lib/runtime.js +22 -0
- package/build/main/lib/stream.d.ts +75 -0
- package/build/main/lib/stream.js +3 -0
- package/build/main/lib/unary.d.ts +14 -0
- package/build/main/lib/unary.js +3 -0
- package/build/main/lib/url.d.ts +37 -0
- package/build/main/lib/url.js +57 -0
- package/build/main/lib/url.spec.d.ts +1 -0
- package/build/main/lib/url.spec.js +36 -0
- package/build/main/lib/websocket.d.ts +21 -0
- package/build/main/lib/websocket.js +154 -0
- package/build/main/lib/ws.spec.d.ts +1 -0
- package/build/main/lib/ws.spec.js +73 -0
- package/build/module/index.d.ts +7 -0
- package/build/module/index.js +6 -0
- package/build/module/lib/caseconv.d.ts +2 -0
- package/build/module/lib/caseconv.js +9 -0
- package/build/module/lib/encoder.d.ts +60 -0
- package/build/module/lib/encoder.js +51 -0
- package/build/module/lib/encoder.spec.d.ts +1 -0
- package/build/module/lib/encoder.spec.js +21 -0
- package/build/module/lib/errors.d.ts +77 -0
- package/build/module/lib/errors.js +160 -0
- package/build/module/lib/errors.spec.d.ts +1 -0
- package/build/module/lib/errors.spec.js +71 -0
- package/build/module/lib/http.d.ts +46 -0
- package/build/module/lib/http.js +94 -0
- package/build/module/lib/http.spec.d.ts +1 -0
- package/build/module/lib/http.spec.js +44 -0
- package/build/module/lib/runtime.d.ts +5 -0
- package/build/module/lib/runtime.js +19 -0
- package/build/module/lib/stream.d.ts +75 -0
- package/build/module/lib/stream.js +2 -0
- package/build/module/lib/unary.d.ts +14 -0
- package/build/module/lib/unary.js +2 -0
- package/build/module/lib/url.d.ts +37 -0
- package/build/module/lib/url.js +61 -0
- package/build/module/lib/url.spec.d.ts +1 -0
- package/build/module/lib/url.spec.js +31 -0
- package/build/module/lib/websocket.d.ts +21 -0
- package/build/module/lib/websocket.js +160 -0
- package/build/module/lib/ws.spec.d.ts +1 -0
- package/build/module/lib/ws.spec.js +69 -0
- package/package.json +118 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { JSONEncoderDecoder } from './encoder';
|
|
4
|
+
import { BaseTypedError, EOF, registerError } from './errors';
|
|
5
|
+
import URL from './url';
|
|
6
|
+
import { WebSocketClient } from './websocket';
|
|
7
|
+
const url = new URL({
|
|
8
|
+
host: '127.0.0.1',
|
|
9
|
+
port: 8080,
|
|
10
|
+
});
|
|
11
|
+
const MessageSchema = z.object({
|
|
12
|
+
id: z.number().optional(),
|
|
13
|
+
message: z.string().optional(),
|
|
14
|
+
});
|
|
15
|
+
const client = new WebSocketClient(new JSONEncoderDecoder(), url);
|
|
16
|
+
class MyCustomError extends BaseTypedError {
|
|
17
|
+
code;
|
|
18
|
+
constructor(message, code) {
|
|
19
|
+
super(message, 'integration.error');
|
|
20
|
+
this.code = code;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const encodeTestError = (err) => {
|
|
24
|
+
if (!(err instanceof MyCustomError)) {
|
|
25
|
+
throw new Error('Unexpected error type');
|
|
26
|
+
}
|
|
27
|
+
return `${err.code},${err.message}`;
|
|
28
|
+
};
|
|
29
|
+
const decodeTestError = (encoded) => {
|
|
30
|
+
const [code, message] = encoded.split(',');
|
|
31
|
+
return new MyCustomError(message, parseInt(code, 10));
|
|
32
|
+
};
|
|
33
|
+
registerError({
|
|
34
|
+
type: 'integration.error',
|
|
35
|
+
encode: encodeTestError,
|
|
36
|
+
decode: decodeTestError,
|
|
37
|
+
});
|
|
38
|
+
test('basic exchange', async (t) => {
|
|
39
|
+
const stream = await client.stream('ws/echo', MessageSchema, MessageSchema);
|
|
40
|
+
for (let i = 0; i < 10; i++) {
|
|
41
|
+
stream.send({ id: i, message: 'hello' });
|
|
42
|
+
const [response, error] = await stream.receive();
|
|
43
|
+
t.is(error, undefined);
|
|
44
|
+
t.is(response?.id, i + 1);
|
|
45
|
+
t.is(response?.message, 'hello');
|
|
46
|
+
}
|
|
47
|
+
stream.closeSend();
|
|
48
|
+
const [response, error] = await stream.receive();
|
|
49
|
+
t.deepEqual(error, new EOF());
|
|
50
|
+
t.is(response, undefined);
|
|
51
|
+
});
|
|
52
|
+
test('receive message after close', async (t) => {
|
|
53
|
+
const stream = await client.stream('ws/sendMessageAfterClientClose', MessageSchema, MessageSchema);
|
|
54
|
+
await stream.closeSend();
|
|
55
|
+
let [response, error] = await stream.receive();
|
|
56
|
+
t.is(error, undefined);
|
|
57
|
+
t.is(response?.id, 0);
|
|
58
|
+
t.is(response?.message, 'Close Acknowledged');
|
|
59
|
+
[response, error] = await stream.receive();
|
|
60
|
+
t.deepEqual(error, new EOF());
|
|
61
|
+
});
|
|
62
|
+
test('receive error', async (t) => {
|
|
63
|
+
const stream = await client.stream('ws/receiveAndExitWithErr', MessageSchema, MessageSchema);
|
|
64
|
+
stream.send({ id: 0, message: 'hello' });
|
|
65
|
+
const [response, error] = await stream.receive();
|
|
66
|
+
t.deepEqual(error, new MyCustomError('unexpected error', 1));
|
|
67
|
+
t.is(response, undefined);
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3Muc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvd3Muc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxLQUFLLENBQUM7QUFDdkIsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFjLE1BQU0sVUFBVSxDQUFDO0FBQzFFLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2xCLElBQUksRUFBRSxXQUFXO0lBQ2pCLElBQUksRUFBRSxJQUFJO0NBQ1gsQ0FBQyxDQUFDO0FBRUgsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMvQixDQUFDLENBQUM7QUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFbEUsTUFBTSxhQUFjLFNBQVEsY0FBYztJQUN4QyxJQUFJLENBQVM7SUFFYixZQUFZLE9BQWUsRUFBRSxJQUFZO1FBQ3ZDLEtBQUssQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQWUsRUFBVSxFQUFFO0lBQ2xELElBQUksQ0FB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
|
package/package.json
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@synnaxlabs/freighter",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "a modular transport abstraction",
|
|
5
|
+
"main": "build/main/index.js",
|
|
6
|
+
"typings": "build/main/index.d.ts",
|
|
7
|
+
"module": "build/module/index.js",
|
|
8
|
+
"repository": "https://github.com/synnaxlabs/synnax",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"synnax",
|
|
12
|
+
"grpc",
|
|
13
|
+
"transport",
|
|
14
|
+
"client",
|
|
15
|
+
"data acquisition",
|
|
16
|
+
"big data",
|
|
17
|
+
"telemetry",
|
|
18
|
+
"control systems"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "run-p build:*",
|
|
22
|
+
"build:main": "tsc -p tsconfig.json",
|
|
23
|
+
"build:module": "tsc -p tsconfig.module.json",
|
|
24
|
+
"fix": "run-s fix:*",
|
|
25
|
+
"fix:prettier": "prettier \"src/**/*.ts\" --write",
|
|
26
|
+
"fix:lint": "eslint src --ext .ts --fix",
|
|
27
|
+
"test": "run-s build test:*",
|
|
28
|
+
"test:lint": "eslint src --ext .ts",
|
|
29
|
+
"test:prettier": "prettier \"src/**/*.ts\" --list-different",
|
|
30
|
+
"test:unit": "nyc --silent ava",
|
|
31
|
+
"check-cli": "run-s test diff-integration-tests check-integration-tests",
|
|
32
|
+
"check-integration-tests": "run-s check-integration-test:*",
|
|
33
|
+
"diff-integration-tests": "mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'",
|
|
34
|
+
"watch:build": "tsc -p tsconfig.json -w",
|
|
35
|
+
"watch:test": "nyc --silent ava --watch",
|
|
36
|
+
"cov": "run-s build test:unit cov:html cov:lcov",
|
|
37
|
+
"cov:html": "nyc report --reporter=html",
|
|
38
|
+
"cov:lcov": "nyc report --reporter=lcov",
|
|
39
|
+
"cov:send": "run-s cov:lcov && codecov",
|
|
40
|
+
"cov:check": "nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100",
|
|
41
|
+
"doc": "run-s doc:html && open-cli build/docs/index.html",
|
|
42
|
+
"doc:html": "typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --out build/docs",
|
|
43
|
+
"doc:json": "typedoc src/ --exclude **/*.spec.ts --target ES6 --mode file --json build/docs/typedoc.json",
|
|
44
|
+
"doc:publish": "gh-pages -m \"[ci skip] Updates\" -d build/docs",
|
|
45
|
+
"version": "standard-version",
|
|
46
|
+
"reset-hard": "git clean -dfx && git reset --hard && yarn",
|
|
47
|
+
"prepare-release": "run-s reset-hard test cov:check doc:html version doc:publish"
|
|
48
|
+
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=10"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@bitauth/libauth": "^1.17.1",
|
|
54
|
+
"axios": "^0.27.2",
|
|
55
|
+
"js-convert-case": "^4.2.0",
|
|
56
|
+
"msgpackr": "^1.7.0",
|
|
57
|
+
"ws": "^8.8.1",
|
|
58
|
+
"zod": "^3.19.1"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@ava/typescript": "^1.1.1",
|
|
62
|
+
"@istanbuljs/nyc-config-typescript": "^1.0.1",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^4.0.1",
|
|
64
|
+
"@typescript-eslint/parser": "^4.0.1",
|
|
65
|
+
"ava": "^3.12.1",
|
|
66
|
+
"codecov": "^3.5.0",
|
|
67
|
+
"cspell": "^4.1.0",
|
|
68
|
+
"cz-conventional-changelog": "^3.3.0",
|
|
69
|
+
"eslint": "^7.8.0",
|
|
70
|
+
"eslint-config-prettier": "^6.11.0",
|
|
71
|
+
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
72
|
+
"eslint-plugin-import": "^2.22.0",
|
|
73
|
+
"gh-pages": "^3.1.0",
|
|
74
|
+
"npm-run-all": "^4.1.5",
|
|
75
|
+
"nyc": "^15.1.0",
|
|
76
|
+
"open-cli": "^6.0.1",
|
|
77
|
+
"prettier": "^2.1.1",
|
|
78
|
+
"standard-version": "^9.0.0",
|
|
79
|
+
"ts-node": "^9.0.0",
|
|
80
|
+
"typedoc": "^0.19.0",
|
|
81
|
+
"typescript": "^4.0.2"
|
|
82
|
+
},
|
|
83
|
+
"files": [
|
|
84
|
+
"build/main",
|
|
85
|
+
"build/module",
|
|
86
|
+
"!**/*.spec.*",
|
|
87
|
+
"!**/*.json",
|
|
88
|
+
"CHANGELOG.md",
|
|
89
|
+
"LICENSE",
|
|
90
|
+
"README.md"
|
|
91
|
+
],
|
|
92
|
+
"ava": {
|
|
93
|
+
"failFast": true,
|
|
94
|
+
"timeout": "60s",
|
|
95
|
+
"typescript": {
|
|
96
|
+
"rewritePaths": {
|
|
97
|
+
"src/": "build/main/"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"files": [
|
|
101
|
+
"!build/module/**"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"config": {
|
|
105
|
+
"commitizen": {
|
|
106
|
+
"path": "cz-conventional-changelog"
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"prettier": {
|
|
110
|
+
"singleQuote": true
|
|
111
|
+
},
|
|
112
|
+
"nyc": {
|
|
113
|
+
"extends": "@istanbuljs/nyc-config-typescript",
|
|
114
|
+
"exclude": [
|
|
115
|
+
"**/*.spec.js"
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
}
|