@skyporch/daykeeper-react-native 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.
@@ -0,0 +1,682 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ interface paths {
6
+ "/v1/identity": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ /** Get widget-safe customer identity */
14
+ get: operations["getCustomerIdentity"];
15
+ put?: never;
16
+ post?: never;
17
+ delete?: never;
18
+ options?: never;
19
+ head?: never;
20
+ patch?: never;
21
+ trace?: never;
22
+ };
23
+ "/v1/conversations": {
24
+ parameters: {
25
+ query?: never;
26
+ header?: never;
27
+ path?: never;
28
+ cookie?: never;
29
+ };
30
+ /** List the customer's conversations */
31
+ get: operations["listCustomerConversations"];
32
+ put?: never;
33
+ /** Create a customer conversation */
34
+ post: operations["createCustomerConversation"];
35
+ delete?: never;
36
+ options?: never;
37
+ head?: never;
38
+ patch?: never;
39
+ trace?: never;
40
+ };
41
+ "/v1/unread": {
42
+ parameters: {
43
+ query?: never;
44
+ header?: never;
45
+ path?: never;
46
+ cookie?: never;
47
+ };
48
+ /**
49
+ * Get customer-side unread state
50
+ * @description This read does not create a contact when the customer has never used support.
51
+ */
52
+ get: operations["getCustomerUnread"];
53
+ put?: never;
54
+ post?: never;
55
+ delete?: never;
56
+ options?: never;
57
+ head?: never;
58
+ patch?: never;
59
+ trace?: never;
60
+ };
61
+ "/v1/conversations/{conversationId}/seen": {
62
+ parameters: {
63
+ query?: never;
64
+ header?: never;
65
+ path: {
66
+ conversationId: components["parameters"]["ConversationId"];
67
+ };
68
+ cookie?: never;
69
+ };
70
+ get?: never;
71
+ put?: never;
72
+ /** Mark a customer conversation seen */
73
+ post: operations["markCustomerConversationSeen"];
74
+ delete?: never;
75
+ options?: never;
76
+ head?: never;
77
+ patch?: never;
78
+ trace?: never;
79
+ };
80
+ "/v1/conversations/{conversationId}/messages": {
81
+ parameters: {
82
+ query?: never;
83
+ header?: never;
84
+ path: {
85
+ conversationId: components["parameters"]["ConversationId"];
86
+ };
87
+ cookie?: never;
88
+ };
89
+ /**
90
+ * List visible messages in a customer conversation
91
+ * @description Private agent notes and activity records are never returned.
92
+ */
93
+ get: operations["listCustomerMessages"];
94
+ put?: never;
95
+ /** Send a customer message */
96
+ post: operations["sendCustomerMessage"];
97
+ delete?: never;
98
+ options?: never;
99
+ head?: never;
100
+ patch?: never;
101
+ trace?: never;
102
+ };
103
+ "/v1/anonymous-conversations/claim": {
104
+ parameters: {
105
+ query?: never;
106
+ header?: never;
107
+ path?: never;
108
+ cookie?: never;
109
+ };
110
+ get?: never;
111
+ put?: never;
112
+ /**
113
+ * Claim a signed-out widget conversation after sign-in
114
+ * @description The widget token proves possession of the anonymous thread. The gateway
115
+ * refuses identified, foreign-tenant, or email-mismatched contacts.
116
+ */
117
+ post: operations["claimAnonymousConversation"];
118
+ delete?: never;
119
+ options?: never;
120
+ head?: never;
121
+ patch?: never;
122
+ trace?: never;
123
+ };
124
+ "/v1/lifecycle-messages": {
125
+ parameters: {
126
+ query?: never;
127
+ header?: never;
128
+ path?: never;
129
+ cookie?: never;
130
+ };
131
+ get?: never;
132
+ put?: never;
133
+ /**
134
+ * Deliver one idempotent lifecycle campaign message
135
+ * @description Requires a short-lived token with the support:lifecycle scope.
136
+ */
137
+ post: operations["deliverCustomerLifecycleMessage"];
138
+ delete?: never;
139
+ options?: never;
140
+ head?: never;
141
+ patch?: never;
142
+ trace?: never;
143
+ };
144
+ "/v1/contacts/erasure-preview": {
145
+ parameters: {
146
+ query?: never;
147
+ header?: never;
148
+ path?: never;
149
+ cookie?: never;
150
+ };
151
+ get?: never;
152
+ put?: never;
153
+ /**
154
+ * Preview tenant-owned contacts selected for erasure
155
+ * @description Requires a short-lived support:erase token bound to the canonical target hash.
156
+ */
157
+ post: operations["previewCustomerErasure"];
158
+ delete?: never;
159
+ options?: never;
160
+ head?: never;
161
+ patch?: never;
162
+ trace?: never;
163
+ };
164
+ "/v1/contacts": {
165
+ parameters: {
166
+ query?: never;
167
+ header?: never;
168
+ path?: never;
169
+ cookie?: never;
170
+ };
171
+ get?: never;
172
+ put?: never;
173
+ post?: never;
174
+ /**
175
+ * Erase tenant-owned customer contacts
176
+ * @description Requires a short-lived support:erase token bound to the canonical target hash.
177
+ */
178
+ delete: operations["eraseCustomers"];
179
+ options?: never;
180
+ head?: never;
181
+ patch?: never;
182
+ trace?: never;
183
+ };
184
+ }
185
+ interface components {
186
+ schemas: {
187
+ Conversation: {
188
+ id: number;
189
+ /** @enum {string} */
190
+ status: "open" | "pending" | "resolved" | "snoozed";
191
+ createdAt: number | string | null;
192
+ updatedAt: number | string | null;
193
+ /** @description Chatwoot agent-side unread count; do not use for a customer badge. */
194
+ unreadCount: number;
195
+ /** @description Customer-side unread count used for product badges. */
196
+ unreadForContact: number;
197
+ lastSeenAt: number | null;
198
+ preview: string | null;
199
+ };
200
+ Attachment: {
201
+ id: number;
202
+ fileType: string | null;
203
+ /** Format: uri */
204
+ dataUrl: string | null;
205
+ /** Format: uri */
206
+ thumbUrl: string | null;
207
+ };
208
+ Message: {
209
+ id: number;
210
+ conversationId: number;
211
+ content: string | null;
212
+ contentType: string;
213
+ contentAttributes: {
214
+ [key: string]: unknown;
215
+ };
216
+ messageType: number;
217
+ createdAt: number | string | null;
218
+ sender: components["schemas"]["MessageSender"] | null;
219
+ attachments: components["schemas"]["Attachment"][];
220
+ };
221
+ MessageSender: {
222
+ name: string | null;
223
+ /** Format: uri */
224
+ avatarUrl: string | null;
225
+ };
226
+ CustomerIdentity: {
227
+ /** Format: uri */
228
+ baseUrl: string;
229
+ websiteToken: string;
230
+ subject: string;
231
+ identifier: string;
232
+ identifierHash: string;
233
+ /** Format: email */
234
+ email: string | null;
235
+ name: string;
236
+ };
237
+ ConversationList: {
238
+ conversations: components["schemas"]["Conversation"][];
239
+ widgetConversationId: number | null;
240
+ };
241
+ ConversationResult: {
242
+ conversation: components["schemas"]["Conversation"];
243
+ };
244
+ UnreadSummary: {
245
+ unreadCount: number;
246
+ conversation: components["schemas"]["Conversation"] | null;
247
+ conversations: components["schemas"]["Conversation"][];
248
+ };
249
+ SeenResult: {
250
+ conversationId: number;
251
+ /** @constant */
252
+ seen: true;
253
+ seenAt: number;
254
+ seenMessageId?: number;
255
+ };
256
+ MessageList: {
257
+ messages: components["schemas"]["Message"][];
258
+ };
259
+ MessageResult: {
260
+ message: components["schemas"]["Message"];
261
+ };
262
+ SendMessageInput: {
263
+ content: string;
264
+ };
265
+ ClaimConversationInput: {
266
+ widgetToken: string;
267
+ };
268
+ ClaimConversationResult: {
269
+ /** @enum {string} */
270
+ status: "merged" | "already_claimed" | "already_identified" | "email_mismatch" | "foreign_contact" | "invalid_token" | "not_found";
271
+ conversations: number;
272
+ };
273
+ LifecycleMessageInput: {
274
+ /** @enum {string} */
275
+ campaign: "trial_day_1" | "trial_day_2" | "trial_day_6";
276
+ };
277
+ LifecycleMessageResult: {
278
+ /** @enum {string} */
279
+ campaign: "trial_day_1" | "trial_day_2" | "trial_day_6";
280
+ /** @enum {string} */
281
+ status: "delivered" | "already_delivered";
282
+ conversationId?: number | null;
283
+ /** Format: date-time */
284
+ deliveredAt?: string;
285
+ stamped?: boolean;
286
+ };
287
+ ErasureTarget: {
288
+ userId?: string | null;
289
+ /** Format: email */
290
+ email?: string | null;
291
+ } | unknown | unknown;
292
+ ErasureTargetsInput: {
293
+ targets: components["schemas"]["ErasureTarget"][];
294
+ };
295
+ ErasureSummary: {
296
+ attempted: number;
297
+ accepted: number;
298
+ verifiedAbsent: number;
299
+ failed: number;
300
+ dryRun?: boolean;
301
+ cascadeQueued?: boolean;
302
+ partialFailure?: boolean;
303
+ } & {
304
+ [key: string]: unknown;
305
+ };
306
+ CustomerError: {
307
+ error: string;
308
+ };
309
+ };
310
+ responses: {
311
+ /** @description Stable customer-safe error. Upstream provider text is never returned. */
312
+ Error: {
313
+ headers: {
314
+ [name: string]: unknown;
315
+ };
316
+ content: {
317
+ "application/json": components["schemas"]["CustomerError"];
318
+ };
319
+ };
320
+ };
321
+ parameters: {
322
+ ConversationId: number;
323
+ };
324
+ requestBodies: never;
325
+ headers: never;
326
+ pathItems: never;
327
+ }
328
+ interface operations {
329
+ getCustomerIdentity: {
330
+ parameters: {
331
+ query?: never;
332
+ header?: never;
333
+ path?: never;
334
+ cookie?: never;
335
+ };
336
+ requestBody?: never;
337
+ responses: {
338
+ /** @description Widget-safe identity derived from the verified customer token. */
339
+ 200: {
340
+ headers: {
341
+ [name: string]: unknown;
342
+ };
343
+ content: {
344
+ "application/json": components["schemas"]["CustomerIdentity"];
345
+ };
346
+ };
347
+ 401: components["responses"]["Error"];
348
+ default: components["responses"]["Error"];
349
+ };
350
+ };
351
+ listCustomerConversations: {
352
+ parameters: {
353
+ query?: never;
354
+ header?: never;
355
+ path?: never;
356
+ cookie?: never;
357
+ };
358
+ requestBody?: never;
359
+ responses: {
360
+ /** @description Customer-owned conversation summaries. */
361
+ 200: {
362
+ headers: {
363
+ [name: string]: unknown;
364
+ };
365
+ content: {
366
+ "application/json": components["schemas"]["ConversationList"];
367
+ };
368
+ };
369
+ 401: components["responses"]["Error"];
370
+ default: components["responses"]["Error"];
371
+ };
372
+ };
373
+ createCustomerConversation: {
374
+ parameters: {
375
+ query?: never;
376
+ header?: never;
377
+ path?: never;
378
+ cookie?: never;
379
+ };
380
+ requestBody?: never;
381
+ responses: {
382
+ /** @description Newly created customer conversation. */
383
+ 201: {
384
+ headers: {
385
+ [name: string]: unknown;
386
+ };
387
+ content: {
388
+ "application/json": components["schemas"]["ConversationResult"];
389
+ };
390
+ };
391
+ 401: components["responses"]["Error"];
392
+ default: components["responses"]["Error"];
393
+ };
394
+ };
395
+ getCustomerUnread: {
396
+ parameters: {
397
+ query?: never;
398
+ header?: never;
399
+ path?: never;
400
+ cookie?: never;
401
+ };
402
+ requestBody?: never;
403
+ responses: {
404
+ /** @description Total unread messages and every unread thread, newest first. */
405
+ 200: {
406
+ headers: {
407
+ [name: string]: unknown;
408
+ };
409
+ content: {
410
+ "application/json": components["schemas"]["UnreadSummary"];
411
+ };
412
+ };
413
+ 401: components["responses"]["Error"];
414
+ default: components["responses"]["Error"];
415
+ };
416
+ };
417
+ markCustomerConversationSeen: {
418
+ parameters: {
419
+ query?: never;
420
+ header?: never;
421
+ path: {
422
+ conversationId: components["parameters"]["ConversationId"];
423
+ };
424
+ cookie?: never;
425
+ };
426
+ requestBody?: never;
427
+ responses: {
428
+ /** @description Persisted customer-side seen marker. */
429
+ 200: {
430
+ headers: {
431
+ [name: string]: unknown;
432
+ };
433
+ content: {
434
+ "application/json": components["schemas"]["SeenResult"];
435
+ };
436
+ };
437
+ 401: components["responses"]["Error"];
438
+ default: components["responses"]["Error"];
439
+ };
440
+ };
441
+ listCustomerMessages: {
442
+ parameters: {
443
+ query?: {
444
+ /** @description Return messages with a larger monotonic identifier. */
445
+ after?: number;
446
+ };
447
+ header?: never;
448
+ path: {
449
+ conversationId: components["parameters"]["ConversationId"];
450
+ };
451
+ cookie?: never;
452
+ };
453
+ requestBody?: never;
454
+ responses: {
455
+ /** @description Visible customer conversation messages. */
456
+ 200: {
457
+ headers: {
458
+ [name: string]: unknown;
459
+ };
460
+ content: {
461
+ "application/json": components["schemas"]["MessageList"];
462
+ };
463
+ };
464
+ 401: components["responses"]["Error"];
465
+ default: components["responses"]["Error"];
466
+ };
467
+ };
468
+ sendCustomerMessage: {
469
+ parameters: {
470
+ query?: never;
471
+ header?: never;
472
+ path: {
473
+ conversationId: components["parameters"]["ConversationId"];
474
+ };
475
+ cookie?: never;
476
+ };
477
+ requestBody: {
478
+ content: {
479
+ "application/json": components["schemas"]["SendMessageInput"];
480
+ };
481
+ };
482
+ responses: {
483
+ /** @description Created customer message. */
484
+ 201: {
485
+ headers: {
486
+ [name: string]: unknown;
487
+ };
488
+ content: {
489
+ "application/json": components["schemas"]["MessageResult"];
490
+ };
491
+ };
492
+ 401: components["responses"]["Error"];
493
+ default: components["responses"]["Error"];
494
+ };
495
+ };
496
+ claimAnonymousConversation: {
497
+ parameters: {
498
+ query?: never;
499
+ header?: never;
500
+ path?: never;
501
+ cookie?: never;
502
+ };
503
+ requestBody: {
504
+ content: {
505
+ "application/json": components["schemas"]["ClaimConversationInput"];
506
+ };
507
+ };
508
+ responses: {
509
+ /** @description Safe claim result; refusals are represented as explicit statuses. */
510
+ 200: {
511
+ headers: {
512
+ [name: string]: unknown;
513
+ };
514
+ content: {
515
+ "application/json": components["schemas"]["ClaimConversationResult"];
516
+ };
517
+ };
518
+ 401: components["responses"]["Error"];
519
+ default: components["responses"]["Error"];
520
+ };
521
+ };
522
+ deliverCustomerLifecycleMessage: {
523
+ parameters: {
524
+ query?: never;
525
+ header?: never;
526
+ path?: never;
527
+ cookie?: never;
528
+ };
529
+ requestBody: {
530
+ content: {
531
+ "application/json": components["schemas"]["LifecycleMessageInput"];
532
+ };
533
+ };
534
+ responses: {
535
+ /** @description Delivery or prior-delivery result. */
536
+ 200: {
537
+ headers: {
538
+ [name: string]: unknown;
539
+ };
540
+ content: {
541
+ "application/json": components["schemas"]["LifecycleMessageResult"];
542
+ };
543
+ };
544
+ 401: components["responses"]["Error"];
545
+ default: components["responses"]["Error"];
546
+ };
547
+ };
548
+ previewCustomerErasure: {
549
+ parameters: {
550
+ query?: never;
551
+ header?: never;
552
+ path?: never;
553
+ cookie?: never;
554
+ };
555
+ requestBody: {
556
+ content: {
557
+ "application/json": components["schemas"]["ErasureTargetsInput"];
558
+ };
559
+ };
560
+ responses: {
561
+ /** @description Read-only erasure preview. */
562
+ 200: {
563
+ headers: {
564
+ [name: string]: unknown;
565
+ };
566
+ content: {
567
+ "application/json": components["schemas"]["ErasureSummary"];
568
+ };
569
+ };
570
+ 401: components["responses"]["Error"];
571
+ default: components["responses"]["Error"];
572
+ };
573
+ };
574
+ eraseCustomers: {
575
+ parameters: {
576
+ query?: never;
577
+ header?: never;
578
+ path?: never;
579
+ cookie?: never;
580
+ };
581
+ requestBody: {
582
+ content: {
583
+ "application/json": components["schemas"]["ErasureTargetsInput"];
584
+ };
585
+ };
586
+ responses: {
587
+ /** @description Verified contact absence and asynchronous cascade state. */
588
+ 200: {
589
+ headers: {
590
+ [name: string]: unknown;
591
+ };
592
+ content: {
593
+ "application/json": components["schemas"]["ErasureSummary"];
594
+ };
595
+ };
596
+ 401: components["responses"]["Error"];
597
+ default: components["responses"]["Error"];
598
+ };
599
+ };
600
+ }
601
+
602
+ type Schemas = components["schemas"];
603
+ type DaykeeperConversation = Schemas["Conversation"];
604
+ type DaykeeperAttachment = Schemas["Attachment"];
605
+ type DaykeeperMessage = Schemas["Message"];
606
+ type DaykeeperMessageSender = Schemas["MessageSender"];
607
+ type DaykeeperCustomerIdentity = Schemas["CustomerIdentity"];
608
+ type DaykeeperConversationList = Schemas["ConversationList"];
609
+ type DaykeeperConversationResult = Schemas["ConversationResult"];
610
+ type DaykeeperUnreadSummary = Schemas["UnreadSummary"];
611
+ type DaykeeperSeenResult = Schemas["SeenResult"];
612
+ type DaykeeperMessageList = Schemas["MessageList"];
613
+ type DaykeeperMessageResult = Schemas["MessageResult"];
614
+ type DaykeeperClaimConversationResult = Schemas["ClaimConversationResult"];
615
+
616
+ interface DaykeeperReactNativeTokenProviderContext {
617
+ /**
618
+ * True only after Daykeeper rejected the first token with HTTP 401. The
619
+ * provider should bypass any token cache and exchange the app session again.
620
+ */
621
+ forceRefresh: boolean;
622
+ }
623
+ type DaykeeperReactNativeTokenProvider = (context: DaykeeperReactNativeTokenProviderContext) => string | Promise<string>;
624
+ interface DaykeeperReactNativeClientOptions {
625
+ baseUrl: string;
626
+ getAccessToken: DaykeeperReactNativeTokenProvider;
627
+ fetch?: typeof globalThis.fetch;
628
+ timeoutMs?: number;
629
+ }
630
+ interface DaykeeperReactNativeRequestOptions {
631
+ signal?: AbortSignal;
632
+ }
633
+ declare class DaykeeperReactNativeClient {
634
+ #private;
635
+ constructor(options: DaykeeperReactNativeClientOptions);
636
+ getIdentity(options?: DaykeeperReactNativeRequestOptions): Promise<DaykeeperCustomerIdentity>;
637
+ listConversations(options?: DaykeeperReactNativeRequestOptions): Promise<DaykeeperConversationList>;
638
+ createConversation(options?: DaykeeperReactNativeRequestOptions): Promise<DaykeeperConversationResult>;
639
+ getUnread(options?: DaykeeperReactNativeRequestOptions): Promise<DaykeeperUnreadSummary>;
640
+ markConversationSeen(conversationId: number, options?: DaykeeperReactNativeRequestOptions): Promise<DaykeeperSeenResult>;
641
+ listMessages(conversationId: number, options?: DaykeeperReactNativeRequestOptions & {
642
+ after?: number;
643
+ }): Promise<DaykeeperMessageList>;
644
+ sendMessage(conversationId: number, content: string, options?: DaykeeperReactNativeRequestOptions): Promise<DaykeeperMessageResult>;
645
+ claimAnonymousConversation(widgetToken: string, options?: DaykeeperReactNativeRequestOptions): Promise<DaykeeperClaimConversationResult>;
646
+ }
647
+ declare function createDaykeeperReactNativeClient(options: DaykeeperReactNativeClientOptions): DaykeeperReactNativeClient;
648
+
649
+ type DaykeeperReactNativeTransportErrorCode = "INVALID_CONFIGURATION" | "NETWORK_ERROR" | "REQUEST_ABORTED" | "REQUEST_TIMEOUT" | "INVALID_RESPONSE" | "RESPONSE_TOO_LARGE";
650
+ declare class DaykeeperReactNativeApiError extends Error {
651
+ readonly status: number;
652
+ readonly code: string;
653
+ readonly retryable: boolean;
654
+ constructor(options: {
655
+ status: number;
656
+ code: string;
657
+ retryable: boolean;
658
+ });
659
+ toJSON(): {
660
+ name: string;
661
+ status: number;
662
+ code: string;
663
+ retryable: boolean;
664
+ };
665
+ }
666
+ declare class DaykeeperReactNativeTransportError extends Error {
667
+ readonly code: DaykeeperReactNativeTransportErrorCode;
668
+ readonly retryable: boolean;
669
+ constructor(options: {
670
+ code: DaykeeperReactNativeTransportErrorCode;
671
+ message: string;
672
+ retryable?: boolean;
673
+ });
674
+ toJSON(): {
675
+ name: string;
676
+ code: DaykeeperReactNativeTransportErrorCode;
677
+ message: string;
678
+ retryable: boolean;
679
+ };
680
+ }
681
+
682
+ export { type DaykeeperAttachment, type DaykeeperClaimConversationResult, type DaykeeperConversation, type DaykeeperConversationList, type DaykeeperConversationResult, type DaykeeperCustomerIdentity, type components as DaykeeperCustomerOpenApiComponents, type operations as DaykeeperCustomerOpenApiOperations, type paths as DaykeeperCustomerOpenApiPaths, type DaykeeperMessage, type DaykeeperMessageList, type DaykeeperMessageResult, type DaykeeperMessageSender, DaykeeperReactNativeApiError, DaykeeperReactNativeClient, type DaykeeperReactNativeClientOptions, type DaykeeperReactNativeRequestOptions, type DaykeeperReactNativeTokenProvider, type DaykeeperReactNativeTokenProviderContext, DaykeeperReactNativeTransportError, type DaykeeperReactNativeTransportErrorCode, type DaykeeperSeenResult, type DaykeeperUnreadSummary, createDaykeeperReactNativeClient };