@siemsiem/tonpleun 0.1.2 → 1.0.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 (46) hide show
  1. package/dist/GEN.d.ts +1 -0
  2. package/dist/GEN.js +12 -0
  3. package/dist/GEN.js.map +1 -0
  4. package/dist/client.js +20 -15
  5. package/dist/client.js.map +1 -1
  6. package/dist/client2.js +17 -10
  7. package/dist/client2.js.map +1 -1
  8. package/dist/clientLib.d.ts +4 -3
  9. package/dist/clientLib.js +85 -41
  10. package/dist/clientLib.js.map +1 -1
  11. package/dist/helpers.js +10 -5
  12. package/dist/helpers.js.map +1 -1
  13. package/dist/server.js +56 -31
  14. package/dist/server.js.map +1 -1
  15. package/dist/test3.d.ts +1 -0
  16. package/dist/test3.js +16 -0
  17. package/dist/test3.js.map +1 -0
  18. package/dist/types.d.ts +10 -2
  19. package/dist/types.js +7 -4
  20. package/dist/types.js.map +1 -1
  21. package/dist/v1/client.js +7 -5
  22. package/dist/v1/client.js.map +1 -1
  23. package/dist/v1/lib.js +66 -55
  24. package/dist/v1/lib.js.map +1 -1
  25. package/dist/v1/main.js +4 -2
  26. package/dist/v1/main.js.map +1 -1
  27. package/dist/v1/test2.js +7 -5
  28. package/dist/v1/test2.js.map +1 -1
  29. package/package.json +12 -11
  30. package/src/GEN.ts +11 -0
  31. package/src/client.ts +1 -1
  32. package/src/client2.ts +4 -1
  33. package/src/clientLib.ts +40 -7
  34. package/src/server.ts +29 -3
  35. package/src/test3.ts +11 -0
  36. package/src/types.ts +11 -2
  37. package/dist/client.d.ts.map +0 -1
  38. package/dist/client2.d.ts.map +0 -1
  39. package/dist/clientLib.d.ts.map +0 -1
  40. package/dist/helpers.d.ts.map +0 -1
  41. package/dist/server.d.ts.map +0 -1
  42. package/dist/types.d.ts.map +0 -1
  43. package/dist/v1/client.d.ts.map +0 -1
  44. package/dist/v1/lib.d.ts.map +0 -1
  45. package/dist/v1/main.d.ts.map +0 -1
  46. package/dist/v1/test2.d.ts.map +0 -1
package/src/clientLib.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import WebSocket from 'ws';
2
2
  import { randomUUID } from 'crypto';
3
- import { requestType, stringPacketOptions, type getServicePacketClient, type GetServiceResponsePacketToServer, type GetServiceResponsePacketToClient, type InitPacket, type packet, type StringPacket, type registerConfigPacket, type setConfigPacket, type fakeTypeType } from './types.js';
3
+ import { requestType, stringPacketOptions, type getServicePacketClient, type GetServiceResponsePacketToServer, type GetServiceResponsePacketToClient, type InitPacket, type packet, type StringPacket, type registerConfigPacket, type setConfigPacket, type fakeTypeType, type namedFakeType, InitResponsePacket } from './types.js';
4
4
  import { WsSend } from './helpers.js';
5
+ import { assert } from 'console';
6
+ import { writeFileSync, mkdirSync } from 'fs';
7
+ import { dirname } from 'path';
5
8
 
6
9
  const url = "ws://localhost:8765";
7
10
  export let ws: WebSocket;
@@ -9,6 +12,22 @@ const serviceCallbacks = new Map<string, (...args: any[]) => any>();
9
12
  let clinetIDStore = "error";
10
13
  const localConfigs = new Map<string, registerConfigPacket>();
11
14
 
15
+ const VERSION = {
16
+ MAJOR: 1,
17
+ MINOR: 1,
18
+ PATCH: 2
19
+ }
20
+ export async function genHelper() {
21
+ console.info('genHelper called');
22
+ const result = await getService('genHelper', 'tonpleun', []);
23
+
24
+ const outPath = dirname('./src/GEN.ts');
25
+ mkdirSync(outPath, { recursive: true });
26
+ writeFileSync('./src/GEN.ts', result);
27
+ console.info('GEN.ts gegenereerd in ./src/GEN.ts');
28
+ return result;
29
+ }
30
+
12
31
  export async function awaitServiceMessage(expectedFor: stringPacketOptions): Promise<StringPacket> {
13
32
  return new Promise<StringPacket>((resolve) => {
14
33
  const handler = (raw: Buffer) => {
@@ -48,7 +67,7 @@ export async function SetConfigItem(idthing: string, newValue: string, clientId?
48
67
  });
49
68
  }
50
69
 
51
- export async function registerService(ServiceId: string, args: fakeTypeType[], callback: (...args: any[]) => any) {
70
+ export async function registerService(ServiceId: string, args: namedFakeType[], callback: (...args: any[]) => any) {
52
71
  WsSend(ws, { type: requestType.RegisterService, data: { ServiceId, args } });
53
72
  serviceCallbacks.set(ServiceId, callback);
54
73
  return new Promise<void>((resolve) => {
@@ -120,11 +139,25 @@ export async function initializeClient(ClientId: string) {
120
139
  }
121
140
  });
122
141
 
123
- // Wacht tot de verbinding is geopend
124
- return new Promise<void>((resolve) => {
125
- awaitServiceMessage(stringPacketOptions.initSuccess).then(() => {
126
- resolve();
127
- });
142
+ return new Promise<StringPacket>((resolve) => {
143
+ const handler = (raw: Buffer) => {
144
+ const rawPacket = JSON.parse(raw.toString()) as packet;
145
+ if (rawPacket.type === requestType.Init) {
146
+ const data = rawPacket.data as InitResponsePacket;
147
+ assert(data.versionMajor === VERSION.MAJOR, `Major versie mismatch: Client versie is ${VERSION.MAJOR}, server versie is ${data.versionMajor}.`);
148
+ if (data.versionMinor !== VERSION.MINOR) {
149
+ console.warn(`Waarschuwing: Minor versie mismatch: Client versie is ${VERSION.MINOR}, server versie is ${data.versionMinor}. Mogelijk zijn er incompatibiliteiten.`);
150
+ }
151
+ if (data.versionPatch !== VERSION.PATCH) {
152
+ console.warn(`Waarschuwing: Patch versie mismatch: Client versie is ${VERSION.PATCH}, server versie is ${data.versionPatch}. Mogelijk zijn er bugs of ontbrekende functies.`);
153
+ }
154
+ ws.removeListener('message', handler);
155
+ console.info('Client geïnitialiseerd met versie:', data.versionMajor, data.versionMinor, data.versionPatch);
156
+ console.info('gebruik via GEN.ts is aanbevolen')
157
+ resolve({ for: stringPacketOptions.initSuccess, msg: 'Init succesvol' } as StringPacket);
158
+ }
159
+ };
160
+ ws.on('message', handler);
128
161
  });
129
162
  }
130
163
 
package/src/server.ts CHANGED
@@ -1,17 +1,43 @@
1
1
  import { log, successPacketBuilder, WsSend } from './helpers.js';
2
2
  import { WebSocketServer, WebSocket } from 'ws';
3
- import { requestType, stringPacketOptions, type args, type getServicePacket, type getServicePacketClient, type GetServiceResponsePacketToClient, type InitPacket, type packet, type registerConfigPacket, type RegisterServicePacket, type setConfigPacket } from './types.js';
3
+ import { InitResponsePacket, requestType, stringPacketOptions, type namedFakeType, type getServicePacket, type getServicePacketClient, type GetServiceResponsePacketToClient, type InitPacket, type packet, type registerConfigPacket, type RegisterServicePacket, type setConfigPacket } from './types.js';
4
4
 
5
5
  function mapToObject(map: Map<any, any>) {
6
6
  return Object.fromEntries([...map.entries()].map(([kMaxLength, v]): any => [kMaxLength, v instanceof Map ? mapToObject(v) : v]))
7
7
  }
8
8
 
9
+ const VERSION = {
10
+ MAJOR: 1,
11
+ MINOR: 1,
12
+ PATCH: 2
13
+ }
14
+
9
15
  let clients: Record<string, WebSocket> = {};
10
- let services = new Map<string, Map<string, args>>();
16
+ let services = new Map<string, Map<string, namedFakeType[]>>();
11
17
  let configs = new Map<string, Map<string, registerConfigPacket>>();
12
18
  let localServices = new Map<string, (...args: any[]) => any>();
13
19
  localServices.set('getServices', (...args: any[]) => { return mapToObject(services) })
14
20
  localServices.set('getConfigs', (...args: any[]) => { return mapToObject(configs) })
21
+ localServices.set('genHelper', (...args: any[]) => {
22
+ let output = '/* Dit bestand is automatisch gegenereerd door Tonpleun. Wijzigingen hierin worden overschreven. */\n\n';
23
+ output += `import { getService } from './clientLib.js';\n\n`;
24
+
25
+ services.forEach((serviceMap, clientId) => {
26
+ output += `// Services for client: ${clientId}\n`;
27
+ serviceMap.forEach((argTypes, serviceId) => {
28
+ output += `// ${serviceId}\n`;
29
+ output += `export async function ${serviceId}(`;
30
+ output += argTypes.map((type, _) => `${type.name}: ${type.type}`).join(', ');
31
+ output += `): Promise<any> {\n`;
32
+ output += ` return await getService('${serviceId}', '${clientId}', [${argTypes.map((arg, _) => `${arg.name}`).join(', ')}]);\n`;
33
+ output += `}\n\n`;
34
+ });
35
+ });
36
+
37
+ output += `// Tonpleun versie: ${VERSION.MAJOR}.${VERSION.MINOR}.${VERSION.PATCH}\n`;
38
+ output += `// Genereer dit bestand opnieuw met de genHelper service indien services zijn gewijzigd.\n`;
39
+ return output;
40
+ });
15
41
  // Map a unique connectionId to the original requester WebSocket
16
42
  const connectionMap = new Map<string, WebSocket>();
17
43
  const wsServer = new WebSocketServer({ host: '0.0.0.0', port: 8765 });
@@ -31,7 +57,7 @@ wsServer.on('connection', (ws, req) => {
31
57
  // initialize per-client config store to avoid undefined access
32
58
  configs.set(id, new Map())
33
59
  log(id, 'ws init gedaan, client id gegeven. ip: ', req.socket.remoteAddress);
34
- WsSend(ws, successPacketBuilder('init gedaan.', stringPacketOptions.initSuccess));
60
+ WsSend(ws, { type: requestType.Init, data: { versionMajor: VERSION.MAJOR, versionMinor: VERSION.MINOR, versionPatch: VERSION.MINOR } as InitResponsePacket } as packet);
35
61
  break;
36
62
  case requestType.RegisterService:
37
63
  data = jsonData.data as RegisterServicePacket;
package/src/test3.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { getService, initializeClient, SetConfigItem, genHelper } from './clientLib.js'
2
+ import { echo } from './GEN.js';
3
+ import assert from 'node:assert/strict';
4
+
5
+ async function main() {
6
+ await initializeClient('Client3');
7
+ echo('Hello from Client3').then((result) => {
8
+ assert.equal(result, 'pindakaas');
9
+ });
10
+ }
11
+ main();
package/src/types.ts CHANGED
@@ -10,6 +10,10 @@ export enum requestType {
10
10
  }
11
11
  export enum stringPacketOptions { Error, initSuccess, registerServiceSuccess, getServiceSuccess, registerConfigSuccess, setConfigSuccess };
12
12
  export type fakeTypeType = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
13
+ export type namedFakeType = {
14
+ name: string,
15
+ type: fakeTypeType
16
+ };
13
17
  export type packet = {
14
18
  type: requestType,
15
19
  data: any,
@@ -18,6 +22,12 @@ export type packet = {
18
22
  export type InitPacket = {
19
23
  ClientId: string,
20
24
  }
25
+ // requestType.Init response
26
+ export type InitResponsePacket = {
27
+ versionMajor: number,
28
+ versionMinor: number,
29
+ versionPatch: number,
30
+ }
21
31
  // requestType.Success en requestType.Error
22
32
  export type StringPacket = {
23
33
  msg: string,
@@ -26,7 +36,7 @@ export type StringPacket = {
26
36
  // requestType.RegisterService
27
37
  export type RegisterServicePacket = {
28
38
  ServiceId: string,
29
- args: fakeTypeType[]
39
+ args: namedFakeType[]
30
40
  }
31
41
  // requestType.GetService ( client1 -> server)
32
42
  export type getServicePacket = {
@@ -35,7 +45,6 @@ export type getServicePacket = {
35
45
  connectionId: string,
36
46
  args: any[],
37
47
  }
38
- export type args = fakeTypeType[];
39
48
  // requestType.getService (server -> client2)
40
49
  export type getServicePacketClient = {
41
50
  ServiceId: string,
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client2.d.ts","sourceRoot":"","sources":["../src/client2.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"clientLib.d.ts","sourceRoot":"","sources":["../src/clientLib.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAe,mBAAmB,EAA2I,KAAK,YAAY,EAAmD,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI9R,eAAO,IAAI,EAAE,EAAE,SAAS,CAAC;AAKzB,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAcjG;AACD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAUzG;AACD,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,iBAWvF;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,iBAQ/G;AACD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAgBjG;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,iBAmDtD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAG1D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAChC,OAAO,EAAe,mBAAmB,EAAE,KAAK,MAAM,EAAqB,MAAM,YAAY,CAAC;AAC9F,wBAAgB,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAGxC;AACD,wBAAgB,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,QAEjD;AACD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,mBAAmB,GACgB,MAAM,CAC7F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACnB,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,KAAK,IAAA;IACL,eAAe,IAAA;IACf,kBAAkB,IAAA;IAClB,UAAU,IAAA;IACV,cAAc,IAAA;IACd,SAAS,IAAA;CACZ;AACD,oBAAY,mBAAmB;IAAG,KAAK,IAAA;IAAE,WAAW,IAAA;IAAE,sBAAsB,IAAA;IAAE,iBAAiB,IAAA;IAAE,qBAAqB,IAAA;IAAE,gBAAgB,IAAA;CAAE;AAC1I,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AACvH,MAAM,MAAM,MAAM,GAAG;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;CACb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,mBAAmB,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CAAA;AACD,MAAM,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;AAElC,MAAM,MAAM,sBAAsB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACxB,CAAA;AAGD,MAAM,MAAM,gCAAgC,GAAG;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACxB,CAAA;AAGD,MAAM,MAAM,gCAAgC,GAAG;IAC3C,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAA;CACd,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,EAAE,EAAE,MAAM,CAAA;CACb,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/v1/client.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../src/v1/lib.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAI3B,MAAM,MAAM,OAAO,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;CAEf,CAAC;AAEF,oBAAY,UAAU;IAClB,GAAG,IAAA;IACH,IAAI,IAAA;IACJ,GAAG,IAAA;CACN;AAED,eAAO,IAAI,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,CAAC;AAE5C,eAAO,IAAI,EAAE,EAAE,SAAS,CAAC;AAEzB,eAAO,IAAI,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAW,CAAC;AAC/D,eAAO,IAAI,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAW,CAAC;AAC9D,eAAO,IAAI,YAAY,EAAE,OAAe,CAAC;AA0CzC,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAYhG;AACD,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAc1H;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAaxH;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAenF;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAiBzH;AACD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,oBAezD;AAED,wBAAsB,gBAAgB,kBA2BrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/v1/main.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"test2.d.ts","sourceRoot":"","sources":["../../src/v1/test2.ts"],"names":[],"mappings":""}