@workhive/api 1.0.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.
- package/dist/client.d.ts +116 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +234 -0
- package/dist/context.d.ts +100 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +13 -0
- package/dist/hooks/index.d.ts +12 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/use-leads.d.ts +4 -0
- package/dist/hooks/use-leads.d.ts.map +1 -0
- package/dist/hooks/use-leads.js +9 -0
- package/dist/hooks/use-me.d.ts +6 -0
- package/dist/hooks/use-me.d.ts.map +1 -0
- package/dist/hooks/use-me.js +13 -0
- package/dist/hooks/use-meetings.d.ts +8 -0
- package/dist/hooks/use-meetings.d.ts.map +1 -0
- package/dist/hooks/use-meetings.js +10 -0
- package/dist/hooks/use-pipelines.d.ts +6 -0
- package/dist/hooks/use-pipelines.d.ts.map +1 -0
- package/dist/hooks/use-pipelines.js +9 -0
- package/dist/hooks/use-stages.d.ts +4 -0
- package/dist/hooks/use-stages.d.ts.map +1 -0
- package/dist/hooks/use-stages.js +10 -0
- package/dist/hooks/use-tasks.d.ts +6 -0
- package/dist/hooks/use-tasks.d.ts.map +1 -0
- package/dist/hooks/use-tasks.js +9 -0
- package/dist/hooks/use-team-members.d.ts +2 -0
- package/dist/hooks/use-team-members.d.ts.map +1 -0
- package/dist/hooks/use-team-members.js +9 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/types.d.ts +309 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/package.json +30 -0
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkHive API client – base URL + auth, methods for each route.
|
|
3
|
+
* Used by both SaaS and mobile; mobile passes EXPO_PUBLIC_API_URL and Supabase getToken.
|
|
4
|
+
*/
|
|
5
|
+
import type { LeadSubmissionsResponse, TaskListItem, Meeting, CreateMeetingPayload, PipelineCard, PostMeetingBookedPromptResponse, Pipeline, PipelineStage, TeamMembersResponse, MeResponse, RescheduleMeetingPayload, GetAvailabilitySlotsParams, GetAvailabilitySlotsResponse, EventType } from './types';
|
|
6
|
+
export type ApiClientConfig = {
|
|
7
|
+
baseURL: string;
|
|
8
|
+
getToken: () => Promise<string | null>;
|
|
9
|
+
};
|
|
10
|
+
export declare function createApiClient(config: ApiClientConfig): {
|
|
11
|
+
getLeadSubmissions(params?: {
|
|
12
|
+
tab?: "calls" | "texting" | "no-tasks";
|
|
13
|
+
page?: number;
|
|
14
|
+
limit?: number;
|
|
15
|
+
offset?: number;
|
|
16
|
+
status?: "potential" | "qualified" | "disqualified";
|
|
17
|
+
formId?: string;
|
|
18
|
+
ownerIds?: string[];
|
|
19
|
+
pipelineIds?: string[];
|
|
20
|
+
search?: string;
|
|
21
|
+
sortBy?: "date" | "status" | "next_task";
|
|
22
|
+
sortOrder?: "asc" | "desc";
|
|
23
|
+
showArchivedOnly?: boolean;
|
|
24
|
+
}): Promise<LeadSubmissionsResponse>;
|
|
25
|
+
getTasks(params?: {
|
|
26
|
+
status?: string;
|
|
27
|
+
related_card_id?: string;
|
|
28
|
+
limit?: number;
|
|
29
|
+
offset?: number;
|
|
30
|
+
sort_by?: string;
|
|
31
|
+
sort_order?: "asc" | "desc";
|
|
32
|
+
}): Promise<{
|
|
33
|
+
tasks: TaskListItem[];
|
|
34
|
+
}>;
|
|
35
|
+
/** POST /api/tasks/[taskId]/outcome – record call/chat outcome */
|
|
36
|
+
postTaskOutcome(taskId: string, body: {
|
|
37
|
+
outcomeType: string;
|
|
38
|
+
notes?: string;
|
|
39
|
+
}): Promise<{
|
|
40
|
+
outcome: unknown;
|
|
41
|
+
}>;
|
|
42
|
+
getMeetings(params?: {
|
|
43
|
+
status?: string;
|
|
44
|
+
related_card_id?: string;
|
|
45
|
+
search?: string;
|
|
46
|
+
date_start?: string;
|
|
47
|
+
date_end?: string;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
meetings: Meeting[];
|
|
50
|
+
}>;
|
|
51
|
+
postMeeting(body: CreateMeetingPayload): Promise<{
|
|
52
|
+
meeting: Meeting;
|
|
53
|
+
}>;
|
|
54
|
+
getCard(pipelineId: string, cardId: string): Promise<{
|
|
55
|
+
card: PipelineCard;
|
|
56
|
+
}>;
|
|
57
|
+
patchCard(pipelineId: string, cardId: string, body: Record<string, unknown>): Promise<{
|
|
58
|
+
card: PipelineCard;
|
|
59
|
+
}>;
|
|
60
|
+
getPostMeetingBookedPrompt(cardId: string, pipelineId: string): Promise<PostMeetingBookedPromptResponse & {
|
|
61
|
+
scenario?: string | null;
|
|
62
|
+
}>;
|
|
63
|
+
patchTextConversation(cardId: string, body: {
|
|
64
|
+
inConversation?: boolean;
|
|
65
|
+
}): Promise<unknown>;
|
|
66
|
+
moveCard(cardId: string, body: {
|
|
67
|
+
targetPipelineId: string;
|
|
68
|
+
targetStageId: string;
|
|
69
|
+
}): Promise<unknown>;
|
|
70
|
+
patchRouteCard(cardId: string, body: {
|
|
71
|
+
status?: string;
|
|
72
|
+
[key: string]: unknown;
|
|
73
|
+
}): Promise<unknown>;
|
|
74
|
+
getCardCustomFields(pipelineId: string, cardId: string): Promise<{
|
|
75
|
+
customFields: unknown[];
|
|
76
|
+
}>;
|
|
77
|
+
getPipelines(params?: {
|
|
78
|
+
archivedOnly?: boolean;
|
|
79
|
+
}): Promise<{
|
|
80
|
+
pipelines: Pipeline[];
|
|
81
|
+
}>;
|
|
82
|
+
getStages(pipelineId: string): Promise<{
|
|
83
|
+
stages: PipelineStage[];
|
|
84
|
+
}>;
|
|
85
|
+
getTeamMembers(): Promise<TeamMembersResponse>;
|
|
86
|
+
/**
|
|
87
|
+
* Current user (GET /api/me).
|
|
88
|
+
* Returns authenticated user with membership (name, email, avatar, role) and organization.
|
|
89
|
+
* Use for banner avatar, profile, and org context.
|
|
90
|
+
*/
|
|
91
|
+
getMe(): Promise<MeResponse>;
|
|
92
|
+
cancelMeeting(meetingId: string, body?: {
|
|
93
|
+
reason?: string;
|
|
94
|
+
}): Promise<{
|
|
95
|
+
meeting: Meeting;
|
|
96
|
+
}>;
|
|
97
|
+
rescheduleMeeting(meetingId: string, body: RescheduleMeetingPayload): Promise<{
|
|
98
|
+
meeting: Meeting;
|
|
99
|
+
}>;
|
|
100
|
+
/**
|
|
101
|
+
* P1: Toggle card archive status.
|
|
102
|
+
* Archives an active card, or unarchives an archived card. Same call does both.
|
|
103
|
+
* @returns Updated card in response.
|
|
104
|
+
*/
|
|
105
|
+
archiveCard(pipelineId: string, cardId: string): Promise<{
|
|
106
|
+
success: boolean;
|
|
107
|
+
message: string;
|
|
108
|
+
card?: PipelineCard;
|
|
109
|
+
}>;
|
|
110
|
+
getAvailabilitySlots(body: GetAvailabilitySlotsParams): Promise<GetAvailabilitySlotsResponse>;
|
|
111
|
+
getEventTypes(): Promise<{
|
|
112
|
+
eventTypes: EventType[];
|
|
113
|
+
}>;
|
|
114
|
+
};
|
|
115
|
+
export type ApiClient = ReturnType<typeof createApiClient>;
|
|
116
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkHive API client – base URL + auth, methods for each route.
|
|
3
|
+
* Used by both SaaS and mobile; mobile passes EXPO_PUBLIC_API_URL and Supabase getToken.
|
|
4
|
+
*/
|
|
5
|
+
function buildUrl(baseURL, path) {
|
|
6
|
+
const base = baseURL.replace(/\/$/, '');
|
|
7
|
+
const p = path.startsWith('/') ? path : `/${path}`;
|
|
8
|
+
return path.startsWith('http') ? path : `${base}${p}`;
|
|
9
|
+
}
|
|
10
|
+
export function createApiClient(config) {
|
|
11
|
+
const { baseURL, getToken } = config;
|
|
12
|
+
async function request(path, options) {
|
|
13
|
+
const token = await getToken();
|
|
14
|
+
const url = buildUrl(baseURL, path);
|
|
15
|
+
const res = await fetch(url, {
|
|
16
|
+
...options,
|
|
17
|
+
headers: {
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
20
|
+
...options?.headers,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
if (!res.ok) {
|
|
24
|
+
const err = await res.json().catch(() => ({}));
|
|
25
|
+
throw new Error(err.error || res.statusText);
|
|
26
|
+
}
|
|
27
|
+
return res.json();
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
// -------------------------------------------------------------------------
|
|
31
|
+
// Lead submissions (GET /api/lead-submissions)
|
|
32
|
+
// -------------------------------------------------------------------------
|
|
33
|
+
getLeadSubmissions(params) {
|
|
34
|
+
const search = new URLSearchParams();
|
|
35
|
+
if (params?.tab)
|
|
36
|
+
search.set('tab', params.tab);
|
|
37
|
+
if (params?.page != null)
|
|
38
|
+
search.set('page', String(params.page));
|
|
39
|
+
if (params?.limit != null)
|
|
40
|
+
search.set('limit', String(params.limit));
|
|
41
|
+
if (params?.offset != null)
|
|
42
|
+
search.set('offset', String(params.offset));
|
|
43
|
+
if (params?.status)
|
|
44
|
+
search.set('status', params.status);
|
|
45
|
+
if (params?.formId)
|
|
46
|
+
search.set('formId', params.formId);
|
|
47
|
+
if (params?.ownerIds?.length)
|
|
48
|
+
search.set('ownerIds', params.ownerIds.join(','));
|
|
49
|
+
if (params?.pipelineIds?.length)
|
|
50
|
+
search.set('pipelineIds', params.pipelineIds.join(','));
|
|
51
|
+
if (params?.search)
|
|
52
|
+
search.set('search', params.search);
|
|
53
|
+
if (params?.sortBy)
|
|
54
|
+
search.set('sortBy', params.sortBy);
|
|
55
|
+
if (params?.sortOrder)
|
|
56
|
+
search.set('sortOrder', params.sortOrder);
|
|
57
|
+
if (params?.showArchivedOnly)
|
|
58
|
+
search.set('showArchivedOnly', 'true');
|
|
59
|
+
return request(`/api/lead-submissions?${search}`);
|
|
60
|
+
},
|
|
61
|
+
// -------------------------------------------------------------------------
|
|
62
|
+
// Tasks (GET /api/tasks)
|
|
63
|
+
// -------------------------------------------------------------------------
|
|
64
|
+
getTasks(params) {
|
|
65
|
+
const search = new URLSearchParams();
|
|
66
|
+
if (params?.status)
|
|
67
|
+
search.set('status', params.status);
|
|
68
|
+
if (params?.related_card_id)
|
|
69
|
+
search.set('related_card_id', params.related_card_id);
|
|
70
|
+
if (params?.limit != null)
|
|
71
|
+
search.set('limit', String(params.limit));
|
|
72
|
+
if (params?.offset != null)
|
|
73
|
+
search.set('offset', String(params.offset));
|
|
74
|
+
if (params?.sort_by)
|
|
75
|
+
search.set('sort_by', params.sort_by);
|
|
76
|
+
if (params?.sort_order)
|
|
77
|
+
search.set('sort_order', params.sort_order);
|
|
78
|
+
return request(`/api/tasks?${search}`);
|
|
79
|
+
},
|
|
80
|
+
/** POST /api/tasks/[taskId]/outcome – record call/chat outcome */
|
|
81
|
+
postTaskOutcome(taskId, body) {
|
|
82
|
+
return request(`/api/tasks/${taskId}/outcome`, {
|
|
83
|
+
method: 'POST',
|
|
84
|
+
body: JSON.stringify(body),
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
// -------------------------------------------------------------------------
|
|
88
|
+
// Meetings (GET /api/meetings, POST /api/meetings)
|
|
89
|
+
// -------------------------------------------------------------------------
|
|
90
|
+
getMeetings(params) {
|
|
91
|
+
const search = new URLSearchParams();
|
|
92
|
+
if (params?.status)
|
|
93
|
+
search.set('status', params.status);
|
|
94
|
+
if (params?.related_card_id)
|
|
95
|
+
search.set('related_card_id', params.related_card_id);
|
|
96
|
+
if (params?.search)
|
|
97
|
+
search.set('search', params.search);
|
|
98
|
+
if (params?.date_start)
|
|
99
|
+
search.set('date_start', params.date_start);
|
|
100
|
+
if (params?.date_end)
|
|
101
|
+
search.set('date_end', params.date_end);
|
|
102
|
+
const q = search.toString();
|
|
103
|
+
return request(`/api/meetings${q ? `?${q}` : ''}`);
|
|
104
|
+
},
|
|
105
|
+
postMeeting(body) {
|
|
106
|
+
return request('/api/meetings', {
|
|
107
|
+
method: 'POST',
|
|
108
|
+
body: JSON.stringify(body),
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
// -------------------------------------------------------------------------
|
|
112
|
+
// Pipeline card (GET /api/pipelines/[id]/cards/[cardId], PATCH)
|
|
113
|
+
// -------------------------------------------------------------------------
|
|
114
|
+
getCard(pipelineId, cardId) {
|
|
115
|
+
return request(`/api/pipelines/${pipelineId}/cards/${cardId}`);
|
|
116
|
+
},
|
|
117
|
+
patchCard(pipelineId, cardId, body) {
|
|
118
|
+
return request(`/api/pipelines/${pipelineId}/cards/${cardId}`, {
|
|
119
|
+
method: 'PATCH',
|
|
120
|
+
body: JSON.stringify(body),
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
// -------------------------------------------------------------------------
|
|
124
|
+
// Post-meeting booked prompt (GET /api/cards/[cardId]/post-meeting-booked-prompt)
|
|
125
|
+
// -------------------------------------------------------------------------
|
|
126
|
+
getPostMeetingBookedPrompt(cardId, pipelineId) {
|
|
127
|
+
return request(`/api/cards/${cardId}/post-meeting-booked-prompt?pipelineId=${encodeURIComponent(pipelineId)}`);
|
|
128
|
+
},
|
|
129
|
+
// -------------------------------------------------------------------------
|
|
130
|
+
// Text conversation (PATCH /api/pipelines/cards/[cardId]/text-conversation)
|
|
131
|
+
// -------------------------------------------------------------------------
|
|
132
|
+
patchTextConversation(cardId, body) {
|
|
133
|
+
return request(`/api/pipelines/cards/${cardId}/text-conversation`, {
|
|
134
|
+
method: 'PATCH',
|
|
135
|
+
body: JSON.stringify(body),
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
// -------------------------------------------------------------------------
|
|
139
|
+
// Move card (POST /api/cards/[cardId]/move-pipeline)
|
|
140
|
+
// -------------------------------------------------------------------------
|
|
141
|
+
moveCard(cardId, body) {
|
|
142
|
+
return request(`/api/cards/${cardId}/move-pipeline`, {
|
|
143
|
+
method: 'POST',
|
|
144
|
+
body: JSON.stringify(body),
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
// -------------------------------------------------------------------------
|
|
148
|
+
// Route card status (PATCH /api/cards/[cardId]/route-card)
|
|
149
|
+
// -------------------------------------------------------------------------
|
|
150
|
+
patchRouteCard(cardId, body) {
|
|
151
|
+
return request(`/api/cards/${cardId}/route-card`, {
|
|
152
|
+
method: 'PATCH',
|
|
153
|
+
body: JSON.stringify(body),
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
// -------------------------------------------------------------------------
|
|
157
|
+
// Card custom fields (GET /api/pipelines/[id]/cards/[cardId]/custom-fields)
|
|
158
|
+
// -------------------------------------------------------------------------
|
|
159
|
+
getCardCustomFields(pipelineId, cardId) {
|
|
160
|
+
return request(`/api/pipelines/${pipelineId}/cards/${cardId}/custom-fields`);
|
|
161
|
+
},
|
|
162
|
+
// -------------------------------------------------------------------------
|
|
163
|
+
// P0: Pipelines (GET /api/pipelines)
|
|
164
|
+
// -------------------------------------------------------------------------
|
|
165
|
+
getPipelines(params) {
|
|
166
|
+
const search = new URLSearchParams();
|
|
167
|
+
if (params?.archivedOnly === true)
|
|
168
|
+
search.set('archivedOnly', 'true');
|
|
169
|
+
const q = search.toString();
|
|
170
|
+
return request(`/api/pipelines${q ? `?${q}` : ''}`);
|
|
171
|
+
},
|
|
172
|
+
// -------------------------------------------------------------------------
|
|
173
|
+
// P0: Stages (GET /api/pipelines/[id]/stages)
|
|
174
|
+
// -------------------------------------------------------------------------
|
|
175
|
+
getStages(pipelineId) {
|
|
176
|
+
return request(`/api/pipelines/${pipelineId}/stages`);
|
|
177
|
+
},
|
|
178
|
+
// -------------------------------------------------------------------------
|
|
179
|
+
// P0: Team members (GET /api/team-members)
|
|
180
|
+
// -------------------------------------------------------------------------
|
|
181
|
+
getTeamMembers() {
|
|
182
|
+
return request('/api/team-members');
|
|
183
|
+
},
|
|
184
|
+
/**
|
|
185
|
+
* Current user (GET /api/me).
|
|
186
|
+
* Returns authenticated user with membership (name, email, avatar, role) and organization.
|
|
187
|
+
* Use for banner avatar, profile, and org context.
|
|
188
|
+
*/
|
|
189
|
+
getMe() {
|
|
190
|
+
return request('/api/me');
|
|
191
|
+
},
|
|
192
|
+
// -------------------------------------------------------------------------
|
|
193
|
+
// P1: Cancel meeting (POST /api/meetings/[id]/cancel)
|
|
194
|
+
// -------------------------------------------------------------------------
|
|
195
|
+
cancelMeeting(meetingId, body) {
|
|
196
|
+
return request(`/api/meetings/${meetingId}/cancel`, {
|
|
197
|
+
method: 'POST',
|
|
198
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
199
|
+
});
|
|
200
|
+
},
|
|
201
|
+
// -------------------------------------------------------------------------
|
|
202
|
+
// P1: Reschedule meeting (POST /api/meetings/[id]/reschedule)
|
|
203
|
+
// -------------------------------------------------------------------------
|
|
204
|
+
rescheduleMeeting(meetingId, body) {
|
|
205
|
+
return request(`/api/meetings/${meetingId}/reschedule`, {
|
|
206
|
+
method: 'POST',
|
|
207
|
+
body: JSON.stringify(body),
|
|
208
|
+
});
|
|
209
|
+
},
|
|
210
|
+
/**
|
|
211
|
+
* P1: Toggle card archive status.
|
|
212
|
+
* Archives an active card, or unarchives an archived card. Same call does both.
|
|
213
|
+
* @returns Updated card in response.
|
|
214
|
+
*/
|
|
215
|
+
archiveCard(pipelineId, cardId) {
|
|
216
|
+
return request(`/api/pipelines/${pipelineId}/cards/${cardId}?action=archive`, { method: 'DELETE' });
|
|
217
|
+
},
|
|
218
|
+
// -------------------------------------------------------------------------
|
|
219
|
+
// P2: Availability slots (POST /api/availability/slots)
|
|
220
|
+
// -------------------------------------------------------------------------
|
|
221
|
+
getAvailabilitySlots(body) {
|
|
222
|
+
return request('/api/availability/slots', {
|
|
223
|
+
method: 'POST',
|
|
224
|
+
body: JSON.stringify(body),
|
|
225
|
+
});
|
|
226
|
+
},
|
|
227
|
+
// -------------------------------------------------------------------------
|
|
228
|
+
// P2: Event types (GET /api/scheduling/event-types)
|
|
229
|
+
// -------------------------------------------------------------------------
|
|
230
|
+
getEventTypes() {
|
|
231
|
+
return request('/api/scheduling/event-types');
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React context for the API client so hooks can access it without prop drilling.
|
|
3
|
+
*/
|
|
4
|
+
import type { ApiClient } from './client';
|
|
5
|
+
export declare const ApiProvider: import("react").Provider<{
|
|
6
|
+
getLeadSubmissions(params?: {
|
|
7
|
+
tab?: "calls" | "texting" | "no-tasks";
|
|
8
|
+
page?: number;
|
|
9
|
+
limit?: number;
|
|
10
|
+
offset?: number;
|
|
11
|
+
status?: "potential" | "qualified" | "disqualified";
|
|
12
|
+
formId?: string;
|
|
13
|
+
ownerIds?: string[];
|
|
14
|
+
pipelineIds?: string[];
|
|
15
|
+
search?: string;
|
|
16
|
+
sortBy?: "date" | "status" | "next_task";
|
|
17
|
+
sortOrder?: "asc" | "desc";
|
|
18
|
+
showArchivedOnly?: boolean;
|
|
19
|
+
}): Promise<import("./types").LeadSubmissionsResponse>;
|
|
20
|
+
getTasks(params?: {
|
|
21
|
+
status?: string;
|
|
22
|
+
related_card_id?: string;
|
|
23
|
+
limit?: number;
|
|
24
|
+
offset?: number;
|
|
25
|
+
sort_by?: string;
|
|
26
|
+
sort_order?: "asc" | "desc";
|
|
27
|
+
}): Promise<{
|
|
28
|
+
tasks: import("./types").TaskListItem[];
|
|
29
|
+
}>;
|
|
30
|
+
postTaskOutcome(taskId: string, body: {
|
|
31
|
+
outcomeType: string;
|
|
32
|
+
notes?: string;
|
|
33
|
+
}): Promise<{
|
|
34
|
+
outcome: unknown;
|
|
35
|
+
}>;
|
|
36
|
+
getMeetings(params?: {
|
|
37
|
+
status?: string;
|
|
38
|
+
related_card_id?: string;
|
|
39
|
+
search?: string;
|
|
40
|
+
date_start?: string;
|
|
41
|
+
date_end?: string;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
meetings: import("./types").Meeting[];
|
|
44
|
+
}>;
|
|
45
|
+
postMeeting(body: import("./types").CreateMeetingPayload): Promise<{
|
|
46
|
+
meeting: import("./types").Meeting;
|
|
47
|
+
}>;
|
|
48
|
+
getCard(pipelineId: string, cardId: string): Promise<{
|
|
49
|
+
card: import("./types").PipelineCard;
|
|
50
|
+
}>;
|
|
51
|
+
patchCard(pipelineId: string, cardId: string, body: Record<string, unknown>): Promise<{
|
|
52
|
+
card: import("./types").PipelineCard;
|
|
53
|
+
}>;
|
|
54
|
+
getPostMeetingBookedPrompt(cardId: string, pipelineId: string): Promise<import("./types").PostMeetingBookedPromptResponse & {
|
|
55
|
+
scenario?: string | null;
|
|
56
|
+
}>;
|
|
57
|
+
patchTextConversation(cardId: string, body: {
|
|
58
|
+
inConversation?: boolean;
|
|
59
|
+
}): Promise<unknown>;
|
|
60
|
+
moveCard(cardId: string, body: {
|
|
61
|
+
targetPipelineId: string;
|
|
62
|
+
targetStageId: string;
|
|
63
|
+
}): Promise<unknown>;
|
|
64
|
+
patchRouteCard(cardId: string, body: {
|
|
65
|
+
status?: string;
|
|
66
|
+
[key: string]: unknown;
|
|
67
|
+
}): Promise<unknown>;
|
|
68
|
+
getCardCustomFields(pipelineId: string, cardId: string): Promise<{
|
|
69
|
+
customFields: unknown[];
|
|
70
|
+
}>;
|
|
71
|
+
getPipelines(params?: {
|
|
72
|
+
archivedOnly?: boolean;
|
|
73
|
+
}): Promise<{
|
|
74
|
+
pipelines: import("./types").Pipeline[];
|
|
75
|
+
}>;
|
|
76
|
+
getStages(pipelineId: string): Promise<{
|
|
77
|
+
stages: import("./types").PipelineStage[];
|
|
78
|
+
}>;
|
|
79
|
+
getTeamMembers(): Promise<import("./types").TeamMembersResponse>;
|
|
80
|
+
getMe(): Promise<import("./types").MeResponse>;
|
|
81
|
+
cancelMeeting(meetingId: string, body?: {
|
|
82
|
+
reason?: string;
|
|
83
|
+
}): Promise<{
|
|
84
|
+
meeting: import("./types").Meeting;
|
|
85
|
+
}>;
|
|
86
|
+
rescheduleMeeting(meetingId: string, body: import("./types").RescheduleMeetingPayload): Promise<{
|
|
87
|
+
meeting: import("./types").Meeting;
|
|
88
|
+
}>;
|
|
89
|
+
archiveCard(pipelineId: string, cardId: string): Promise<{
|
|
90
|
+
success: boolean;
|
|
91
|
+
message: string;
|
|
92
|
+
card?: import("./types").PipelineCard;
|
|
93
|
+
}>;
|
|
94
|
+
getAvailabilitySlots(body: import("./types").GetAvailabilitySlotsParams): Promise<import("./types").GetAvailabilitySlotsResponse>;
|
|
95
|
+
getEventTypes(): Promise<{
|
|
96
|
+
eventTypes: import("./types").EventType[];
|
|
97
|
+
}>;
|
|
98
|
+
} | null>;
|
|
99
|
+
export declare function useApiClient(): ApiClient;
|
|
100
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIzC,eAAO,MAAM,WAAW;;WASitC,CAAC;YAA6C,CAAC;aAAoB,CAAC;cAAqB,CAAC;cAAqB,CAAC;cAAyD,CAAC;gBAAuB,CAAC;mBAA4B,CAAC;cAAuB,CAAC;cAAqB,CAAC;iBAAiD,CAAC;wBAAuC,CAAC;;;cAAkvC,CAAC;uBAA8B,CAAC;aAAoB,CAAC;cAAqB,CAAC;eAAsB,CAAC;kBAAyB,CAAC;;;;;;aAA8wB,CAAC;;;;;cAAub,CAAC;uBAA8B,CAAC;cAAqB,CAAC;kBAAyB,CAAC;gBAAuB,CAAC;;;;;;;;;;;;;;gBAA2yD,CAAC;;;sBAAke,CAAC;;;;;;;cAAm8B,CAAC;;;;;;;oBAAm5B,CAAC;;;;;;;;;;cAA2lD,CAAC;;;;;;;;;;YAA0+B,CAAC;;;;;;SAT52V,CAAA;AAE9C,wBAAgB,YAAY,IAAI,SAAS,CAMxC"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React context for the API client so hooks can access it without prop drilling.
|
|
3
|
+
*/
|
|
4
|
+
import { createContext, useContext } from 'react';
|
|
5
|
+
const ApiContext = createContext(null);
|
|
6
|
+
export const ApiProvider = ApiContext.Provider;
|
|
7
|
+
export function useApiClient() {
|
|
8
|
+
const client = useContext(ApiContext);
|
|
9
|
+
if (!client) {
|
|
10
|
+
throw new Error('useApiClient must be used within ApiProvider. Wrap your app with <ApiProvider value={api}>.');
|
|
11
|
+
}
|
|
12
|
+
return client;
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { useLeads } from './use-leads';
|
|
2
|
+
export type { GetLeadSubmissionsParams } from './use-leads';
|
|
3
|
+
export { useTasks } from './use-tasks';
|
|
4
|
+
export type { GetTasksParams } from './use-tasks';
|
|
5
|
+
export { useMeetings } from './use-meetings';
|
|
6
|
+
export type { GetMeetingsParams } from './use-meetings';
|
|
7
|
+
export { usePipelines } from './use-pipelines';
|
|
8
|
+
export type { GetPipelinesParams } from './use-pipelines';
|
|
9
|
+
export { useStages } from './use-stages';
|
|
10
|
+
export { useTeamMembers } from './use-team-members';
|
|
11
|
+
export { useMe } from './use-me';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useLeads } from './use-leads';
|
|
2
|
+
export { useTasks } from './use-tasks';
|
|
3
|
+
export { useMeetings } from './use-meetings';
|
|
4
|
+
export { usePipelines } from './use-pipelines';
|
|
5
|
+
export { useStages } from './use-stages';
|
|
6
|
+
export { useTeamMembers } from './use-team-members';
|
|
7
|
+
export { useMe } from './use-me';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { useApiClient } from '../context';
|
|
2
|
+
export type GetLeadSubmissionsParams = Parameters<ReturnType<typeof useApiClient>['getLeadSubmissions']>[0];
|
|
3
|
+
export declare function useLeads(params?: GetLeadSubmissionsParams): import("@tanstack/react-query").UseQueryResult<import("..").LeadSubmissionsResponse, Error>;
|
|
4
|
+
//# sourceMappingURL=use-leads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-leads.d.ts","sourceRoot":"","sources":["../../src/hooks/use-leads.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAC/C,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,oBAAoB,CAAC,CACtD,CAAC,CAAC,CAAC,CAAA;AAEJ,wBAAgB,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,+FAMzD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../context';
|
|
3
|
+
export function useLeads(params) {
|
|
4
|
+
const client = useApiClient();
|
|
5
|
+
return useQuery({
|
|
6
|
+
queryKey: ['leads', params],
|
|
7
|
+
queryFn: () => client.getLeadSubmissions(params),
|
|
8
|
+
});
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-me.d.ts","sourceRoot":"","sources":["../../src/hooks/use-me.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,KAAK,mFAMpB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../context';
|
|
3
|
+
/**
|
|
4
|
+
* Current user (GET /api/me).
|
|
5
|
+
* Use for banner avatar, profile, and org context.
|
|
6
|
+
*/
|
|
7
|
+
export function useMe() {
|
|
8
|
+
const client = useApiClient();
|
|
9
|
+
return useQuery({
|
|
10
|
+
queryKey: ['me'],
|
|
11
|
+
queryFn: () => client.getMe(),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useApiClient } from '../context';
|
|
2
|
+
export type GetMeetingsParams = Parameters<ReturnType<typeof useApiClient>['getMeetings']>[0];
|
|
3
|
+
export declare function useMeetings(params?: GetMeetingsParams, options?: {
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
}): import("@tanstack/react-query").UseQueryResult<{
|
|
6
|
+
meetings: import("..").Meeting[];
|
|
7
|
+
}, Error>;
|
|
8
|
+
//# sourceMappingURL=use-meetings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-meetings.d.ts","sourceRoot":"","sources":["../../src/hooks/use-meetings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,iBAAiB,GAAG,UAAU,CACxC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,aAAa,CAAC,CAC/C,CAAC,CAAC,CAAC,CAAA;AAEJ,wBAAgB,WAAW,CACzB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;;UAQhC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../context';
|
|
3
|
+
export function useMeetings(params, options) {
|
|
4
|
+
const client = useApiClient();
|
|
5
|
+
return useQuery({
|
|
6
|
+
queryKey: ['meetings', params],
|
|
7
|
+
queryFn: () => client.getMeetings(params),
|
|
8
|
+
...options,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useApiClient } from '../context';
|
|
2
|
+
export type GetPipelinesParams = Parameters<ReturnType<typeof useApiClient>['getPipelines']>[0];
|
|
3
|
+
export declare function usePipelines(params?: GetPipelinesParams): import("@tanstack/react-query").UseQueryResult<{
|
|
4
|
+
pipelines: import("..").Pipeline[];
|
|
5
|
+
}, Error>;
|
|
6
|
+
//# sourceMappingURL=use-pipelines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-pipelines.d.ts","sourceRoot":"","sources":["../../src/hooks/use-pipelines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,kBAAkB,GAAG,UAAU,CACzC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,cAAc,CAAC,CAChD,CAAC,CAAC,CAAC,CAAA;AAEJ,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB;;UAMvD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../context';
|
|
3
|
+
export function usePipelines(params) {
|
|
4
|
+
const client = useApiClient();
|
|
5
|
+
return useQuery({
|
|
6
|
+
queryKey: ['pipelines', params],
|
|
7
|
+
queryFn: () => client.getPipelines(params),
|
|
8
|
+
});
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-stages.d.ts","sourceRoot":"","sources":["../../src/hooks/use-stages.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;;UAOlD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../context';
|
|
3
|
+
export function useStages(pipelineId) {
|
|
4
|
+
const client = useApiClient();
|
|
5
|
+
return useQuery({
|
|
6
|
+
queryKey: ['stages', pipelineId],
|
|
7
|
+
queryFn: () => client.getStages(pipelineId),
|
|
8
|
+
enabled: !!pipelineId,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useApiClient } from '../context';
|
|
2
|
+
export type GetTasksParams = Parameters<ReturnType<typeof useApiClient>['getTasks']>[0];
|
|
3
|
+
export declare function useTasks(params?: GetTasksParams): import("@tanstack/react-query").UseQueryResult<{
|
|
4
|
+
tasks: import("..").TaskListItem[];
|
|
5
|
+
}, Error>;
|
|
6
|
+
//# sourceMappingURL=use-tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tasks.d.ts","sourceRoot":"","sources":["../../src/hooks/use-tasks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,CAAC,CAC5C,CAAC,CAAC,CAAC,CAAA;AAEJ,wBAAgB,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc;;UAM/C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../context';
|
|
3
|
+
export function useTasks(params) {
|
|
4
|
+
const client = useApiClient();
|
|
5
|
+
return useQuery({
|
|
6
|
+
queryKey: ['tasks', params],
|
|
7
|
+
queryFn: () => client.getTasks(params),
|
|
8
|
+
});
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-team-members.d.ts","sourceRoot":"","sources":["../../src/hooks/use-team-members.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,4FAM7B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { useApiClient } from '../context';
|
|
3
|
+
export function useTeamMembers() {
|
|
4
|
+
const client = useApiClient();
|
|
5
|
+
return useQuery({
|
|
6
|
+
queryKey: ['team-members'],
|
|
7
|
+
queryFn: () => client.getTeamMembers(),
|
|
8
|
+
});
|
|
9
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @workhive/api – shared API client, types, and hooks for WorkHive SaaS and mobile.
|
|
3
|
+
*/
|
|
4
|
+
export { createApiClient } from './client';
|
|
5
|
+
export type { ApiClientConfig, ApiClient } from './client';
|
|
6
|
+
export { ApiProvider, useApiClient } from './context';
|
|
7
|
+
export type { FlattenedLead, LeadSubmissionsResponse, TaskStatus, TaskListItem, TaskCallOutcomeType, TaskChatOutcomeType, TaskOutcomeType, MeetingStatus, MeetingProvider, MeetingMode, Meeting, CreateMeetingPayload, PipelineCard, PostMeetingBookedPromptResponse, Pipeline, PipelineStage, TeamMember, TeamMembersResponse, MeUser, MeMembership, MeOrganization, MeResponse, RescheduleMeetingPayload, GetAvailabilitySlotsParams, GetAvailabilitySlotsResponse, AvailabilitySlot, EventType, EventTypeHost, } from './types';
|
|
8
|
+
export { useLeads, useTasks, useMeetings, usePipelines, useStages, useTeamMembers, useMe } from './hooks';
|
|
9
|
+
export type { GetLeadSubmissionsParams, GetTasksParams, GetMeetingsParams, GetPipelinesParams, } from './hooks';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAG1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGrD,YAAY,EACV,aAAa,EACb,uBAAuB,EACvB,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACX,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,+BAA+B,EAC/B,QAAQ,EACR,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,cAAc,EACd,UAAU,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACzG,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @workhive/api – shared API client, types, and hooks for WorkHive SaaS and mobile.
|
|
3
|
+
*/
|
|
4
|
+
// Client
|
|
5
|
+
export { createApiClient } from './client';
|
|
6
|
+
// Context (React)
|
|
7
|
+
export { ApiProvider, useApiClient } from './context';
|
|
8
|
+
// Hooks
|
|
9
|
+
export { useLeads, useTasks, useMeetings, usePipelines, useStages, useTeamMembers, useMe } from './hooks';
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for WorkHive API responses and payloads.
|
|
3
|
+
* Kept in sync with src/app/api/* route handlers and src/lib/types*.ts.
|
|
4
|
+
*/
|
|
5
|
+
export interface FlattenedLead {
|
|
6
|
+
card_id: string;
|
|
7
|
+
card_status: 'potential' | 'qualified' | 'disqualified';
|
|
8
|
+
card_title: string | null;
|
|
9
|
+
pipeline_id: string;
|
|
10
|
+
pipeline_name: string | null;
|
|
11
|
+
pipeline_color: string | null;
|
|
12
|
+
is_lead_pipeline: boolean;
|
|
13
|
+
stage_id: string;
|
|
14
|
+
stage_name: string | null;
|
|
15
|
+
stage_is_appointment_booked: boolean | null;
|
|
16
|
+
card_owner_id: string | null;
|
|
17
|
+
card_owner_name: string | null;
|
|
18
|
+
card_setter_id: string | null;
|
|
19
|
+
card_setter_name: string | null;
|
|
20
|
+
lead_form_submission_id: string | null;
|
|
21
|
+
submission_status: string | null;
|
|
22
|
+
form_id: string | null;
|
|
23
|
+
form_name: string | null;
|
|
24
|
+
qualification_score: number | null;
|
|
25
|
+
disqualification_reason: string | null;
|
|
26
|
+
booking_presented_at: string | null;
|
|
27
|
+
booking_completed_at: string | null;
|
|
28
|
+
card_created_at: string;
|
|
29
|
+
card_entered_stage_at: string | null;
|
|
30
|
+
first_name: string | null;
|
|
31
|
+
last_name: string | null;
|
|
32
|
+
email: string | null;
|
|
33
|
+
phone_number: string | null;
|
|
34
|
+
job_title: string | null;
|
|
35
|
+
contact_id: string | null;
|
|
36
|
+
is_new_lead_stage: boolean;
|
|
37
|
+
position: string;
|
|
38
|
+
archived: boolean;
|
|
39
|
+
has_call_task: boolean;
|
|
40
|
+
has_generic_task: boolean;
|
|
41
|
+
has_chat_task: boolean;
|
|
42
|
+
next_call_task_date: string | null;
|
|
43
|
+
next_generic_task_date: string | null;
|
|
44
|
+
next_chat_task_date: string | null;
|
|
45
|
+
next_call_or_task_id: string | null;
|
|
46
|
+
next_call_or_task_type: string | null;
|
|
47
|
+
next_call_or_task_title: string | null;
|
|
48
|
+
next_call_or_task_date: string | null;
|
|
49
|
+
chat_task_created_at: string | null;
|
|
50
|
+
chat_task_id: string | null;
|
|
51
|
+
chat_task_title: string | null;
|
|
52
|
+
cadence_instance?: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
status: 'active' | 'paused' | 'completed' | 'cancelled';
|
|
55
|
+
first_contact_attempted_at: string | null;
|
|
56
|
+
started_at: string;
|
|
57
|
+
}> | null;
|
|
58
|
+
cadence_task_data?: {
|
|
59
|
+
next_task: {
|
|
60
|
+
type: string;
|
|
61
|
+
title: string;
|
|
62
|
+
date: string;
|
|
63
|
+
} | null;
|
|
64
|
+
last_completed_task: {
|
|
65
|
+
type: string;
|
|
66
|
+
title: string;
|
|
67
|
+
date: string;
|
|
68
|
+
} | null;
|
|
69
|
+
speed_to_lead_minutes: number | null;
|
|
70
|
+
} | null;
|
|
71
|
+
}
|
|
72
|
+
export interface LeadSubmissionsResponse {
|
|
73
|
+
data: FlattenedLead[];
|
|
74
|
+
total: number;
|
|
75
|
+
page: number;
|
|
76
|
+
limit: number;
|
|
77
|
+
totalPages: number;
|
|
78
|
+
pagination?: {
|
|
79
|
+
count: number;
|
|
80
|
+
limit: number;
|
|
81
|
+
offset: number;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export type TaskStatus = 'todo' | 'in_progress' | 'completed' | 'cancelled';
|
|
85
|
+
export interface TaskListItem {
|
|
86
|
+
id: string;
|
|
87
|
+
title: string;
|
|
88
|
+
description?: string | null;
|
|
89
|
+
task_date?: string | null;
|
|
90
|
+
deadline?: string | null;
|
|
91
|
+
status: TaskStatus;
|
|
92
|
+
is_high_priority: boolean;
|
|
93
|
+
position?: number;
|
|
94
|
+
completed_at?: string | null;
|
|
95
|
+
assignees: Array<{
|
|
96
|
+
id: string;
|
|
97
|
+
name: string;
|
|
98
|
+
avatar?: string;
|
|
99
|
+
}>;
|
|
100
|
+
tags: Array<{
|
|
101
|
+
id: string;
|
|
102
|
+
name: string;
|
|
103
|
+
color: string;
|
|
104
|
+
style_variant: string;
|
|
105
|
+
}>;
|
|
106
|
+
related_card?: {
|
|
107
|
+
id: string;
|
|
108
|
+
title: string;
|
|
109
|
+
pipeline_name: string;
|
|
110
|
+
};
|
|
111
|
+
created_at: string;
|
|
112
|
+
is_overdue?: boolean;
|
|
113
|
+
task_type?: 'task' | 'call' | 'event' | 'chat' | null;
|
|
114
|
+
}
|
|
115
|
+
export type TaskCallOutcomeType = 'voicemail_left' | 'voicemail_no_message' | 'busy_callback' | 'meeting_booked' | 'meeting_confirmed' | 'not_qualified' | 'wrong_number' | 'do_not_call' | 'skipped' | 'awaiting_info';
|
|
116
|
+
export type TaskChatOutcomeType = 'meeting_booked' | 'meeting_confirmed' | 'not_qualified' | 'do_not_message' | 'prefer_to_be_called' | 'skipped' | 'awaiting_info';
|
|
117
|
+
export type TaskOutcomeType = TaskCallOutcomeType | TaskChatOutcomeType;
|
|
118
|
+
export type MeetingStatus = 'scheduled' | 'in_progress' | 'ended' | 'cancelled';
|
|
119
|
+
export type MeetingProvider = 'manual' | 'google_meet' | 'zoom' | 'native';
|
|
120
|
+
export type MeetingMode = 'virtual' | 'in_person';
|
|
121
|
+
export interface Meeting {
|
|
122
|
+
id: string;
|
|
123
|
+
org_id: string;
|
|
124
|
+
title: string;
|
|
125
|
+
description?: string | null;
|
|
126
|
+
related_card_id?: string | null;
|
|
127
|
+
event_type_id?: string | null;
|
|
128
|
+
primary_host_id?: string | null;
|
|
129
|
+
start_at: string;
|
|
130
|
+
end_at?: string | null;
|
|
131
|
+
all_day: boolean;
|
|
132
|
+
time_zone?: string | null;
|
|
133
|
+
location?: string | null;
|
|
134
|
+
join_url?: string | null;
|
|
135
|
+
meeting_mode: MeetingMode;
|
|
136
|
+
provider: MeetingProvider;
|
|
137
|
+
status: MeetingStatus;
|
|
138
|
+
created_by: string;
|
|
139
|
+
created_at: string;
|
|
140
|
+
updated_at: string;
|
|
141
|
+
}
|
|
142
|
+
export interface CreateMeetingPayload {
|
|
143
|
+
title: string;
|
|
144
|
+
description?: string | null;
|
|
145
|
+
related_card_id?: string | null;
|
|
146
|
+
event_type_id?: string | null;
|
|
147
|
+
primary_host_id?: string | null;
|
|
148
|
+
start_at: string;
|
|
149
|
+
end_at?: string | null;
|
|
150
|
+
all_day?: boolean;
|
|
151
|
+
time_zone?: string | null;
|
|
152
|
+
location?: string | null;
|
|
153
|
+
join_url?: string | null;
|
|
154
|
+
meeting_mode?: MeetingMode;
|
|
155
|
+
provider?: MeetingProvider;
|
|
156
|
+
calendar_id?: string | null;
|
|
157
|
+
status?: MeetingStatus;
|
|
158
|
+
}
|
|
159
|
+
export interface PipelineCard {
|
|
160
|
+
id: string;
|
|
161
|
+
pipeline_id: string;
|
|
162
|
+
stage_id: string;
|
|
163
|
+
title: string | null;
|
|
164
|
+
description: string | null;
|
|
165
|
+
status: string;
|
|
166
|
+
owner_id: string | null;
|
|
167
|
+
position: string;
|
|
168
|
+
contacts?: Array<{
|
|
169
|
+
id: string;
|
|
170
|
+
first_name: string;
|
|
171
|
+
last_name: string;
|
|
172
|
+
email: string | null;
|
|
173
|
+
phone_number: string | null;
|
|
174
|
+
}>;
|
|
175
|
+
[key: string]: unknown;
|
|
176
|
+
}
|
|
177
|
+
export interface PostMeetingBookedPromptResponse {
|
|
178
|
+
scenario: 'leads_record_and_move' | 'other_record_only';
|
|
179
|
+
targetPipelineId?: string;
|
|
180
|
+
targetStageId?: string;
|
|
181
|
+
}
|
|
182
|
+
export interface Pipeline {
|
|
183
|
+
id: string;
|
|
184
|
+
name: string;
|
|
185
|
+
description?: string | null;
|
|
186
|
+
org_id: string;
|
|
187
|
+
created_at: string;
|
|
188
|
+
updated_at?: string;
|
|
189
|
+
archived: boolean;
|
|
190
|
+
position: number;
|
|
191
|
+
color?: string | null;
|
|
192
|
+
is_public?: boolean;
|
|
193
|
+
is_default?: boolean;
|
|
194
|
+
is_lead_pipeline?: boolean;
|
|
195
|
+
template_count?: number;
|
|
196
|
+
stage_count?: number;
|
|
197
|
+
card_count?: number;
|
|
198
|
+
}
|
|
199
|
+
export interface PipelineStage {
|
|
200
|
+
id: string;
|
|
201
|
+
name: string;
|
|
202
|
+
description?: string | null;
|
|
203
|
+
position: number;
|
|
204
|
+
stage_context?: string | null;
|
|
205
|
+
is_deal_won_stage?: boolean;
|
|
206
|
+
is_deal_lost_stage?: boolean;
|
|
207
|
+
is_project_completed_stage?: boolean;
|
|
208
|
+
is_project_abandoned_stage?: boolean;
|
|
209
|
+
is_new_lead_stage?: boolean;
|
|
210
|
+
is_quote_sent?: boolean;
|
|
211
|
+
is_appointment_booked?: boolean;
|
|
212
|
+
}
|
|
213
|
+
export interface TeamMember {
|
|
214
|
+
id: string;
|
|
215
|
+
user_id: string;
|
|
216
|
+
name: string | null;
|
|
217
|
+
email: string | null;
|
|
218
|
+
role?: string | null;
|
|
219
|
+
avatar?: string | null;
|
|
220
|
+
status?: string | null;
|
|
221
|
+
created_at: string;
|
|
222
|
+
}
|
|
223
|
+
export interface TeamMembersResponse {
|
|
224
|
+
success: boolean;
|
|
225
|
+
members: TeamMember[];
|
|
226
|
+
currentUserId: string;
|
|
227
|
+
}
|
|
228
|
+
export interface MeUser {
|
|
229
|
+
id: string;
|
|
230
|
+
email: string | null;
|
|
231
|
+
user_metadata?: {
|
|
232
|
+
full_name?: string | null;
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
export interface MeMembership {
|
|
236
|
+
id: string;
|
|
237
|
+
user_id: string;
|
|
238
|
+
name: string | null;
|
|
239
|
+
email: string | null;
|
|
240
|
+
role: string | null;
|
|
241
|
+
avatar: string | null;
|
|
242
|
+
status: string | null;
|
|
243
|
+
org_id: string;
|
|
244
|
+
created_at: string;
|
|
245
|
+
}
|
|
246
|
+
export interface MeOrganization {
|
|
247
|
+
id: string;
|
|
248
|
+
name: string | null;
|
|
249
|
+
slug: string | null;
|
|
250
|
+
}
|
|
251
|
+
export interface MeResponse {
|
|
252
|
+
user: MeUser;
|
|
253
|
+
membership: MeMembership | null;
|
|
254
|
+
organization: MeOrganization | null;
|
|
255
|
+
}
|
|
256
|
+
export interface RescheduleMeetingPayload {
|
|
257
|
+
start_at: string;
|
|
258
|
+
end_at?: string | null;
|
|
259
|
+
time_zone?: string | null;
|
|
260
|
+
calendar_id?: string | null;
|
|
261
|
+
}
|
|
262
|
+
export interface GetAvailabilitySlotsParams {
|
|
263
|
+
userId?: string;
|
|
264
|
+
eventTypeId?: string;
|
|
265
|
+
hostId?: string;
|
|
266
|
+
date?: string;
|
|
267
|
+
dateRange?: {
|
|
268
|
+
start: string;
|
|
269
|
+
end: string;
|
|
270
|
+
};
|
|
271
|
+
duration?: number;
|
|
272
|
+
timezone?: string;
|
|
273
|
+
}
|
|
274
|
+
export interface AvailabilitySlot {
|
|
275
|
+
start: string;
|
|
276
|
+
end: string;
|
|
277
|
+
}
|
|
278
|
+
export interface GetAvailabilitySlotsResponse {
|
|
279
|
+
slots: AvailabilitySlot[];
|
|
280
|
+
count: number;
|
|
281
|
+
dateRange: {
|
|
282
|
+
start: string;
|
|
283
|
+
end: string;
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
export interface EventTypeHost {
|
|
287
|
+
id: string;
|
|
288
|
+
event_type_id: string;
|
|
289
|
+
org_member_id: string;
|
|
290
|
+
group?: {
|
|
291
|
+
id: string;
|
|
292
|
+
name: string;
|
|
293
|
+
} | null;
|
|
294
|
+
}
|
|
295
|
+
export interface EventType {
|
|
296
|
+
id: string;
|
|
297
|
+
org_id: string;
|
|
298
|
+
name: string;
|
|
299
|
+
description?: string | null;
|
|
300
|
+
duration_minutes: number;
|
|
301
|
+
scheduling_type?: string | null;
|
|
302
|
+
hosts: EventTypeHost[];
|
|
303
|
+
host_groups?: Array<{
|
|
304
|
+
id: string;
|
|
305
|
+
name: string;
|
|
306
|
+
}>;
|
|
307
|
+
metadata?: Record<string, unknown>;
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@workhive/api",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Shared API client, types, and hooks for WorkHive SaaS and mobile",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch"
|
|
17
|
+
},
|
|
18
|
+
"peerDependencies": {
|
|
19
|
+
"react": ">=18.0.0"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@tanstack/react-query": "^5.0.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"typescript": "^5.0.0"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist"
|
|
29
|
+
]
|
|
30
|
+
}
|