@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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/build/main/index.d.ts +7 -0
  4. package/build/main/index.js +27 -0
  5. package/build/main/lib/caseconv.d.ts +2 -0
  6. package/build/main/lib/caseconv.js +14 -0
  7. package/build/main/lib/encoder.d.ts +60 -0
  8. package/build/main/lib/encoder.js +61 -0
  9. package/build/main/lib/encoder.spec.d.ts +1 -0
  10. package/build/main/lib/encoder.spec.js +26 -0
  11. package/build/main/lib/errors.d.ts +77 -0
  12. package/build/main/lib/errors.js +171 -0
  13. package/build/main/lib/errors.spec.d.ts +1 -0
  14. package/build/main/lib/errors.spec.js +76 -0
  15. package/build/main/lib/http.d.ts +46 -0
  16. package/build/main/lib/http.js +99 -0
  17. package/build/main/lib/http.spec.d.ts +1 -0
  18. package/build/main/lib/http.spec.js +49 -0
  19. package/build/main/lib/runtime.d.ts +5 -0
  20. package/build/main/lib/runtime.js +22 -0
  21. package/build/main/lib/stream.d.ts +75 -0
  22. package/build/main/lib/stream.js +3 -0
  23. package/build/main/lib/unary.d.ts +14 -0
  24. package/build/main/lib/unary.js +3 -0
  25. package/build/main/lib/url.d.ts +37 -0
  26. package/build/main/lib/url.js +57 -0
  27. package/build/main/lib/url.spec.d.ts +1 -0
  28. package/build/main/lib/url.spec.js +36 -0
  29. package/build/main/lib/websocket.d.ts +21 -0
  30. package/build/main/lib/websocket.js +154 -0
  31. package/build/main/lib/ws.spec.d.ts +1 -0
  32. package/build/main/lib/ws.spec.js +73 -0
  33. package/build/module/index.d.ts +7 -0
  34. package/build/module/index.js +6 -0
  35. package/build/module/lib/caseconv.d.ts +2 -0
  36. package/build/module/lib/caseconv.js +9 -0
  37. package/build/module/lib/encoder.d.ts +60 -0
  38. package/build/module/lib/encoder.js +51 -0
  39. package/build/module/lib/encoder.spec.d.ts +1 -0
  40. package/build/module/lib/encoder.spec.js +21 -0
  41. package/build/module/lib/errors.d.ts +77 -0
  42. package/build/module/lib/errors.js +160 -0
  43. package/build/module/lib/errors.spec.d.ts +1 -0
  44. package/build/module/lib/errors.spec.js +71 -0
  45. package/build/module/lib/http.d.ts +46 -0
  46. package/build/module/lib/http.js +94 -0
  47. package/build/module/lib/http.spec.d.ts +1 -0
  48. package/build/module/lib/http.spec.js +44 -0
  49. package/build/module/lib/runtime.d.ts +5 -0
  50. package/build/module/lib/runtime.js +19 -0
  51. package/build/module/lib/stream.d.ts +75 -0
  52. package/build/module/lib/stream.js +2 -0
  53. package/build/module/lib/unary.d.ts +14 -0
  54. package/build/module/lib/unary.js +2 -0
  55. package/build/module/lib/url.d.ts +37 -0
  56. package/build/module/lib/url.js +61 -0
  57. package/build/module/lib/url.spec.d.ts +1 -0
  58. package/build/module/lib/url.spec.js +31 -0
  59. package/build/module/lib/websocket.d.ts +21 -0
  60. package/build/module/lib/websocket.js +160 -0
  61. package/build/module/lib/ws.spec.d.ts +1 -0
  62. package/build/module/lib/ws.spec.js +69 -0
  63. 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
+ }