@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 +22 -0
- package/dist/index.d.mts +34 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +48 -0
- package/dist/index.mjs +48 -0
- package/package.json +1 -1
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
|