@utilia-os/sdk-js 1.4.0 → 1.5.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
@@ -113,6 +113,28 @@ if (count > 0) {
113
113
  }
114
114
  ```
115
115
 
116
+ ### Actualizaciones en Tiempo Real (SSE)
117
+
118
+ Recibe notificaciones cuando un agente responde, cambia el estado, resuelve o cierra un ticket:
119
+
120
+ ```typescript
121
+ const stream = sdk.tickets.streamUpdates('user-123', {
122
+ onTicketUpdated: (event) => {
123
+ console.log(`Ticket ${event.ticketKey} actualizado: ${event.type}`);
124
+ // event.type: 'comment-added' | 'status-changed'
125
+ // Refrescar la UI del ticket
126
+ },
127
+ onError: (error) => {
128
+ console.error('Error en conexion SSE:', error);
129
+ },
130
+ });
131
+
132
+ // Para cerrar la conexion cuando ya no se necesite:
133
+ stream.close();
134
+ ```
135
+
136
+ > **Nota:** En Node.js se requiere un polyfill como `eventsource` (`npm install eventsource`).
137
+
116
138
  ### Reportar Error
117
139
 
118
140
  ```typescript
package/dist/index.d.mts CHANGED
@@ -688,6 +688,40 @@ declare class TicketsService {
688
688
  * ```
689
689
  */
690
690
  addMessage(ticketId: string, userId: string, data: AddMessageInput): Promise<CreatedMessage>;
691
+ /**
692
+ * Suscribirse a actualizaciones de tickets en tiempo real via SSE.
693
+ * Recibe eventos cuando un agente responde, cambia el estado, resuelve o cierra un ticket.
694
+ *
695
+ * Requiere un entorno con EventSource nativo (navegador) o un polyfill como 'eventsource'.
696
+ *
697
+ * @param userId - ID externo del usuario (opcional, filtra eventos por usuario)
698
+ * @param options - Callbacks para eventos y errores
699
+ * @returns Objeto con metodo close() para cerrar la conexion
700
+ *
701
+ * @example
702
+ * ```typescript
703
+ * const stream = sdk.tickets.streamUpdates('user-123', {
704
+ * onTicketUpdated: (event) => {
705
+ * console.log(`Ticket ${event.ticketKey} actualizado: ${event.type}`);
706
+ * // Refrescar la UI del ticket
707
+ * },
708
+ * });
709
+ *
710
+ * // Para cerrar la conexion:
711
+ * stream.close();
712
+ * ```
713
+ */
714
+ streamUpdates(userId?: string, options?: {
715
+ onTicketUpdated?: (event: {
716
+ ticketId: string;
717
+ ticketKey: string;
718
+ type: string;
719
+ externalUserId?: string;
720
+ }) => void;
721
+ onError?: (error: Error) => void;
722
+ }): {
723
+ close: () => void;
724
+ };
691
725
  /**
692
726
  * Cerrar un ticket
693
727
  * Solo el usuario que creo el ticket puede cerrarlo
package/dist/index.d.ts CHANGED
@@ -688,6 +688,40 @@ declare class TicketsService {
688
688
  * ```
689
689
  */
690
690
  addMessage(ticketId: string, userId: string, data: AddMessageInput): Promise<CreatedMessage>;
691
+ /**
692
+ * Suscribirse a actualizaciones de tickets en tiempo real via SSE.
693
+ * Recibe eventos cuando un agente responde, cambia el estado, resuelve o cierra un ticket.
694
+ *
695
+ * Requiere un entorno con EventSource nativo (navegador) o un polyfill como 'eventsource'.
696
+ *
697
+ * @param userId - ID externo del usuario (opcional, filtra eventos por usuario)
698
+ * @param options - Callbacks para eventos y errores
699
+ * @returns Objeto con metodo close() para cerrar la conexion
700
+ *
701
+ * @example
702
+ * ```typescript
703
+ * const stream = sdk.tickets.streamUpdates('user-123', {
704
+ * onTicketUpdated: (event) => {
705
+ * console.log(`Ticket ${event.ticketKey} actualizado: ${event.type}`);
706
+ * // Refrescar la UI del ticket
707
+ * },
708
+ * });
709
+ *
710
+ * // Para cerrar la conexion:
711
+ * stream.close();
712
+ * ```
713
+ */
714
+ streamUpdates(userId?: string, options?: {
715
+ onTicketUpdated?: (event: {
716
+ ticketId: string;
717
+ ticketKey: string;
718
+ type: string;
719
+ externalUserId?: string;
720
+ }) => void;
721
+ onError?: (error: Error) => void;
722
+ }): {
723
+ close: () => void;
724
+ };
691
725
  /**
692
726
  * Cerrar un ticket
693
727
  * Solo el usuario que creo el ticket puede cerrarlo
package/dist/index.js CHANGED
@@ -635,6 +635,54 @@ var TicketsService = class {
635
635
  { params: { userId } }
636
636
  );
637
637
  }
638
+ /**
639
+ * Suscribirse a actualizaciones de tickets en tiempo real via SSE.
640
+ * Recibe eventos cuando un agente responde, cambia el estado, resuelve o cierra un ticket.
641
+ *
642
+ * Requiere un entorno con EventSource nativo (navegador) o un polyfill como 'eventsource'.
643
+ *
644
+ * @param userId - ID externo del usuario (opcional, filtra eventos por usuario)
645
+ * @param options - Callbacks para eventos y errores
646
+ * @returns Objeto con metodo close() para cerrar la conexion
647
+ *
648
+ * @example
649
+ * ```typescript
650
+ * const stream = sdk.tickets.streamUpdates('user-123', {
651
+ * onTicketUpdated: (event) => {
652
+ * console.log(`Ticket ${event.ticketKey} actualizado: ${event.type}`);
653
+ * // Refrescar la UI del ticket
654
+ * },
655
+ * });
656
+ *
657
+ * // Para cerrar la conexion:
658
+ * stream.close();
659
+ * ```
660
+ */
661
+ streamUpdates(userId, options) {
662
+ if (typeof EventSource === "undefined") {
663
+ throw new Error(
664
+ 'EventSource no esta disponible en este entorno. Para Node.js, instala un polyfill como "eventsource" y asignalo a globalThis.EventSource.'
665
+ );
666
+ }
667
+ const queryParams = userId ? `?userId=${encodeURIComponent(userId)}` : "";
668
+ const sseUrl = this.client.buildSseUrl(`${this.basePath}/events${queryParams}`);
669
+ const eventSource = new EventSource(sseUrl);
670
+ eventSource.onmessage = (event) => {
671
+ try {
672
+ const data = JSON.parse(event.data);
673
+ if (data.event === "ticket-updated" && options?.onTicketUpdated) {
674
+ options.onTicketUpdated(data);
675
+ }
676
+ } catch {
677
+ }
678
+ };
679
+ eventSource.onerror = () => {
680
+ options?.onError?.(new Error("Error en la conexion SSE"));
681
+ };
682
+ return {
683
+ close: () => eventSource.close()
684
+ };
685
+ }
638
686
  /**
639
687
  * Cerrar un ticket
640
688
  * Solo el usuario que creo el ticket puede cerrarlo
package/dist/index.mjs CHANGED
@@ -596,6 +596,54 @@ var TicketsService = class {
596
596
  { params: { userId } }
597
597
  );
598
598
  }
599
+ /**
600
+ * Suscribirse a actualizaciones de tickets en tiempo real via SSE.
601
+ * Recibe eventos cuando un agente responde, cambia el estado, resuelve o cierra un ticket.
602
+ *
603
+ * Requiere un entorno con EventSource nativo (navegador) o un polyfill como 'eventsource'.
604
+ *
605
+ * @param userId - ID externo del usuario (opcional, filtra eventos por usuario)
606
+ * @param options - Callbacks para eventos y errores
607
+ * @returns Objeto con metodo close() para cerrar la conexion
608
+ *
609
+ * @example
610
+ * ```typescript
611
+ * const stream = sdk.tickets.streamUpdates('user-123', {
612
+ * onTicketUpdated: (event) => {
613
+ * console.log(`Ticket ${event.ticketKey} actualizado: ${event.type}`);
614
+ * // Refrescar la UI del ticket
615
+ * },
616
+ * });
617
+ *
618
+ * // Para cerrar la conexion:
619
+ * stream.close();
620
+ * ```
621
+ */
622
+ streamUpdates(userId, options) {
623
+ if (typeof EventSource === "undefined") {
624
+ throw new Error(
625
+ 'EventSource no esta disponible en este entorno. Para Node.js, instala un polyfill como "eventsource" y asignalo a globalThis.EventSource.'
626
+ );
627
+ }
628
+ const queryParams = userId ? `?userId=${encodeURIComponent(userId)}` : "";
629
+ const sseUrl = this.client.buildSseUrl(`${this.basePath}/events${queryParams}`);
630
+ const eventSource = new EventSource(sseUrl);
631
+ eventSource.onmessage = (event) => {
632
+ try {
633
+ const data = JSON.parse(event.data);
634
+ if (data.event === "ticket-updated" && options?.onTicketUpdated) {
635
+ options.onTicketUpdated(data);
636
+ }
637
+ } catch {
638
+ }
639
+ };
640
+ eventSource.onerror = () => {
641
+ options?.onError?.(new Error("Error en la conexion SSE"));
642
+ };
643
+ return {
644
+ close: () => eventSource.close()
645
+ };
646
+ }
599
647
  /**
600
648
  * Cerrar un ticket
601
649
  * Solo el usuario que creo el ticket puede cerrarlo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@utilia-os/sdk-js",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "SDK JavaScript/TypeScript para UTILIA OS External Integrations",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",