rosinterface 1.2.1 → 1.3.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.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RosInterface v1.2
1
+ # RosInterface v1.3
2
2
 
3
3
  > **High-Performance RouterOS Automation A modern TypeScript and JavasScript Library for MikroTik interactions.**
4
4
  > Built with Reactive Streaming (onSnapshot), Circuit Breakers for fault tolerance, and an Offline Queue system.
@@ -16,8 +16,12 @@
16
16
 
17
17
  ## English Documentation
18
18
 
19
- **RosInterface** is designed for **ISPs and mission-critical environments**.
20
- It focuses on **connection stability**, **router hardware protection**, and **efficient data access**, even under unstable network conditions.
19
+ **RosInterface** is a high-performance Node.js library designed for ISPs and mission-critical network environments.
20
+ It goes beyond simple API wrappers by introducing a unique Hybrid Engine that seamlessly unifies the transactional safety of REST (HTTPS) with the real-time speed of Sockets (TCP).
21
+ This architecture allows for robust management of mixed environments (RouterOS v6 & v7) without code changes.
22
+
23
+ Built with stability and hardware protection at its core, **RosInterface** ensures efficient data access even under unstable network conditions, preventing CPU spikes and connection floods.
24
+
21
25
 
22
26
  ---
23
27
 
@@ -62,6 +66,19 @@ It focuses on **connection stability**, **router hardware protection**, and **ef
62
66
  - **Intelligent Throttling**
63
67
  Control the flow of real-time data with "Leading + Trailing Edge" strategies.
64
68
 
69
+ - **Intelligent Hybrid Engine:**
70
+
71
+ - Combines the security of the **REST (HTTPS)** protocol for CRUD commands with the speed of **Sockets (TCP)** for data streaming.
72
+ - *RouterOS v7:* Uses HTTPS + Sockets (Background).
73
+ - *RouterOS v6:* Uses pure Sockets (Legacy Mode).
74
+
75
+ - **Swarm Mode:**
76
+ Manages fleets of **50+ routers** from a single instance.
77
+ - Supports **Broadcast** (all nodes) and **Multicast** (selected groups).
78
+ - Fault Tolerance: If one router fails, the rest of the swarm continues operating.
79
+ - Protocol Agnosticism: Mixes modern and legacy routers in the same control group.
80
+
81
+
65
82
  ---
66
83
 
67
84
 
@@ -74,10 +91,47 @@ It focuses on **connection stability**, **router hardware protection**, and **ef
74
91
  Create a `.env` file in the root directory of your project:
75
92
 
76
93
  ```text
77
- MIKROTIK_HOST=ROUTER_IP
78
- MIKROTIK_USER=admin
79
- MIKROTIK_PASSWORD=your_password
80
- MIKROTIK_PORT=8729
94
+ Basic Credentials
95
+ These are the standard login credentials.
96
+
97
+ MIKROTIK_HOST: Your router's IP address (e.g., 192.168.1.1).
98
+
99
+ MIKROTIK_USER: Username with write permissions (e.g., admin).
100
+
101
+ MIKROTIK_PASSWORD: User password.
102
+
103
+ The Brain (Main Protocol)
104
+ Here you decide how commands (Create, Edit, Delete) will be sent.
105
+
106
+ MIKROTIK_PROTOCOL
107
+
108
+ rest: (Recommended for RouterOS v7+). Uses HTTPS. It is more secure and handles errors better.
109
+
110
+ socket: (For RouterOS v6). Uses a raw TCP connection. Use it only if your router is old and does not support REST.
111
+
112
+ MIKROTIK_PORT
113
+
114
+ This is the port for the protocol chosen above.
115
+
116
+ If you use rest: Enter 443 (the router's www-ssl port).
117
+
118
+ If you're using a socket: Enter 8728 (the API port).
119
+
120
+ SSL Security
121
+ MIKROTIK_INSECURE
122
+
123
+ true: (Almost always necessary on local networks). Tells the library: "Trust the router's certificate even if it's self-signed." Uses the secure dispatcher internally.
124
+
125
+ false: Only use this if you've purchased a real domain (e.g., router.example.com) and installed a valid certificate on the Mikrotik.
126
+
127
+ The "Listen" (Hybrid Engine)
128
+ This is the main variable for real-time events (onSnapshot) while using REST.
129
+
130
+ MIKROTIK_PORT_APISSL (or socketPort in the code)
131
+
132
+ If you leave it empty: Hybrid mode is disabled. You can only send commands, but you won't be able to listen for live changes.
133
+
134
+ If you enter 8728: You activate Hybrid Mode. The library will use REST to send commands and will open a hidden channel on 8728 to listen for onSnapshot.
81
135
  ```
82
136
 
83
137
  > ⚠️ **Security Notice**
@@ -95,6 +149,21 @@ MIKROTIK_PORT=8729
95
149
  > Use it **in moderation; excessive use of onSnapshot can negatively affect the performance of your devices**.
96
150
 
97
151
 
152
+ > ⚠️ **Basic Configurations on Your Equipment**
153
+ >
154
+ > Before running these codes, ensure your RouterOS configuration matches:
155
+ > > **Ports (Hybrid Mode):**
156
+ >>
157
+ > > REST (Commands): Requires the www-ssl service enabled on the router (Default port 443).
158
+ >>
159
+ > > Socket (Streaming): Requires the api service (Default 8728) or api-ssl (Default 8729).
160
+ > >
161
+ >> **Certificates (Self-Signed):**
162
+ > >
163
+ > > By setting `rejectUnauthorized: false` in the MikrotikClient options, the library uses the Undici Dispatcher (Agent with Scope).
164
+ > >
165
+ > **This means that traffic remains encrypted (HTTPS), but the library will accept the router's self-generated certificate without failure. This does not compromise the security of other external connections (such as Stripe/AWS) in your Node.js application.**
166
+
98
167
  ---
99
168
 
100
169
 
@@ -363,14 +432,125 @@ async function createSecureUser() {
363
432
  ```
364
433
 
365
434
 
435
+ #### 11. Hybrid Engine (REST + Sockets) & Idempotency
436
+
437
+ ```ts
438
+ import { MikrotikClient } from 'rosinterface';
439
+
440
+ const delay = (ms: number) => new Promise(res => setTimeout(res, ms));
441
+
442
+ async function runHybridTest() {
443
+ console.log("Starting Hybrid Engine Test");
444
+
445
+ const client = new MikrotikClient({
446
+ host: '10.0.0.1',
447
+ user: 'admin',
448
+ password: 'password',
449
+ // HYBRID CONFIGURATION:
450
+ protocol: 'rest', // Primary Brain: HTTPS (Port 443)
451
+ port: 443,
452
+ socketPort: 8728, // Secondary Ear: TCP (Port 8728 for Streams)
453
+ rejectUnauthorized: false // Accept Self-Signed Certs (Safe Dispatcher)
454
+ });
455
+
456
+ try {
457
+ await client.connect();
458
+ console.log("Hybrid Connection Established (HTTPS + TCP)");
459
+
460
+ // LIVE MONITORING (Via Socket 8728)
461
+ console.log("Listening for changes...");
462
+ client.collection('/ppp/secret')
463
+ .onSnapshot(data => {
464
+ if ('added' in data) console.log('Live Stream [New]:', data.added.map(x => x.name));
465
+ if ('removed' in data) console.log('Live Stream [Deleted]:', data.removed.map(x => x.name));
466
+ })
467
+ .onDiff();
468
+
469
+ await delay(1000);
470
+
471
+ // IDEMPOTENCY (Via REST 443)
472
+ // Attempt to create the same user twice. The second time should NOT fail.
473
+ const userPayload = { name: 'hybrid_user', password: '123', service: 'pppoe' };
474
+
475
+ console.log("Creating User...");
476
+ await client.command('/ppp/secret').idempotent().add(userPayload);
477
+
478
+ console.log("Creating User Again (Idempotency Check)...");
479
+ // This will strictly recover the existing ID without throwing an error
480
+ const result = await client.command('/ppp/secret').idempotent().add(userPayload);
481
+ console.log("Idempotency Result:", result); // Should return the existing object
482
+
483
+ await delay(2000);
484
+
485
+ // Cleanup
486
+ await client.command('/ppp/secret').remove(result['.id']);
487
+ console.log("Cleanup done.");
488
+
489
+ } catch (e) {
490
+ console.error("Error:", e);
491
+ } finally {
492
+ // Graceful shutdown prevents "Socket Closed" errors
493
+ client.close();
494
+ }
495
+ }
496
+
497
+ runHybridTest();
498
+ ```
499
+
500
+ #### 12. Swarm Mode (Mass Management)
501
+
502
+ ```ts
503
+ import { MikrotikSwarm } from 'rosinterface';
504
+
505
+ async function runSwarmTest() {
506
+ const swarm = new MikrotikSwarm();
507
+
508
+ // Node A: Modern Router (v7) -> Uses REST
509
+ swarm.addNode('CORE_ROUTER', {
510
+ host: '192.168.1.1',
511
+ user: 'admin',
512
+ password: 'secure',
513
+ protocol: 'rest',
514
+ port: 443
515
+ });
516
+
517
+ // Node B: Legacy Router (v6) -> Uses Sockets
518
+ swarm.addNode('TOWER_A', {
519
+ host: '10.20.30.50',
520
+ user: 'admin',
521
+ password: 'old',
522
+ protocol: 'socket',
523
+ port: 8728
524
+ });
525
+
526
+ console.log("Connecting Swarm...");
527
+ await swarm.connectAll();
528
+
529
+ // BROADCAST: Send command to ALL routers in parallel
530
+ console.log("Broadcasting Firewall Rule...");
531
+ const results = await swarm.broadcast('/ip/dns/set', {
532
+ 'allow-remote-requests': 'yes'
533
+ });
534
+
535
+ results.forEach(res => {
536
+ console.log(`[${res.nodeId}] Success: ${res.success}`);
537
+ });
538
+
539
+ swarm.closeAll();
540
+ }
366
541
 
542
+ runSwarmTest();
543
+ ```
367
544
 
368
545
  ---
369
546
 
370
547
  ## Documentación en Español
371
548
 
372
- **RosInterface** está diseñado para **ISPs y entornos críticos**.
373
- Su objetivo es garantizar **estabilidad de conexión**, **protección del hardware MikroTik** y **consultas eficientes**, incluso con enlaces inestables.
549
+ **RosInterface** es una biblioteca Node.js de alto rendimiento diseñada para proveedores de servicios de internet (ISP) y entornos de red críticos.
550
+ Va más allá de los simples envoltorios de API al introducir un motor híbrido único que unifica a la perfección la seguridad transaccional de REST (HTTPS) con la velocidad en tiempo real de los sockets (TCP).
551
+ Esta arquitectura permite una gestión robusta de entornos mixtos (RouterOS v6 y v7) sin necesidad de modificar el código.
552
+
553
+ Construida con la estabilidad y la protección del hardware como base, **RosInterface** garantiza un acceso eficiente a los datos incluso en condiciones de red inestables, evitando picos de CPU y sobrecargas de conexión.
374
554
 
375
555
  ---
376
556
 
@@ -415,6 +595,20 @@ Su objetivo es garantizar **estabilidad de conexión**, **protección del hardwa
415
595
 
416
596
  Controle el flujo de datos en tiempo real con estrategias de vanguardia y vanguardia.
417
597
 
598
+ - **Motor Híbrido Inteligente:**
599
+
600
+ Combina la seguridad del protocolo **REST (HTTPS)** para comandos CRUD con la velocidad de **Sockets (TCP)** para streaming de datos.
601
+ - *RouterOS v7:* Usa HTTPS + Sockets (Background).
602
+ - *RouterOS v6:* Usa Sockets puro (Legacy Mode).
603
+
604
+ - **Modo Enjambre (Swarm):**
605
+
606
+ Administra flotas de **50+ routers** desde una sola instancia.
607
+ - Soporte para **Broadcast** (todos los nodos) y **Multicast** (grupos selectos).
608
+ - Tolerancia a fallos: Si un router no responde, el resto del enjambre sigue operando.
609
+ - Agnosticismo de Protocolo: Mezcla routers modernos y antiguos en el mismo grupo de control.
610
+
611
+
418
612
  ---
419
613
 
420
614
  ### ✨ Consideraciones Importantes
@@ -424,10 +618,49 @@ Su objetivo es garantizar **estabilidad de conexión**, **protección del hardwa
424
618
  Crea un archivo `.env` en el directorio raíz de tu proyecto:
425
619
 
426
620
  ```text
427
- MIKROTIK_HOST=IP_DEL_ROUTER
428
- MIKROTIK_USER=admin
429
- MIKROTIK_PASSWORD=tu_contraseña
430
- MIKROTIK_PORT=8729
621
+ Credenciales Básicas
622
+ Son los datos de acceso estándar.
623
+
624
+ MIKROTIK_HOST: La IP de tu router (ej. 192.168.1.1).
625
+
626
+ MIKROTIK_USER: Usuario con permisos de escritura (ej. admin).
627
+
628
+ MIKROTIK_PASSWORD: Contraseña del usuario.
629
+
630
+ El Cerebro (Protocolo Principal)
631
+ Aquí decides cómo se enviarán los comandos (Crear, Editar, Borrar).
632
+
633
+ MIKROTIK_PROTOCOL
634
+
635
+ rest: (Recomendado para RouterOS v7+). Usa HTTPS. Es más seguro y maneja mejor los errores.
636
+
637
+ socket: (Para RouterOS v6). Usa conexión TCP cruda. Úsalo solo si tu router es viejo y no soporta REST.
638
+
639
+ MIKROTIK_PORT
640
+
641
+ Es el puerto del protocolo elegido arriba.
642
+
643
+ Si usas rest: Pon 443 (el puerto www-ssl del router).
644
+
645
+ Si usas socket: Pon 8728 (el puerto api).
646
+
647
+ Seguridad SSL
648
+ MIKROTIK_INSECURE
649
+
650
+ true: (Casi siempre necesario en redes locales). Le dice a la librería: "Confía en el certificado del router aunque sea autofirmado". Usa el Dispatcher seguro internamente.
651
+
652
+ false: Solo úsalo si has comprado un dominio real (ej. router.ejemplo.com) y le instalaste un certificado válido al Mikrotik.
653
+
654
+
655
+ El "Oído" (Motor Híbrido)
656
+ Esta es la variable principal para tener eventos en tiempo real (onSnapshot) mientras usas REST.
657
+
658
+ MIKROTIK_PORT_APISSL (o socketPort en el código)
659
+
660
+ Si lo dejas vacío: El modo híbrido se apaga. Solo podrás enviar comandos, pero no escuchar cambios en vivo.
661
+
662
+ Si pones 8728: Activas el Modo Híbrido. La librería usará REST para mandar órdenes y abrirá un canal oculto en el 8728 para escuchar el onSnapshot.
663
+
431
664
  ```
432
665
 
433
666
  > ⚠️ **Aviso de Seguridad**
@@ -444,6 +677,22 @@ MIKROTIK_PORT=8729
444
677
  > Úsala **con moderación, el abuso de onSnapshot puede afectar el rendimiento de tus equipos**.
445
678
 
446
679
 
680
+ > ⚠️ **Configuraciones básicas en tus equipos**
681
+ > Antes de ejecutar estos códigos, asegúrese de que la configuración de RouterOS coincida:
682
+ > > **Puertos (Modo Híbrido):**
683
+ > >
684
+ > > REST (Comandos): Requiere el servicio www-ssl habilitado en el router (Puerto predeterminado 443).
685
+ > >
686
+ > > Socket (Streaming): Requiere el servicio api (Predeterminado 8728) o api-ssl (Predeterminado 8729).
687
+ > >
688
+ >> **Certificados (Autofirmados):**
689
+ > >
690
+ > >Al configurar `rejectUnauthorized: false` en las opciones de MikrotikClient, la biblioteca utiliza el Despachador Undici (Agente con Ámbito).
691
+ > >
692
+ > **Esto implica que el tráfico sigue estando cifrado (HTTPS), pero la biblioteca aceptará el certificado autogenerado del router sin fallar. Esto no compromete la seguridad de otras conexiones externas (como Stripe/AWS) en su aplicación Node.js.**
693
+
694
+
695
+
447
696
 
448
697
  ---
449
698
 
@@ -677,7 +926,7 @@ client.command('/log').print().then(result => {
677
926
  > > npm run codegen -- -p /ppp/secret -n ISecret
678
927
  >
679
928
  > OPCIÓN B: Configuración Manual (Pruebas Rápidas / CI)
680
- > PPasa los detalles de conexión directamente mediante banderas. Usa comillas dobles para contraseñas con caracteres especiales.
929
+ > Pasa los detalles de conexión directamente mediante banderas. Usa comillas dobles para contraseñas con caracteres especiales.
681
930
  > >npm run codegen -- -p /ppp/secret -n ISecret --host ROUTER_IP --user admin --pass "secret123" --port 8728
682
931
 
683
932
 
@@ -712,6 +961,124 @@ async function createSecureUser() {
712
961
  ```
713
962
 
714
963
 
964
+
965
+ #### 11. Hybrid Engine (REST + Sockets) & Idempotency
966
+
967
+ ```ts
968
+ import { MikrotikClient } from 'rosinterface';
969
+
970
+ const delay = (ms: number) => new Promise(res => setTimeout(res, ms));
971
+
972
+ async function ejecutarTestHibrido() {
973
+ console.log("Iniciando Motor Híbrido");
974
+
975
+ const client = new MikrotikClient({
976
+ host: '192.168.1.1',
977
+ user: 'IVMEX',
978
+ password: 'password',
979
+ // CONFIGURACIÓN HÍBRIDA:
980
+ protocol: 'rest', // Cerebro Principal: HTTPS (Puerto 443)
981
+ port: 443,
982
+ socketPort: 8728, // Oído Secundario: TCP (Puerto 8728 para Streams)
983
+ rejectUnauthorized: false // Aceptar Certs Autofirmados (Usa Dispatcher Seguro)
984
+ });
985
+
986
+ try {
987
+ await client.connect();
988
+ console.log("Conexión Híbrida Establecida (HTTPS + TCP)");
989
+
990
+ // A. MONITOREO EN VIVO (Vía Socket 8728)
991
+ console.log("Escuchando cambios...");
992
+ client.collection('/ppp/secret')
993
+ .onSnapshot(data => {
994
+ if ('added' in data) console.log('Stream [Nuevo]:', data.added.map(x => x.name));
995
+ if ('removed' in data) console.log('Stream [Eliminado]:', data.removed.map(x => x.name));
996
+ })
997
+ .onDiff();
998
+
999
+ await delay(1000);
1000
+
1001
+ // B. IDEMPOTENCIA (Vía REST 443)
1002
+ // Intentamos crear el mismo usuario dos veces. La segunda NO debe fallar.
1003
+ const datosUsuario = { name: 'usuario_hibrido', password: '123', service: 'pppoe' };
1004
+
1005
+ console.log("Creando Usuario...");
1006
+ await client.command('/ppp/secret').idempotent().add(datosUsuario);
1007
+
1008
+ console.log("Creando Usuario Nuevamente (Prueba Idempotencia)...");
1009
+ // Esto recuperará el ID existente sin lanzar error
1010
+ const resultado = await client.command('/ppp/secret').idempotent().add(datosUsuario);
1011
+ console.log("Resultado Idempotencia:", resultado); // Debe devolver el objeto existente
1012
+
1013
+ await delay(2000);
1014
+
1015
+ // Limpieza
1016
+ await client.command('/ppp/secret').remove(resultado['.id']);
1017
+ console.log("Limpieza completada.");
1018
+
1019
+ } catch (e) {
1020
+ console.error("Error:", e);
1021
+ } finally {
1022
+ // Cierre elegante evita errores de "Socket Closed"
1023
+ client.close();
1024
+ }
1025
+ }
1026
+
1027
+ ejecutarTestHibrido();
1028
+ ```
1029
+
1030
+
1031
+
1032
+ #### 12. Swarm Mode (Mass Management)
1033
+
1034
+ ```ts
1035
+ import { MikrotikSwarm } from 'rosinterface';
1036
+
1037
+ async function ejecutarTestEnjambre() {
1038
+ const enjambre = new MikrotikSwarm();
1039
+
1040
+ // Nodo A: Router Moderno (v7) -> Usa REST
1041
+ enjambre.addNode('ROUTER_CENTRAL', {
1042
+ host: '192.168.1.1',
1043
+ user: 'admin',
1044
+ password: 'segura',
1045
+ protocol: 'rest',
1046
+ port: 443
1047
+ });
1048
+
1049
+ // Nodo B: Router Antiguo (v6) -> Usa Sockets
1050
+ enjambre.addNode('TORRE_NORTE', {
1051
+ host: '10.20.30.50',
1052
+ user: 'admin',
1053
+ password: 'vieja',
1054
+ protocol: 'socket',
1055
+ port: 8728
1056
+ });
1057
+
1058
+ console.log("Conectando Enjambre...");
1059
+ await enjambre.connectAll();
1060
+
1061
+ // BROADCAST: Enviar comando a TODOS los routers en paralelo
1062
+ console.log("Difundiendo configuración DNS...");
1063
+ const resultados = await enjambre.broadcast('/ip/dns/set', {
1064
+ 'allow-remote-requests': 'yes',
1065
+ 'servers': '8.8.8.8,1.1.1.1'
1066
+ });
1067
+
1068
+ resultados.forEach(res => {
1069
+ if (res.success) {
1070
+ console.log(`[${res.nodeId}] Éxito`);
1071
+ } else {
1072
+ console.log(`[${res.nodeId}] Falló: ${res.error}`);
1073
+ }
1074
+ });
1075
+
1076
+ enjambre.closeAll();
1077
+ }
1078
+
1079
+ ejecutarTestEnjambre();
1080
+ ```
1081
+
715
1082
  ---
716
1083
 
717
1084
  ## Author's Note / Nota del Autor
@@ -136,4 +136,4 @@ ${tsCode}
136
136
  }
137
137
  });
138
138
  program.parse(process.argv);
139
- //# sourceMappingURL=generate.js.map
139
+ //# sourceMappingURL=Generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Generate.js","sourceRoot":"","sources":["../../src/cli/Generate.ts"],"names":[],"mappings":"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"}
@@ -3,22 +3,26 @@ import { MikrotikCollection } from '../utils/MikrotikCollection';
3
3
  export declare class CommandBuilder<T extends Record<string, any>> {
4
4
  private readonly client;
5
5
  private readonly menuPath;
6
+ private _idempotencyKey?;
6
7
  private queryParams;
7
8
  private propList;
9
+ private _idempotent;
8
10
  private isPersistentRequest;
9
11
  private static queryCache;
10
12
  private static readonly CACHE_TTL_MS;
11
13
  constructor(client: MikrotikClient, menuPath: string);
12
14
  where(key: string, value: string | number | boolean): this;
13
15
  whereExists(key: string): this;
14
- select(fields: string[]): this;
16
+ select(fields: (keyof T | string)[]): this;
17
+ idempotent(keyField?: string): this;
15
18
  persistent(): this;
16
19
  findBy(criteria: Partial<T>): Promise<MikrotikCollection<T>>;
17
20
  findOne(criteria: Partial<T>): Promise<T | null>;
18
21
  print(extraParams?: Record<string, any>): Promise<MikrotikCollection<T>>;
19
22
  private pruneCache;
20
23
  first(): Promise<T | null>;
21
- add(data: Partial<T>): Promise<string>;
24
+ add(data: Partial<T>): Promise<string | T>;
25
+ getOrCreate(data: Partial<T>): Promise<T>;
22
26
  set(id: string, data: Partial<T>): Promise<void>;
23
27
  remove(id: string | string[]): Promise<void>;
24
28
  listen(callback: (item: T) => void): Subscription;
@@ -8,6 +8,7 @@ class CommandBuilder {
8
8
  constructor(client, menuPath) {
9
9
  this.queryParams = {};
10
10
  this.propList = [];
11
+ this._idempotent = false;
11
12
  this.isPersistentRequest = false;
12
13
  this.client = client;
13
14
  this.menuPath = menuPath.startsWith('/') ? menuPath : '/' + menuPath;
@@ -17,8 +18,7 @@ class CommandBuilder {
17
18
  }
18
19
  where(key, value) {
19
20
  const kebabKey = (0, Helpers_1.camelToKebab)(key);
20
- const formattedValue = this.formatValue(value);
21
- this.queryParams[`?${kebabKey}`] = formattedValue;
21
+ this.queryParams[`?${kebabKey}`] = this.formatValue(value);
22
22
  return this;
23
23
  }
24
24
  whereExists(key) {
@@ -27,10 +27,16 @@ class CommandBuilder {
27
27
  return this;
28
28
  }
29
29
  select(fields) {
30
- const kebabFields = fields.map(f => (0, Helpers_1.camelToKebab)(f));
30
+ const fieldStrings = fields.map(String);
31
+ const kebabFields = fieldStrings.map(f => (0, Helpers_1.camelToKebab)(f));
31
32
  this.propList.push(...kebabFields);
32
33
  return this;
33
34
  }
35
+ idempotent(keyField) {
36
+ this._idempotent = true;
37
+ this._idempotencyKey = keyField;
38
+ return this;
39
+ }
34
40
  persistent() {
35
41
  this.isPersistentRequest = true;
36
42
  return this;
@@ -80,13 +86,28 @@ class CommandBuilder {
80
86
  OfflineQueue_1.OfflineQueue.enqueue({ action: 'add', path: this.menuPath, params: params });
81
87
  return 'QUEUED_OFFLINE';
82
88
  }
83
- const response = await this.client.write(`${this.menuPath}/add`, params);
89
+ const response = await this.client.write(`${this.menuPath}/add`, params, {
90
+ idempotent: this._idempotent,
91
+ idempotencyKey: this._idempotencyKey
92
+ });
84
93
  this.invalidatePathCache();
85
- if (Array.isArray(response) && response.length > 0 && response[0]['ret']) {
86
- return response[0]['ret'];
94
+ if (Array.isArray(response) && response.length > 0) {
95
+ if (this._idempotent && response[0]['_idempotent_recovery']) {
96
+ return response[0];
97
+ }
98
+ if (response[0]['ret']) {
99
+ return response[0]['ret'];
100
+ }
87
101
  }
88
102
  return '';
89
103
  }
104
+ async getOrCreate(data) {
105
+ this.idempotent();
106
+ const result = await this.add(data);
107
+ if (typeof result === 'object')
108
+ return result;
109
+ return { '.id': result };
110
+ }
90
111
  async set(id, data) {
91
112
  const params = this.prepareParams(data);
92
113
  params['.id'] = id;
@@ -154,7 +175,9 @@ class CommandBuilder {
154
175
  }
155
176
  isClientConnected() {
156
177
  const socket = this.client['socket'];
157
- return socket && socket['connected'] === true;
178
+ if (!socket)
179
+ return true;
180
+ return socket['connected'] === true;
158
181
  }
159
182
  getParams() {
160
183
  const params = { ...this.queryParams };
@@ -1 +1 @@
1
- {"version":3,"file":"CommandBuilder.js","sourceRoot":"","sources":["../../src/client/CommandBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommandBuilder.js","sourceRoot":"","sources":["../../src/client/CommandBuilder.ts"],"names":[],"mappings":"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"}