@guava-ai/guava-sdk 0.17.0 → 0.19.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 (100) hide show
  1. package/dist/examples/example.test.d.ts +5 -0
  2. package/dist/examples/example.test.js +46 -0
  3. package/dist/examples/example.test.js.map +1 -0
  4. package/dist/examples/help-desk.d.ts +3 -1
  5. package/dist/examples/help-desk.js +25 -9
  6. package/dist/examples/help-desk.js.map +1 -1
  7. package/dist/examples/property-insurance.js +4 -1
  8. package/dist/examples/property-insurance.js.map +1 -1
  9. package/dist/examples/restaurant-waitlist.js +4 -1
  10. package/dist/examples/restaurant-waitlist.js.map +1 -1
  11. package/dist/examples/scheduling-outbound.js +6 -0
  12. package/dist/examples/scheduling-outbound.js.map +1 -1
  13. package/dist/src/action-item.d.ts +4 -4
  14. package/dist/src/agent.d.ts +81 -16
  15. package/dist/src/agent.js +394 -127
  16. package/dist/src/agent.js.map +1 -1
  17. package/dist/src/auth.d.ts +27 -0
  18. package/dist/src/auth.js +127 -0
  19. package/dist/src/auth.js.map +1 -0
  20. package/dist/src/call.d.ts +1 -1
  21. package/dist/src/call.js +2 -2
  22. package/dist/src/call.js.map +1 -1
  23. package/dist/src/client.d.ts +4 -11
  24. package/dist/src/client.js +22 -14
  25. package/dist/src/client.js.map +1 -1
  26. package/dist/src/commands.d.ts +3 -3
  27. package/dist/src/events.d.ts +22 -0
  28. package/dist/src/events.js +19 -5
  29. package/dist/src/events.js.map +1 -1
  30. package/dist/src/helpers/llm.d.ts +2 -0
  31. package/dist/src/helpers/llm.js +17 -0
  32. package/dist/src/helpers/llm.js.map +1 -0
  33. package/dist/src/index.d.ts +2 -0
  34. package/dist/src/index.js +5 -1
  35. package/dist/src/index.js.map +1 -1
  36. package/dist/src/logging.js +16 -11
  37. package/dist/src/logging.js.map +1 -1
  38. package/dist/src/socket/call-info.d.ts +35 -0
  39. package/dist/src/socket/call-info.js +59 -0
  40. package/dist/src/socket/call-info.js.map +1 -0
  41. package/dist/src/socket/client.d.ts +51 -0
  42. package/dist/src/socket/client.js +455 -0
  43. package/dist/src/socket/client.js.map +1 -0
  44. package/dist/src/socket/listen-inbound.d.ts +83 -0
  45. package/dist/src/socket/listen-inbound.js +82 -0
  46. package/dist/src/socket/listen-inbound.js.map +1 -0
  47. package/dist/src/socket/protocol.d.ts +127 -0
  48. package/dist/src/socket/protocol.js +69 -0
  49. package/dist/src/socket/protocol.js.map +1 -0
  50. package/dist/src/socket/utils.d.ts +8 -0
  51. package/dist/src/socket/utils.js +26 -0
  52. package/dist/src/socket/utils.js.map +1 -0
  53. package/dist/src/telemetry.d.ts +3 -3
  54. package/dist/src/telemetry.js +9 -7
  55. package/dist/src/telemetry.js.map +1 -1
  56. package/dist/src/testing/chat.d.ts +2 -0
  57. package/dist/src/testing/chat.js +181 -0
  58. package/dist/src/testing/chat.js.map +1 -0
  59. package/dist/src/testing/mocks.d.ts +6 -0
  60. package/dist/src/testing/mocks.js +14 -0
  61. package/dist/src/testing/mocks.js.map +1 -0
  62. package/dist/src/testing/protocol.d.ts +46 -0
  63. package/dist/src/testing/protocol.js +61 -0
  64. package/dist/src/testing/protocol.js.map +1 -0
  65. package/dist/src/testing/session.d.ts +26 -0
  66. package/dist/src/testing/session.js +219 -0
  67. package/dist/src/testing/session.js.map +1 -0
  68. package/dist/src/utils.d.ts +1 -0
  69. package/dist/src/utils.js +15 -1
  70. package/dist/src/utils.js.map +1 -1
  71. package/dist/src/version.d.ts +1 -1
  72. package/dist/src/version.js +1 -1
  73. package/dist/src/webrtc-helper.js +11 -11
  74. package/examples/example.test.ts +58 -0
  75. package/examples/help-desk.ts +14 -3
  76. package/examples/property-insurance.ts +3 -1
  77. package/examples/restaurant-waitlist.ts +3 -1
  78. package/examples/scheduling-outbound.ts +7 -0
  79. package/package.json +9 -1
  80. package/src/agent.ts +372 -162
  81. package/src/auth.ts +109 -0
  82. package/src/call.ts +3 -3
  83. package/src/client.ts +32 -15
  84. package/src/events.ts +24 -10
  85. package/src/helpers/llm.ts +20 -0
  86. package/src/index.ts +2 -0
  87. package/src/logging.ts +21 -13
  88. package/src/socket/call-info.ts +30 -0
  89. package/src/socket/client.ts +433 -0
  90. package/src/socket/listen-inbound.ts +62 -0
  91. package/src/socket/protocol.ts +89 -0
  92. package/src/socket/utils.ts +25 -0
  93. package/src/telemetry.ts +11 -8
  94. package/src/testing/chat.ts +196 -0
  95. package/src/testing/mocks.ts +12 -0
  96. package/src/testing/protocol.ts +40 -0
  97. package/src/testing/session.ts +218 -0
  98. package/src/utils.ts +15 -1
  99. package/src/version.ts +1 -1
  100. package/src/webrtc-helper.ts +11 -11
@@ -0,0 +1,127 @@
1
+ import { z } from "zod";
2
+ export declare const CloseReason: z.ZodEnum<{
3
+ unknown: "unknown";
4
+ done: "done";
5
+ "authentication-failure": "authentication-failure";
6
+ "state-lost": "state-lost";
7
+ other: "other";
8
+ "server-error": "server-error";
9
+ "reconnection-failed": "reconnection-failed";
10
+ }>;
11
+ export type CloseReason = z.infer<typeof CloseReason>;
12
+ export declare const GuavaOpen: z.ZodObject<{
13
+ message_type: z.ZodLiteral<"open">;
14
+ name: z.ZodString;
15
+ connection_id: z.ZodString;
16
+ is_reopen: z.ZodBoolean;
17
+ last_seen_sequence: z.ZodNumber;
18
+ }, z.core.$strip>;
19
+ export type GuavaOpen = z.infer<typeof GuavaOpen>;
20
+ export declare const GuavaOpenAck: z.ZodObject<{
21
+ message_type: z.ZodLiteral<"open-ack">;
22
+ is_reopen: z.ZodBoolean;
23
+ last_seen_sequence: z.ZodNumber;
24
+ }, z.core.$strip>;
25
+ export type GuavaOpenAck = z.infer<typeof GuavaOpenAck>;
26
+ export declare const GuavaClose: z.ZodObject<{
27
+ message_type: z.ZodLiteral<"close">;
28
+ reason: z.ZodEnum<{
29
+ unknown: "unknown";
30
+ done: "done";
31
+ "authentication-failure": "authentication-failure";
32
+ "state-lost": "state-lost";
33
+ other: "other";
34
+ "server-error": "server-error";
35
+ "reconnection-failed": "reconnection-failed";
36
+ }>;
37
+ description: z.ZodString;
38
+ }, z.core.$strip>;
39
+ export type GuavaClose = z.infer<typeof GuavaClose>;
40
+ export declare const GuavaMessage: z.ZodObject<{
41
+ message_type: z.ZodLiteral<"message">;
42
+ sequence: z.ZodNumber;
43
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
44
+ }, z.core.$strip>;
45
+ export type GuavaMessage = z.infer<typeof GuavaMessage>;
46
+ export declare const GuavaPing: z.ZodObject<{
47
+ message_type: z.ZodLiteral<"ping">;
48
+ ping_timestamp: z.ZodNumber;
49
+ }, z.core.$strip>;
50
+ export type GuavaPing = z.infer<typeof GuavaPing>;
51
+ export declare const GuavaPong: z.ZodObject<{
52
+ message_type: z.ZodLiteral<"pong">;
53
+ ping_timestamp: z.ZodNumber;
54
+ pong_timestamp: z.ZodNumber;
55
+ }, z.core.$strip>;
56
+ export type GuavaPong = z.infer<typeof GuavaPong>;
57
+ export declare const GuavaAck: z.ZodObject<{
58
+ message_type: z.ZodLiteral<"ack">;
59
+ last_seen_sequence: z.ZodNumber;
60
+ }, z.core.$strip>;
61
+ export type GuavaAck = z.infer<typeof GuavaAck>;
62
+ export declare const GuavaClientMessage: z.ZodDiscriminatedUnion<[z.ZodObject<{
63
+ message_type: z.ZodLiteral<"open">;
64
+ name: z.ZodString;
65
+ connection_id: z.ZodString;
66
+ is_reopen: z.ZodBoolean;
67
+ last_seen_sequence: z.ZodNumber;
68
+ }, z.core.$strip>, z.ZodObject<{
69
+ message_type: z.ZodLiteral<"close">;
70
+ reason: z.ZodEnum<{
71
+ unknown: "unknown";
72
+ done: "done";
73
+ "authentication-failure": "authentication-failure";
74
+ "state-lost": "state-lost";
75
+ other: "other";
76
+ "server-error": "server-error";
77
+ "reconnection-failed": "reconnection-failed";
78
+ }>;
79
+ description: z.ZodString;
80
+ }, z.core.$strip>, z.ZodObject<{
81
+ message_type: z.ZodLiteral<"message">;
82
+ sequence: z.ZodNumber;
83
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
84
+ }, z.core.$strip>, z.ZodObject<{
85
+ message_type: z.ZodLiteral<"ping">;
86
+ ping_timestamp: z.ZodNumber;
87
+ }, z.core.$strip>, z.ZodObject<{
88
+ message_type: z.ZodLiteral<"pong">;
89
+ ping_timestamp: z.ZodNumber;
90
+ pong_timestamp: z.ZodNumber;
91
+ }, z.core.$strip>, z.ZodObject<{
92
+ message_type: z.ZodLiteral<"ack">;
93
+ last_seen_sequence: z.ZodNumber;
94
+ }, z.core.$strip>], "message_type">;
95
+ export type GuavaClientMessage = z.infer<typeof GuavaClientMessage>;
96
+ export declare const GuavaServerMessage: z.ZodDiscriminatedUnion<[z.ZodObject<{
97
+ message_type: z.ZodLiteral<"open-ack">;
98
+ is_reopen: z.ZodBoolean;
99
+ last_seen_sequence: z.ZodNumber;
100
+ }, z.core.$strip>, z.ZodObject<{
101
+ message_type: z.ZodLiteral<"close">;
102
+ reason: z.ZodEnum<{
103
+ unknown: "unknown";
104
+ done: "done";
105
+ "authentication-failure": "authentication-failure";
106
+ "state-lost": "state-lost";
107
+ other: "other";
108
+ "server-error": "server-error";
109
+ "reconnection-failed": "reconnection-failed";
110
+ }>;
111
+ description: z.ZodString;
112
+ }, z.core.$strip>, z.ZodObject<{
113
+ message_type: z.ZodLiteral<"message">;
114
+ sequence: z.ZodNumber;
115
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
116
+ }, z.core.$strip>, z.ZodObject<{
117
+ message_type: z.ZodLiteral<"ping">;
118
+ ping_timestamp: z.ZodNumber;
119
+ }, z.core.$strip>, z.ZodObject<{
120
+ message_type: z.ZodLiteral<"pong">;
121
+ ping_timestamp: z.ZodNumber;
122
+ pong_timestamp: z.ZodNumber;
123
+ }, z.core.$strip>, z.ZodObject<{
124
+ message_type: z.ZodLiteral<"ack">;
125
+ last_seen_sequence: z.ZodNumber;
126
+ }, z.core.$strip>], "message_type">;
127
+ export type GuavaServerMessage = z.infer<typeof GuavaServerMessage>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GuavaServerMessage = exports.GuavaClientMessage = exports.GuavaAck = exports.GuavaPong = exports.GuavaPing = exports.GuavaMessage = exports.GuavaClose = exports.GuavaOpenAck = exports.GuavaOpen = exports.CloseReason = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.CloseReason = zod_1.z.enum([
6
+ "authentication-failure",
7
+ "state-lost",
8
+ "done",
9
+ "other",
10
+ "server-error",
11
+ "reconnection-failed",
12
+ "unknown",
13
+ ]);
14
+ // -------- CLIENT-ONLY MESSAGES ------------
15
+ exports.GuavaOpen = zod_1.z.object({
16
+ message_type: zod_1.z.literal("open"),
17
+ name: zod_1.z.string(),
18
+ connection_id: zod_1.z.string(),
19
+ is_reopen: zod_1.z.boolean(),
20
+ last_seen_sequence: zod_1.z.number().int(),
21
+ });
22
+ // -------- SERVER-ONLY MESSAGES ------------
23
+ exports.GuavaOpenAck = zod_1.z.object({
24
+ message_type: zod_1.z.literal("open-ack"),
25
+ is_reopen: zod_1.z.boolean(),
26
+ last_seen_sequence: zod_1.z.number().int(),
27
+ });
28
+ // -------- BIDIRECTIONAL MESSAGES ------------
29
+ exports.GuavaClose = zod_1.z.object({
30
+ message_type: zod_1.z.literal("close"),
31
+ reason: exports.CloseReason,
32
+ description: zod_1.z.string(),
33
+ });
34
+ exports.GuavaMessage = zod_1.z.object({
35
+ message_type: zod_1.z.literal("message"),
36
+ sequence: zod_1.z.number().int(),
37
+ payload: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
38
+ });
39
+ exports.GuavaPing = zod_1.z.object({
40
+ message_type: zod_1.z.literal("ping"),
41
+ ping_timestamp: zod_1.z.number().int(),
42
+ });
43
+ exports.GuavaPong = zod_1.z.object({
44
+ message_type: zod_1.z.literal("pong"),
45
+ ping_timestamp: zod_1.z.number().int(),
46
+ pong_timestamp: zod_1.z.number().int(),
47
+ });
48
+ exports.GuavaAck = zod_1.z.object({
49
+ message_type: zod_1.z.literal("ack"),
50
+ last_seen_sequence: zod_1.z.number().int(),
51
+ });
52
+ // -------- UNION TYPES ------------
53
+ exports.GuavaClientMessage = zod_1.z.discriminatedUnion("message_type", [
54
+ exports.GuavaOpen,
55
+ exports.GuavaClose,
56
+ exports.GuavaMessage,
57
+ exports.GuavaPing,
58
+ exports.GuavaPong,
59
+ exports.GuavaAck,
60
+ ]);
61
+ exports.GuavaServerMessage = zod_1.z.discriminatedUnion("message_type", [
62
+ exports.GuavaOpenAck,
63
+ exports.GuavaClose,
64
+ exports.GuavaMessage,
65
+ exports.GuavaPing,
66
+ exports.GuavaPong,
67
+ exports.GuavaAck,
68
+ ]);
69
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/socket/protocol.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,WAAW,GAAG,OAAC,CAAC,IAAI,CAAC;IAChC,wBAAwB;IACxB,YAAY;IACZ,MAAM;IACN,OAAO;IACP,cAAc;IACd,qBAAqB;IACrB,SAAS;CACV,CAAC,CAAC;AAGH,6CAA6C;AAEhC,QAAA,SAAS,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,OAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE;IACzB,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE;IACtB,kBAAkB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CACrC,CAAC,CAAC;AAGH,6CAA6C;AAEhC,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,YAAY,EAAE,OAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IACnC,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE;IACtB,kBAAkB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CACrC,CAAC,CAAC;AAGH,+CAA+C;AAElC,QAAA,UAAU,GAAG,OAAC,CAAC,MAAM,CAAC;IACjC,YAAY,EAAE,OAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,EAAE,mBAAW;IACnB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAGU,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,YAAY,EAAE,OAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAClC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC1B,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC;CAC3C,CAAC,CAAC;AAGU,QAAA,SAAS,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,OAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CACjC,CAAC,CAAC;AAGU,QAAA,SAAS,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,OAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAChC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CACjC,CAAC,CAAC;AAGU,QAAA,QAAQ,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/B,YAAY,EAAE,OAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9B,kBAAkB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CACrC,CAAC,CAAC;AAGH,oCAAoC;AAEvB,QAAA,kBAAkB,GAAG,OAAC,CAAC,kBAAkB,CAAC,cAAc,EAAE;IACrE,iBAAS;IACT,kBAAU;IACV,oBAAY;IACZ,iBAAS;IACT,iBAAS;IACT,gBAAQ;CACT,CAAC,CAAC;AAGU,QAAA,kBAAkB,GAAG,OAAC,CAAC,kBAAkB,CAAC,cAAc,EAAE;IACrE,oBAAY;IACZ,kBAAU;IACV,oBAAY;IACZ,iBAAS;IACT,iBAAS;IACT,gBAAQ;CACT,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare class EventCounter {
2
+ private readonly windowMs;
3
+ private readonly timestamps;
4
+ constructor(windowSeconds: number);
5
+ addEvent(): void;
6
+ count(): number;
7
+ private evictOld;
8
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventCounter = void 0;
4
+ class EventCounter {
5
+ windowMs;
6
+ timestamps = [];
7
+ constructor(windowSeconds) {
8
+ this.windowMs = windowSeconds * 1000;
9
+ }
10
+ addEvent() {
11
+ this.timestamps.push(performance.now());
12
+ this.evictOld();
13
+ }
14
+ count() {
15
+ this.evictOld();
16
+ return this.timestamps.length;
17
+ }
18
+ evictOld() {
19
+ const cutoff = performance.now() - this.windowMs;
20
+ while (this.timestamps.length > 0 && this.timestamps[0] <= cutoff) {
21
+ this.timestamps.shift();
22
+ }
23
+ }
24
+ }
25
+ exports.EventCounter = EventCounter;
26
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/socket/utils.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IACN,QAAQ,CAAS;IACjB,UAAU,GAAa,EAAE,CAAC;IAE3C,YAAY,aAAqB;QAC/B,IAAI,CAAC,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAEO,QAAQ;QACd,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,IAAI,MAAM,EAAE,CAAC;YACnE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAxBD,oCAwBC"}
@@ -1,18 +1,18 @@
1
+ import type { Client } from "./client.ts";
1
2
  export declare const TelemetryEvent: {
2
3
  readonly METHOD_CALL: "method-call";
3
4
  readonly EXCEPTION_RAISED: "exception-raised";
4
5
  };
5
6
  export type TelemetryEvent = (typeof TelemetryEvent)[keyof typeof TelemetryEvent];
6
7
  export declare abstract class BaseTelemetryClient {
7
- protected sdkHeaders: Record<string, string>;
8
+ protected _sdkClient: Client | null;
8
9
  abstract sendEvent(event: TelemetryEvent, data?: Record<string, unknown>): void;
9
- setSdkHeaders(headers: Record<string, string>): void;
10
+ setSdkClient(client: Client): void;
10
11
  trackClass(onlyExceptions?: Set<string>): <T extends abstract new (...args: unknown[]) => object>(target: T, _context: ClassDecoratorContext<T>) => T;
11
12
  }
12
13
  export declare class TelemetryClient extends BaseTelemetryClient {
13
14
  private queue;
14
15
  private timer;
15
- private readonly baseUrl;
16
16
  constructor();
17
17
  sendEvent(event: TelemetryEvent, data?: Record<string, unknown>): void;
18
18
  private uploadEvents;
@@ -14,9 +14,9 @@ exports.TelemetryEvent = {
14
14
  EXCEPTION_RAISED: "exception-raised",
15
15
  };
16
16
  class BaseTelemetryClient {
17
- sdkHeaders = {};
18
- setSdkHeaders(headers) {
19
- this.sdkHeaders = headers;
17
+ _sdkClient = null;
18
+ setSdkClient(client) {
19
+ this._sdkClient = client;
20
20
  }
21
21
  trackClass(onlyExceptions = new Set()) {
22
22
  const client = this;
@@ -52,10 +52,8 @@ exports.BaseTelemetryClient = BaseTelemetryClient;
52
52
  class TelemetryClient extends BaseTelemetryClient {
53
53
  queue = [];
54
54
  timer;
55
- baseUrl;
56
55
  constructor() {
57
56
  super();
58
- this.baseUrl = (0, utils_ts_1.getBaseUrl)();
59
57
  this.timer = setInterval(() => {
60
58
  void this.uploadEvents();
61
59
  }, UPLOAD_INTERVAL_MS);
@@ -73,6 +71,10 @@ class TelemetryClient extends BaseTelemetryClient {
73
71
  this.queue.push({ timestamp_ms: Date.now(), event_type: event, data });
74
72
  }
75
73
  async uploadEvents() {
74
+ if (!this._sdkClient) {
75
+ logger.debug("No SDK client. Cannot upload telemetry events.");
76
+ return;
77
+ }
76
78
  const payload = this.queue.splice(0);
77
79
  if (!payload.length) {
78
80
  logger.debug("No events to upload.");
@@ -80,10 +82,10 @@ class TelemetryClient extends BaseTelemetryClient {
80
82
  }
81
83
  logger.debug(`Uploading ${payload.length} telemetry events.`);
82
84
  try {
83
- const url = new URL("v1/upload-telemetry", this.baseUrl);
85
+ const url = new URL("v1/upload-telemetry", this._sdkClient.getHttpBase());
84
86
  await (0, utils_ts_1.fetchOrThrow)(url, {
85
87
  method: "POST",
86
- headers: { ...this.sdkHeaders, "Content-Type": "application/json" },
88
+ headers: { ...(await this._sdkClient.headers()), "Content-Type": "application/json" },
87
89
  body: JSON.stringify({ events: payload }),
88
90
  });
89
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { TestSession } from "./session.ts";
2
+ export declare function runChat(session: TestSession): Promise<void>;
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runChat = runChat;
4
+ const node_util_1 = require("node:util");
5
+ const CYAN = "\x1b[36m";
6
+ const GREEN = "\x1b[32m";
7
+ const YELLOW = "\x1b[33m";
8
+ const RED_BOLD = "\x1b[1;31m";
9
+ const DIM = "\x1b[2m";
10
+ const RESET = "\x1b[0m";
11
+ function moveTo(row, col) {
12
+ return `\x1b[${row};${col}H`;
13
+ }
14
+ function wordWrap(text, width) {
15
+ if (width <= 0 || text.length <= width)
16
+ return [text];
17
+ const lines = [];
18
+ let remaining = text;
19
+ while (remaining.length > width) {
20
+ let breakAt = remaining.lastIndexOf(" ", width);
21
+ if (breakAt <= 0)
22
+ breakAt = width;
23
+ lines.push(remaining.slice(0, breakAt));
24
+ remaining = remaining.slice(breakAt).trimStart();
25
+ }
26
+ if (remaining)
27
+ lines.push(remaining);
28
+ return lines;
29
+ }
30
+ function lineColor(speaker, level) {
31
+ if (speaker === "agent")
32
+ return CYAN;
33
+ if (speaker === "you")
34
+ return GREEN;
35
+ if (level === "warn")
36
+ return YELLOW;
37
+ if (level === "error")
38
+ return RED_BOLD;
39
+ return DIM;
40
+ }
41
+ function render(messages, inputBuf, sessionEnded) {
42
+ const width = process.stdout.columns || 80;
43
+ const height = process.stdout.rows || 24;
44
+ const convHeight = Math.max(1, height - 2);
45
+ const allLines = [];
46
+ for (const msg of messages) {
47
+ if (msg.speaker === "system") {
48
+ const wrapped = wordWrap(msg.text, width);
49
+ for (const line of wrapped) {
50
+ allLines.push({ text: line, speaker: "system", level: msg.level });
51
+ }
52
+ }
53
+ else {
54
+ const prefix = msg.speaker === "agent" ? "agent: " : "you: ";
55
+ const continuation = " ".repeat(prefix.length);
56
+ const innerWidth = Math.max(1, width - prefix.length);
57
+ const wrapped = wordWrap(msg.text, innerWidth);
58
+ wrapped.forEach((line, i) => {
59
+ allLines.push({ text: (i === 0 ? prefix : continuation) + line, speaker: msg.speaker });
60
+ });
61
+ }
62
+ }
63
+ const visibleLines = allLines.slice(-convHeight);
64
+ let out = "\x1b[?25l\x1b[2J\x1b[H";
65
+ for (let i = 0; i < convHeight; i++) {
66
+ out += moveTo(i + 1, 1);
67
+ const line = visibleLines[i];
68
+ if (line) {
69
+ const color = lineColor(line.speaker, line.level);
70
+ out += color + line.text.slice(0, width) + RESET;
71
+ }
72
+ }
73
+ out += moveTo(height - 1, 1) + "─".repeat(width);
74
+ if (sessionEnded) {
75
+ out += `${moveTo(height, 1)}Session ended. Press any key to exit.`;
76
+ }
77
+ else {
78
+ const label = "you: ";
79
+ const maxLen = Math.max(0, width - label.length);
80
+ out += moveTo(height, 1) + label + inputBuf.slice(-maxLen);
81
+ }
82
+ out += "\x1b[?25h";
83
+ process.stdout.write(out);
84
+ }
85
+ function hookConsole(messages, getState) {
86
+ const orig = {
87
+ log: console.log,
88
+ info: console.info,
89
+ debug: console.debug,
90
+ warn: console.warn,
91
+ error: console.error,
92
+ };
93
+ function makeHook(level) {
94
+ return (...args) => {
95
+ const { cleaned, inputBuf, sessionEnded } = getState();
96
+ messages.push({
97
+ speaker: "system",
98
+ text: (0, node_util_1.format)(...args),
99
+ level,
100
+ });
101
+ if (!cleaned)
102
+ render(messages, inputBuf, sessionEnded);
103
+ };
104
+ }
105
+ console.log = makeHook("log");
106
+ console.info = makeHook("info");
107
+ console.debug = makeHook("debug");
108
+ console.warn = makeHook("warn");
109
+ console.error = makeHook("error");
110
+ return () => {
111
+ console.log = orig.log;
112
+ console.info = orig.info;
113
+ console.debug = orig.debug;
114
+ console.warn = orig.warn;
115
+ console.error = orig.error;
116
+ };
117
+ }
118
+ async function runChat(session) {
119
+ const messages = [];
120
+ let inputBuf = "";
121
+ let sessionEnded = false;
122
+ let cleaned = false;
123
+ const restoreConsole = hookConsole(messages, () => ({ inputBuf, sessionEnded, cleaned }));
124
+ // Consume agent messages in the background
125
+ void (async () => {
126
+ try {
127
+ while (true) {
128
+ const event = await session.recv();
129
+ if (event.message_type === "bot-tts") {
130
+ messages.push({ speaker: "agent", text: event.transcript });
131
+ if (!cleaned)
132
+ render(messages, inputBuf, sessionEnded);
133
+ }
134
+ }
135
+ }
136
+ catch {
137
+ if (!cleaned) {
138
+ sessionEnded = true;
139
+ render(messages, inputBuf, sessionEnded);
140
+ }
141
+ }
142
+ })();
143
+ process.stdin.setRawMode(true);
144
+ process.stdin.resume();
145
+ render(messages, inputBuf, sessionEnded);
146
+ try {
147
+ await new Promise((resolve) => {
148
+ const onData = (chunk) => {
149
+ const ch = chunk[0];
150
+ if (sessionEnded || ch === 0x03 /* Ctrl+C */) {
151
+ process.stdin.off("data", onData);
152
+ resolve();
153
+ return;
154
+ }
155
+ if (ch === 0x0d || ch === 0x0a /* Enter */) {
156
+ const utterance = inputBuf.trim();
157
+ if (utterance) {
158
+ messages.push({ speaker: "you", text: utterance });
159
+ session.say(utterance);
160
+ }
161
+ inputBuf = "";
162
+ }
163
+ else if (ch === 0x7f || ch === 0x08 /* Backspace */) {
164
+ inputBuf = inputBuf.slice(0, -1);
165
+ }
166
+ else if (ch >= 0x20 && ch < 0x7f /* Printable ASCII */) {
167
+ inputBuf += String.fromCharCode(ch);
168
+ }
169
+ render(messages, inputBuf, sessionEnded);
170
+ };
171
+ process.stdin.on("data", onData);
172
+ });
173
+ }
174
+ finally {
175
+ cleaned = true;
176
+ restoreConsole();
177
+ process.stdin.setRawMode(false);
178
+ process.stdout.write("\x1b[?25h\x1b[2J\x1b[H");
179
+ }
180
+ }
181
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/testing/chat.ts"],"names":[],"mappings":";;AAkIA,0BAiEC;AAnMD,yCAAiD;AAQjD,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,SAAS,MAAM,CAAC,GAAW,EAAE,GAAW;IACtC,OAAO,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,OAAO,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,GAAG,KAAK,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACxC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,OAA2B,EAAE,KAAmB;IACjE,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACpC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,QAAmB,EAAE,QAAgB,EAAE,YAAqB;IAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAyE,EAAE,CAAC;IAC1F,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/C,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,GAAG,GAAG,wBAAwB,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;QACnD,CAAC;IACH,CAAC;IAED,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjD,IAAI,YAAY,EAAE,CAAC;QACjB,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,uCAAuC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,OAAO,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,GAAG,IAAI,WAAW,CAAC;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAClB,QAAmB,EACnB,QAA6E;IAE7E,MAAM,IAAI,GAAG;QACX,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;IAEF,SAAS,QAAQ,CAAC,KAAkB;QAClC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,QAAQ;gBACjB,IAAI,EAAE,IAAA,kBAAU,EAAC,GAAG,IAAI,CAAC;gBACzB,KAAK;aACN,CAAC,CAAC;YACH,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACvB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAE1F,2CAA2C;IAC3C,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC5D,IAAI,CAAC,OAAO;wBAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;gBAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBAErB,IAAI,YAAY,IAAI,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAClC,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAED,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,SAAS,EAAE,CAAC;wBACd,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;wBACnD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBACzB,CAAC;oBACD,QAAQ,GAAG,EAAE,CAAC;gBAChB,CAAC;qBAAM,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;oBACtD,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC;qBAAM,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACzD,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBACtC,CAAC;gBAED,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC3C,CAAC,CAAC;YAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Call } from "../call.ts";
2
+ import type { Command } from "../commands.ts";
3
+ export declare class MockCall extends Call {
4
+ get commands(): Command[];
5
+ setField(fieldName: string, fieldValue: unknown): void;
6
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockCall = void 0;
4
+ const call_ts_1 = require("../call.js");
5
+ class MockCall extends call_ts_1.Call {
6
+ get commands() {
7
+ return this._commandQueue;
8
+ }
9
+ setField(fieldName, fieldValue) {
10
+ this._fieldValues[fieldName] = fieldValue;
11
+ }
12
+ }
13
+ exports.MockCall = MockCall;
14
+ //# sourceMappingURL=mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/testing/mocks.ts"],"names":[],"mappings":";;;AAAA,wCAAkC;AAGlC,MAAa,QAAS,SAAQ,cAAI;IAChC,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,UAAmB;QAC7C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;IAC5C,CAAC;CACF;AARD,4BAQC"}
@@ -0,0 +1,46 @@
1
+ import * as z from "zod";
2
+ export declare const Ping: z.ZodObject<{
3
+ message_type: z.ZodLiteral<"ping">;
4
+ }, z.core.$strip>;
5
+ export type Ping = z.infer<typeof Ping>;
6
+ export declare const Pong: z.ZodObject<{
7
+ message_type: z.ZodLiteral<"pong">;
8
+ }, z.core.$strip>;
9
+ export type Pong = z.infer<typeof Pong>;
10
+ export declare const InjectASR: z.ZodObject<{
11
+ message_type: z.ZodLiteral<"inject-asr">;
12
+ utterance: z.ZodString;
13
+ }, z.core.$strip>;
14
+ export type InjectASR = z.infer<typeof InjectASR>;
15
+ export declare const WaitForTurn: z.ZodObject<{
16
+ message_type: z.ZodLiteral<"wait-for-caller-turn">;
17
+ request_id: z.ZodString;
18
+ }, z.core.$strip>;
19
+ export type WaitForTurn = z.infer<typeof WaitForTurn>;
20
+ export declare const BotTTS: z.ZodObject<{
21
+ message_type: z.ZodLiteral<"bot-tts">;
22
+ transcript: z.ZodString;
23
+ }, z.core.$strip>;
24
+ export type BotTTS = z.infer<typeof BotTTS>;
25
+ export declare const TurnStarted: z.ZodObject<{
26
+ message_type: z.ZodLiteral<"caller-turn-started">;
27
+ request_id: z.ZodString;
28
+ }, z.core.$strip>;
29
+ export type TurnStarted = z.infer<typeof TurnStarted>;
30
+ export declare const SessionStarted: z.ZodObject<{
31
+ message_type: z.ZodLiteral<"session-started">;
32
+ session_id: z.ZodString;
33
+ }, z.core.$strip>;
34
+ export type SessionStarted = z.infer<typeof SessionStarted>;
35
+ export declare const TestingEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
36
+ message_type: z.ZodLiteral<"ping">;
37
+ }, z.core.$strip>, z.ZodObject<{
38
+ message_type: z.ZodLiteral<"pong">;
39
+ }, z.core.$strip>, z.ZodObject<{
40
+ message_type: z.ZodLiteral<"bot-tts">;
41
+ transcript: z.ZodString;
42
+ }, z.core.$strip>, z.ZodObject<{
43
+ message_type: z.ZodLiteral<"caller-turn-started">;
44
+ request_id: z.ZodString;
45
+ }, z.core.$strip>], "message_type">;
46
+ export type TestingEvent = z.infer<typeof TestingEvent>;