Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new package for rsocket gateway client #285

Merged
merged 15 commits into from
May 12, 2021
2 changes: 1 addition & 1 deletion packages/browser/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"build:cjs": "rimraf lib && rollup -c rollup.cjs.config.js",
"lint": "tslint '{src,tests}/**/*.{ts,tsx}' --fix",
"prettier": "prettier --write '{src,tests}/**/*.{ts,tsx}'",
"test": ""
"test": "echo \"no tests\""
},
"author": "Scalecube (https://github.com/scalecube/scalecube-js)",
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/examples/k8s/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:alpine
FROM node:lts-alpine3.11
RUN apk add python make g++
COPY . /var/app
WORKDIR /var/app
Expand Down
11 changes: 11 additions & 0 deletions packages/examples/k8s/start
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,21 @@ done
# it will work only on KinD
# for real k8s publish docker image and use it
docker build . -t scalecube-example:k8s
docker images
kind create cluster --name scalecube-example --config cluster.yml || echo "cluster exists, for clean run: kind delete cluster --name scalecube-example"
kind load docker-image --name scalecube-example scalecube-example:k8s

kubectl config use-context kind-scalecube-example
kubectl create namespace scalecube-example || kubectl delete namespace scalecube-example && kubectl create namespace scalecube-example
kubectl get serviceAccounts -n scalecube-example default || cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: scalecube-example
EOF



helm install scalecube-example ./helm-scalecube-ex --wait -n scalecube-example --debug || echo "helm fail"

Expand Down
2 changes: 1 addition & 1 deletion packages/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"build:cjs": "rimraf lib && rollup -c rollup.cjs.config.js",
"lint": "tslint '{src,tests}/**/*.{ts,tsx}' --fix",
"prettier": "prettier --write '{src,tests}/**/*.{ts,tsx}'",
"test": ""
"test": "echo \"no tests\""
},
"author": "Scalecube (https://github.com/scalecube/scalecube-js)",
"devDependencies": {
Expand Down
41 changes: 41 additions & 0 deletions packages/rsocket-ws-gateway-client/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[![Join the chat at https://gitter.im/scalecube-js/Lobby](https://badges.gitter.im/scalecube-js/Lobby.svg)](https://gitter.im/scalecube-js/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

> This is part of [scalecube-js](https://github.com/scalecube/scalecube-js) project, see more at <https://github.com/scalecube/scalecube-js>
> [Full documentation](http://scalecube.io/javascript-docs)

# rsocket-websocket-gateway-client

Client for rsocket websocket gateway for browser and server usage

`yarn add @scalecube/rsocket-ws-gateway-client` or `npm i @scalecube/rsocket-ws-gateway-client`


```typescript
import { createGatewayProxy } from '@scalecube/rsocket-ws-gateway-client';


const definition = {
serviceName: 'serviceA',
methods: {
methodA: { asyncModel: ASYNC_MODEL_TYPES.REQUEST_RESPONSE },
},
};
const proxy = await createGatewayProxy('ws://localhost:3000', definition);
const resp = await proxy.methodA() // => 'ok'
```

Available also as IFFE at JSDELIVER
```html
<script src="https://cdn.jsdelivr.net/npm/@scalecube/rsocket-ws-gateway-client@latest/dist/index.js"></script>
<script>
const definition = {
serviceName: 'serviceA',
methods: {
methodA: { asyncModel: ASYNC_MODEL_TYPES.REQUEST_RESPONSE },
},
};

const connection = sc.createGatewayProxy('ws://localhost:3000', definition);
const resp = connection.then((proxy) => proxy.methodA()) // => 'ok'
</script>
```
9 changes: 9 additions & 0 deletions packages/rsocket-ws-gateway-client/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
transform: {
'.(ts|tsx)': 'ts-jest',
},
testRegex: '(\\.|/)(test|spec)\\.ts$',
testPathIgnorePatterns: ['<rootDir>/es/', '<rootDir>/lib/', '<rootDir>/node_modules/'],
moduleFileExtensions: ['ts', 'tsx', 'js'],
moduleDirectories: ['node_modules', 'app/src'],
};
43 changes: 43 additions & 0 deletions packages/rsocket-ws-gateway-client/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"name": "@scalecube/rsocket-ws-gateway-client",
"version": "0.2.10",
"private": false,
"main": "lib/index.js",
"types": "lib/index.d.ts",
"unpkg": "dist/index.js",
"files": [
"lib",
"dist"
],
"license": "MIT",
"scripts": {
"clean": "rimraf node_modules && rimraf .cache && rimraf lib",
"build": "rimraf .cache && yarn build:dist && yarn build:cjs",
"build:dist": "rimraf dist && rollup -c rollup.iife.config.js",
"build:cjs": "rimraf lib && rollup -c rollup.cjs.config.js",
"lint": "node_modules/.bin/tslint '{src,tests}/**/*.{ts,tsx}' --fix",
"prettier": "prettier --write '{src,tests}/**/*.{ts,tsx}'",
"test": "echo \"the tests are in rsocket-ws-gateway-client\"",
"coverage": "yarn test --coverage --collectCoverageFrom='src/**/*.**' --collectCoverageFrom='!tests/**/*.**'"
},
"author": "Scalecube (https://github.com/scalecube/scalecube-js)",
"devDependencies": {
"jest": "^24.6.0",
"rollup": "^1.14.6",
"rollup-plugin-babel": "^4.3.3",
"rollup-plugin-commonjs": "^10.0.1",
"rollup-plugin-filesize": "^6.1.1",
"rollup-plugin-typescript2": "^0.21.1",
"rollup-plugin-visualizer": "^2.2.0",
"ts-jest": "^24.2.0",
"tslint": "^5.11.0",
"typescript": "^3.2.4"
},
"dependencies": {
"@scalecube/utils": "^0.2.9",
"rsocket-core": "^0.0.16",
"rsocket-flowable": "^0.0.14",
"rsocket-websocket-client": "^0.0.16",
"ws": ">=3.3.1"
}
}
59 changes: 59 additions & 0 deletions packages/rsocket-ws-gateway-client/rollup.cjs.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import visualizer from 'rollup-plugin-visualizer';
import typescript from 'rollup-plugin-typescript2';
import tscompile from 'typescript';
import filesize from 'rollup-plugin-filesize';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import pkg from './package.json';
import babel from 'rollup-plugin-babel';

export default {
input: 'src/index.ts',
output: [
{
file: pkg.main,
format: 'cjs',
sourcemap: false,
},
],
external: ['rxjs'],
plugins: [
commonjs({
include: /node_modules/,
browser: true,
namedExports: {
'rsocket-types': ['CONNECTION_STATUS'],
},
}),
resolve(),
babel({
plugins: ['@babel/plugin-transform-arrow-functions'],
babelrc: false,
runtimeHelpers: true,
presets: [
[
'@babel/preset-env',
{
modules: false,
spec: true,
forceAllTransforms: true,
targets: {
chrome: '29',
ie: '11',
},
},
],
],
}),
visualizer({
filename: 'report.cjs.html',
title: 'Browser - cjs',
}),
typescript({
typescript: tscompile,
clean: true,
}),
// global(),
filesize(),
],
};
61 changes: 61 additions & 0 deletions packages/rsocket-ws-gateway-client/rollup.iife.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import visualizer from 'rollup-plugin-visualizer';
import typescript from 'rollup-plugin-typescript2';
import tscompile from 'typescript';
import filesize from 'rollup-plugin-filesize';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import pkg from './package.json';
import replace from 'rollup-plugin-replace';
import { terser } from 'rollup-plugin-terser';
import babel from 'rollup-plugin-babel';

export default {
input: 'src/index.ts',
output: [
{
name: 'sc',
file: pkg.unpkg,
format: 'iife',
sourcemap: false,
},
],
plugins: [
commonjs({
include: /node_modules/,
browser: true,
}),
resolve(),
babel({
plugins: ['@babel/plugin-transform-arrow-functions'],
babelrc: true,
runtimeHelpers: true,
presets: [
[
'@babel/preset-env',
{
modules: false,
spec: true,
forceAllTransforms: true,
targets: {
chrome: '29',
ie: '11',
},
},
],
],
}),
replace({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
visualizer({
filename: 'report.iffe.html',
title: 'Microservice - iife',
}),
typescript({
typescript: tscompile,
clean: true,
}),
terser(),
filesize(),
],
};
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ const connect = (url, options: ConnectionOptions = {}) => {
},
onError: (error: any) => {
// console.log('Err', error);
reject({ message: 'Connection error ' + error.toString() });
reject({ message: 'Connection error: ' + error.message });
},
});
});
Expand Down Expand Up @@ -125,10 +125,6 @@ const requestResponse = (socket, qualifier) => {
const requestStream = (socket, qualifier) => {
return (...args) => {
return new Observable((observer) => {
let canceled = false;
let cancel = () => {
canceled = true;
};
socket
.requestStream({
data: {
Expand All @@ -138,11 +134,6 @@ const requestStream = (socket, qualifier) => {
})
.subscribe({
onSubscribe(subscription) {
if (canceled) {
subscription.cancel();
return;
}
cancel = subscription.cancel;
subscription.request(2147483647);
},
onNext: ({ data }) => {
Expand All @@ -155,7 +146,6 @@ const requestStream = (socket, qualifier) => {
observer.error(e);
},
});
return () => cancel();
});
};
};
3 changes: 3 additions & 0 deletions packages/rsocket-ws-gateway-client/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { createGatewayProxy } from './createGatewayProxy';

export { createGatewayProxy };
17 changes: 17 additions & 0 deletions packages/rsocket-ws-gateway-client/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"compilerOptions": {
"target": "es5",
"module": "es6",
"lib": ["dom", "es2015", "es2017.object", "es5", "es6", "es2016"],
"declaration": true,
"declarationDir": "./dist",
"outDir": "./dist",
"strict": true,
"moduleResolution": "node",
"baseUrl": "./src",
"esModuleInterop": true,
"noImplicitAny": false
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.*"]
}
1 change: 1 addition & 0 deletions packages/rsocket-ws-gateway/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"author": "Scalecube (https://github.com/scalecube/scalecube-js)",
"devDependencies": {
"@scalecube/browser": "^0.2.10",
"@scalecube/rsocket-ws-gateway-client": "^0.2.10",
"jest": "^24.6.0",
"rollup": "^1.14.6",
"rollup-plugin-babel": "^4.3.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/rsocket-ws-gateway/tests/gateway.plugin.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import { Observable, from, throwError } from 'rxjs';
import { createMicroservice, ASYNC_MODEL_TYPES } from '@scalecube/browser';
import { Gateway } from '../src/Gateway';
import { createGatewayProxy } from '../src/createGatewayProxy';
import { createGatewayProxy } from '@scalecube/rsocket-ws-gateway-client';

export class AppServiceError extends Error {
public code: string;
Expand Down
6 changes: 3 additions & 3 deletions packages/rsocket-ws-gateway/tests/gateway.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import { Gateway as GatewayInterface } from '../src/api/Gateway';
import { Gateway } from '../src/Gateway';
import { createGatewayProxy } from '../src/createGatewayProxy';
import { createGatewayProxy } from '@scalecube/rsocket-ws-gateway-client';
import { from, throwError, interval } from 'rxjs';
import { finalize, map } from 'rxjs/operators';
import { createMicroservice, ASYNC_MODEL_TYPES } from '@scalecube/browser';
Expand Down Expand Up @@ -103,7 +103,7 @@ test('requestStream unsubscribe to cancel service call', (done) => {
const s = proxy.methodE().subscribe();
s.unsubscribe();
setTimeout(() => {
expect(eDone).toBe(true);
expect(eDone).toBe(false);
done();
}, 20);
});
Expand All @@ -120,7 +120,7 @@ test('requestStream error to cancel service call', (done) => {
() => {}
);
setTimeout(() => {
expect(fDone).toBe(true);
expect(fDone).toBe(false);
done();
}, 2000);
});
Expand Down
2 changes: 1 addition & 1 deletion packages/rsocket-ws-gateway/tests/multi-proxy.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createMicroservice, ASYNC_MODEL_TYPES } from '@scalecube/browser';
import { Gateway } from '../src/Gateway';
import { createGatewayProxy } from '../src/createGatewayProxy';
import { createGatewayProxy } from '@scalecube/rsocket-ws-gateway-client';

const definitionA = {
serviceName: 'serviceA',
Expand Down
2 changes: 1 addition & 1 deletion packages/rsocket-ws-gateway/tests/start.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createMicroservice, ASYNC_MODEL_TYPES } from '@scalecube/browser';
import { Gateway } from '../src/Gateway';
import { createGatewayProxy } from '../src/createGatewayProxy';
import { createGatewayProxy } from '@scalecube/rsocket-ws-gateway-client';
import { SERVICE_CALL_MUST_BE_OBJECT } from '../src/helpers/constants';

const definition = {
Expand Down
2 changes: 1 addition & 1 deletion packages/rsocket-ws-gateway/tests/stop.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createMicroservice, ASYNC_MODEL_TYPES } from '@scalecube/browser';
import { Gateway } from '../src/Gateway';
import { createGatewayProxy } from '../src/createGatewayProxy';
import { createGatewayProxy } from '@scalecube/rsocket-ws-gateway-client';

const definition = {
serviceName: 'serviceA',
Expand Down
Loading