@hainiva/agent-sdk 0.0.0-stage → 0.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.
Files changed (119) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/LICENSE +21 -0
  3. package/README.md +278 -2
  4. package/SECURITY.md +33 -0
  5. package/dist/cjs/agent.cjs +320 -0
  6. package/dist/cjs/agent.d.cts +239 -0
  7. package/dist/cjs/calls.cjs +277 -0
  8. package/dist/cjs/calls.d.cts +232 -0
  9. package/dist/cjs/contract.cjs +14 -0
  10. package/dist/cjs/contract.d.cts +225 -0
  11. package/dist/cjs/embed.cjs +253 -0
  12. package/dist/cjs/embed.d.cts +187 -0
  13. package/dist/cjs/emitter.cjs +50 -0
  14. package/dist/cjs/emitter.d.cts +22 -0
  15. package/dist/cjs/errors.cjs +28 -0
  16. package/dist/cjs/errors.d.cts +15 -0
  17. package/dist/cjs/events.cjs +97 -0
  18. package/dist/cjs/events.d.cts +97 -0
  19. package/dist/cjs/index.cjs +72 -0
  20. package/dist/cjs/index.d.cts +28 -0
  21. package/dist/cjs/livekit.cjs +56 -0
  22. package/dist/cjs/livekit.d.cts +35 -0
  23. package/dist/cjs/log.cjs +15 -0
  24. package/dist/cjs/log.d.cts +5 -0
  25. package/dist/cjs/react-native.cjs +32 -0
  26. package/dist/cjs/react-native.d.cts +39 -0
  27. package/dist/cjs/reactNativeDesk.cjs +107 -0
  28. package/dist/cjs/reactNativeDesk.d.cts +53 -0
  29. package/dist/cjs/redact.cjs +71 -0
  30. package/dist/cjs/redact.d.cts +21 -0
  31. package/dist/cjs/rest.cjs +286 -0
  32. package/dist/cjs/rest.d.cts +172 -0
  33. package/dist/cjs/session.cjs +159 -0
  34. package/dist/cjs/session.d.cts +101 -0
  35. package/dist/cjs/singleFlight.cjs +49 -0
  36. package/dist/cjs/singleFlight.d.cts +32 -0
  37. package/dist/cjs/url.cjs +39 -0
  38. package/dist/cjs/url.d.cts +13 -0
  39. package/dist/cjs/web.cjs +28 -0
  40. package/dist/cjs/web.d.cts +23 -0
  41. package/dist/cjs/ws.cjs +246 -0
  42. package/dist/cjs/ws.d.cts +134 -0
  43. package/dist/esm/agent.d.ts +240 -0
  44. package/dist/esm/agent.d.ts.map +1 -0
  45. package/dist/esm/agent.js +317 -0
  46. package/dist/esm/agent.js.map +1 -0
  47. package/dist/esm/calls.d.ts +233 -0
  48. package/dist/esm/calls.d.ts.map +1 -0
  49. package/dist/esm/calls.js +271 -0
  50. package/dist/esm/calls.js.map +1 -0
  51. package/dist/esm/contract.d.ts +226 -0
  52. package/dist/esm/contract.d.ts.map +1 -0
  53. package/dist/esm/contract.js +12 -0
  54. package/dist/esm/contract.js.map +1 -0
  55. package/dist/esm/embed.d.ts +188 -0
  56. package/dist/esm/embed.d.ts.map +1 -0
  57. package/dist/esm/embed.js +247 -0
  58. package/dist/esm/embed.js.map +1 -0
  59. package/dist/esm/emitter.d.ts +23 -0
  60. package/dist/esm/emitter.d.ts.map +1 -0
  61. package/dist/esm/emitter.js +47 -0
  62. package/dist/esm/emitter.js.map +1 -0
  63. package/dist/esm/errors.d.ts +16 -0
  64. package/dist/esm/errors.d.ts.map +1 -0
  65. package/dist/esm/errors.js +25 -0
  66. package/dist/esm/errors.js.map +1 -0
  67. package/dist/esm/events.d.ts +98 -0
  68. package/dist/esm/events.d.ts.map +1 -0
  69. package/dist/esm/events.js +90 -0
  70. package/dist/esm/events.js.map +1 -0
  71. package/dist/esm/index.d.ts +29 -0
  72. package/dist/esm/index.d.ts.map +1 -0
  73. package/dist/esm/index.js +29 -0
  74. package/dist/esm/index.js.map +1 -0
  75. package/dist/esm/livekit.d.ts +36 -0
  76. package/dist/esm/livekit.d.ts.map +1 -0
  77. package/dist/esm/livekit.js +54 -0
  78. package/dist/esm/livekit.js.map +1 -0
  79. package/dist/esm/log.d.ts +6 -0
  80. package/dist/esm/log.d.ts.map +1 -0
  81. package/dist/esm/log.js +13 -0
  82. package/dist/esm/log.js.map +1 -0
  83. package/dist/esm/react-native.d.ts +40 -0
  84. package/dist/esm/react-native.d.ts.map +1 -0
  85. package/dist/esm/react-native.js +26 -0
  86. package/dist/esm/react-native.js.map +1 -0
  87. package/dist/esm/reactNativeDesk.d.ts +54 -0
  88. package/dist/esm/reactNativeDesk.d.ts.map +1 -0
  89. package/dist/esm/reactNativeDesk.js +103 -0
  90. package/dist/esm/reactNativeDesk.js.map +1 -0
  91. package/dist/esm/redact.d.ts +22 -0
  92. package/dist/esm/redact.d.ts.map +1 -0
  93. package/dist/esm/redact.js +66 -0
  94. package/dist/esm/redact.js.map +1 -0
  95. package/dist/esm/rest.d.ts +173 -0
  96. package/dist/esm/rest.d.ts.map +1 -0
  97. package/dist/esm/rest.js +281 -0
  98. package/dist/esm/rest.js.map +1 -0
  99. package/dist/esm/session.d.ts +102 -0
  100. package/dist/esm/session.d.ts.map +1 -0
  101. package/dist/esm/session.js +155 -0
  102. package/dist/esm/session.js.map +1 -0
  103. package/dist/esm/singleFlight.d.ts +33 -0
  104. package/dist/esm/singleFlight.d.ts.map +1 -0
  105. package/dist/esm/singleFlight.js +46 -0
  106. package/dist/esm/singleFlight.js.map +1 -0
  107. package/dist/esm/url.d.ts +14 -0
  108. package/dist/esm/url.d.ts.map +1 -0
  109. package/dist/esm/url.js +37 -0
  110. package/dist/esm/url.js.map +1 -0
  111. package/dist/esm/web.d.ts +24 -0
  112. package/dist/esm/web.d.ts.map +1 -0
  113. package/dist/esm/web.js +23 -0
  114. package/dist/esm/web.js.map +1 -0
  115. package/dist/esm/ws.d.ts +135 -0
  116. package/dist/esm/ws.d.ts.map +1 -0
  117. package/dist/esm/ws.js +242 -0
  118. package/dist/esm/ws.js.map +1 -0
  119. package/package.json +117 -4
@@ -0,0 +1,271 @@
1
+ import { TypedEmitter } from "./emitter.js";
2
+ export const initialCallsState = Object.freeze({ calls: Object.freeze({}), activeId: null });
3
+ const LIVE = new Set(["connecting", "active", "held", "transferring"]);
4
+ const IN_CALL = new Set(["active", "held", "transferring"]);
5
+ function newCall(info, phase, at) {
6
+ return { info, phase, muted: false, since: null, ringingSince: phase === "ringing" ? at : null, transfer: null, notice: null, endReason: null, endedAt: null, error: null };
7
+ }
8
+ function activeOf(calls) {
9
+ for (const c of Object.values(calls))
10
+ if (LIVE.has(c.phase))
11
+ return c.info.id;
12
+ return null;
13
+ }
14
+ /** Apply one event. Pure: never mutates `state`. */
15
+ export function transition(state, ev) {
16
+ const calls = { ...state.calls };
17
+ const effects = [];
18
+ const same = { state, effects: [], changed: false };
19
+ const id = ev.type === "ring" || ev.type === "dial" ? ev.call.id : ev.id;
20
+ const c = calls[id];
21
+ const put = (next) => { calls[next.info.id] = next; };
22
+ const end = (call, reason, at, extra = {}) => {
23
+ if (call.phase === "ringing")
24
+ effects.push({ type: "ring.cancel", id: call.info.id });
25
+ else if (LIVE.has(call.phase))
26
+ effects.push({ type: "media.leave", id: call.info.id });
27
+ put({ ...call, ...extra, phase: "ended", endReason: reason, endedAt: at, transfer: null });
28
+ effects.push({ type: "ended", id: call.info.id, reason });
29
+ };
30
+ const done = () => {
31
+ const next = { calls, activeId: activeOf(calls) };
32
+ return { state: next, effects, changed: true };
33
+ };
34
+ switch (ev.type) {
35
+ case "ring": {
36
+ if (!ev.call.id)
37
+ return same;
38
+ if (c && c.phase !== "ended")
39
+ return same; // the same ring again (push + socket)
40
+ if (ev.call.expiresAt !== undefined && ev.call.expiresAt <= ev.at)
41
+ return same; // arrived too late
42
+ if (state.activeId) {
43
+ // On a call: this device turns it away (iPhone: CallKit already shows it).
44
+ return { state, effects: [{ type: "ring.cancel", id }], changed: false };
45
+ }
46
+ put(newCall({ ...ev.call, direction: "inbound" }, "ringing", ev.at));
47
+ effects.push({ type: "ring.show", call: ev.call });
48
+ return done();
49
+ }
50
+ case "dial": {
51
+ if (!ev.call.id || state.activeId)
52
+ return same;
53
+ if (Object.values(state.calls).some((x) => x.phase === "ringing"))
54
+ return same; // answer or decline first
55
+ if (c && c.phase !== "ended")
56
+ return same;
57
+ put(newCall({ ...ev.call, direction: "outbound", path: "out" }, "connecting", ev.at));
58
+ return done();
59
+ }
60
+ case "accept": {
61
+ if (!c || c.phase !== "ringing" || state.activeId)
62
+ return same;
63
+ if (c.info.expiresAt !== undefined && c.info.expiresAt <= ev.at) {
64
+ end(c, "missed", ev.at);
65
+ return done();
66
+ }
67
+ effects.push({ type: "ring.cancel", id });
68
+ put({ ...c, phase: "connecting" });
69
+ for (const other of Object.values(calls)) {
70
+ if (other.info.id !== id && other.phase === "ringing")
71
+ end(other, "busy", ev.at);
72
+ }
73
+ return done();
74
+ }
75
+ case "decline": {
76
+ if (!c || c.phase !== "ringing")
77
+ return same;
78
+ end(c, "declined", ev.at);
79
+ return done();
80
+ }
81
+ case "expire": {
82
+ if (!c || c.phase !== "ringing")
83
+ return same;
84
+ if (c.info.expiresAt !== undefined && c.info.expiresAt > ev.at)
85
+ return same;
86
+ end(c, "missed", ev.at);
87
+ return done();
88
+ }
89
+ case "ring_cancelled": {
90
+ if (!c)
91
+ return same;
92
+ if (c.phase === "ringing") {
93
+ end(c, ev.reason, ev.at);
94
+ return done();
95
+ }
96
+ // Answering here: "taken elsewhere" is about the race the server decides
97
+ // (accept_failed tells); the caller hanging up ends it.
98
+ if (c.phase === "connecting" && ev.reason === "remote_ended") {
99
+ end(c, "remote_ended", ev.at);
100
+ return done();
101
+ }
102
+ return same;
103
+ }
104
+ case "accept_failed": {
105
+ if (!c || c.phase !== "connecting")
106
+ return same;
107
+ const reason = ev.reason === "answered_elsewhere" ? "answered_elsewhere" : ev.reason === "gone" ? "remote_ended" : "failed";
108
+ end(c, reason, ev.at, { error: ev.error ?? null });
109
+ return done();
110
+ }
111
+ case "connected": {
112
+ if (!c || c.phase === "ended") {
113
+ // Media came up after the call ended (caller hung up during the answer): leave it.
114
+ return { state, effects: [{ type: "media.leave", id }], changed: false };
115
+ }
116
+ if (c.phase !== "connecting")
117
+ return same;
118
+ put({ ...c, phase: "active", since: ev.answered ? ev.at : null, muted: false });
119
+ return done();
120
+ }
121
+ case "answered": {
122
+ if (!c || !IN_CALL.has(c.phase) || c.since !== null)
123
+ return same;
124
+ put({ ...c, since: ev.at });
125
+ return done();
126
+ }
127
+ case "mute": {
128
+ if (!c || !IN_CALL.has(c.phase) || c.muted === ev.muted)
129
+ return same;
130
+ put({ ...c, muted: ev.muted });
131
+ return done();
132
+ }
133
+ case "hold": {
134
+ if (!c || c.phase !== "active")
135
+ return same;
136
+ put({ ...c, phase: "held" });
137
+ return done();
138
+ }
139
+ case "resume": {
140
+ if (!c || c.phase !== "held")
141
+ return same;
142
+ put({ ...c, phase: "active" });
143
+ return done();
144
+ }
145
+ case "transfer_start": {
146
+ if (!c || (c.phase !== "active" && c.phase !== "held"))
147
+ return same;
148
+ const mode = ev.target.kind === "queue" ? "blind" : ev.mode;
149
+ put({ ...c, phase: "transferring", notice: null, transfer: { mode, target: ev.target, joined: false, startedAt: ev.at, resumeTo: c.phase } });
150
+ return done();
151
+ }
152
+ case "transfer_joined": {
153
+ if (!c || c.phase !== "transferring" || !c.transfer || c.transfer.mode !== "warm" || c.transfer.joined)
154
+ return same;
155
+ put({ ...c, transfer: { ...c.transfer, joined: true } });
156
+ return done();
157
+ }
158
+ case "transfer_cancelled": {
159
+ if (!c || c.phase !== "transferring" || !c.transfer)
160
+ return same;
161
+ put({ ...c, phase: c.transfer.resumeTo, transfer: null, notice: ev.notice ?? null });
162
+ return done();
163
+ }
164
+ case "transfer_completed": {
165
+ if (!c || c.phase !== "transferring")
166
+ return same;
167
+ end(c, "transferred", ev.at);
168
+ return done();
169
+ }
170
+ case "remote_end": {
171
+ if (!c || c.phase === "ended")
172
+ return same;
173
+ // A blind transfer ends here when the server hands the call over.
174
+ const reason = c.phase === "transferring" && c.transfer?.mode === "blind" ? "transferred" : "remote_ended";
175
+ end(c, reason, ev.at);
176
+ return done();
177
+ }
178
+ case "hang_up": {
179
+ if (!c || !LIVE.has(c.phase))
180
+ return same;
181
+ end(c, "hung_up", ev.at);
182
+ return done();
183
+ }
184
+ case "rekey": {
185
+ // An outgoing call learns its server id.
186
+ if (!c || c.phase === "ended" || !ev.newId || ev.newId === id || calls[ev.newId])
187
+ return same;
188
+ delete calls[id];
189
+ put({ ...c, info: { ...c.info, id: ev.newId, ...(ev.conversationId ? { conversationId: ev.conversationId } : {}) } });
190
+ return done();
191
+ }
192
+ case "dismiss": {
193
+ if (!c || c.phase !== "ended")
194
+ return same;
195
+ delete calls[id];
196
+ return done();
197
+ }
198
+ }
199
+ }
200
+ /** The call holding the line, if any. */
201
+ export function activeCall(state) {
202
+ return state.activeId ? state.calls[state.activeId] ?? null : null;
203
+ }
204
+ /** Calls ringing now, oldest first. */
205
+ export function ringingCalls(state) {
206
+ return Object.values(state.calls).filter((c) => c.phase === "ringing").sort((a, b) => (a.ringingSince ?? 0) - (b.ringingSince ?? 0));
207
+ }
208
+ /**
209
+ * The state machine with a clock: rings expire on their own, and listeners hear
210
+ * every change and effect. Still free of React Native, LiveKit and HTTP.
211
+ */
212
+ export class CallStore {
213
+ constructor(o = {}) {
214
+ this.o = o;
215
+ this.events = new TypedEmitter();
216
+ this.st = initialCallsState;
217
+ this.timers = new Map();
218
+ this.now = o.now ?? Date.now;
219
+ }
220
+ get state() { return this.st; }
221
+ /** Apply an event. `at` is filled from the clock when omitted. */
222
+ dispatch(ev) {
223
+ const full = ("at" in ev && typeof ev.at === "number" ? ev : { ...ev, at: this.now() });
224
+ const t = transition(this.st, full);
225
+ if (t.changed) {
226
+ this.st = t.state;
227
+ this.syncTimers();
228
+ this.events.emit("change", this.st);
229
+ }
230
+ for (const e of t.effects)
231
+ this.events.emit("effect", e);
232
+ return t;
233
+ }
234
+ /** Stop every timer (e.g. on sign-out). */
235
+ dispose() {
236
+ for (const t of this.timers.values())
237
+ clearTimeout(t);
238
+ this.timers.clear();
239
+ this.events.removeAll();
240
+ }
241
+ syncTimers() {
242
+ for (const [key, t] of this.timers) {
243
+ const cut = key.indexOf(":");
244
+ const kind = key.slice(0, cut);
245
+ const id = key.slice(cut + 1);
246
+ const c = this.st.calls[id];
247
+ if (!c || (kind === "expire" && c.phase !== "ringing") || (kind === "forget" && c.phase !== "ended")) {
248
+ clearTimeout(t);
249
+ this.timers.delete(key);
250
+ }
251
+ }
252
+ for (const c of Object.values(this.st.calls)) {
253
+ const id = c.info.id;
254
+ if (c.phase === "ringing" && c.info.expiresAt !== undefined && !this.timers.has(`expire:${id}`)) {
255
+ const left = Math.max(0, c.info.expiresAt - this.now());
256
+ this.timers.set(`expire:${id}`, setTimeout(() => {
257
+ this.timers.delete(`expire:${id}`);
258
+ this.dispatch({ type: "expire", id, at: Math.max(this.now(), c.info.expiresAt ?? 0) });
259
+ }, left));
260
+ }
261
+ const forget = this.o.forgetEndedAfterMs ?? 0;
262
+ if (c.phase === "ended" && forget > 0 && !this.timers.has(`forget:${id}`)) {
263
+ this.timers.set(`forget:${id}`, setTimeout(() => {
264
+ this.timers.delete(`forget:${id}`);
265
+ this.dispatch({ type: "dismiss", id });
266
+ }, forget));
267
+ }
268
+ }
269
+ }
270
+ }
271
+ //# sourceMappingURL=calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/calls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * GENERATED from the HAINIVA monorepo (@aicc/types agentApi.ts and
3
+ * agentEvents.ts) — do not edit by hand. The Agent API's response shapes and
4
+ * event names: additive changes only within a major version.
5
+ */
6
+ export type AgentPresenceStatus = "online" | "busy" | "away" | "offline";
7
+ export type AgentRole = "agent" | "supervisor";
8
+ export interface AgentMeDto {
9
+ id: string;
10
+ externalId: string | null;
11
+ displayName: string | null;
12
+ role: AgentRole;
13
+ /** Team ids this member works in; null = the whole organisation. */
14
+ teams: string[] | null;
15
+ status: AgentPresenceStatus | null;
16
+ session: {
17
+ id: string;
18
+ agentAppId: string;
19
+ mode: "live" | "test";
20
+ expiresAt: string;
21
+ };
22
+ }
23
+ export interface AgentRingDto {
24
+ callId: string;
25
+ conversationId: string;
26
+ kind: "voice" | "video" | "chat";
27
+ channel: string;
28
+ contactName: string | null;
29
+ callerNumber: string | null;
30
+ /** direct = routed to you; queue = offered to your queue; escalation = a live call handed to you. */
31
+ path: "direct" | "queue" | "escalation";
32
+ startedAt: string;
33
+ }
34
+ export interface AgentCallDto {
35
+ callId: string;
36
+ conversationId: string;
37
+ kind: "voice" | "video" | "chat";
38
+ channel: string;
39
+ direction: "inbound" | "outbound" | "internal";
40
+ status: string;
41
+ assignedToMe: boolean;
42
+ startedAt: string;
43
+ endedAt: string | null;
44
+ contactName: string | null;
45
+ callerNumber: string | null;
46
+ }
47
+ export interface AgentMediaTokenDto {
48
+ token: string;
49
+ roomName: string;
50
+ livekitUrl: string;
51
+ expiresAt: string;
52
+ }
53
+ export interface AgentConversationDto {
54
+ id: string;
55
+ status: string;
56
+ subject: string | null;
57
+ channel: string | null;
58
+ chatType: string | null;
59
+ contact: {
60
+ id: string;
61
+ name: string | null;
62
+ phone: string | null;
63
+ };
64
+ assignedAgentId: string | null;
65
+ assignedToMe: boolean;
66
+ queueId: string | null;
67
+ /** The open interaction a message or file goes to (null when none is open). */
68
+ activeInteractionId: string | null;
69
+ lastMessageAt: string | null;
70
+ createdAt: string;
71
+ closedAt: string | null;
72
+ }
73
+ export interface AgentMessageDto {
74
+ id: string;
75
+ conversationId: string;
76
+ interactionId: string;
77
+ direction: string;
78
+ senderType: string;
79
+ /** agents.id of the sender when an agent wrote it. */
80
+ senderAgentId: string | null;
81
+ senderName: string | null;
82
+ type: string;
83
+ text: string | null;
84
+ attachment: {
85
+ name: string | null;
86
+ mimeType: string | null;
87
+ size: number | null;
88
+ } | null;
89
+ createdAt: string;
90
+ }
91
+ export interface AgentDispositionDto {
92
+ code: string;
93
+ label: string;
94
+ channel: string | null;
95
+ required: boolean;
96
+ }
97
+ export interface SupervisorLiveCallDto {
98
+ callId: string;
99
+ conversationId: string;
100
+ agentId: string | null;
101
+ agentName: string | null;
102
+ channel: string;
103
+ status: string;
104
+ startedAt: string;
105
+ contactName: string | null;
106
+ callerNumber: string | null;
107
+ queueId: string | null;
108
+ }
109
+ export interface SupervisorAgentDto {
110
+ id: string;
111
+ displayName: string;
112
+ externalId: string | null;
113
+ role: AgentRole;
114
+ teamId: string | null;
115
+ status: AgentPresenceStatus;
116
+ activeCalls: number;
117
+ openConversations: number;
118
+ }
119
+ export interface AgentPage<T> {
120
+ data: T[];
121
+ nextCursor: string | null;
122
+ }
123
+ /** POST /agent/v1/sessions (201) and POST /agent/v1/sessions/refresh (200). */
124
+ export interface AgentSessionDto {
125
+ accessToken: string;
126
+ accessExpiresAt: string;
127
+ /** hnv_rt_…, rotating: each refresh answers a new one and the old one stops working. */
128
+ refreshToken: string;
129
+ refreshExpiresAt: string;
130
+ sessionId: string;
131
+ member: {
132
+ id: string;
133
+ externalId: string | null;
134
+ displayName: string;
135
+ role: AgentRole;
136
+ };
137
+ app: {
138
+ id: string;
139
+ name: string;
140
+ mode: "live" | "test";
141
+ };
142
+ /** The event socket on the host the app reached; SDKs derive their own from their base URL. */
143
+ wsUrl: string;
144
+ }
145
+ /**
146
+ * POST /agent/v1/desk-session (201) — partner platform S4, the embeddable desk.
147
+ * A 15-minute token for the HAINIVA desk shown inside the partner's product,
148
+ * handed to the desk over postMessage only (never in a URL, never stored).
149
+ * Bound to the agent session it came from: ends when that session ends.
150
+ */
151
+ export interface AgentDeskSessionDto {
152
+ token: string;
153
+ expiresAt: string;
154
+ }
155
+ /** POST /agent/v1/calls/:id/accept. `media` is null for a call without a room (chat). */
156
+ export interface AgentAcceptDto {
157
+ callId: string;
158
+ accepted: true;
159
+ media: AgentMediaTokenDto | null;
160
+ }
161
+ /** POST /agent/v1/supervisor/calls/:id/supervise. */
162
+ export interface SupervisorSuperviseDto {
163
+ callId: string;
164
+ mode: "monitor" | "whisper" | "barge";
165
+ media: AgentMediaTokenDto;
166
+ }
167
+ /** POST /agent/v1/push/subscriptions body. */
168
+ export interface AgentPushSubscriptionInput {
169
+ platform: "ios" | "android";
170
+ /** FCM registration token (Android) or APNs device token, hex (iPhone). */
171
+ token: string;
172
+ /** voip = rings (PushKit on iPhone, high-priority data on Android); alert = ordinary notices. */
173
+ kind: "voip" | "alert";
174
+ /** Must be one of the agent app's allowedBundleIds. */
175
+ bundleId: string;
176
+ /** A stable id for this install: a new token from the same install replaces the old one. */
177
+ deviceId?: string;
178
+ }
179
+ /** POST /agent/v1/push/subscriptions (201). The token is never echoed. */
180
+ export interface AgentPushSubscriptionDto {
181
+ id: string;
182
+ platform: "ios" | "android";
183
+ kind: "voip" | "alert";
184
+ bundleId: string;
185
+ /** Whether the agent app has working push credentials for this platform right now. */
186
+ deliverable: boolean;
187
+ createdAt: string;
188
+ }
189
+ /** Event data of the stream's call.ringing. */
190
+ export interface AgentCallRingingData {
191
+ callId: string;
192
+ conversationId: string;
193
+ path: "direct" | "queue" | "transfer";
194
+ channel?: string | null;
195
+ line?: string | null;
196
+ contactName: string | null;
197
+ callerNumber?: string | null;
198
+ fromAgentId?: string | null;
199
+ fromAgentName?: string | null;
200
+ transferMode?: "warm" | "blind";
201
+ /** ISO time the ring ends, when the server knows it. */
202
+ expiresAt: string | null;
203
+ }
204
+ /** Event data of the stream's call.ended. callId is null when only the conversation is known. */
205
+ export interface AgentCallEndedData {
206
+ callId: string | null;
207
+ conversationId: string | null;
208
+ reason: "ended" | "failed" | "answered_elsewhere" | "declined" | "expired" | "transfer_ended";
209
+ answeredBy?: string | null;
210
+ failure?: {
211
+ reason: string;
212
+ };
213
+ }
214
+ export declare const AGENT_EVENT_NAMES: readonly ["call.ringing", "call.ended", "conversation.assigned", "message.created", "wrapup.required", "presence.changed", "supervisor.alert"];
215
+ export type AgentEventName = (typeof AGENT_EVENT_NAMES)[number];
216
+ export interface AgentEvent {
217
+ event: AgentEventName;
218
+ data: Record<string, unknown>;
219
+ }
220
+ /** What the stream delivers: the event plus its position (resume from it). */
221
+ export interface AgentStreamFrame extends AgentEvent {
222
+ type: "event";
223
+ seq: number;
224
+ at: string;
225
+ }
226
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * GENERATED from the HAINIVA monorepo (@aicc/types agentApi.ts and
3
+ * agentEvents.ts) — do not edit by hand. The Agent API's response shapes and
4
+ * event names: additive changes only within a major version.
5
+ */
6
+ /* eslint-disable */
7
+ // ── The event stream (/agent/v1/ws) ──────────────────────────────────────────
8
+ export const AGENT_EVENT_NAMES = [
9
+ "call.ringing", "call.ended", "conversation.assigned", "message.created",
10
+ "wrapup.required", "presence.changed", "supervisor.alert",
11
+ ];
12
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/contract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAoB;AAuLpB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAE,iBAAiB;IACxE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB;CACjD,CAAC"}