@dofe/sso-hooks 0.1.5 → 0.1.7

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,256 @@
1
+ 'use client';
2
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
3
+ /**
4
+ * Team API Hooks for SSO Internal API
5
+ *
6
+ * These hooks provide React Query integration for team management operations.
7
+ * They require the @repo/contracts package and @tanstack/react-query.
8
+ *
9
+ * Usage:
10
+ * const { data: teams } = useUserTeams(userId);
11
+ * const { mutate: createTeam } = useCreateTeam();
12
+ * const { mutate: addMember } = useAddTeamMember();
13
+ */
14
+ // Query Keys
15
+ export const teamKeys = {
16
+ all: ['teams'],
17
+ list: (filters) => [...teamKeys.all, 'list', filters],
18
+ detail: (id) => [...teamKeys.all, 'detail', id],
19
+ members: (teamId) => [...teamKeys.all, 'members', teamId],
20
+ userTeams: (userId) => [...teamKeys.all, 'user', userId],
21
+ userPermissions: (userId, teamId) => [...teamKeys.all, 'permissions', userId, teamId],
22
+ };
23
+ /**
24
+ * Use User Teams Hook
25
+ *
26
+ * Fetches all teams that a user belongs to.
27
+ */
28
+ export function useUserTeams(userId, options) {
29
+ return useQuery({
30
+ queryKey: teamKeys.userTeams(userId ?? ''),
31
+ queryFn: async () => {
32
+ if (!userId)
33
+ return null;
34
+ const response = await options.apiClient.getUserTeams({ pathParams: { id: userId } });
35
+ if (response.status !== 200)
36
+ throw new Error('Failed to fetch user teams');
37
+ const body = response.body;
38
+ return body?.data?.data ?? [];
39
+ },
40
+ enabled: !!userId,
41
+ });
42
+ }
43
+ /**
44
+ * Use Team List Hook
45
+ *
46
+ * Fetches a paginated list of teams.
47
+ */
48
+ export function useTeamList(query = {}, options) {
49
+ return useQuery({
50
+ queryKey: teamKeys.list(query),
51
+ queryFn: async () => {
52
+ const response = await options.apiClient.listTeams({ query });
53
+ if (response.status !== 200)
54
+ throw new Error('Failed to fetch teams');
55
+ const body = response.body;
56
+ return body?.data?.data ?? { list: [], total: 0, page: 1, limit: 20 };
57
+ },
58
+ });
59
+ }
60
+ /**
61
+ * Use Team Detail Hook
62
+ *
63
+ * Fetches a single team by ID.
64
+ */
65
+ export function useTeam(teamId, options) {
66
+ return useQuery({
67
+ queryKey: teamKeys.detail(teamId ?? ''),
68
+ queryFn: async () => {
69
+ if (!teamId)
70
+ return null;
71
+ const response = await options.apiClient.getTeam({ pathParams: { id: teamId } });
72
+ if (response.status !== 200)
73
+ throw new Error('Failed to fetch team');
74
+ const body = response.body;
75
+ return body?.data?.data ?? null;
76
+ },
77
+ enabled: !!teamId,
78
+ });
79
+ }
80
+ /**
81
+ * Use Team Members Hook
82
+ *
83
+ * Fetches all members of a team.
84
+ */
85
+ export function useTeamMembers(teamId, options) {
86
+ return useQuery({
87
+ queryKey: teamKeys.members(teamId ?? ''),
88
+ queryFn: async () => {
89
+ if (!teamId)
90
+ return [];
91
+ const response = await options.apiClient.getTeamMembers({ pathParams: { id: teamId } });
92
+ if (response.status !== 200)
93
+ throw new Error('Failed to fetch team members');
94
+ const body = response.body;
95
+ return body?.data?.data ?? [];
96
+ },
97
+ enabled: !!teamId,
98
+ });
99
+ }
100
+ /**
101
+ * Use User Permissions Hook
102
+ *
103
+ * Fetches user permissions for a specific team (optional).
104
+ */
105
+ export function useUserPermissions(userId, options, teamId) {
106
+ return useQuery({
107
+ queryKey: teamKeys.userPermissions(userId ?? '', teamId),
108
+ queryFn: async () => {
109
+ if (!userId)
110
+ return { permissions: [], roles: [] };
111
+ const response = await options.apiClient.getUserPermissions({
112
+ pathParams: { id: userId },
113
+ query: teamId ? { teamId } : undefined,
114
+ });
115
+ if (response.status !== 200)
116
+ throw new Error('Failed to fetch user permissions');
117
+ const body = response.body;
118
+ return body?.data?.data ?? { permissions: [], roles: [] };
119
+ },
120
+ enabled: !!userId,
121
+ });
122
+ }
123
+ /**
124
+ * Use Create Team Mutation
125
+ *
126
+ * Creates a new team.
127
+ */
128
+ export function useCreateTeam(options) {
129
+ const queryClient = useQueryClient();
130
+ return useMutation({
131
+ mutationFn: async (body) => {
132
+ const response = await options.apiClient.createTeam({ body });
133
+ if (response.status !== 200)
134
+ throw new Error('Failed to create team');
135
+ const resBody = response.body;
136
+ return resBody?.data?.data;
137
+ },
138
+ onSuccess: () => {
139
+ queryClient.invalidateQueries({ queryKey: teamKeys.all });
140
+ },
141
+ });
142
+ }
143
+ /**
144
+ * Use Update Team Mutation
145
+ *
146
+ * Updates an existing team.
147
+ */
148
+ export function useUpdateTeam(options) {
149
+ const queryClient = useQueryClient();
150
+ return useMutation({
151
+ mutationFn: async (params) => {
152
+ const response = await options.apiClient.updateTeam({
153
+ pathParams: { id: params.teamId },
154
+ body: params.body,
155
+ });
156
+ if (response.status !== 200)
157
+ throw new Error('Failed to update team');
158
+ const resBody = response.body;
159
+ return resBody?.data?.data;
160
+ },
161
+ onSuccess: (_data, variables) => {
162
+ queryClient.invalidateQueries({ queryKey: teamKeys.detail(variables.teamId) });
163
+ queryClient.invalidateQueries({ queryKey: teamKeys.list() });
164
+ },
165
+ });
166
+ }
167
+ /**
168
+ * Use Delete Team Mutation
169
+ *
170
+ * Soft deletes a team.
171
+ */
172
+ export function useDeleteTeam(options) {
173
+ const queryClient = useQueryClient();
174
+ return useMutation({
175
+ mutationFn: async (teamId) => {
176
+ const response = await options.apiClient.deleteTeam({ pathParams: { id: teamId } });
177
+ if (response.status !== 200)
178
+ throw new Error('Failed to delete team');
179
+ return true;
180
+ },
181
+ onSuccess: () => {
182
+ queryClient.invalidateQueries({ queryKey: teamKeys.all });
183
+ },
184
+ });
185
+ }
186
+ /**
187
+ * Use Add Team Member Mutation
188
+ *
189
+ * Adds a member to a team.
190
+ */
191
+ export function useAddTeamMember(options) {
192
+ const queryClient = useQueryClient();
193
+ return useMutation({
194
+ mutationFn: async (params) => {
195
+ const response = await options.apiClient.addTeamMember({
196
+ pathParams: { id: params.teamId },
197
+ body: { userId: params.userId, role: params.role ?? 'MEMBER' },
198
+ });
199
+ if (response.status !== 200)
200
+ throw new Error('Failed to add team member');
201
+ const resBody = response.body;
202
+ return resBody?.data?.data;
203
+ },
204
+ onSuccess: (_data, variables) => {
205
+ queryClient.invalidateQueries({ queryKey: teamKeys.members(variables.teamId) });
206
+ },
207
+ });
208
+ }
209
+ /**
210
+ * Use Remove Team Member Mutation
211
+ *
212
+ * Removes a member from a team.
213
+ */
214
+ export function useRemoveTeamMember(options) {
215
+ const queryClient = useQueryClient();
216
+ return useMutation({
217
+ mutationFn: async (params) => {
218
+ const response = await options.apiClient.removeTeamMember({
219
+ pathParams: { id: params.teamId, userId: params.userId },
220
+ });
221
+ if (response.status !== 200)
222
+ throw new Error('Failed to remove team member');
223
+ return true;
224
+ },
225
+ onSuccess: (_data, variables) => {
226
+ queryClient.invalidateQueries({ queryKey: teamKeys.members(variables.teamId) });
227
+ },
228
+ });
229
+ }
230
+ /**
231
+ * Use Check Permission Hook
232
+ *
233
+ * Checks if a user has a specific permission.
234
+ */
235
+ export function useCheckPermission(query, options) {
236
+ return useQuery({
237
+ queryKey: ['permission-check', query],
238
+ queryFn: async () => {
239
+ if (!query.userId || !query.permission)
240
+ return { hasPermission: false };
241
+ const response = await options.apiClient.checkPermission({
242
+ query: {
243
+ userId: query.userId,
244
+ teamId: query.teamId,
245
+ permission: query.permission,
246
+ },
247
+ });
248
+ if (response.status !== 200)
249
+ throw new Error('Failed to check permission');
250
+ const body = response.body;
251
+ return { hasPermission: body?.data?.data?.hasPermission ?? false };
252
+ },
253
+ enabled: !!query.userId && !!query.permission,
254
+ });
255
+ }
256
+ //# sourceMappingURL=useTeam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTeam.js","sourceRoot":"","sources":["../src/useTeam.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Tenant API Hooks for SSO Internal API
3
+ *
4
+ * These hooks provide React Query integration for tenant management operations.
5
+ * They require the @repo/contracts package and @tanstack/react-query.
6
+ *
7
+ * Usage:
8
+ * const { data: tenant } = useTenant(tenantId, { apiClient });
9
+ * const { data: members } = useTenantMembers(tenantId, { apiClient });
10
+ * const { mutate: addMember } = useAddTenantMember({ apiClient });
11
+ */
12
+ export declare const tenantKeys: {
13
+ all: readonly ["tenants"];
14
+ list: (filters?: Record<string, unknown>) => readonly ["tenants", "list", Record<string, unknown> | undefined];
15
+ detail: (id: string) => readonly ["tenants", "detail", string];
16
+ members: (tenantId: string) => readonly ["tenants", "members", string];
17
+ invitations: (tenantId: string) => readonly ["tenants", "invitations", string];
18
+ userTenants: (userId: string) => readonly ["tenants", "user", string];
19
+ userPreferences: (userId: string) => readonly ["tenants", "preferences", string];
20
+ };
21
+ /**
22
+ * Hook Options Type
23
+ *
24
+ * @property apiClient - The ts-rest client for SSO Internal API
25
+ * Must be created from @repo/contracts internalContract
26
+ */
27
+ export interface UseTenantHooksOptions {
28
+ apiClient: {
29
+ getTenant: (params: {
30
+ pathParams: {
31
+ id: string;
32
+ };
33
+ }) => Promise<{
34
+ body: unknown;
35
+ status: number;
36
+ }>;
37
+ getTenantMembers: (params: {
38
+ pathParams: {
39
+ id: string;
40
+ };
41
+ }) => Promise<{
42
+ body: unknown;
43
+ status: number;
44
+ }>;
45
+ addTenantMember: (params: {
46
+ pathParams: {
47
+ id: string;
48
+ };
49
+ body: Record<string, unknown>;
50
+ }) => Promise<{
51
+ body: unknown;
52
+ status: number;
53
+ }>;
54
+ removeTenantMember: (params: {
55
+ pathParams: {
56
+ id: string;
57
+ userId: string;
58
+ };
59
+ }) => Promise<{
60
+ body: unknown;
61
+ status: number;
62
+ }>;
63
+ updateTenantMemberRole: (params: {
64
+ pathParams: {
65
+ id: string;
66
+ userId: string;
67
+ };
68
+ body: Record<string, unknown>;
69
+ }) => Promise<{
70
+ body: unknown;
71
+ status: number;
72
+ }>;
73
+ getTenantInvitations: (params: {
74
+ pathParams: {
75
+ id: string;
76
+ };
77
+ }) => Promise<{
78
+ body: unknown;
79
+ status: number;
80
+ }>;
81
+ createTenantInvitation: (params: {
82
+ pathParams: {
83
+ id: string;
84
+ };
85
+ body: Record<string, unknown>;
86
+ }) => Promise<{
87
+ body: unknown;
88
+ status: number;
89
+ }>;
90
+ respondToTenantInvitation: (params: {
91
+ pathParams: {
92
+ id: string;
93
+ };
94
+ body: Record<string, unknown>;
95
+ }) => Promise<{
96
+ body: unknown;
97
+ status: number;
98
+ }>;
99
+ cancelTenantInvitation: (params: {
100
+ pathParams: {
101
+ id: string;
102
+ };
103
+ }) => Promise<{
104
+ body: unknown;
105
+ status: number;
106
+ }>;
107
+ getUserTenantPreference: (params: {
108
+ pathParams: {
109
+ id: string;
110
+ };
111
+ }) => Promise<{
112
+ body: unknown;
113
+ status: number;
114
+ }>;
115
+ updateUserTenantPreference: (params: {
116
+ pathParams: {
117
+ id: string;
118
+ };
119
+ body: Record<string, unknown>;
120
+ }) => Promise<{
121
+ body: unknown;
122
+ status: number;
123
+ }>;
124
+ };
125
+ }
126
+ /**
127
+ * Use Tenant Detail Hook
128
+ *
129
+ * Fetches a single tenant by ID.
130
+ */
131
+ export declare function useTenant(tenantId: string | null | undefined, options: UseTenantHooksOptions): import("@tanstack/react-query").UseQueryResult<{} | null, Error>;
132
+ /**
133
+ * Use Tenant Members Hook
134
+ *
135
+ * Fetches all members of a tenant.
136
+ */
137
+ export declare function useTenantMembers(tenantId: string | null | undefined, options: UseTenantHooksOptions): import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
138
+ /**
139
+ * Use Tenant Invitations Hook
140
+ *
141
+ * Fetches all invitations for a tenant.
142
+ */
143
+ export declare function useTenantInvitations(tenantId: string | null | undefined, options: UseTenantHooksOptions): import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
144
+ /**
145
+ * Use User Tenant Preference Hook
146
+ *
147
+ * Fetches user's tenant preferences.
148
+ */
149
+ export declare function useUserTenantPreference(userId: string | null | undefined, options: UseTenantHooksOptions): import("@tanstack/react-query").UseQueryResult<{} | null, Error>;
150
+ /**
151
+ * Use Add Tenant Member Mutation
152
+ *
153
+ * Adds a member to a tenant.
154
+ */
155
+ export declare function useAddTenantMember(options: UseTenantHooksOptions): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
156
+ tenantId: string;
157
+ userId: string;
158
+ role?: string;
159
+ }, unknown>;
160
+ /**
161
+ * Use Remove Tenant Member Mutation
162
+ *
163
+ * Removes a member from a tenant.
164
+ */
165
+ export declare function useRemoveTenantMember(options: UseTenantHooksOptions): import("@tanstack/react-query").UseMutationResult<boolean, Error, {
166
+ tenantId: string;
167
+ userId: string;
168
+ }, unknown>;
169
+ /**
170
+ * Use Update Tenant Member Role Mutation
171
+ *
172
+ * Updates a tenant member's role.
173
+ */
174
+ export declare function useUpdateTenantMemberRole(options: UseTenantHooksOptions): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
175
+ tenantId: string;
176
+ userId: string;
177
+ role: "OWNER" | "ADMIN" | "MEMBER";
178
+ }, unknown>;
179
+ /**
180
+ * Use Create Tenant Invitation Mutation
181
+ *
182
+ * Creates an invitation to join a tenant.
183
+ */
184
+ export declare function useCreateTenantInvitation(options: UseTenantHooksOptions): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
185
+ tenantId: string;
186
+ email: string;
187
+ role?: string;
188
+ expiresInDays?: number;
189
+ }, unknown>;
190
+ /**
191
+ * Use Respond to Tenant Invitation Mutation
192
+ *
193
+ * Responds to a tenant invitation (accept or decline).
194
+ */
195
+ export declare function useRespondToTenantInvitation(options: UseTenantHooksOptions): import("@tanstack/react-query").UseMutationResult<boolean, Error, {
196
+ invitationId: string;
197
+ accept: boolean;
198
+ }, unknown>;
199
+ /**
200
+ * Use Cancel Tenant Invitation Mutation
201
+ *
202
+ * Cancels a tenant invitation.
203
+ */
204
+ export declare function useCancelTenantInvitation(options: UseTenantHooksOptions): import("@tanstack/react-query").UseMutationResult<boolean, Error, string, unknown>;
205
+ /**
206
+ * Use Update User Tenant Preference Mutation
207
+ *
208
+ * Updates user's tenant preferences.
209
+ */
210
+ export declare function useUpdateUserTenantPreference(options: UseTenantHooksOptions): import("@tanstack/react-query").UseMutationResult<boolean, Error, {
211
+ userId: string;
212
+ defaultTenantId?: string;
213
+ tenantOrder?: string[];
214
+ hiddenTenantIds?: string[];
215
+ }, unknown>;
216
+ //# sourceMappingURL=useTenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTenant.d.ts","sourceRoot":"","sources":["../src/useTenant.ts"],"names":[],"mappings":"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"}