@raconte/node-sdk 0.1.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 (40) hide show
  1. package/README.md +64 -0
  2. package/dist/client.d.ts +23 -0
  3. package/dist/client.js +23 -0
  4. package/dist/generated/client/client.gen.d.ts +2 -0
  5. package/dist/generated/client/client.gen.js +229 -0
  6. package/dist/generated/client/index.d.ts +8 -0
  7. package/dist/generated/client/index.js +6 -0
  8. package/dist/generated/client/types.gen.d.ts +117 -0
  9. package/dist/generated/client/types.gen.js +2 -0
  10. package/dist/generated/client/utils.gen.d.ts +33 -0
  11. package/dist/generated/client/utils.gen.js +231 -0
  12. package/dist/generated/client.gen.d.ts +12 -0
  13. package/dist/generated/client.gen.js +3 -0
  14. package/dist/generated/core/auth.gen.d.ts +18 -0
  15. package/dist/generated/core/auth.gen.js +14 -0
  16. package/dist/generated/core/bodySerializer.gen.d.ts +25 -0
  17. package/dist/generated/core/bodySerializer.gen.js +57 -0
  18. package/dist/generated/core/params.gen.d.ts +43 -0
  19. package/dist/generated/core/params.gen.js +100 -0
  20. package/dist/generated/core/pathSerializer.gen.d.ts +33 -0
  21. package/dist/generated/core/pathSerializer.gen.js +114 -0
  22. package/dist/generated/core/queryKeySerializer.gen.d.ts +18 -0
  23. package/dist/generated/core/queryKeySerializer.gen.js +99 -0
  24. package/dist/generated/core/serverSentEvents.gen.d.ts +71 -0
  25. package/dist/generated/core/serverSentEvents.gen.js +137 -0
  26. package/dist/generated/core/types.gen.d.ts +78 -0
  27. package/dist/generated/core/types.gen.js +2 -0
  28. package/dist/generated/core/utils.gen.d.ts +19 -0
  29. package/dist/generated/core/utils.gen.js +87 -0
  30. package/dist/generated/index.d.ts +2 -0
  31. package/dist/generated/index.js +3 -0
  32. package/dist/generated/sdk.gen.d.ts +38 -0
  33. package/dist/generated/sdk.gen.js +133 -0
  34. package/dist/generated/types.gen.d.ts +705 -0
  35. package/dist/generated/types.gen.js +12 -0
  36. package/dist/generated/zod.gen.d.ts +1294 -0
  37. package/dist/generated/zod.gen.js +589 -0
  38. package/dist/index.d.ts +13 -0
  39. package/dist/index.js +11 -0
  40. package/package.json +55 -0
@@ -0,0 +1,589 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+ import { z } from "zod";
3
+ /**
4
+ * VoiceTestAudioUrlSchema
5
+ *
6
+ * Short-lived presigned URL for the voice preview audio. Generated on first request if missing.
7
+ */
8
+ export const zVoiceTestAudioUrlSchema = z.object({
9
+ url: z.url(),
10
+ expiresAt: z.string(),
11
+ mimeType: z.string(),
12
+ });
13
+ /**
14
+ * VoiceSchema
15
+ *
16
+ * A voice available for interview narration. Provider-specific identifiers are not exposed publicly.
17
+ */
18
+ export const zVoiceSchema = z.object({
19
+ id: z
20
+ .uuid()
21
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
22
+ name: z.string(),
23
+ language: z.string(),
24
+ gender: z.enum(["M", "F"]),
25
+ provider: z.enum(["gradium", "elevenlabs"]),
26
+ });
27
+ /**
28
+ * VoiceListSchema
29
+ *
30
+ * List of voices matching the requested language filter.
31
+ */
32
+ export const zVoiceListSchema = z.array(zVoiceSchema);
33
+ /**
34
+ * InterviewMessageAudioUrlSchema
35
+ *
36
+ * Short-lived presigned URL for the audio attached to an interview message.
37
+ */
38
+ export const zInterviewMessageAudioUrlSchema = z.object({
39
+ url: z.url(),
40
+ expiresAt: z.string(),
41
+ mimeType: z.string(),
42
+ });
43
+ /**
44
+ * InterviewLogSchema
45
+ *
46
+ * Schema for a single interview log entry. target is the email or phone for send events, null for status transitions. invitationId points to the specific invitation that the event concerns; null for legacy rows that predate the invitation split.
47
+ */
48
+ export const zInterviewLogSchema = z.object({
49
+ id: z
50
+ .uuid()
51
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
52
+ type: z.enum([
53
+ "email_sent",
54
+ "sms_sent",
55
+ "started",
56
+ "completed",
57
+ "cancelled",
58
+ "reactivated",
59
+ "archived",
60
+ "restored",
61
+ ]),
62
+ target: z.union([z.string(), z.null()]),
63
+ invitationId: z.union([
64
+ z
65
+ .uuid()
66
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
67
+ z.null(),
68
+ ]),
69
+ createdAt: z.string(),
70
+ });
71
+ /**
72
+ * InterviewLogListSchema
73
+ *
74
+ * Chronological history of events on an interview, most recent first.
75
+ */
76
+ export const zInterviewLogListSchema = z.array(zInterviewLogSchema);
77
+ /**
78
+ * InterviewMessageSchema
79
+ *
80
+ * Schema for an interview message. audioAssetId is null when no audio was recorded for that message (legacy messages, deleted audio, etc.). audioPeaks is a base64-encoded uint8 waveform summary of the attached audio (128 amplitude bins, 0-255), null when no audio is attached or when peaks have not been computed yet for a legacy asset. sentiment is populated only on user-role messages once async insights generation has completed.
81
+ */
82
+ export const zInterviewMessageSchema = z.object({
83
+ id: z
84
+ .uuid()
85
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
86
+ role: z.enum(["user", "assistant", "system"]),
87
+ content: z.string(),
88
+ audioAssetId: z.union([
89
+ z
90
+ .uuid()
91
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
92
+ z.null(),
93
+ ]),
94
+ audioDurationMs: z.union([z.int().gte(0).lte(9007199254740991), z.null()]),
95
+ audioPeaks: z.union([z.string(), z.null()]),
96
+ sentiment: z.union([z.enum(["positive", "neutral", "negative"]), z.null()]),
97
+ createdAt: z.string(),
98
+ });
99
+ /**
100
+ * InterviewInvitationStatus
101
+ *
102
+ * Lifecycle state of an invitation (the unit that gets sent and produces a transcript).
103
+ */
104
+ export const zInterviewInvitationStatus = z.enum([
105
+ "ready",
106
+ "in_progress",
107
+ "completed",
108
+ "cancelled",
109
+ ]);
110
+ /**
111
+ * InterviewInvitationSchema
112
+ *
113
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
114
+ */
115
+ export const zInterviewInvitationSchema = z.object({
116
+ id: z
117
+ .uuid()
118
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
119
+ interviewId: z
120
+ .uuid()
121
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
122
+ slug: z.string(),
123
+ status: zInterviewInvitationStatus,
124
+ name: z.union([z.string(), z.null()]),
125
+ recipientEmail: z.union([z.string(), z.null()]),
126
+ recipientPhone: z.union([z.string(), z.null()]),
127
+ summary: z.union([z.string(), z.null()]),
128
+ archivedAt: z.union([z.string(), z.null()]),
129
+ createdAt: z.string(),
130
+ updatedAt: z.string(),
131
+ messages: z.optional(z.array(zInterviewMessageSchema)),
132
+ });
133
+ /**
134
+ * InterviewInvitationListSchema
135
+ *
136
+ * List of interview invitations belonging to an interview.
137
+ */
138
+ export const zInterviewInvitationListSchema = z.array(zInterviewInvitationSchema);
139
+ /**
140
+ * RestoreInterviewResponse
141
+ *
142
+ * Response for restoring an archived interview
143
+ */
144
+ export const zRestoreInterviewResponse = z.object({
145
+ success: z.boolean(),
146
+ });
147
+ /**
148
+ * ArchiveInterviewResponse
149
+ *
150
+ * Response for archiving an interview
151
+ */
152
+ export const zArchiveInterviewResponse = z.object({
153
+ success: z.boolean(),
154
+ });
155
+ /**
156
+ * InterviewInvitationSummarySchema
157
+ *
158
+ * Lightweight invitation row used in lists. summaryAvailable is true once async insights have produced a summary for this invitation. hasMessages is true as soon as the invitation has at least one transcript message persisted.
159
+ */
160
+ export const zInterviewInvitationSummarySchema = z.object({
161
+ id: z
162
+ .uuid()
163
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
164
+ slug: z.string(),
165
+ status: z.enum(["ready", "in_progress", "completed", "cancelled"]),
166
+ name: z.union([z.string(), z.null()]),
167
+ recipientEmail: z.union([z.string(), z.null()]),
168
+ recipientPhone: z.union([z.string(), z.null()]),
169
+ archivedAt: z.union([z.string(), z.null()]),
170
+ createdAt: z.string(),
171
+ updatedAt: z.string(),
172
+ hasMessages: z.boolean(),
173
+ summaryAvailable: z.boolean(),
174
+ });
175
+ /**
176
+ * InterviewStatusCounts
177
+ *
178
+ * Number of invitations in each status for a given interview, archived invitations excluded.
179
+ */
180
+ export const zInterviewStatusCounts = z.object({
181
+ ready: z.int().gte(0).lte(9007199254740991),
182
+ in_progress: z.int().gte(0).lte(9007199254740991),
183
+ completed: z.int().gte(0).lte(9007199254740991),
184
+ cancelled: z.int().gte(0).lte(9007199254740991),
185
+ });
186
+ /**
187
+ * InterviewSchema
188
+ *
189
+ * Schema for an interview definition. invitations is the list of recipients this interview has been (or will be) sent to. When invitationsCount == 1, the interview is in "single" mode; when > 1, it is a bulk send.
190
+ */
191
+ export const zInterviewSchema = z.object({
192
+ id: z
193
+ .uuid()
194
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
195
+ title: z.union([z.string(), z.null()]),
196
+ prompt: z.string(),
197
+ intro: z.union([z.string(), z.null()]),
198
+ firstMessage: z.union([z.string(), z.null()]),
199
+ locale: z.union([z.string(), z.null()]),
200
+ voiceId: z
201
+ .uuid()
202
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
203
+ maxMinutes: z.int().gt(0).lte(9007199254740991),
204
+ maxResponses: z.int().gt(0).lte(9007199254740991),
205
+ disableOrgSystemPrompt: z.boolean(),
206
+ createdAt: z.string(),
207
+ updatedAt: z.string(),
208
+ archivedAt: z.union([z.string(), z.null()]),
209
+ invitationsCount: z.int().gte(0).lte(9007199254740991),
210
+ invitationsByStatus: zInterviewStatusCounts,
211
+ invitationsArchivedCount: z.int().gte(0).lte(9007199254740991),
212
+ invitations: z.array(zInterviewInvitationSummarySchema),
213
+ });
214
+ /**
215
+ * InterviewListSchema
216
+ *
217
+ * Schema for a list of interviews
218
+ */
219
+ export const zInterviewListSchema = z.array(zInterviewSchema);
220
+ /**
221
+ * CreatedInterviewSchema
222
+ *
223
+ * Schema for a newly created interview, including the slug of its initial invitation.
224
+ */
225
+ export const zCreatedInterviewSchema = z.object({
226
+ id: z
227
+ .uuid()
228
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
229
+ invitationId: z
230
+ .uuid()
231
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
232
+ slug: z.string(),
233
+ status: z.enum(["ready", "in_progress", "completed", "cancelled"]),
234
+ });
235
+ /**
236
+ * CreatedInterviewsResponse
237
+ *
238
+ * Response for interview creation
239
+ */
240
+ export const zCreatedInterviewsResponse = z.array(zCreatedInterviewSchema);
241
+ export const zInterviewsControllerListData = z.object({
242
+ body: z.optional(z.never()),
243
+ path: z.optional(z.never()),
244
+ query: z.optional(z.object({
245
+ archived: z.optional(z.boolean()),
246
+ })),
247
+ });
248
+ /**
249
+ * Schema for a list of interviews
250
+ */
251
+ export const zInterviewsControllerListResponse = zInterviewListSchema;
252
+ export const zInterviewsControllerCreateData = z.object({
253
+ body: z.object({
254
+ prompt: z.string().min(10),
255
+ title: z.optional(z.string()),
256
+ intro: z.optional(z.string()),
257
+ firstMessage: z.optional(z.string()),
258
+ email: z.optional(z
259
+ .email()
260
+ .regex(/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/)),
261
+ phone: z.optional(z.string()),
262
+ invitees: z.optional(z.array(z.object({
263
+ name: z.optional(z.string()),
264
+ email: z.optional(z
265
+ .email()
266
+ .regex(/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/)),
267
+ phone: z.optional(z.string()),
268
+ }))),
269
+ locale: z.optional(z.string()),
270
+ voiceId: z.optional(z
271
+ .uuid()
272
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/)),
273
+ }),
274
+ path: z.optional(z.never()),
275
+ query: z.optional(z.never()),
276
+ });
277
+ /**
278
+ * Response for interview creation
279
+ */
280
+ export const zInterviewsControllerCreateResponse = zCreatedInterviewsResponse;
281
+ export const zInterviewsControllerGetOneData = z.object({
282
+ body: z.optional(z.never()),
283
+ path: z.object({
284
+ id: z
285
+ .uuid()
286
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
287
+ }),
288
+ query: z.optional(z.never()),
289
+ });
290
+ /**
291
+ * Schema for an interview definition. invitations is the list of recipients this interview has been (or will be) sent to. When invitationsCount == 1, the interview is in "single" mode; when > 1, it is a bulk send.
292
+ */
293
+ export const zInterviewsControllerGetOneResponse = zInterviewSchema;
294
+ export const zInterviewsControllerUpdateData = z.object({
295
+ body: z.object({
296
+ title: z.optional(z.string()),
297
+ prompt: z.optional(z.string().min(10)),
298
+ intro: z.optional(z.string()),
299
+ firstMessage: z.optional(z.string()),
300
+ locale: z.optional(z.string().min(2).max(10)),
301
+ maxMinutes: z.optional(z.int().gt(0).lte(9007199254740991)),
302
+ maxResponses: z.optional(z.int().gt(0).lte(9007199254740991)),
303
+ disableOrgSystemPrompt: z.optional(z.boolean()),
304
+ voiceId: z.optional(z
305
+ .uuid()
306
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/)),
307
+ }),
308
+ path: z.object({
309
+ id: z
310
+ .uuid()
311
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
312
+ }),
313
+ query: z.optional(z.never()),
314
+ });
315
+ /**
316
+ * Schema for an interview definition. invitations is the list of recipients this interview has been (or will be) sent to. When invitationsCount == 1, the interview is in "single" mode; when > 1, it is a bulk send.
317
+ */
318
+ export const zInterviewsControllerUpdateResponse = zInterviewSchema;
319
+ export const zInterviewsControllerRegenerateIntroData = z.object({
320
+ body: z.optional(z.never()),
321
+ path: z.object({
322
+ id: z
323
+ .uuid()
324
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
325
+ }),
326
+ query: z.optional(z.never()),
327
+ });
328
+ /**
329
+ * Schema for an interview definition. invitations is the list of recipients this interview has been (or will be) sent to. When invitationsCount == 1, the interview is in "single" mode; when > 1, it is a bulk send.
330
+ */
331
+ export const zInterviewsControllerRegenerateIntroResponse = zInterviewSchema;
332
+ export const zInterviewsControllerRegenerateFirstMessageData = z.object({
333
+ body: z.optional(z.never()),
334
+ path: z.object({
335
+ id: z
336
+ .uuid()
337
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
338
+ }),
339
+ query: z.optional(z.never()),
340
+ });
341
+ /**
342
+ * Schema for an interview definition. invitations is the list of recipients this interview has been (or will be) sent to. When invitationsCount == 1, the interview is in "single" mode; when > 1, it is a bulk send.
343
+ */
344
+ export const zInterviewsControllerRegenerateFirstMessageResponse = zInterviewSchema;
345
+ export const zInterviewsControllerArchiveData = z.object({
346
+ body: z.optional(z.never()),
347
+ path: z.object({
348
+ id: z
349
+ .uuid()
350
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
351
+ }),
352
+ query: z.optional(z.never()),
353
+ });
354
+ /**
355
+ * Response for archiving an interview
356
+ */
357
+ export const zInterviewsControllerArchiveResponse = zArchiveInterviewResponse;
358
+ export const zInterviewsControllerRestoreData = z.object({
359
+ body: z.optional(z.never()),
360
+ path: z.object({
361
+ id: z
362
+ .uuid()
363
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
364
+ }),
365
+ query: z.optional(z.never()),
366
+ });
367
+ /**
368
+ * Response for restoring an archived interview
369
+ */
370
+ export const zInterviewsControllerRestoreResponse = zRestoreInterviewResponse;
371
+ export const zInterviewsControllerGetLogsData = z.object({
372
+ body: z.optional(z.never()),
373
+ path: z.object({
374
+ id: z
375
+ .uuid()
376
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
377
+ }),
378
+ query: z.optional(z.never()),
379
+ });
380
+ /**
381
+ * Chronological history of events on an interview, most recent first.
382
+ */
383
+ export const zInterviewsControllerGetLogsResponse = zInterviewLogListSchema;
384
+ export const zInterviewInvitationsControllerListData = z.object({
385
+ body: z.optional(z.never()),
386
+ path: z.object({
387
+ id: z
388
+ .uuid()
389
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
390
+ }),
391
+ query: z.optional(z.never()),
392
+ });
393
+ /**
394
+ * List of interview invitations belonging to an interview.
395
+ */
396
+ export const zInterviewInvitationsControllerListResponse = zInterviewInvitationListSchema;
397
+ export const zInterviewInvitationsControllerCreateData = z.object({
398
+ body: z.object({
399
+ name: z.optional(z.string()),
400
+ email: z.optional(z
401
+ .email()
402
+ .regex(/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/)),
403
+ phone: z.optional(z.string()),
404
+ }),
405
+ path: z.object({
406
+ id: z
407
+ .uuid()
408
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
409
+ }),
410
+ query: z.optional(z.never()),
411
+ });
412
+ /**
413
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
414
+ */
415
+ export const zInterviewInvitationsControllerCreateResponse = zInterviewInvitationSchema;
416
+ export const zInterviewInvitationsControllerCreateBulkData = z.object({
417
+ body: z.object({
418
+ invitees: z
419
+ .array(z.object({
420
+ name: z.optional(z.string()),
421
+ email: z.optional(z
422
+ .email()
423
+ .regex(/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/)),
424
+ phone: z.optional(z.string()),
425
+ }))
426
+ .min(1),
427
+ }),
428
+ path: z.object({
429
+ id: z
430
+ .uuid()
431
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
432
+ }),
433
+ query: z.optional(z.never()),
434
+ });
435
+ /**
436
+ * List of interview invitations belonging to an interview.
437
+ */
438
+ export const zInterviewInvitationsControllerCreateBulkResponse = zInterviewInvitationListSchema;
439
+ export const zInterviewInvitationsControllerGetOneData = z.object({
440
+ body: z.optional(z.never()),
441
+ path: z.object({
442
+ invitationId: z
443
+ .uuid()
444
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
445
+ }),
446
+ query: z.optional(z.never()),
447
+ });
448
+ /**
449
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
450
+ */
451
+ export const zInterviewInvitationsControllerGetOneResponse = zInterviewInvitationSchema;
452
+ export const zInterviewInvitationsControllerUpdateData = z.object({
453
+ body: z.object({
454
+ name: z.optional(z.union([z.string(), z.null()])),
455
+ }),
456
+ path: z.object({
457
+ invitationId: z
458
+ .uuid()
459
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
460
+ }),
461
+ query: z.optional(z.never()),
462
+ });
463
+ /**
464
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
465
+ */
466
+ export const zInterviewInvitationsControllerUpdateResponse = zInterviewInvitationSchema;
467
+ export const zInterviewInvitationsControllerSendData = z.object({
468
+ body: z.object({
469
+ email: z.optional(z
470
+ .email()
471
+ .regex(/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/)),
472
+ phone: z.optional(z.string()),
473
+ }),
474
+ path: z.object({
475
+ invitationId: z
476
+ .uuid()
477
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
478
+ }),
479
+ query: z.optional(z.never()),
480
+ });
481
+ /**
482
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
483
+ */
484
+ export const zInterviewInvitationsControllerSendResponse = zInterviewInvitationSchema;
485
+ export const zInterviewInvitationsControllerCancelData = z.object({
486
+ body: z.optional(z.never()),
487
+ path: z.object({
488
+ invitationId: z
489
+ .uuid()
490
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
491
+ }),
492
+ query: z.optional(z.never()),
493
+ });
494
+ /**
495
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
496
+ */
497
+ export const zInterviewInvitationsControllerCancelResponse = zInterviewInvitationSchema;
498
+ export const zInterviewInvitationsControllerReactivateData = z.object({
499
+ body: z.optional(z.never()),
500
+ path: z.object({
501
+ invitationId: z
502
+ .uuid()
503
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
504
+ }),
505
+ query: z.optional(z.never()),
506
+ });
507
+ /**
508
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
509
+ */
510
+ export const zInterviewInvitationsControllerReactivateResponse = zInterviewInvitationSchema;
511
+ export const zInterviewInvitationsControllerArchiveData = z.object({
512
+ body: z.optional(z.never()),
513
+ path: z.object({
514
+ invitationId: z
515
+ .uuid()
516
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
517
+ }),
518
+ query: z.optional(z.never()),
519
+ });
520
+ /**
521
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
522
+ */
523
+ export const zInterviewInvitationsControllerArchiveResponse = zInterviewInvitationSchema;
524
+ export const zInterviewInvitationsControllerRestoreData = z.object({
525
+ body: z.optional(z.never()),
526
+ path: z.object({
527
+ invitationId: z
528
+ .uuid()
529
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
530
+ }),
531
+ query: z.optional(z.never()),
532
+ });
533
+ /**
534
+ * Full interview invitation payload including transcript messages. summary and per-message sentiments are populated asynchronously once the invitation reaches the completed state.
535
+ */
536
+ export const zInterviewInvitationsControllerRestoreResponse = zInterviewInvitationSchema;
537
+ export const zInterviewInvitationsControllerGetLogsData = z.object({
538
+ body: z.optional(z.never()),
539
+ path: z.object({
540
+ invitationId: z
541
+ .uuid()
542
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
543
+ }),
544
+ query: z.optional(z.never()),
545
+ });
546
+ /**
547
+ * Chronological history of events on an interview, most recent first.
548
+ */
549
+ export const zInterviewInvitationsControllerGetLogsResponse = zInterviewLogListSchema;
550
+ export const zInterviewInvitationsControllerGetMessageAudioUrlData = z.object({
551
+ body: z.optional(z.never()),
552
+ path: z.object({
553
+ messageId: z
554
+ .uuid()
555
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
556
+ invitationId: z
557
+ .uuid()
558
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
559
+ }),
560
+ query: z.optional(z.never()),
561
+ });
562
+ /**
563
+ * Short-lived presigned URL for the audio attached to an interview message.
564
+ */
565
+ export const zInterviewInvitationsControllerGetMessageAudioUrlResponse = zInterviewMessageAudioUrlSchema;
566
+ export const zVoicesControllerListData = z.object({
567
+ body: z.optional(z.never()),
568
+ path: z.optional(z.never()),
569
+ query: z.optional(z.object({
570
+ language: z.optional(z.string().min(2).max(8)),
571
+ })),
572
+ });
573
+ /**
574
+ * List of voices matching the requested language filter.
575
+ */
576
+ export const zVoicesControllerListResponse = zVoiceListSchema;
577
+ export const zVoicesControllerGetTestAudioUrlData = z.object({
578
+ body: z.optional(z.never()),
579
+ path: z.object({
580
+ id: z
581
+ .uuid()
582
+ .regex(/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/),
583
+ }),
584
+ query: z.optional(z.never()),
585
+ });
586
+ /**
587
+ * Short-lived presigned URL for the voice preview audio. Generated on first request if missing.
588
+ */
589
+ export const zVoicesControllerGetTestAudioUrlResponse = zVoiceTestAudioUrlSchema;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @raconte/node-sdk: typed SDK for the public Raconte API (interviews and invitations).
3
+ *
4
+ * The SDK surface mirrors the routes guarded by `ApiKeyOrgGuard` server-side, the same set
5
+ * exposed by the MCP server and documented at https://raconte.ai. Generated code lives under
6
+ * `./generated`; this entry adds the authenticated client factory.
7
+ */
8
+ export { createRaconteClient, RACONTE_API_BASE_URL } from './client';
9
+ export type { RaconteClientOptions } from './client';
10
+ export { createClient, createConfig } from './generated/client';
11
+ export type { Client, Config, Options } from './generated/client';
12
+ export * from './generated/sdk.gen';
13
+ export * from './generated/types.gen';
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @raconte/node-sdk: typed SDK for the public Raconte API (interviews and invitations).
3
+ *
4
+ * The SDK surface mirrors the routes guarded by `ApiKeyOrgGuard` server-side, the same set
5
+ * exposed by the MCP server and documented at https://raconte.ai. Generated code lives under
6
+ * `./generated`; this entry adds the authenticated client factory.
7
+ */
8
+ export { createRaconteClient, RACONTE_API_BASE_URL } from './client';
9
+ export { createClient, createConfig } from './generated/client';
10
+ export * from './generated/sdk.gen';
11
+ export * from './generated/types.gen';
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@raconte/node-sdk",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "description": "Typed TypeScript SDK for the public Raconte API (interviews and invitations). Generated from the public OpenAPI spec.",
6
+ "license": "MIT",
7
+ "homepage": "https://raconte.ai",
8
+ "keywords": [
9
+ "raconte",
10
+ "sdk",
11
+ "interviews",
12
+ "api",
13
+ "openapi"
14
+ ],
15
+ "exports": {
16
+ ".": "./src/index.ts",
17
+ "./zod": "./src/generated/zod.gen.ts"
18
+ },
19
+ "main": "./src/index.ts",
20
+ "types": "./src/index.ts",
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "publishConfig": {
25
+ "access": "public",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js",
30
+ "default": "./dist/index.js"
31
+ },
32
+ "./zod": {
33
+ "types": "./dist/generated/zod.gen.d.ts",
34
+ "import": "./dist/generated/zod.gen.js",
35
+ "default": "./dist/generated/zod.gen.js"
36
+ }
37
+ },
38
+ "main": "./dist/index.js",
39
+ "types": "./dist/index.d.ts"
40
+ },
41
+ "scripts": {
42
+ "generate": "openapi-ts -f ./openapi-ts.config.ts",
43
+ "build": "tsc -p tsconfig.json",
44
+ "dev": "tsc -p tsconfig.json --watch",
45
+ "typecheck": "tsc -p tsconfig.json --noEmit"
46
+ },
47
+ "dependencies": {
48
+ "zod": "^4.3.5"
49
+ },
50
+ "devDependencies": {
51
+ "@hey-api/openapi-ts": "^0.90.3",
52
+ "@types/node": "^24.10.7",
53
+ "typescript": "^5.9.3"
54
+ }
55
+ }