@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.
@@ -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"}
@@ -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,6 @@
1
+ /**
2
+ * Current user (GET /api/me).
3
+ * Use for banner avatar, profile, and org context.
4
+ */
5
+ export declare function useMe(): import("@tanstack/react-query").UseQueryResult<import("..").MeResponse, Error>;
6
+ //# sourceMappingURL=use-me.d.ts.map
@@ -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,4 @@
1
+ export declare function useStages(pipelineId: string | null): import("@tanstack/react-query").UseQueryResult<{
2
+ stages: import("..").PipelineStage[];
3
+ }, Error>;
4
+ //# sourceMappingURL=use-stages.d.ts.map
@@ -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,2 @@
1
+ export declare function useTeamMembers(): import("@tanstack/react-query").UseQueryResult<import("..").TeamMembersResponse, Error>;
2
+ //# sourceMappingURL=use-team-members.d.ts.map
@@ -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
+ }
@@ -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';
@@ -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
@@ -0,0 +1,5 @@
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 {};
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
+ }