mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 13:32:23 +00:00
- Updated `gmailSlice` to replace `GmailEmailSummary` with `GmailEmailBatch`, enhancing email data structure. - Modified `SkillProvider` to dispatch emails as `GmailEmailBatch | null`. - Improved HTTP client management in `ops_net.rs` by implementing a shared client for fetch calls, optimizing connection handling and timeout management. - Enhanced deep link handling in `desktopDeepLinkListener.ts` to trigger synchronization after OAuth completion.
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import { createSlice, type PayloadAction } from '@reduxjs/toolkit';
|
|
|
|
export interface GmailEmailEntity {
|
|
identifier: string;
|
|
kind: 'sender' | 'recipient' | 'recipient_cc' | string;
|
|
name: string;
|
|
}
|
|
|
|
export interface GmailEmailMetadata {
|
|
emailId: string;
|
|
threadId: string;
|
|
date: number;
|
|
}
|
|
|
|
export interface GmailEmailChunk {
|
|
content: string;
|
|
entities: GmailEmailEntity[];
|
|
labels: string[];
|
|
metadata: GmailEmailMetadata;
|
|
title: string;
|
|
}
|
|
|
|
export interface GmailEmailBatch {
|
|
chunks: GmailEmailChunk[]; // up to 20 in your example
|
|
createdAt: number; // when this batch was generated
|
|
emailIds: string[]; // same ids as in chunks[*].emailId
|
|
total: number; // total emails in this batch
|
|
}
|
|
|
|
export interface GmailProfile {
|
|
email_address: string;
|
|
messages_total: number;
|
|
threads_total: number;
|
|
history_id: string;
|
|
}
|
|
|
|
interface GmailState {
|
|
/** Emails fetched after OAuth connection (from Gmail skill) */
|
|
emails: GmailEmailBatch | null;
|
|
/** Profile of the connected Gmail user (from Gmail skill) */
|
|
profile: GmailProfile | null;
|
|
}
|
|
|
|
const initialState: GmailState = { emails: null, profile: null };
|
|
|
|
const gmailSlice = createSlice({
|
|
name: 'gmail',
|
|
initialState,
|
|
reducers: {
|
|
setGmailEmails(state, action: PayloadAction<GmailEmailBatch | null>) {
|
|
state.emails = action.payload;
|
|
},
|
|
clearGmailEmails(state) {
|
|
state.emails = null;
|
|
},
|
|
setGmailProfile(state, action: PayloadAction<GmailProfile | null>) {
|
|
state.profile = action.payload;
|
|
},
|
|
clearGmailProfile(state) {
|
|
state.profile = null;
|
|
},
|
|
},
|
|
});
|
|
|
|
export const { setGmailEmails, clearGmailEmails, setGmailProfile, clearGmailProfile } =
|
|
gmailSlice.actions;
|
|
export default gmailSlice.reducer;
|