@sudobility/superguide_client 0.0.11

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.
Files changed (37) hide show
  1. package/dist/hooks/index.d.ts +3 -0
  2. package/dist/hooks/index.d.ts.map +1 -0
  3. package/dist/hooks/index.js +3 -0
  4. package/dist/hooks/index.js.map +1 -0
  5. package/dist/hooks/useHistories.d.ts +19 -0
  6. package/dist/hooks/useHistories.d.ts.map +1 -0
  7. package/dist/hooks/useHistories.js +98 -0
  8. package/dist/hooks/useHistories.js.map +1 -0
  9. package/dist/hooks/useHistoriesTotal.d.ts +11 -0
  10. package/dist/hooks/useHistoriesTotal.d.ts.map +1 -0
  11. package/dist/hooks/useHistoriesTotal.js +29 -0
  12. package/dist/hooks/useHistoriesTotal.js.map +1 -0
  13. package/dist/index.d.ts +5 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +5 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/network/StarterClient.d.ts +18 -0
  18. package/dist/network/StarterClient.d.ts.map +1 -0
  19. package/dist/network/StarterClient.js +59 -0
  20. package/dist/network/StarterClient.js.map +1 -0
  21. package/dist/network/index.d.ts +2 -0
  22. package/dist/network/index.d.ts.map +1 -0
  23. package/dist/network/index.js +2 -0
  24. package/dist/network/index.js.map +1 -0
  25. package/dist/types.d.ts +9 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +8 -0
  28. package/dist/types.js.map +1 -0
  29. package/dist/utils/index.d.ts +2 -0
  30. package/dist/utils/index.d.ts.map +1 -0
  31. package/dist/utils/index.js +2 -0
  32. package/dist/utils/index.js.map +1 -0
  33. package/dist/utils/starter-helpers.d.ts +6 -0
  34. package/dist/utils/starter-helpers.d.ts.map +1 -0
  35. package/dist/utils/starter-helpers.js +23 -0
  36. package/dist/utils/starter-helpers.js.map +1 -0
  37. package/package.json +59 -0
@@ -0,0 +1,3 @@
1
+ export { useHistories, type UseHistoriesReturn } from './useHistories';
2
+ export { useHistoriesTotal, type UseHistoriesTotalReturn, } from './useHistoriesTotal';
3
+ //# 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,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { useHistories } from './useHistories';
2
+ export { useHistoriesTotal, } from './useHistoriesTotal';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,iBAAiB,GAElB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { BaseResponse, History, HistoryCreateRequest, HistoryUpdateRequest, NetworkClient, Optional } from '@sudobility/superguide_types';
2
+ import type { FirebaseIdToken } from '../types';
3
+ export interface UseHistoriesReturn {
4
+ histories: History[];
5
+ isLoading: boolean;
6
+ error: Optional<string>;
7
+ update: () => void;
8
+ createHistory: (data: HistoryCreateRequest) => Promise<BaseResponse<History>>;
9
+ updateHistory: (historyId: string, data: HistoryUpdateRequest) => Promise<BaseResponse<History>>;
10
+ deleteHistory: (historyId: string) => Promise<BaseResponse<void>>;
11
+ isCreating: boolean;
12
+ isUpdating: boolean;
13
+ isDeleting: boolean;
14
+ clearError: () => void;
15
+ }
16
+ export declare const useHistories: (networkClient: NetworkClient, baseUrl: string, userId: string | null, token: FirebaseIdToken | null, options?: {
17
+ enabled?: boolean;
18
+ }) => UseHistoriesReturn;
19
+ //# sourceMappingURL=useHistories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistories.d.ts","sourceRoot":"","sources":["../../src/hooks/useHistories.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,QAAQ,EACT,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAShD,MAAM,WAAW,kBAAkB;IAEjC,SAAS,EAAE,OAAO,EAAE,CAAC;IAErB,SAAS,EAAE,OAAO,CAAC;IAEnB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExB,MAAM,EAAE,MAAM,IAAI,CAAC;IAOnB,aAAa,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAQ9E,aAAa,EAAE,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,KACvB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAOpC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,UAAU,EAAE,OAAO,CAAC;IAEpB,UAAU,EAAE,OAAO,CAAC;IAEpB,UAAU,EAAE,OAAO,CAAC;IAEpB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAsCD,eAAO,MAAM,YAAY,GACvB,eAAe,aAAa,EAC5B,SAAS,MAAM,EACf,QAAQ,MAAM,GAAG,IAAI,EACrB,OAAO,eAAe,GAAG,IAAI,EAC7B,UAAU;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC9B,kBAoIF,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { useCallback, useMemo } from 'react';
2
+ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
3
+ import { StarterClient } from '../network/StarterClient';
4
+ import { DEFAULT_GC_TIME, DEFAULT_STALE_TIME, QUERY_KEYS } from '../types';
5
+ const EMPTY_HISTORIES = [];
6
+ export const useHistories = (networkClient, baseUrl, userId, token, options) => {
7
+ const enabled = (options?.enabled ?? true) && !!userId && !!token;
8
+ const client = useMemo(() => new StarterClient({ baseUrl, networkClient }), [baseUrl, networkClient]);
9
+ const queryClient = useQueryClient();
10
+ const { data, isLoading, error: queryError, refetch, } = useQuery({
11
+ queryKey: QUERY_KEYS.histories(userId ?? ''),
12
+ queryFn: async () => {
13
+ const response = await client.getHistories(userId, token);
14
+ if (!response.success || !response.data) {
15
+ throw new Error(response.error || 'Failed to fetch histories');
16
+ }
17
+ return response.data;
18
+ },
19
+ enabled,
20
+ staleTime: DEFAULT_STALE_TIME,
21
+ gcTime: DEFAULT_GC_TIME,
22
+ });
23
+ const invalidate = useCallback(() => {
24
+ if (userId) {
25
+ queryClient.invalidateQueries({
26
+ queryKey: QUERY_KEYS.histories(userId),
27
+ });
28
+ }
29
+ queryClient.invalidateQueries({
30
+ queryKey: QUERY_KEYS.historiesTotal(),
31
+ });
32
+ }, [queryClient, userId]);
33
+ const createMutation = useMutation({
34
+ mutationFn: async (data) => {
35
+ return client.createHistory(userId, data, token);
36
+ },
37
+ onSuccess: response => {
38
+ if (response.success)
39
+ invalidate();
40
+ },
41
+ });
42
+ const updateMutation = useMutation({
43
+ mutationFn: async ({ historyId, data, }) => {
44
+ return client.updateHistory(userId, historyId, data, token);
45
+ },
46
+ onSuccess: response => {
47
+ if (response.success)
48
+ invalidate();
49
+ },
50
+ });
51
+ const deleteMutation = useMutation({
52
+ mutationFn: async (historyId) => {
53
+ return client.deleteHistory(userId, historyId, token);
54
+ },
55
+ onSuccess: response => {
56
+ if (response.success)
57
+ invalidate();
58
+ },
59
+ });
60
+ const createHistory = useCallback((data) => createMutation.mutateAsync(data), [createMutation]);
61
+ const updateHistory = useCallback((historyId, data) => updateMutation.mutateAsync({ historyId, data }), [updateMutation]);
62
+ const deleteHistory = useCallback((historyId) => deleteMutation.mutateAsync(historyId), [deleteMutation]);
63
+ const mutationError = createMutation.error ?? updateMutation.error ?? deleteMutation.error;
64
+ const queryErrorMessage = queryError instanceof Error ? queryError.message : null;
65
+ const mutationErrorMessage = mutationError instanceof Error ? mutationError.message : null;
66
+ const error = queryErrorMessage ?? mutationErrorMessage;
67
+ const clearError = useCallback(() => {
68
+ createMutation.reset();
69
+ updateMutation.reset();
70
+ deleteMutation.reset();
71
+ }, [createMutation, updateMutation, deleteMutation]);
72
+ return useMemo(() => ({
73
+ histories: data ?? EMPTY_HISTORIES,
74
+ isLoading,
75
+ error,
76
+ update: refetch,
77
+ createHistory,
78
+ updateHistory,
79
+ deleteHistory,
80
+ isCreating: createMutation.isPending,
81
+ isUpdating: updateMutation.isPending,
82
+ isDeleting: deleteMutation.isPending,
83
+ clearError,
84
+ }), [
85
+ data,
86
+ isLoading,
87
+ error,
88
+ refetch,
89
+ createHistory,
90
+ updateHistory,
91
+ deleteHistory,
92
+ createMutation.isPending,
93
+ updateMutation.isPending,
94
+ deleteMutation.isPending,
95
+ clearError,
96
+ ]);
97
+ };
98
+ //# sourceMappingURL=useHistories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistories.js","sourceRoot":"","sources":["../../src/hooks/useHistories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { NetworkClient, Optional } from '@sudobility/superguide_types';
2
+ export interface UseHistoriesTotalReturn {
3
+ total: number;
4
+ isLoading: boolean;
5
+ error: Optional<string>;
6
+ refetch: () => void;
7
+ }
8
+ export declare const useHistoriesTotal: (networkClient: NetworkClient, baseUrl: string, options?: {
9
+ enabled?: boolean;
10
+ }) => UseHistoriesTotalReturn;
11
+ //# sourceMappingURL=useHistoriesTotal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistoriesTotal.d.ts","sourceRoot":"","sources":["../../src/hooks/useHistoriesTotal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAO5E,MAAM,WAAW,uBAAuB;IAEtC,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,OAAO,CAAC;IAEnB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA6BD,eAAO,MAAM,iBAAiB,GAC5B,eAAe,aAAa,EAC5B,SAAS,MAAM,EACf,UAAU;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC9B,uBAsCF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { useMemo } from 'react';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { StarterClient } from '../network/StarterClient';
4
+ import { DEFAULT_GC_TIME, DEFAULT_STALE_TIME, QUERY_KEYS } from '../types';
5
+ export const useHistoriesTotal = (networkClient, baseUrl, options) => {
6
+ const enabled = options?.enabled ?? true;
7
+ const client = useMemo(() => new StarterClient({ baseUrl, networkClient }), [baseUrl, networkClient]);
8
+ const { data, isLoading, error: queryError, refetch, } = useQuery({
9
+ queryKey: QUERY_KEYS.historiesTotal(),
10
+ queryFn: async () => {
11
+ const response = await client.getHistoriesTotal();
12
+ if (!response.success || !response.data) {
13
+ throw new Error(response.error || 'Failed to fetch total');
14
+ }
15
+ return response.data;
16
+ },
17
+ enabled,
18
+ staleTime: DEFAULT_STALE_TIME,
19
+ gcTime: DEFAULT_GC_TIME,
20
+ });
21
+ const error = queryError instanceof Error ? queryError.message : null;
22
+ return useMemo(() => ({
23
+ total: data?.total ?? 0,
24
+ isLoading,
25
+ error,
26
+ refetch,
27
+ }), [data, isLoading, error, refetch]);
28
+ };
29
+ //# sourceMappingURL=useHistoriesTotal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistoriesTotal.js","sourceRoot":"","sources":["../../src/hooks/useHistoriesTotal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA2C3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,aAA4B,EAC5B,OAAe,EACf,OAA+B,EACN,EAAE;IAC3B,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IAEzC,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EACnD,CAAC,OAAO,EAAE,aAAa,CAAC,CACzB,CAAC;IAEF,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,KAAK,EAAE,UAAU,EACjB,OAAO,GACR,GAAG,QAAQ,CAAC;QACX,QAAQ,EAAE,UAAU,CAAC,cAAc,EAAE;QACrC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QACD,OAAO;QACP,SAAS,EAAE,kBAAkB;QAC7B,MAAM,EAAE,eAAe;KACxB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtE,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;QACvB,SAAS;QACT,KAAK;QACL,OAAO;KACR,CAAC,EACF,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAClC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './network';
2
+ export * from './hooks';
3
+ export * from './utils';
4
+ export { type FirebaseIdToken, QUERY_KEYS, DEFAULT_STALE_TIME, DEFAULT_GC_TIME, } from './types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,KAAK,eAAe,EACpB,UAAU,EACV,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './network';
2
+ export * from './hooks';
3
+ export * from './utils';
4
+ export { QUERY_KEYS, DEFAULT_STALE_TIME, DEFAULT_GC_TIME, } from './types';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAEL,UAAU,EACV,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { NetworkClient } from '@sudobility/types';
2
+ import type { BaseResponse, History, HistoryCreateRequest, HistoryTotalResponse, HistoryUpdateRequest, User } from '@sudobility/superguide_types';
3
+ import type { FirebaseIdToken } from '../types';
4
+ export declare class StarterClient {
5
+ private readonly baseUrl;
6
+ private readonly networkClient;
7
+ constructor(config: {
8
+ baseUrl: string;
9
+ networkClient: NetworkClient;
10
+ });
11
+ getUser(userId: string, token: FirebaseIdToken): Promise<BaseResponse<User>>;
12
+ getHistories(userId: string, token: FirebaseIdToken): Promise<BaseResponse<History[]>>;
13
+ createHistory(userId: string, data: HistoryCreateRequest, token: FirebaseIdToken): Promise<BaseResponse<History>>;
14
+ updateHistory(userId: string, historyId: string, data: HistoryUpdateRequest, token: FirebaseIdToken): Promise<BaseResponse<History>>;
15
+ deleteHistory(userId: string, historyId: string, token: FirebaseIdToken): Promise<BaseResponse<void>>;
16
+ getHistoriesTotal(): Promise<BaseResponse<HistoryTotalResponse>>;
17
+ }
18
+ //# sourceMappingURL=StarterClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StarterClient.d.ts","sourceRoot":"","sources":["../../src/network/StarterClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,IAAI,EACL,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AA2DhD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBASlC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,aAAa,CAAA;KAAE;IAuB/D,OAAO,CACX,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IA0BxB,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IAyB7B,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAyB3B,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IA4B3B,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IA6BxB,iBAAiB,IAAI,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;CAUvE"}
@@ -0,0 +1,59 @@
1
+ import { buildUrl, createAuthHeaders, createHeaders, } from '../utils/starter-helpers';
2
+ function validateResponse(data, operation) {
3
+ if (data != null &&
4
+ typeof data === 'object' &&
5
+ 'success' in data &&
6
+ typeof data.success === 'boolean') {
7
+ return data;
8
+ }
9
+ throw new Error(`Invalid API response for ${operation}: response does not match expected BaseResponse shape`);
10
+ }
11
+ export class StarterClient {
12
+ constructor(config) {
13
+ this.baseUrl = config.baseUrl;
14
+ this.networkClient = config.networkClient;
15
+ }
16
+ async getUser(userId, token) {
17
+ const url = buildUrl(this.baseUrl, `/api/v1/users/${userId}`);
18
+ const response = await this.networkClient.get(url, {
19
+ headers: createAuthHeaders(token),
20
+ });
21
+ return validateResponse(response.data, 'getUser');
22
+ }
23
+ async getHistories(userId, token) {
24
+ const url = buildUrl(this.baseUrl, `/api/v1/users/${userId}/histories`);
25
+ const response = await this.networkClient.get(url, {
26
+ headers: createAuthHeaders(token),
27
+ });
28
+ return validateResponse(response.data, 'getHistories');
29
+ }
30
+ async createHistory(userId, data, token) {
31
+ const url = buildUrl(this.baseUrl, `/api/v1/users/${userId}/histories`);
32
+ const response = await this.networkClient.post(url, data, {
33
+ headers: createAuthHeaders(token),
34
+ });
35
+ return validateResponse(response.data, 'createHistory');
36
+ }
37
+ async updateHistory(userId, historyId, data, token) {
38
+ const url = buildUrl(this.baseUrl, `/api/v1/users/${userId}/histories/${historyId}`);
39
+ const response = await this.networkClient.put(url, data, {
40
+ headers: createAuthHeaders(token),
41
+ });
42
+ return validateResponse(response.data, 'updateHistory');
43
+ }
44
+ async deleteHistory(userId, historyId, token) {
45
+ const url = buildUrl(this.baseUrl, `/api/v1/users/${userId}/histories/${historyId}`);
46
+ const response = await this.networkClient.delete(url, {
47
+ headers: createAuthHeaders(token),
48
+ });
49
+ return validateResponse(response.data, 'deleteHistory');
50
+ }
51
+ async getHistoriesTotal() {
52
+ const url = buildUrl(this.baseUrl, '/api/v1/histories/total');
53
+ const response = await this.networkClient.get(url, {
54
+ headers: createHeaders(),
55
+ });
56
+ return validateResponse(response.data, 'getHistoriesTotal');
57
+ }
58
+ }
59
+ //# sourceMappingURL=StarterClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StarterClient.js","sourceRoot":"","sources":["../../src/network/StarterClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { StarterClient } from './StarterClient';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { StarterClient } from './StarterClient';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type FirebaseIdToken = string;
2
+ export declare const DEFAULT_STALE_TIME: number;
3
+ export declare const DEFAULT_GC_TIME: number;
4
+ export declare const QUERY_KEYS: {
5
+ readonly histories: (userId: string) => readonly ["starter", "histories", string];
6
+ readonly historiesTotal: () => readonly ["starter", "histories", "total"];
7
+ readonly user: (userId: string) => readonly ["starter", "user", string];
8
+ };
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAQrC,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAShD,eAAO,MAAM,eAAe,QAAiB,CAAC;AAmB9C,eAAO,MAAM,UAAU;iCAED,MAAM;;4BAIX,MAAM;CACb,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ export const DEFAULT_STALE_TIME = 5 * 60 * 1000;
2
+ export const DEFAULT_GC_TIME = 30 * 60 * 1000;
3
+ export const QUERY_KEYS = {
4
+ histories: (userId) => ['starter', 'histories', userId],
5
+ historiesTotal: () => ['starter', 'histories', 'total'],
6
+ user: (userId) => ['starter', 'user', userId],
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAShD,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAmB9C,MAAM,CAAC,MAAM,UAAU,GAAG;IAExB,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAU;IAExE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAU;IAEhE,IAAI,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAU;CACtD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createAuthHeaders, createHeaders, buildUrl, handleApiError, } from './starter-helpers';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,cAAc,GACf,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createAuthHeaders, createHeaders, buildUrl, handleApiError, } from './starter-helpers';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,cAAc,GACf,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { FirebaseIdToken } from '../types';
2
+ export declare function createAuthHeaders(token: FirebaseIdToken): Record<string, string>;
3
+ export declare function createHeaders(): Record<string, string>;
4
+ export declare function buildUrl(baseUrl: string, path: string): string;
5
+ export declare function handleApiError(response: unknown, operation: string): Error;
6
+ //# sourceMappingURL=starter-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/starter-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAiBhD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAgBD,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKtD;AAkBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9D;AAkBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAK1E"}
@@ -0,0 +1,23 @@
1
+ export function createAuthHeaders(token) {
2
+ return {
3
+ 'Content-Type': 'application/json',
4
+ Accept: 'application/json',
5
+ Authorization: `Bearer ${token}`,
6
+ };
7
+ }
8
+ export function createHeaders() {
9
+ return {
10
+ 'Content-Type': 'application/json',
11
+ Accept: 'application/json',
12
+ };
13
+ }
14
+ export function buildUrl(baseUrl, path) {
15
+ const cleanBase = baseUrl.replace(/\/$/, '');
16
+ return `${cleanBase}${path}`;
17
+ }
18
+ export function handleApiError(response, operation) {
19
+ const resp = response;
20
+ const errorMessage = resp?.data?.error || resp?.data?.message || 'Unknown error';
21
+ return new Error(`Failed to ${operation}: ${errorMessage}`);
22
+ }
23
+ //# sourceMappingURL=starter-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter-helpers.js","sourceRoot":"","sources":["../../src/utils/starter-helpers.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,iBAAiB,CAC/B,KAAsB;IAEtB,OAAO;QACL,cAAc,EAAE,kBAAkB;QAClC,MAAM,EAAE,kBAAkB;QAC1B,aAAa,EAAE,UAAU,KAAK,EAAE;KACjC,CAAC;AACJ,CAAC;AAgBD,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,cAAc,EAAE,kBAAkB;QAClC,MAAM,EAAE,kBAAkB;KAC3B,CAAC;AACJ,CAAC;AAkBD,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAY;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;AAC/B,CAAC;AAkBD,MAAM,UAAU,cAAc,CAAC,QAAiB,EAAE,SAAiB;IACjE,MAAM,IAAI,GAAG,QAA2D,CAAC;IACzE,MAAM,YAAY,GAChB,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,eAAe,CAAC;IAC9D,OAAO,IAAI,KAAK,CAAC,aAAa,SAAS,KAAK,YAAY,EAAE,CAAC,CAAC;AAC9D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@sudobility/superguide_client",
3
+ "version": "0.0.11",
4
+ "description": "Client library for Starter API with TanStack Query hooks",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "files": [
12
+ "dist/**/*"
13
+ ],
14
+ "scripts": {
15
+ "build": "bunx tsc -p tsconfig.build.json",
16
+ "build:watch": "bunx tsc --watch",
17
+ "clean": "rm -rf dist",
18
+ "prepublishOnly": "bun run clean && bun run build",
19
+ "typecheck": "bunx tsc --noEmit",
20
+ "lint": "bunx eslint src/",
21
+ "lint:fix": "bunx eslint src/ --fix",
22
+ "format": "bunx prettier --write \"src/**/*.ts\"",
23
+ "format:check": "bunx prettier --check \"src/**/*.ts\"",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "verify": "bun run typecheck && bun run test && bun run build"
27
+ },
28
+ "keywords": [
29
+ "superguide",
30
+ "client",
31
+ "react",
32
+ "typescript",
33
+ "tanstack-query"
34
+ ],
35
+ "author": "Sudobility",
36
+ "license": "BUSL-1.1",
37
+ "peerDependencies": {
38
+ "@sudobility/types": "^1.9.54",
39
+ "@tanstack/react-query": ">=5.0.0",
40
+ "react": ">=18.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "@sudobility/superguide_types": "^0.0.7",
44
+ "@sudobility/types": "^1.9.54",
45
+ "@tanstack/react-query": "^5.90.5",
46
+ "@types/react": "^19.2.2",
47
+ "react": "^19.2.1",
48
+ "@eslint/js": "^9.38.0",
49
+ "@typescript-eslint/eslint-plugin": "^8.46.2",
50
+ "@typescript-eslint/parser": "^8.46.2",
51
+ "eslint": "^9.39.2",
52
+ "eslint-config-prettier": "^10.1.5",
53
+ "eslint-plugin-prettier": "^5.4.1",
54
+ "globals": "^16.4.0",
55
+ "prettier": "^3.7.4",
56
+ "typescript": "~5.9.3",
57
+ "vitest": "^4.0.15"
58
+ }
59
+ }