From fd62f6768ea3f295fd91865afd8e447f0f0ad066 Mon Sep 17 00:00:00 2001 From: IdanILT Date: Mon, 10 May 2021 17:49:06 +0300 Subject: [PATCH 01/15] squash! rsocket client ready for browser with IFFE bundle --- packages/rsocket-ws-gateway-client/README.md | 22 +++ .../rsocket-ws-gateway-client/jest.config.js | 9 ++ .../rsocket-ws-gateway-client/package.json | 43 +++++ .../rollup.cjs.config.js | 59 +++++++ .../rollup.iife.config.js | 61 +++++++ .../src/createGatewayProxy.ts | 151 ++++++++++++++++++ .../rsocket-ws-gateway-client/src/index.ts | 3 + .../rsocket-ws-gateway-client/tsconfig.json | 17 ++ 8 files changed, 365 insertions(+) create mode 100644 packages/rsocket-ws-gateway-client/README.md create mode 100644 packages/rsocket-ws-gateway-client/jest.config.js create mode 100644 packages/rsocket-ws-gateway-client/package.json create mode 100644 packages/rsocket-ws-gateway-client/rollup.cjs.config.js create mode 100644 packages/rsocket-ws-gateway-client/rollup.iife.config.js create mode 100644 packages/rsocket-ws-gateway-client/src/createGatewayProxy.ts create mode 100644 packages/rsocket-ws-gateway-client/src/index.ts create mode 100644 packages/rsocket-ws-gateway-client/tsconfig.json diff --git a/packages/rsocket-ws-gateway-client/README.md b/packages/rsocket-ws-gateway-client/README.md new file mode 100644 index 000000000..3b8781f17 --- /dev/null +++ b/packages/rsocket-ws-gateway-client/README.md @@ -0,0 +1,22 @@ +[![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 +> [Full documentation](http://scalecube.io/javascript-docs) + +# rsocket-websocket-gateway-client + +Client for rsocket websocket gateway for browser and server usage + +```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' +``` diff --git a/packages/rsocket-ws-gateway-client/jest.config.js b/packages/rsocket-ws-gateway-client/jest.config.js new file mode 100644 index 000000000..605cf8f48 --- /dev/null +++ b/packages/rsocket-ws-gateway-client/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + transform: { + '.(ts|tsx)': 'ts-jest', + }, + testRegex: '(\\.|/)(test|spec)\\.ts$', + testPathIgnorePatterns: ['/es/', '/lib/', '/node_modules/'], + moduleFileExtensions: ['ts', 'tsx', 'js'], + moduleDirectories: ['node_modules', 'app/src'], +}; diff --git a/packages/rsocket-ws-gateway-client/package.json b/packages/rsocket-ws-gateway-client/package.json new file mode 100644 index 000000000..50ebf2c0c --- /dev/null +++ b/packages/rsocket-ws-gateway-client/package.json @@ -0,0 +1,43 @@ +{ + "name": "@scalecube/rsocket-ws-gateway-client", + "version": "0.2.9", + "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": "node_modules/.bin/jest --config jest.config.js", + "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" + } +} diff --git a/packages/rsocket-ws-gateway-client/rollup.cjs.config.js b/packages/rsocket-ws-gateway-client/rollup.cjs.config.js new file mode 100644 index 000000000..ac0d00f22 --- /dev/null +++ b/packages/rsocket-ws-gateway-client/rollup.cjs.config.js @@ -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(), + ], +}; diff --git a/packages/rsocket-ws-gateway-client/rollup.iife.config.js b/packages/rsocket-ws-gateway-client/rollup.iife.config.js new file mode 100644 index 000000000..7e7c345f8 --- /dev/null +++ b/packages/rsocket-ws-gateway-client/rollup.iife.config.js @@ -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(), + ], +}; diff --git a/packages/rsocket-ws-gateway-client/src/createGatewayProxy.ts b/packages/rsocket-ws-gateway-client/src/createGatewayProxy.ts new file mode 100644 index 000000000..f124304f8 --- /dev/null +++ b/packages/rsocket-ws-gateway-client/src/createGatewayProxy.ts @@ -0,0 +1,151 @@ +import { Observable } from 'rxjs'; +import RSocketWebSocketClient from 'rsocket-websocket-client'; +import { RSocketClient, JsonSerializers } from 'rsocket-core'; +import { MicroserviceApi } from '@scalecube/api'; +import { validateServiceDefinition, getQualifier } from '@scalecube/utils'; + +interface Proxy { + [state: string]: any; +} + +type ConnectionOptions = Partial<{ + keepAlive: number; + lifetime: number; +}>; + +export function createGatewayProxy( + url: string, + definition: MicroserviceApi.ServiceDefinition, + requestResponse?: any, + requestStream?: any, + options?: ConnectionOptions +): Promise; +export function createGatewayProxy( + url: string, + definition: MicroserviceApi.ServiceDefinition[], + requestResponse?: any, + requestStream?: any, + options?: ConnectionOptions +): Promise; +export function createGatewayProxy( + url: string, + definitions: any, + customRequestResponse?: any, + customRequestStream?: any, + options?: ConnectionOptions +): any { + const isDefinitionsArray = Array.isArray(definitions); + let defs: MicroserviceApi.ServiceDefinition[]; + if (!isDefinitionsArray) { + defs = [definitions]; + } else { + defs = definitions; + } + const proxies: Proxy[] = []; + let socket; + return new Promise(async (resolve, reject) => { + socket = await connect(url, options).catch((e) => { + reject(e); + }); + + defs.forEach((definition) => { + const { serviceName, methods } = definition; + validateServiceDefinition(definition); + const proxy: Proxy = {}; + Object.keys(methods).forEach((method) => { + const asyncModel = methods[method].asyncModel; + const qualifier = getQualifier({ serviceName, methodName: method }); + proxy[method] = (() => { + switch (asyncModel) { + case 'requestResponse': + return customRequestResponse + ? customRequestResponse(socket, qualifier) + : requestResponse(socket, qualifier); + case 'requestStream': + return customRequestStream ? customRequestStream(socket, qualifier) : requestStream(socket, qualifier); + default: + reject(new Error('Unknown asyncModel')); + } + })(); + }); + proxies.push(proxy); + }); + + resolve(isDefinitionsArray ? proxies : proxies[0]); + }); +} + +const connect = (url, options: ConnectionOptions = {}) => { + return new Promise((resolve, reject) => { + const client = new RSocketClient({ + serializers: JsonSerializers, + setup: { + dataMimeType: 'application/json', + keepAlive: options.keepAlive || 100000, + lifetime: options.lifetime || 100000, + metadataMimeType: 'application/json', + }, + transport: new RSocketWebSocketClient({ url }), + }); + client.connect().subscribe({ + onComplete: (socket: any) => { + // console.log('Connected to ' + url); + resolve(socket); + }, + onError: (error: any) => { + // console.log('Err', error); + reject({ message: 'Connection error: ' + error.message }); + }, + }); + }); +}; + +const requestResponse = (socket, qualifier) => { + return (...args) => { + return new Promise((resolve, reject) => { + socket + .requestResponse({ + data: { + qualifier, + data: args, + }, + }) + .subscribe({ + onComplete: ({ data }) => { + resolve(data); + }, + onError: (e: any) => { + reject(e); + }, + }); + }); + }; +}; + +const requestStream = (socket, qualifier) => { + return (...args) => { + return new Observable((observer) => { + socket + .requestStream({ + data: { + qualifier, + data: args, + }, + }) + .subscribe({ + onSubscribe(subscription) { + subscription.request(2147483647); + }, + onNext: ({ data }) => { + observer.next(data); + }, + onComplete: () => { + observer.complete(); + }, + onError: (e: any) => { + observer.error(e); + }, + }); + }); + }; +}; diff --git a/packages/rsocket-ws-gateway-client/src/index.ts b/packages/rsocket-ws-gateway-client/src/index.ts new file mode 100644 index 000000000..2ffa94753 --- /dev/null +++ b/packages/rsocket-ws-gateway-client/src/index.ts @@ -0,0 +1,3 @@ +import { createGatewayProxy } from './createGatewayProxy'; + +export { createGatewayProxy }; diff --git a/packages/rsocket-ws-gateway-client/tsconfig.json b/packages/rsocket-ws-gateway-client/tsconfig.json new file mode 100644 index 000000000..6637364d3 --- /dev/null +++ b/packages/rsocket-ws-gateway-client/tsconfig.json @@ -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.*"] +} From 07257f1252a646fef80b26069862fb1531dc0dca Mon Sep 17 00:00:00 2001 From: IdanILT Date: Mon, 10 May 2021 18:08:58 +0300 Subject: [PATCH 02/15] createGatewayProxy move to new package and updated tests --- .../rsocket-ws-gateway-client/package.json | 2 +- packages/rsocket-ws-gateway/package.json | 1 + .../src/createGatewayProxy.ts | 161 ------------------ .../tests/gateway.plugin.spec.ts | 2 +- .../rsocket-ws-gateway/tests/gateway.spec.ts | 2 +- .../tests/multi-proxy.spec.ts | 2 +- .../rsocket-ws-gateway/tests/start.spec.ts | 2 +- .../rsocket-ws-gateway/tests/stop.spec.ts | 2 +- 8 files changed, 7 insertions(+), 167 deletions(-) delete mode 100644 packages/rsocket-ws-gateway/src/createGatewayProxy.ts diff --git a/packages/rsocket-ws-gateway-client/package.json b/packages/rsocket-ws-gateway-client/package.json index 50ebf2c0c..77a874f2e 100644 --- a/packages/rsocket-ws-gateway-client/package.json +++ b/packages/rsocket-ws-gateway-client/package.json @@ -17,7 +17,7 @@ "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": "node_modules/.bin/jest --config jest.config.js", + "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)", diff --git a/packages/rsocket-ws-gateway/package.json b/packages/rsocket-ws-gateway/package.json index dabcd32a2..fa3a1bb55 100644 --- a/packages/rsocket-ws-gateway/package.json +++ b/packages/rsocket-ws-gateway/package.json @@ -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", diff --git a/packages/rsocket-ws-gateway/src/createGatewayProxy.ts b/packages/rsocket-ws-gateway/src/createGatewayProxy.ts deleted file mode 100644 index 57194f156..000000000 --- a/packages/rsocket-ws-gateway/src/createGatewayProxy.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { Observable } from 'rxjs'; -import RSocketWebSocketClient from 'rsocket-websocket-client'; -import { RSocketClient, JsonSerializers } from 'rsocket-core'; -import { MicroserviceApi } from '@scalecube/api'; -import { validateServiceDefinition, getQualifier } from '@scalecube/utils'; - -interface Proxy { - [state: string]: any; -} - -type ConnectionOptions = Partial<{ - keepAlive: number; - lifetime: number; -}>; - -export function createGatewayProxy( - url: string, - definition: MicroserviceApi.ServiceDefinition, - requestResponse?: any, - requestStream?: any, - options?: ConnectionOptions -): Promise; -export function createGatewayProxy( - url: string, - definition: MicroserviceApi.ServiceDefinition[], - requestResponse?: any, - requestStream?: any, - options?: ConnectionOptions -): Promise; -export function createGatewayProxy( - url: string, - definitions: any, - customRequestResponse?: any, - customRequestStream?: any, - options?: ConnectionOptions -): any { - const isDefinitionsArray = Array.isArray(definitions); - let defs: MicroserviceApi.ServiceDefinition[]; - if (!isDefinitionsArray) { - defs = [definitions]; - } else { - defs = definitions; - } - const proxies: Proxy[] = []; - let socket; - return new Promise(async (resolve, reject) => { - socket = await connect(url, options).catch((e) => { - reject(e); - }); - - defs.forEach((definition) => { - const { serviceName, methods } = definition; - validateServiceDefinition(definition); - const proxy: Proxy = {}; - Object.keys(methods).forEach((method) => { - const asyncModel = methods[method].asyncModel; - const qualifier = getQualifier({ serviceName, methodName: method }); - proxy[method] = (() => { - switch (asyncModel) { - case 'requestResponse': - return customRequestResponse - ? customRequestResponse(socket, qualifier) - : requestResponse(socket, qualifier); - case 'requestStream': - return customRequestStream ? customRequestStream(socket, qualifier) : requestStream(socket, qualifier); - default: - reject(new Error('Unknown asyncModel')); - } - })(); - }); - proxies.push(proxy); - }); - - resolve(isDefinitionsArray ? proxies : proxies[0]); - }); -} - -const connect = (url, options: ConnectionOptions = {}) => { - return new Promise((resolve, reject) => { - const client = new RSocketClient({ - serializers: JsonSerializers, - setup: { - dataMimeType: 'application/json', - keepAlive: options.keepAlive || 100000, - lifetime: options.lifetime || 100000, - metadataMimeType: 'application/json', - }, - transport: new RSocketWebSocketClient({ url }), - }); - client.connect().subscribe({ - onComplete: (socket: any) => { - // console.log('Connected to ' + url); - resolve(socket); - }, - onError: (error: any) => { - // console.log('Err', error); - reject({ message: 'Connection error ' + error.toString() }); - }, - }); - }); -}; - -const requestResponse = (socket, qualifier) => { - return (...args) => { - return new Promise((resolve, reject) => { - socket - .requestResponse({ - data: { - qualifier, - data: args, - }, - }) - .subscribe({ - onComplete: ({ data }) => { - resolve(data); - }, - onError: (e: any) => { - reject(e); - }, - }); - }); - }; -}; - -const requestStream = (socket, qualifier) => { - return (...args) => { - return new Observable((observer) => { - let canceled = false; - let cancel = () => { - canceled = true; - }; - socket - .requestStream({ - data: { - qualifier, - data: args, - }, - }) - .subscribe({ - onSubscribe(subscription) { - if (canceled) { - subscription.cancel(); - return; - } - cancel = subscription.cancel; - subscription.request(2147483647); - }, - onNext: ({ data }) => { - observer.next(data); - }, - onComplete: () => { - observer.complete(); - }, - onError: (e: any) => { - observer.error(e); - }, - }); - return () => cancel(); - }); - }; -}; diff --git a/packages/rsocket-ws-gateway/tests/gateway.plugin.spec.ts b/packages/rsocket-ws-gateway/tests/gateway.plugin.spec.ts index 09e30c771..32c4426cc 100644 --- a/packages/rsocket-ws-gateway/tests/gateway.plugin.spec.ts +++ b/packages/rsocket-ws-gateway/tests/gateway.plugin.spec.ts @@ -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; diff --git a/packages/rsocket-ws-gateway/tests/gateway.spec.ts b/packages/rsocket-ws-gateway/tests/gateway.spec.ts index 2dd6de6d9..79da75920 100644 --- a/packages/rsocket-ws-gateway/tests/gateway.spec.ts +++ b/packages/rsocket-ws-gateway/tests/gateway.spec.ts @@ -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'; diff --git a/packages/rsocket-ws-gateway/tests/multi-proxy.spec.ts b/packages/rsocket-ws-gateway/tests/multi-proxy.spec.ts index 48182559f..168e72fb8 100644 --- a/packages/rsocket-ws-gateway/tests/multi-proxy.spec.ts +++ b/packages/rsocket-ws-gateway/tests/multi-proxy.spec.ts @@ -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', diff --git a/packages/rsocket-ws-gateway/tests/start.spec.ts b/packages/rsocket-ws-gateway/tests/start.spec.ts index 02dbeba66..441df2b1a 100644 --- a/packages/rsocket-ws-gateway/tests/start.spec.ts +++ b/packages/rsocket-ws-gateway/tests/start.spec.ts @@ -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 = { diff --git a/packages/rsocket-ws-gateway/tests/stop.spec.ts b/packages/rsocket-ws-gateway/tests/stop.spec.ts index 724ab6301..916b7de89 100644 --- a/packages/rsocket-ws-gateway/tests/stop.spec.ts +++ b/packages/rsocket-ws-gateway/tests/stop.spec.ts @@ -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', From c2ec586f2386d4da23c3e7d975f6452653a188de Mon Sep 17 00:00:00 2001 From: IdanILT Date: Mon, 10 May 2021 18:21:48 +0300 Subject: [PATCH 03/15] v0.2.10 --- packages/rsocket-ws-gateway-client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rsocket-ws-gateway-client/package.json b/packages/rsocket-ws-gateway-client/package.json index 77a874f2e..15b60603b 100644 --- a/packages/rsocket-ws-gateway-client/package.json +++ b/packages/rsocket-ws-gateway-client/package.json @@ -1,6 +1,6 @@ { "name": "@scalecube/rsocket-ws-gateway-client", - "version": "0.2.9", + "version": "0.2.10", "private": false, "main": "lib/index.js", "types": "lib/index.d.ts", From 9699c0d87ed851dbc7b27d9bcd9e43af01b5a08c Mon Sep 17 00:00:00 2001 From: IdanILT Date: Mon, 10 May 2021 18:53:20 +0300 Subject: [PATCH 04/15] fixed test --- packages/rsocket-ws-gateway/tests/gateway.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/rsocket-ws-gateway/tests/gateway.spec.ts b/packages/rsocket-ws-gateway/tests/gateway.spec.ts index 79da75920..6239cb7ce 100644 --- a/packages/rsocket-ws-gateway/tests/gateway.spec.ts +++ b/packages/rsocket-ws-gateway/tests/gateway.spec.ts @@ -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); }); @@ -120,7 +120,7 @@ test('requestStream error to cancel service call', (done) => { () => {} ); setTimeout(() => { - expect(fDone).toBe(true); + expect(fDone).toBe(false); done(); }, 2000); }); From 352343c154fbb70e53cfd586c1fe0d372606c58a Mon Sep 17 00:00:00 2001 From: IdanILT Date: Mon, 10 May 2021 19:19:49 +0300 Subject: [PATCH 05/15] missing def --- packages/scalecube-microservice/src/index.d.ts | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/scalecube-microservice/src/index.d.ts diff --git a/packages/scalecube-microservice/src/index.d.ts b/packages/scalecube-microservice/src/index.d.ts new file mode 100644 index 000000000..7946f8cbe --- /dev/null +++ b/packages/scalecube-microservice/src/index.d.ts @@ -0,0 +1,3 @@ +import { createMicroservice } from './Microservices/Microservices'; +import { ASYNC_MODEL_TYPES } from './helpers/constants'; +export { createMicroservice, ASYNC_MODEL_TYPES }; From d63014df18c8f776794c74f5322a2e183d9b893e Mon Sep 17 00:00:00 2001 From: IdanILT Date: Mon, 10 May 2021 20:14:55 +0300 Subject: [PATCH 06/15] fix brooken test --- packages/scalecube-microservice/src/index.d.ts | 3 --- packages/transport-browser/package.json | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 packages/scalecube-microservice/src/index.d.ts diff --git a/packages/scalecube-microservice/src/index.d.ts b/packages/scalecube-microservice/src/index.d.ts deleted file mode 100644 index 7946f8cbe..000000000 --- a/packages/scalecube-microservice/src/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createMicroservice } from './Microservices/Microservices'; -import { ASYNC_MODEL_TYPES } from './helpers/constants'; -export { createMicroservice, ASYNC_MODEL_TYPES }; diff --git a/packages/transport-browser/package.json b/packages/transport-browser/package.json index b15fb8376..a7aae00be 100644 --- a/packages/transport-browser/package.json +++ b/packages/transport-browser/package.json @@ -33,6 +33,7 @@ "dependencies": { "@scalecube/api": "^0.2.10", "@scalecube/rsocket-adapter": "^0.2.10", + "@scalecube/addressable": "^0.2.10", "@scalecube/utils": "^0.2.10", "rsocket-core": "^0.0.16", "rsocket-events-client": "^0.0.22", From cd41e25ecc5800b5d8f50eabe3bb14c784961e8c Mon Sep 17 00:00:00 2001 From: IdanILT Date: Tue, 11 May 2021 10:08:15 +0300 Subject: [PATCH 07/15] fix brooken test --- packages/browser/package.json | 2 +- packages/examples/tests/greeting.spec.ts | 4 ++-- packages/node/package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/browser/package.json b/packages/browser/package.json index db49adf40..e89e314af 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -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": { diff --git a/packages/examples/tests/greeting.spec.ts b/packages/examples/tests/greeting.spec.ts index f403d039d..b88770b1f 100644 --- a/packages/examples/tests/greeting.spec.ts +++ b/packages/examples/tests/greeting.spec.ts @@ -7,7 +7,7 @@ describe('k8s', () => { const http = require('http'); // how many times to try before failing // the cluster require some time to get ready for action - let tries = 6; + let tries = 12; try { setInterval(() => { http @@ -40,7 +40,7 @@ describe('k8s', () => { throw Error('http get error: ' + err.message); } }); - }, 10000); + }, 60000); } catch (e) { execSync('/bin/bash -c "cd k8s && ./stop"', { stdio: 'inherit' }); } diff --git a/packages/node/package.json b/packages/node/package.json index b23558b20..6b95c6f53 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -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": { From c7246f236fb3c86769c293c290b4a21f1e38fdba Mon Sep 17 00:00:00 2001 From: IdanILT Date: Tue, 11 May 2021 11:19:47 +0300 Subject: [PATCH 08/15] added service account --- .../k8s/helm-scalecube-ex/templates/serviceAccount.yaml | 6 ++++++ packages/examples/k8s/start | 8 ++++++++ packages/examples/tests/greeting.spec.ts | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml diff --git a/packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml b/packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml new file mode 100644 index 000000000..f561dc6ef --- /dev/null +++ b/packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml @@ -0,0 +1,6 @@ +#apiVersion: v1 +#kind: ServiceAccount +#metadata: +# name: default +# namespace: kube-system +#automountServiceAccountToken: false diff --git a/packages/examples/k8s/start b/packages/examples/k8s/start index 656e50417..d6fbb2da3 100755 --- a/packages/examples/k8s/start +++ b/packages/examples/k8s/start @@ -19,6 +19,14 @@ kind create cluster --name scalecube-example --config cluster.yml || echo "clust 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 < { const http = require('http'); // how many times to try before failing // the cluster require some time to get ready for action - let tries = 12; + let tries = 6; try { setInterval(() => { http @@ -40,7 +40,7 @@ describe('k8s', () => { throw Error('http get error: ' + err.message); } }); - }, 60000); + }, 10000); } catch (e) { execSync('/bin/bash -c "cd k8s && ./stop"', { stdio: 'inherit' }); } From 3df994611ff50617b863faf55b97a70beca73560 Mon Sep 17 00:00:00 2001 From: IdanILT Date: Tue, 11 May 2021 11:29:05 +0300 Subject: [PATCH 09/15] namespace --- packages/examples/k8s/start | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/examples/k8s/start b/packages/examples/k8s/start index d6fbb2da3..6d27c1bf4 100755 --- a/packages/examples/k8s/start +++ b/packages/examples/k8s/start @@ -24,6 +24,7 @@ apiVersion: v1 kind: ServiceAccount metadata: name: default + namespace: scalecube-example EOF From 87007a02d8b00b4d39af2af5aa52e3f100de697c Mon Sep 17 00:00:00 2001 From: IdanILT Date: Tue, 11 May 2021 11:56:02 +0300 Subject: [PATCH 10/15] pull --- .../k8s/helm-scalecube-ex/templates/serviceAccount.yaml | 6 ------ packages/examples/k8s/start | 2 ++ 2 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml diff --git a/packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml b/packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml deleted file mode 100644 index f561dc6ef..000000000 --- a/packages/examples/k8s/helm-scalecube-ex/templates/serviceAccount.yaml +++ /dev/null @@ -1,6 +0,0 @@ -#apiVersion: v1 -#kind: ServiceAccount -#metadata: -# name: default -# namespace: kube-system -#automountServiceAccountToken: false diff --git a/packages/examples/k8s/start b/packages/examples/k8s/start index 6d27c1bf4..8590bda7f 100755 --- a/packages/examples/k8s/start +++ b/packages/examples/k8s/start @@ -16,7 +16,9 @@ done # for real k8s publish docker image and use it docker build . -t scalecube-example:k8s kind create cluster --name scalecube-example --config cluster.yml || echo "cluster exists, for clean run: kind delete cluster --name scalecube-example" +docker pull scalecube-example:k8s 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 < Date: Tue, 11 May 2021 12:18:25 +0300 Subject: [PATCH 11/15] remove pull --- packages/examples/k8s/start | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/examples/k8s/start b/packages/examples/k8s/start index 8590bda7f..d8ed57c5a 100755 --- a/packages/examples/k8s/start +++ b/packages/examples/k8s/start @@ -16,7 +16,6 @@ done # for real k8s publish docker image and use it docker build . -t scalecube-example:k8s kind create cluster --name scalecube-example --config cluster.yml || echo "cluster exists, for clean run: kind delete cluster --name scalecube-example" -docker pull scalecube-example:k8s kind load docker-image --name scalecube-example scalecube-example:k8s kubectl config use-context kind-scalecube-example From ce50877e89f2f961f775817df16a76e71067d2ff Mon Sep 17 00:00:00 2001 From: IdanILT Date: Tue, 11 May 2021 12:49:10 +0300 Subject: [PATCH 12/15] debug --- packages/examples/k8s/start | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/examples/k8s/start b/packages/examples/k8s/start index d8ed57c5a..329934315 100755 --- a/packages/examples/k8s/start +++ b/packages/examples/k8s/start @@ -15,6 +15,7 @@ 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 From 69ab14016a8e9a3942b3fee05a4149bd9c72a82c Mon Sep 17 00:00:00 2001 From: IdanILT Date: Wed, 12 May 2021 13:02:29 +0300 Subject: [PATCH 13/15] debug --- packages/examples/k8s/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/examples/k8s/Dockerfile b/packages/examples/k8s/Dockerfile index c4d9aba02..1851271d9 100644 --- a/packages/examples/k8s/Dockerfile +++ b/packages/examples/k8s/Dockerfile @@ -1,4 +1,4 @@ -FROM node:alpine +FROM node:lts-alpine3.11 RUN apk add python make g++ COPY . /var/app WORKDIR /var/app From a7509441e5f657aee2dd137bc8ae1ae99083aa45 Mon Sep 17 00:00:00 2001 From: IdanILT Date: Wed, 12 May 2021 19:50:13 +0300 Subject: [PATCH 14/15] added cdn to readme --- packages/rsocket-ws-gateway-client/README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/rsocket-ws-gateway-client/README.md b/packages/rsocket-ws-gateway-client/README.md index 3b8781f17..56beb8451 100644 --- a/packages/rsocket-ws-gateway-client/README.md +++ b/packages/rsocket-ws-gateway-client/README.md @@ -7,6 +7,9 @@ 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'; @@ -20,3 +23,19 @@ const definition = { const proxy = await createGatewayProxy('ws://localhost:3000', definition); const resp = await proxy.methodA() // => 'ok' ``` + +Available also as IFFE at JSDELIVER +```html + + +``` \ No newline at end of file From 420c36977a001002146173126a1fe30ceb958619 Mon Sep 17 00:00:00 2001 From: IdanILT Date: Wed, 12 May 2021 19:55:39 +0300 Subject: [PATCH 15/15] lint --- packages/rsocket-ws-gateway-client/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rsocket-ws-gateway-client/README.md b/packages/rsocket-ws-gateway-client/README.md index 56beb8451..c6f2910e5 100644 --- a/packages/rsocket-ws-gateway-client/README.md +++ b/packages/rsocket-ws-gateway-client/README.md @@ -38,4 +38,4 @@ Available also as IFFE at JSDELIVER const connection = sc.createGatewayProxy('ws://localhost:3000', definition); const resp = connection.then((proxy) => proxy.methodA()) // => 'ok' -``` \ No newline at end of file +```