@wishcore/wish-rpc 0.6.10 → 0.6.11

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.
@@ -1,7 +1,5 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
1
  import { ResponseMessage } from './index';
4
- export declare class Client extends EventEmitter {
2
+ export declare class Client {
5
3
  private write;
6
4
  private requests;
7
5
  private id;
@@ -10,10 +10,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.Client = void 0;
13
- const events_1 = require("events");
14
- class Client extends events_1.EventEmitter {
13
+ class Client {
15
14
  constructor(write, opts) {
16
- super();
17
15
  this.write = write;
18
16
  this.requests = {};
19
17
  this.id = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/rpc-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/rpc-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@wishcore/wish-rpc",
3
3
  "author": "André Kaustell <andre.kaustell@wishtech.fi>",
4
4
  "description": "An RPC implementation for Node.js, initally developed for the Wish project.",
5
- "version": "0.6.10",
5
+ "version": "0.6.11",
6
6
  "main": "dist/src/index.js",
7
7
  "license": "Apache-2.0",
8
8
  "repository": {
@@ -10,6 +10,7 @@
10
10
  "url": "git+ssh://wish.cto.fi:/git/wish-rpc#master"
11
11
  },
12
12
  "scripts": {
13
+ "build": "tsc",
13
14
  "test": "mocha --exit -r ts-node/register test/**/*.spec.ts",
14
15
  "test-only": "mocha --exit -r ts-node/register",
15
16
  "coverage": "istanbul cover --hook-run-in-context _mocha -- -R spec",
package/dist/index.d.ts DELETED
@@ -1,28 +0,0 @@
1
- export interface MethodMap {
2
- [endpoint: string]: any;
3
- }
4
- export interface RequestMessage {
5
- op: string;
6
- args?: any[];
7
- id?: number;
8
- push?: number;
9
- sig?: number;
10
- data?: any;
11
- end?: number;
12
- stream?: any;
13
- }
14
- export interface ResponseMessage {
15
- ack?: number;
16
- err?: number;
17
- sig?: number;
18
- end?: number;
19
- push?: number;
20
- data?: any;
21
- }
22
- export interface RequestMap {
23
- [clientId: string]: {
24
- [requestId: string]: any;
25
- };
26
- }
27
- export * from './rpc-client';
28
- export * from './rpc-server';
package/dist/index.js DELETED
@@ -1,8 +0,0 @@
1
- "use strict";
2
- function __export(m) {
3
- for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4
- }
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- __export(require("./rpc-client"));
7
- __export(require("./rpc-server"));
8
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AA+BA,kCAA6B;AAC7B,kCAA6B"}
@@ -1,17 +0,0 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import { ResponseMessage } from 'src';
4
- export declare class Client extends EventEmitter {
5
- private write;
6
- private requests;
7
- private id;
8
- private mtu;
9
- constructor(write: (msg: ResponseMessage) => void, opts?: {
10
- mtu: number;
11
- });
12
- destroy(): void;
13
- messageReceived(msg: any, next: any): void;
14
- request(op: string, args: any[], cb: any): number | null;
15
- send(id: number, data: any): void;
16
- end(id: number): void;
17
- }
@@ -1,98 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const events_1 = require("events");
4
- class Client extends events_1.EventEmitter {
5
- constructor(write, opts) {
6
- super();
7
- this.write = write;
8
- this.requests = {};
9
- this.id = 0;
10
- this.mtu = 65535;
11
- if (opts && opts.mtu) {
12
- this.mtu = opts.mtu;
13
- }
14
- }
15
- destroy() {
16
- this.requests = null;
17
- this.write = null;
18
- }
19
- messageReceived(msg, next) {
20
- //console.log("RpcClient received message", msg);
21
- const end = !!(msg.err || msg.ack || msg.fin);
22
- const id = msg.ack || msg.err || msg.sig || msg.fin;
23
- const request = this.requests[id];
24
- let retval;
25
- if (request && typeof request.cb === 'function') {
26
- let err;
27
- if (msg.fin) {
28
- // This request closed gracefully
29
- request.cb.call(request.context, null, null, true);
30
- }
31
- else {
32
- if (request.canceled) {
33
- console.log('This request is canceled. Not calling the callback.');
34
- }
35
- else {
36
- // all is good, call the callback function
37
- err = msg.err ? msg.data : null;
38
- retval = request.cb.call(request.context, err, msg.data, end);
39
- }
40
- }
41
- }
42
- if (end) {
43
- //console.log("deleting this request", id);
44
- delete this.requests[id];
45
- }
46
- return retval;
47
- }
48
- request(op, args, cb) {
49
- if (typeof args === 'function') {
50
- cb = args;
51
- args = null;
52
- }
53
- if (!Array.isArray(args)) {
54
- args = typeof args === 'undefined' || args === null ? null : [args];
55
- }
56
- if (typeof cb !== 'function') {
57
- cb = null;
58
- }
59
- const msg = { op };
60
- if (Array.isArray(args)) {
61
- msg.args = args;
62
- }
63
- if (cb) {
64
- //console.log("we have a cb.", cb, new Error().stack);
65
- msg.id = ++this.id;
66
- this.requests[msg.id] = {
67
- cb: cb,
68
- context: {
69
- id: msg.id,
70
- cancel: () => {
71
- setTimeout(((id) => {
72
- return () => {
73
- if (this.requests[id]) {
74
- console.log('rpc-client.js: timeout, the request has not been removed while it was canceled', id, this.requests[id]);
75
- }
76
- };
77
- })(msg.id), 1500);
78
- this.requests[msg.id].canceled = true;
79
- this.write({ end: msg.id });
80
- },
81
- emit: (data) => {
82
- return this.write({ sig: msg.id, data: data });
83
- }
84
- }
85
- };
86
- }
87
- this.write(msg);
88
- return msg.id || null;
89
- }
90
- send(id, data) {
91
- this.write({ push: id, data });
92
- }
93
- end(id) {
94
- this.write({ end: id });
95
- }
96
- }
97
- exports.Client = Client;
98
- //# sourceMappingURL=rpc-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- /**
2
- * The idea is to be able to easily register methods/functions to be called
3
- * remotely, to enable access control and return data directly, asynchronously or
4
- * opening a stream which delivers data for long running tasks or large data
5
- * transfers.
6
- *
7
- * When registerCore is run with the wish core instance, it reads all objects
8
- * that have a property named "_". It scans those properties for properties
9
- * which have a descriptor property with the same name prepended with "_".
10
- *
11
- * Sub modules are not implemented yet, but an example should look like the
12
- * relay, module below.
13
- *
14
- * Ex.
15
- * rpc.insertMethods({
16
- * _doThis: {
17
- * doc: "This function does this, and emits progress each second and end.",
18
- * },
19
- * doThis: function(req,res) {
20
- * ...
21
- * },
22
- * _relay: {
23
- * doc: "A bunch of relay related functions"
24
- * },
25
- * relay: {
26
- * _test: {},
27
- * test: function() {},
28
- * _list: {},
29
- * list: function() {}
30
- * }
31
- * });
32
- */
33
- import { MethodMap, RequestMessage } from 'src';
34
- export declare class Server {
35
- private modules;
36
- private methods;
37
- private requests;
38
- private clientIdCounter;
39
- /** internal request id counter */
40
- private requestId;
41
- /** counting id for rpc invoke function */
42
- private invokeId;
43
- constructor(methods?: MethodMap);
44
- destroy(): void;
45
- insertMethods(o: any): void;
46
- addMethods(path: string, o: MethodMap): void;
47
- listMethods(args: any, context: any, cb: any): void;
48
- clientOffline(clientId: number): void;
49
- closeAll(): void;
50
- parse(msg: RequestMessage, respond: any, context: any, clientId: number): void;
51
- emit(op: string, data: any): void;
52
- invokeRaw(msg: RequestMessage, respond: any, context: any, clientId: any): void;
53
- close(clientId: number): void;
54
- open(): number;
55
- }
@@ -1,414 +0,0 @@
1
- "use strict";
2
- /**
3
- * The idea is to be able to easily register methods/functions to be called
4
- * remotely, to enable access control and return data directly, asynchronously or
5
- * opening a stream which delivers data for long running tasks or large data
6
- * transfers.
7
- *
8
- * When registerCore is run with the wish core instance, it reads all objects
9
- * that have a property named "_". It scans those properties for properties
10
- * which have a descriptor property with the same name prepended with "_".
11
- *
12
- * Sub modules are not implemented yet, but an example should look like the
13
- * relay, module below.
14
- *
15
- * Ex.
16
- * rpc.insertMethods({
17
- * _doThis: {
18
- * doc: "This function does this, and emits progress each second and end.",
19
- * },
20
- * doThis: function(req,res) {
21
- * ...
22
- * },
23
- * _relay: {
24
- * doc: "A bunch of relay related functions"
25
- * },
26
- * relay: {
27
- * _test: {},
28
- * test: function() {},
29
- * _list: {},
30
- * list: function() {}
31
- * }
32
- * });
33
- */
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- const debug = console.log;
36
- class Server {
37
- constructor(methods) {
38
- this.modules = {};
39
- this.methods = {};
40
- this.requests = {};
41
- this.clientIdCounter = 0;
42
- /** internal request id counter */
43
- this.requestId = 0;
44
- /** counting id for rpc invoke function */
45
- this.invokeId = 0;
46
- if (methods) {
47
- this.insertMethods(methods);
48
- }
49
- }
50
- destroy() {
51
- for (const i in this.requests) {
52
- for (const j in this.requests[i]) {
53
- if (typeof this.requests[i][j].end === 'function') {
54
- this.requests[i][j].end();
55
- }
56
- }
57
- delete this.requests[i];
58
- }
59
- }
60
- insertMethods(o) {
61
- const path = '';
62
- this.addMethods(path, o);
63
- }
64
- addMethods(path, o) {
65
- //console.log("addMethods", path, o);
66
- const prefix = path ? path + '.' : '';
67
- for (const i in o) {
68
- if (i === '_') {
69
- // module meta
70
- }
71
- else if (i.substring(0, 1) !== '_') {
72
- if (o['_' + i]) {
73
- // publish is _funcName exists for funcName
74
- if (typeof o[i] === 'function') {
75
- const ip = o['_' + i].name || i;
76
- o['_' + i].fullname = prefix + ip;
77
- try {
78
- this.modules[prefix + ip] = o['_' + i];
79
- this.methods[prefix + ip] = o[i];
80
- const acl = this.modules[prefix + ip].acl;
81
- const isPublic = this.modules[prefix + ip].public;
82
- // public property is deprecated, use acl = false instead
83
- if (isPublic) {
84
- delete this.modules[prefix + ip]['public'];
85
- }
86
- if (acl === false || isPublic === true) {
87
- // access control is explicitly disabled, allow access
88
- this.modules[prefix + ip].acl = false;
89
- }
90
- else if (acl === true || typeof acl === 'undefined') {
91
- this.modules[prefix + ip].acl = ['_call'];
92
- }
93
- if (Array.isArray(acl)) {
94
- if (acl.indexOf('_call') === -1) {
95
- this.modules[prefix + ip].acl.push('_call');
96
- }
97
- }
98
- //this.selfs[prefix + ip] = o;
99
- }
100
- catch (e) {
101
- console.log('Kaboom! ', e);
102
- }
103
- }
104
- else if (typeof o[i] === 'object') {
105
- // this is a sub item
106
- //this.modules[prefix + i] = o['_' + i];
107
- this.addMethods(prefix + i, o[i]);
108
- }
109
- }
110
- else {
111
- // no _funcName found, do not publish via RPC
112
- }
113
- }
114
- }
115
- }
116
- listMethods(args, context, cb) {
117
- const result = {};
118
- function copy(s, filter) {
119
- const d = {};
120
- for (const j in s) {
121
- if (filter[j]) {
122
- continue;
123
- }
124
- d[j] = s[j];
125
- }
126
- return d;
127
- }
128
- const filter = { fullname: true };
129
- //console.log("no acl.");
130
- for (const i in this.modules) {
131
- result[i] = copy(this.modules[i], filter);
132
- }
133
- cb(null, result);
134
- }
135
- clientOffline(clientId) {
136
- for (const i in this.requests[clientId]) {
137
- if (typeof this.requests[clientId][i].end === 'function') {
138
- this.requests[clientId][i].end();
139
- }
140
- //console.log("Ended due to client offline:", this.requests[clientId][i]);
141
- delete this.requests[clientId][i];
142
- }
143
- }
144
- closeAll() {
145
- for (const i in this.requests) {
146
- for (const j in this.requests[i]) {
147
- if (typeof this.requests[i][j].end === 'function') {
148
- this.requests[i][j].end();
149
- }
150
- //console.log("Ended due to client offline:", this.requests[i][j]);
151
- delete this.requests[i][j];
152
- }
153
- }
154
- }
155
- parse(msg, respond, context, clientId) {
156
- if (typeof clientId !== 'number') {
157
- //console.log("Got RPC request from unspecified client, setting clientId to __none.");
158
- return;
159
- }
160
- try {
161
- if (msg.push) {
162
- if (this.requests[clientId] && this.requests[clientId][msg.push]) {
163
- this.invokeRaw(msg, respond, this.requests[clientId][msg.push].context, clientId);
164
- }
165
- return;
166
- }
167
- if (msg.sig) {
168
- if (this.requests[clientId] && this.requests[clientId][msg.sig]) {
169
- this.invokeRaw(msg, respond, this.requests[clientId][msg.sig].context, clientId);
170
- }
171
- return;
172
- }
173
- if (msg.end) {
174
- const id = msg.end;
175
- //console.log("end this request:", clientId, id, this.requests[clientId] ? this.requests[clientId][id] : this.requests);
176
- if (this.requests[clientId] && this.requests[clientId][id]) {
177
- if (typeof this.requests[clientId][id].end === 'function') {
178
- this.requests[clientId][id].end();
179
- }
180
- respond({ fin: id });
181
- delete this.requests[clientId][id];
182
- return;
183
- }
184
- if (!this.requests[clientId][id]) {
185
- return; // console.log("No such request...", id, clientId, new Error().stack, this.requests[clientId], this.requests);
186
- }
187
- if (typeof this.requests[clientId][id].end === 'function') {
188
- this.requests[id].end();
189
- }
190
- return;
191
- }
192
- if (msg.op === 'methods') {
193
- this.listMethods(msg.args, context, function (err, data) {
194
- respond({ ack: msg.id, data: data });
195
- });
196
- return;
197
- }
198
- if (typeof this.methods[msg.op] === 'undefined') {
199
- // service not found
200
- respond({ err: msg.id, data: { code: 300, msg: 'No method found: ' + msg.op } });
201
- return;
202
- }
203
- this.invokeRaw(msg, respond, context, clientId);
204
- }
205
- catch (e) {
206
- debug('Dynamic RPC failed to execute ', msg.op, e, e.stack);
207
- try {
208
- console.log('RPC caught error', e.stack);
209
- respond({ ack: msg.id, err: msg.id, data: 'caught error in ' + msg.op + ': ' + e.toString(), debug: e.stack });
210
- }
211
- catch (e) {
212
- respond({ err: msg.id, data: 'rpc', errmsg: e.toString() });
213
- }
214
- }
215
- }
216
- emit(op, data) {
217
- for (const client in this.requests) {
218
- if (this.requests[client]) {
219
- for (const id in this.requests[client]) {
220
- if (this.requests[client][id].op === op) {
221
- const { send } = this.requests[client][id];
222
- send({ sig: id, data });
223
- }
224
- }
225
- }
226
- }
227
- }
228
- invokeRaw(msg, respond, context, clientId) {
229
- ++this.requestId;
230
- if (!this.requests[clientId]) {
231
- return console.log('Session not opened for client. Use Server.open() first');
232
- }
233
- if (msg.push) {
234
- // we got a sig from client... neat, must be streaming!
235
- const ctx = this.requests[clientId][msg.push];
236
- //console.log('stream context:', ctx);
237
- if (msg.data === null) {
238
- console.log('msg.data is null:', msg);
239
- return;
240
- }
241
- ctx.data(msg.data);
242
- return;
243
- }
244
- if (msg.sig) {
245
- // we got a sig from client... neat, must be streaming!
246
- const ctx = this.requests[clientId][msg.sig];
247
- // call the actual method
248
- try {
249
- this.methods[ctx.op].call(this.requests[clientId][msg.sig], msg.data, {
250
- send: (data) => {
251
- if (typeof ctx.end === 'function') {
252
- ctx.end();
253
- }
254
- if (this.requests[clientId][msg.sig]) {
255
- delete this.requests[clientId][msg.sig];
256
- }
257
- respond({ ack: msg.sig, data: data });
258
- },
259
- emit: (data) => {
260
- if (!this.requests[clientId][msg.sig]) {
261
- if (typeof ctx.end === 'function') {
262
- ctx.end();
263
- }
264
- }
265
- return respond({ sig: msg.sig, data: data });
266
- },
267
- error: (data) => {
268
- if (typeof ctx.end === 'function') {
269
- ctx.end();
270
- }
271
- delete this.requests[clientId][msg.sig];
272
- respond({ err: msg.sig, data: data });
273
- },
274
- close: (data) => {
275
- if (typeof ctx.end === 'function') {
276
- ctx.end();
277
- }
278
- delete this.requests[clientId][msg.sig];
279
- respond({ fin: msg.sig });
280
- }
281
- }, context);
282
- }
283
- catch (e) {
284
- console.log('Calling the method in RPC failed:', msg.op, msg.args, e.stack);
285
- delete this.requests[clientId][msg.sig];
286
- respond({ err: msg.sig, data: { msg: 'rpc failed during execution of ' + msg.op, code: 578 } });
287
- }
288
- return;
289
- }
290
- if (typeof msg.id === 'undefined') {
291
- // this is an event
292
- const reqCtx = {};
293
- this.methods[msg.op].call(reqCtx, { args: msg.args }, {
294
- send: () => { debug('Trying to send response to event (' + msg.op + '). Dropping.'); },
295
- emit: () => { debug('Trying to emit response to event (' + msg.op + '). Dropping.'); },
296
- error: () => { debug('Trying to respond with error to event (' + msg.op + '). Dropping.'); },
297
- close: () => { debug('Trying to close event (' + msg.op + '). Dropping.'); }
298
- }, context);
299
- }
300
- else {
301
- // this is a regular rpc request
302
- const reqCtx = {
303
- id: msg.id,
304
- op: msg.op,
305
- args: msg.args,
306
- context,
307
- end: null,
308
- send: respond,
309
- };
310
- if (!this.requests[clientId]) {
311
- this.requests[clientId] = {};
312
- }
313
- if (this.requests[clientId][msg.id]) {
314
- console.log("Serious warning. There is already a request by that id, we'll kill it off! This session is likely not clean. clientId:", clientId, 'msg', msg, 'stack trace:', new Error().stack);
315
- if (typeof this.requests[clientId][msg.id].end === 'function') {
316
- this.requests[clientId][msg.id].end();
317
- }
318
- delete this.requests[clientId][msg.id];
319
- console.log('Removed old request by same id from same client...');
320
- }
321
- this.requests[clientId][msg.id] = reqCtx;
322
- // call the actual method
323
- try {
324
- this.methods[msg.op].call(reqCtx, { args: msg.args }, {
325
- send: (data) => {
326
- if (typeof reqCtx.end === 'function') {
327
- reqCtx.end();
328
- }
329
- if (this.requests[clientId][msg.id]) {
330
- delete this.requests[clientId][msg.id];
331
- }
332
- respond({ ack: msg.id, data: data });
333
- },
334
- emit: (data) => {
335
- if (!this.requests[clientId][msg.id]) {
336
- if (typeof reqCtx.end === 'function') {
337
- reqCtx.end();
338
- }
339
- }
340
- return respond({ sig: msg.id, data: data });
341
- },
342
- error: (data) => {
343
- if (typeof reqCtx.end === 'function') {
344
- reqCtx.end();
345
- }
346
- delete this.requests[clientId][msg.id];
347
- respond({ err: msg.id, data: data });
348
- },
349
- close: (data) => {
350
- if (typeof reqCtx.end === 'function') {
351
- reqCtx.end();
352
- }
353
- delete this.requests[clientId][msg.id];
354
- respond({ fin: msg.id });
355
- }
356
- }, context);
357
- }
358
- catch (e) {
359
- console.log('Calling the method in RPC failed:', msg.op, msg.args, e.stack);
360
- delete this.requests[clientId][msg.id];
361
- respond({ err: msg.id, data: { msg: 'rpc failed during execution of ' + msg.op, code: 578 } });
362
- }
363
- }
364
- }
365
- /*
366
- invoke(op: string, args: any[], stream: any, cb): void {
367
- if(typeof stream === 'function') { cb = stream; stream = null; }
368
-
369
- if( !Array.isArray(args) ) {
370
- args = [args];
371
- }
372
-
373
- if (typeof cb !== 'function') {
374
- throw new Error('RPC invoke requires callback function as third argument');
375
- }
376
-
377
- const msg: RequestMessage = {
378
- op,
379
- args,
380
- stream,
381
- id: ++this.invokeId
382
- };
383
- const context = {
384
- clientType: 'invoke',
385
- clientId: 'invokedViaRPCInvoke'
386
- };
387
-
388
- const response = (reply) => {
389
- const ctx = { cancel: () => { this.parse({ end: msg.id }, () => { }, {}, 0); }, id: msg.id };
390
- process.nextTick(() => {
391
- cb.call(ctx, reply.err ? true : null, reply.data);
392
- });
393
- };
394
-
395
- this.parse(msg, response, context, '__invoke');
396
- }
397
- */
398
- close(clientId) {
399
- for (const i in this.requests[clientId]) {
400
- if (typeof this.requests[clientId][i].end === 'function') {
401
- this.requests[clientId][i].end();
402
- }
403
- delete this.requests[clientId][i];
404
- }
405
- delete this.requests[clientId];
406
- }
407
- open() {
408
- const clientId = ++this.clientIdCounter;
409
- this.requests[clientId] = {};
410
- return clientId;
411
- }
412
- }
413
- exports.Server = Server;
414
- //# sourceMappingURL=rpc-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc-server.js","sourceRoot":"","sources":["../src/rpc-server.ts"],"names":[],"mappings":"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"}