@axcode/axcloud-sdk 0.2.0-dev.1e6c3d5 → 0.2.0-dev.4fb9e07

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,273 @@
1
+ import { AxCloudClient, useAxCloudContext } from './chunk-PMMCOWL3.mjs';
2
+ import { useQuery, useMutation } from '@tanstack/react-query';
3
+
4
+ // src/core/barnsportClient.ts
5
+ var BarnsportClient = class {
6
+ constructor(client, orgId) {
7
+ this.client = client;
8
+ this.orgId = orgId;
9
+ }
10
+ path(path) {
11
+ return `/barnsport/public/${encodeURIComponent(this.orgId)}${path}`;
12
+ }
13
+ listMunicipalities() {
14
+ return this.client.get(this.path("/municipalities"));
15
+ }
16
+ listSports() {
17
+ return this.client.get(this.path("/sports"));
18
+ }
19
+ getSport(slug) {
20
+ return this.client.get(this.path(`/sports/${encodeURIComponent(slug)}`));
21
+ }
22
+ listActivities(filters = {}) {
23
+ return this.client.get(this.path("/activities"), { ...filters });
24
+ }
25
+ getActivity(slug) {
26
+ return this.client.get(this.path(`/activities/${encodeURIComponent(slug)}`));
27
+ }
28
+ getSitemap(baseUrl) {
29
+ return this.client.get(this.path("/sitemap"), { baseUrl });
30
+ }
31
+ listProviders(filters = {}) {
32
+ return this.client.get(this.path("/providers"), { ...filters });
33
+ }
34
+ getProvider(slug) {
35
+ return this.client.get(this.path(`/providers/by-slug/${encodeURIComponent(slug)}`));
36
+ }
37
+ listActivityOffers(filters = {}) {
38
+ return this.client.get(this.path("/activity-offers"), { ...filters });
39
+ }
40
+ submitInterest(request) {
41
+ return this.client.post(this.path("/interest"), request);
42
+ }
43
+ submitFeedback(request) {
44
+ return this.client.post(this.path("/feedback"), request);
45
+ }
46
+ submitReview(request) {
47
+ return this.client.post(this.path("/reviews"), request);
48
+ }
49
+ trackEvent(request) {
50
+ return this.client.post(this.path("/events"), request);
51
+ }
52
+ submitClubRemovalRequest(clubSlug, request) {
53
+ return this.client.post(
54
+ this.path(`/clubs/${encodeURIComponent(clubSlug)}/removal-request`),
55
+ request
56
+ );
57
+ }
58
+ submitProviderUpdateRequest(providerSlug, request) {
59
+ return this.client.post(this.path("/update-requests"), { ...request, providerSlug });
60
+ }
61
+ };
62
+ function createBarnsportClient(client, orgId) {
63
+ return new BarnsportClient(client, orgId);
64
+ }
65
+ function createPublicBarnsportClient({
66
+ apiUrl,
67
+ apiKey,
68
+ orgId,
69
+ timeout
70
+ }) {
71
+ return createBarnsportClient(new AxCloudClient({ baseUrl: apiUrl, apiKey, timeout }), orgId);
72
+ }
73
+ function barnsportQueryRoot(context) {
74
+ return ["axcloud", "barnsport", context.stage, context.config.apiUrl, context.orgId];
75
+ }
76
+ function useBarnsportMunicipalities() {
77
+ const { client, orgId } = useAxCloudContext();
78
+ const query = useQuery({
79
+ queryKey: ["axcloud", "barnsport", "municipalities", orgId],
80
+ queryFn: () => client.get(
81
+ `/barnsport/public/${orgId}/municipalities`
82
+ ),
83
+ staleTime: 1e3 * 60 * 30
84
+ });
85
+ return {
86
+ municipalities: query.data?.items ?? [],
87
+ count: query.data?.count ?? 0,
88
+ isLoading: query.isLoading,
89
+ isError: query.isError,
90
+ error: query.error,
91
+ refetch: query.refetch
92
+ };
93
+ }
94
+ function useBarnsportSports() {
95
+ const { client, orgId } = useAxCloudContext();
96
+ const query = useQuery({
97
+ queryKey: ["axcloud", "barnsport", "sports", orgId],
98
+ queryFn: () => client.get(`/barnsport/public/${orgId}/sports`),
99
+ staleTime: 1e3 * 60 * 30
100
+ });
101
+ return {
102
+ sports: query.data?.items ?? [],
103
+ count: query.data?.count ?? 0,
104
+ isLoading: query.isLoading,
105
+ isError: query.isError,
106
+ error: query.error,
107
+ refetch: query.refetch
108
+ };
109
+ }
110
+ function useBarnsportSport(slug) {
111
+ const { client, orgId } = useAxCloudContext();
112
+ const query = useQuery({
113
+ queryKey: ["axcloud", "barnsport", "sport", orgId, slug],
114
+ queryFn: () => client.get(`/barnsport/public/${orgId}/sports/${slug || ""}`),
115
+ enabled: Boolean(slug),
116
+ staleTime: 1e3 * 60 * 15
117
+ });
118
+ return {
119
+ sport: query.data?.sport ?? null,
120
+ isLoading: query.isLoading,
121
+ isError: query.isError,
122
+ error: query.error,
123
+ refetch: query.refetch
124
+ };
125
+ }
126
+ function useBarnsportActivities(filters = {}) {
127
+ const { client, orgId } = useAxCloudContext();
128
+ const params = { ...filters };
129
+ const query = useQuery({
130
+ queryKey: ["axcloud", "barnsport", "activities", orgId, filters],
131
+ queryFn: () => client.get(
132
+ `/barnsport/public/${orgId}/activities`,
133
+ params
134
+ ),
135
+ staleTime: 1e3 * 60 * 5
136
+ });
137
+ return {
138
+ activities: query.data?.items ?? [],
139
+ count: query.data?.count ?? 0,
140
+ nextCursor: query.data?.nextCursor ?? null,
141
+ isLoading: query.isLoading,
142
+ isError: query.isError,
143
+ error: query.error,
144
+ refetch: query.refetch
145
+ };
146
+ }
147
+ function useBarnsportActivity(slug) {
148
+ const { client, orgId } = useAxCloudContext();
149
+ const query = useQuery({
150
+ queryKey: ["axcloud", "barnsport", "activity", orgId, slug],
151
+ queryFn: () => client.get(`/barnsport/public/${orgId}/activities/${slug || ""}`),
152
+ enabled: Boolean(slug),
153
+ staleTime: 1e3 * 60 * 5
154
+ });
155
+ return {
156
+ activity: query.data?.activity ?? null,
157
+ isLoading: query.isLoading,
158
+ isError: query.isError,
159
+ error: query.error,
160
+ refetch: query.refetch
161
+ };
162
+ }
163
+ function useBarnsportSitemap(baseUrl) {
164
+ const { client, orgId } = useAxCloudContext();
165
+ const query = useQuery({
166
+ queryKey: ["axcloud", "barnsport", "sitemap", orgId, baseUrl],
167
+ queryFn: () => client.get(`/barnsport/public/${orgId}/sitemap`, {
168
+ baseUrl
169
+ }),
170
+ staleTime: 1e3 * 60 * 15
171
+ });
172
+ return {
173
+ sitemap: query.data ?? null,
174
+ urls: query.data?.urls ?? [],
175
+ isLoading: query.isLoading,
176
+ isError: query.isError,
177
+ error: query.error,
178
+ refetch: query.refetch
179
+ };
180
+ }
181
+ function useSubmitBarnsportInterest() {
182
+ const { client, orgId } = useAxCloudContext();
183
+ return useMutation({
184
+ mutationFn: (submission) => client.post(
185
+ `/barnsport/public/${orgId}/interest`,
186
+ submission
187
+ )
188
+ });
189
+ }
190
+ function useBarnsportProviderSearch(filters) {
191
+ const context = useAxCloudContext();
192
+ const api = createBarnsportClient(context.client, context.orgId);
193
+ const normalizedFilters = { ...filters, q: filters.q?.trim() };
194
+ const query = useQuery({
195
+ queryKey: [...barnsportQueryRoot(context), "providers", normalizedFilters],
196
+ queryFn: () => api.listProviders(normalizedFilters),
197
+ enabled: (normalizedFilters.q?.length ?? 0) >= 2,
198
+ staleTime: 1e3 * 60
199
+ });
200
+ return {
201
+ providers: query.data?.items ?? [],
202
+ count: query.data?.count ?? query.data?.items.length ?? 0,
203
+ nextCursor: query.data?.nextCursor ?? null,
204
+ hasMore: query.data?.hasMore ?? false,
205
+ isLoading: query.isLoading,
206
+ isFetching: query.isFetching,
207
+ isError: query.isError,
208
+ error: query.error,
209
+ refetch: query.refetch
210
+ };
211
+ }
212
+ function useBarnsportProvider(slug) {
213
+ const context = useAxCloudContext();
214
+ const api = createBarnsportClient(context.client, context.orgId);
215
+ const query = useQuery({
216
+ queryKey: [...barnsportQueryRoot(context), "provider", slug],
217
+ queryFn: () => api.getProvider(slug || ""),
218
+ enabled: Boolean(slug),
219
+ staleTime: 1e3 * 60 * 5
220
+ });
221
+ return {
222
+ provider: query.data?.item ?? null,
223
+ isLoading: query.isLoading,
224
+ isError: query.isError,
225
+ error: query.error,
226
+ refetch: query.refetch
227
+ };
228
+ }
229
+ function useBarnsportActivityOffers(filters = {}) {
230
+ const context = useAxCloudContext();
231
+ const api = createBarnsportClient(context.client, context.orgId);
232
+ const query = useQuery({
233
+ queryKey: [...barnsportQueryRoot(context), "activity-offers", filters],
234
+ queryFn: () => api.listActivityOffers(filters),
235
+ staleTime: 1e3 * 60 * 5
236
+ });
237
+ return {
238
+ activityOffers: query.data?.items ?? [],
239
+ count: query.data?.count ?? query.data?.items.length ?? 0,
240
+ nextCursor: query.data?.nextCursor ?? null,
241
+ hasMore: query.data?.hasMore ?? false,
242
+ isLoading: query.isLoading,
243
+ isFetching: query.isFetching,
244
+ isError: query.isError,
245
+ error: query.error,
246
+ refetch: query.refetch
247
+ };
248
+ }
249
+ function useSubmitBarnsportFeedback() {
250
+ const { client, orgId } = useAxCloudContext();
251
+ const api = createBarnsportClient(client, orgId);
252
+ return useMutation({
253
+ mutationFn: (request) => api.submitFeedback(request)
254
+ });
255
+ }
256
+ function useSubmitBarnsportReview() {
257
+ const { client, orgId } = useAxCloudContext();
258
+ const api = createBarnsportClient(client, orgId);
259
+ return useMutation({
260
+ mutationFn: (request) => api.submitReview(request)
261
+ });
262
+ }
263
+ function useTrackBarnsportEvent() {
264
+ const { client, orgId } = useAxCloudContext();
265
+ const api = createBarnsportClient(client, orgId);
266
+ return useMutation({
267
+ mutationFn: (request) => api.trackEvent(request)
268
+ });
269
+ }
270
+
271
+ export { BarnsportClient, createBarnsportClient, createPublicBarnsportClient, useBarnsportActivities, useBarnsportActivity, useBarnsportActivityOffers, useBarnsportMunicipalities, useBarnsportProvider, useBarnsportProviderSearch, useBarnsportSitemap, useBarnsportSport, useBarnsportSports, useSubmitBarnsportFeedback, useSubmitBarnsportInterest, useSubmitBarnsportReview, useTrackBarnsportEvent };
272
+ //# sourceMappingURL=chunk-7IPCZJ5Q.mjs.map
273
+ //# sourceMappingURL=chunk-7IPCZJ5Q.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/barnsportClient.ts","../src/react/hooks/useBarnsport.ts"],"names":[],"mappings":"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","file":"chunk-7IPCZJ5Q.mjs","sourcesContent":["import { AxCloudClient } from './client';\nimport type {\n BarnsportActivitiesFilter,\n BarnsportActivityListItem,\n BarnsportActivityOffersFilter,\n BarnsportActivityResponse,\n BarnsportActivityOffer,\n BarnsportClubRemovalRequest,\n BarnsportClubRemovalResponse,\n BarnsportCollectionResponse,\n BarnsportEventRequest,\n BarnsportEventResponse,\n BarnsportFeedbackRequest,\n BarnsportFeedbackResponse,\n BarnsportInterestSubmissionRequest,\n BarnsportInterestSubmissionResponse,\n BarnsportItemResponse,\n BarnsportListResponse,\n BarnsportMunicipality,\n BarnsportProviderProfile,\n BarnsportProvider,\n BarnsportProviderUpdateRequest,\n BarnsportProviderUpdateResponse,\n BarnsportProvidersFilter,\n BarnsportReviewSubmissionRequest,\n BarnsportReviewSubmissionResponse,\n BarnsportSitemapResponse,\n BarnsportSport,\n} from './barnsport';\n\ntype QueryParams = Record<string, string | number | boolean | undefined>;\n\nexport class BarnsportClient {\n constructor(\n private readonly client: AxCloudClient,\n private readonly orgId: string\n ) {}\n\n private path(path: string): string {\n return `/barnsport/public/${encodeURIComponent(this.orgId)}${path}`;\n }\n\n listMunicipalities(): Promise<BarnsportListResponse<BarnsportMunicipality>> {\n return this.client.get(this.path('/municipalities'));\n }\n\n listSports(): Promise<BarnsportListResponse<BarnsportSport>> {\n return this.client.get(this.path('/sports'));\n }\n\n getSport(slug: string): Promise<{ sport: BarnsportSport }> {\n return this.client.get(this.path(`/sports/${encodeURIComponent(slug)}`));\n }\n\n listActivities(\n filters: BarnsportActivitiesFilter = {}\n ): Promise<BarnsportListResponse<BarnsportActivityListItem>> {\n return this.client.get(this.path('/activities'), { ...filters } as QueryParams);\n }\n\n getActivity(slug: string): Promise<BarnsportActivityResponse> {\n return this.client.get(this.path(`/activities/${encodeURIComponent(slug)}`));\n }\n\n getSitemap(baseUrl?: string): Promise<BarnsportSitemapResponse> {\n return this.client.get(this.path('/sitemap'), { baseUrl });\n }\n\n listProviders(\n filters: BarnsportProvidersFilter = {}\n ): Promise<BarnsportCollectionResponse<BarnsportProvider, BarnsportProvidersFilter>> {\n return this.client.get(this.path('/providers'), { ...filters } as QueryParams);\n }\n\n getProvider(slug: string): Promise<BarnsportItemResponse<BarnsportProviderProfile>> {\n return this.client.get(this.path(`/providers/by-slug/${encodeURIComponent(slug)}`));\n }\n\n listActivityOffers(\n filters: BarnsportActivityOffersFilter = {}\n ): Promise<BarnsportCollectionResponse<BarnsportActivityOffer, BarnsportActivityOffersFilter>> {\n return this.client.get(this.path('/activity-offers'), { ...filters } as QueryParams);\n }\n\n submitInterest(\n request: BarnsportInterestSubmissionRequest\n ): Promise<BarnsportInterestSubmissionResponse> {\n return this.client.post(this.path('/interest'), request);\n }\n\n submitFeedback(request: BarnsportFeedbackRequest): Promise<BarnsportFeedbackResponse> {\n return this.client.post(this.path('/feedback'), request);\n }\n\n submitReview(\n request: BarnsportReviewSubmissionRequest\n ): Promise<BarnsportReviewSubmissionResponse> {\n return this.client.post(this.path('/reviews'), request);\n }\n\n trackEvent(request: BarnsportEventRequest): Promise<BarnsportEventResponse> {\n return this.client.post(this.path('/events'), request);\n }\n\n submitClubRemovalRequest(\n clubSlug: string,\n request: BarnsportClubRemovalRequest\n ): Promise<BarnsportClubRemovalResponse> {\n return this.client.post(\n this.path(`/clubs/${encodeURIComponent(clubSlug)}/removal-request`),\n request\n );\n }\n\n submitProviderUpdateRequest(\n providerSlug: string,\n request: BarnsportProviderUpdateRequest\n ): Promise<BarnsportProviderUpdateResponse> {\n return this.client.post(this.path('/update-requests'), { ...request, providerSlug });\n }\n}\n\nexport function createBarnsportClient(client: AxCloudClient, orgId: string): BarnsportClient {\n return new BarnsportClient(client, orgId);\n}\n\nexport interface PublicBarnsportClientConfig {\n apiUrl: string;\n apiKey: string;\n orgId: string;\n timeout?: number;\n}\n\n/** Create a browser-safe Barnsport client without importing the authenticated SDK entrypoint. */\nexport function createPublicBarnsportClient({\n apiUrl,\n apiKey,\n orgId,\n timeout,\n}: PublicBarnsportClientConfig): BarnsportClient {\n return createBarnsportClient(new AxCloudClient({ baseUrl: apiUrl, apiKey, timeout }), orgId);\n}\n","import { useMutation, useQuery } from '@tanstack/react-query';\nimport { useAxCloudContext } from '../context';\nimport type {\n BarnsportActivitiesFilter,\n BarnsportActivityListItem,\n BarnsportActivityResponse,\n BarnsportClubRemovalRequest,\n BarnsportClubRemovalResponse,\n BarnsportInterestSubmissionRequest,\n BarnsportInterestSubmissionResponse,\n BarnsportListResponse,\n BarnsportMunicipality,\n BarnsportSitemapResponse,\n BarnsportSport,\n BarnsportActivityOffersFilter,\n BarnsportActivityOffer,\n BarnsportCollectionResponse,\n BarnsportEventRequest,\n BarnsportEventResponse,\n BarnsportFeedbackRequest,\n BarnsportFeedbackResponse,\n BarnsportProvider,\n BarnsportProviderProfile,\n BarnsportProvidersFilter,\n BarnsportReviewSubmissionRequest,\n BarnsportReviewSubmissionResponse,\n} from '../../core/barnsport';\nimport { createBarnsportClient } from '../../core/barnsportClient';\n\nfunction barnsportQueryRoot(context: ReturnType<typeof useAxCloudContext>) {\n return ['axcloud', 'barnsport', context.stage, context.config.apiUrl, context.orgId] as const;\n}\n\nexport function useBarnsportMunicipalities() {\n const { client, orgId } = useAxCloudContext();\n\n const query = useQuery<BarnsportListResponse<BarnsportMunicipality>>({\n queryKey: ['axcloud', 'barnsport', 'municipalities', orgId],\n queryFn: () =>\n client.get<BarnsportListResponse<BarnsportMunicipality>>(\n `/barnsport/public/${orgId}/municipalities`\n ),\n staleTime: 1000 * 60 * 30,\n });\n\n return {\n municipalities: query.data?.items ?? [],\n count: query.data?.count ?? 0,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useBarnsportSports() {\n const { client, orgId } = useAxCloudContext();\n\n const query = useQuery<BarnsportListResponse<BarnsportSport>>({\n queryKey: ['axcloud', 'barnsport', 'sports', orgId],\n queryFn: () =>\n client.get<BarnsportListResponse<BarnsportSport>>(`/barnsport/public/${orgId}/sports`),\n staleTime: 1000 * 60 * 30,\n });\n\n return {\n sports: query.data?.items ?? [],\n count: query.data?.count ?? 0,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useBarnsportSport(slug: string | undefined) {\n const { client, orgId } = useAxCloudContext();\n\n const query = useQuery<{ sport: BarnsportSport }>({\n queryKey: ['axcloud', 'barnsport', 'sport', orgId, slug],\n queryFn: () =>\n client.get<{ sport: BarnsportSport }>(`/barnsport/public/${orgId}/sports/${slug || ''}`),\n enabled: Boolean(slug),\n staleTime: 1000 * 60 * 15,\n });\n\n return {\n sport: query.data?.sport ?? null,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useBarnsportActivities(filters: BarnsportActivitiesFilter = {}) {\n const { client, orgId } = useAxCloudContext();\n const params: Record<string, string | number | boolean | undefined> = { ...filters };\n\n const query = useQuery<BarnsportListResponse<BarnsportActivityListItem>>({\n queryKey: ['axcloud', 'barnsport', 'activities', orgId, filters],\n queryFn: () =>\n client.get<BarnsportListResponse<BarnsportActivityListItem>>(\n `/barnsport/public/${orgId}/activities`,\n params\n ),\n staleTime: 1000 * 60 * 5,\n });\n\n return {\n activities: query.data?.items ?? [],\n count: query.data?.count ?? 0,\n nextCursor: query.data?.nextCursor ?? null,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useBarnsportActivity(slug: string | undefined) {\n const { client, orgId } = useAxCloudContext();\n\n const query = useQuery<BarnsportActivityResponse>({\n queryKey: ['axcloud', 'barnsport', 'activity', orgId, slug],\n queryFn: () =>\n client.get<BarnsportActivityResponse>(`/barnsport/public/${orgId}/activities/${slug || ''}`),\n enabled: Boolean(slug),\n staleTime: 1000 * 60 * 5,\n });\n\n return {\n activity: query.data?.activity ?? null,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useBarnsportSitemap(baseUrl?: string) {\n const { client, orgId } = useAxCloudContext();\n\n const query = useQuery<BarnsportSitemapResponse>({\n queryKey: ['axcloud', 'barnsport', 'sitemap', orgId, baseUrl],\n queryFn: () =>\n client.get<BarnsportSitemapResponse>(`/barnsport/public/${orgId}/sitemap`, {\n baseUrl,\n }),\n staleTime: 1000 * 60 * 15,\n });\n\n return {\n sitemap: query.data ?? null,\n urls: query.data?.urls ?? [],\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useSubmitBarnsportInterest() {\n const { client, orgId } = useAxCloudContext();\n\n return useMutation<\n BarnsportInterestSubmissionResponse,\n Error,\n BarnsportInterestSubmissionRequest\n >({\n mutationFn: (submission) =>\n client.post<BarnsportInterestSubmissionResponse>(\n `/barnsport/public/${orgId}/interest`,\n submission\n ),\n });\n}\n\nexport function useSubmitBarnsportClubRemovalRequest(clubSlug: string | undefined) {\n const { client, orgId } = useAxCloudContext();\n\n return useMutation<BarnsportClubRemovalResponse, Error, BarnsportClubRemovalRequest>({\n mutationFn: (request) =>\n client.post<BarnsportClubRemovalResponse>(\n `/barnsport/public/${orgId}/clubs/${clubSlug || ''}/removal-request`,\n request\n ),\n });\n}\n\nexport function useBarnsportProviderSearch(filters: BarnsportProvidersFilter) {\n const context = useAxCloudContext();\n const api = createBarnsportClient(context.client, context.orgId);\n const normalizedFilters = { ...filters, q: filters.q?.trim() };\n const query = useQuery<BarnsportCollectionResponse<BarnsportProvider, BarnsportProvidersFilter>>({\n queryKey: [...barnsportQueryRoot(context), 'providers', normalizedFilters],\n queryFn: () => api.listProviders(normalizedFilters),\n enabled: (normalizedFilters.q?.length ?? 0) >= 2,\n staleTime: 1000 * 60,\n });\n\n return {\n providers: query.data?.items ?? [],\n count: query.data?.count ?? query.data?.items.length ?? 0,\n nextCursor: query.data?.nextCursor ?? null,\n hasMore: query.data?.hasMore ?? false,\n isLoading: query.isLoading,\n isFetching: query.isFetching,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useBarnsportProvider(slug: string | undefined) {\n const context = useAxCloudContext();\n const api = createBarnsportClient(context.client, context.orgId);\n const query = useQuery<{ item: BarnsportProviderProfile }>({\n queryKey: [...barnsportQueryRoot(context), 'provider', slug],\n queryFn: () => api.getProvider(slug || ''),\n enabled: Boolean(slug),\n staleTime: 1000 * 60 * 5,\n });\n\n return {\n provider: query.data?.item ?? null,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useBarnsportActivityOffers(filters: BarnsportActivityOffersFilter = {}) {\n const context = useAxCloudContext();\n const api = createBarnsportClient(context.client, context.orgId);\n const query = useQuery<\n BarnsportCollectionResponse<BarnsportActivityOffer, BarnsportActivityOffersFilter>\n >({\n queryKey: [...barnsportQueryRoot(context), 'activity-offers', filters],\n queryFn: () => api.listActivityOffers(filters),\n staleTime: 1000 * 60 * 5,\n });\n\n return {\n activityOffers: query.data?.items ?? [],\n count: query.data?.count ?? query.data?.items.length ?? 0,\n nextCursor: query.data?.nextCursor ?? null,\n hasMore: query.data?.hasMore ?? false,\n isLoading: query.isLoading,\n isFetching: query.isFetching,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\nexport function useSubmitBarnsportFeedback() {\n const { client, orgId } = useAxCloudContext();\n const api = createBarnsportClient(client, orgId);\n return useMutation<BarnsportFeedbackResponse, Error, BarnsportFeedbackRequest>({\n mutationFn: (request) => api.submitFeedback(request),\n });\n}\n\nexport function useSubmitBarnsportReview() {\n const { client, orgId } = useAxCloudContext();\n const api = createBarnsportClient(client, orgId);\n return useMutation<BarnsportReviewSubmissionResponse, Error, BarnsportReviewSubmissionRequest>({\n mutationFn: (request) => api.submitReview(request),\n });\n}\n\nexport function useTrackBarnsportEvent() {\n const { client, orgId } = useAxCloudContext();\n const api = createBarnsportClient(client, orgId);\n return useMutation<BarnsportEventResponse, Error, BarnsportEventRequest>({\n mutationFn: (request) => api.trackEvent(request),\n });\n}\n"]}
@@ -0,0 +1,231 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ // src/core/errors.ts
6
+ var AxCloudError = class _AxCloudError extends Error {
7
+ constructor(message, code, status, details) {
8
+ super(message);
9
+ this.name = "AxCloudError";
10
+ this.code = code;
11
+ this.status = status;
12
+ this.details = details;
13
+ const ErrorWithCapture = Error;
14
+ if (ErrorWithCapture.captureStackTrace) {
15
+ ErrorWithCapture.captureStackTrace(this, _AxCloudError);
16
+ }
17
+ }
18
+ static fromResponse(status, body) {
19
+ const details = typeof body === "object" ? body : void 0;
20
+ const message = (typeof details?.message === "string" ? details.message : void 0) || (typeof details?.error === "string" ? details.error : void 0);
21
+ switch (status) {
22
+ case 401:
23
+ return new _AxCloudError(
24
+ message || "Authentication required",
25
+ "UNAUTHORIZED",
26
+ status,
27
+ details
28
+ );
29
+ case 403:
30
+ return new _AxCloudError(message || "Access denied", "FORBIDDEN", status, details);
31
+ case 404:
32
+ return new _AxCloudError(message || "Resource not found", "NOT_FOUND", status, details);
33
+ case 422:
34
+ return new _AxCloudError(
35
+ message || "Validation failed",
36
+ "VALIDATION_ERROR",
37
+ status,
38
+ details
39
+ );
40
+ default:
41
+ if (status >= 500) {
42
+ return new _AxCloudError(message || "Server error", "SERVER_ERROR", status, details);
43
+ }
44
+ return new _AxCloudError(message || "An error occurred", "UNKNOWN_ERROR", status, details);
45
+ }
46
+ }
47
+ static networkError(originalError) {
48
+ const isDev = typeof process !== "undefined" && process.env?.NODE_ENV === "development";
49
+ const message = isDev && originalError?.message ? originalError.message : "Network request failed";
50
+ return new _AxCloudError(
51
+ message,
52
+ "NETWORK_ERROR",
53
+ 0,
54
+ isDev ? { originalError: originalError?.message } : void 0
55
+ );
56
+ }
57
+ static timeoutError(timeoutMs) {
58
+ return new _AxCloudError(`Request timed out after ${timeoutMs}ms`, "TIMEOUT_ERROR", 0, {
59
+ timeout: timeoutMs
60
+ });
61
+ }
62
+ };
63
+ function isAxCloudError(error) {
64
+ return error instanceof AxCloudError;
65
+ }
66
+
67
+ // src/core/client.ts
68
+ var AxCloudClient = class {
69
+ constructor(config) {
70
+ this.baseUrl = config.baseUrl.replace(/\/$/, "");
71
+ this.getAccessToken = config.getAccessToken;
72
+ this.apiKey = config.apiKey;
73
+ this.defaultTimeout = config.timeout ?? 3e4;
74
+ }
75
+ /**
76
+ * Update the access token getter (used when auth state changes)
77
+ */
78
+ setAccessTokenGetter(getter) {
79
+ this.getAccessToken = getter;
80
+ }
81
+ /**
82
+ * Build URL with query parameters
83
+ */
84
+ buildUrl(path, params) {
85
+ const url = new URL(`${this.baseUrl}${path}`);
86
+ if (params) {
87
+ Object.entries(params).forEach(([key, value]) => {
88
+ if (value !== void 0) {
89
+ url.searchParams.append(key, String(value));
90
+ }
91
+ });
92
+ }
93
+ return url.toString();
94
+ }
95
+ /**
96
+ * API key should only be sent to public endpoints.
97
+ * This avoids leaking public keys to authenticated/internal routes.
98
+ */
99
+ shouldAttachApiKey(path) {
100
+ const normalized = path.startsWith("/") ? path : `/${path}`;
101
+ return normalized.startsWith("/public/") || normalized.startsWith("/api/public/") || normalized.startsWith("/content/public/") || normalized.startsWith("/media/public/") || normalized.startsWith("/documents/public/") || normalized.startsWith("/barnsport/public/") || normalized.startsWith("/api/barnsport/public/");
102
+ }
103
+ /**
104
+ * Make an authenticated request
105
+ */
106
+ async request(path, options = {}) {
107
+ const { body, params, headers: customHeaders, timeout, ...restOptions } = options;
108
+ const headers = {
109
+ "Content-Type": "application/json"
110
+ };
111
+ if (customHeaders) {
112
+ const customHeadersRecord = customHeaders;
113
+ Object.assign(headers, customHeadersRecord);
114
+ }
115
+ if (this.apiKey && this.shouldAttachApiKey(path)) {
116
+ headers["x-api-key"] = this.apiKey;
117
+ }
118
+ if (this.getAccessToken) {
119
+ try {
120
+ const token = await this.getAccessToken();
121
+ if (token) {
122
+ headers["Authorization"] = `Bearer ${token}`;
123
+ }
124
+ } catch (error) {
125
+ if (typeof process !== "undefined" && process.env?.NODE_ENV === "development") {
126
+ console.warn(
127
+ "[AxCloud SDK] Failed to fetch access token:",
128
+ error instanceof Error ? error.message : error
129
+ );
130
+ }
131
+ }
132
+ }
133
+ const url = this.buildUrl(path, params);
134
+ const controller = new AbortController();
135
+ const requestTimeout = timeout ?? this.defaultTimeout;
136
+ const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
137
+ try {
138
+ const response = await fetch(url, {
139
+ ...restOptions,
140
+ headers,
141
+ body: body ? JSON.stringify(body) : void 0,
142
+ signal: controller.signal
143
+ });
144
+ const contentType = response.headers.get("content-type");
145
+ const isJson = contentType?.includes("application/json");
146
+ if (!response.ok) {
147
+ const errorBody = isJson ? await response.json().catch(() => null) : null;
148
+ throw AxCloudError.fromResponse(response.status, errorBody);
149
+ }
150
+ if (response.status === 204) {
151
+ return {};
152
+ }
153
+ return isJson ? await response.json() : {};
154
+ } catch (error) {
155
+ if (error instanceof AxCloudError) {
156
+ throw error;
157
+ }
158
+ if (error instanceof Error && error.name === "AbortError") {
159
+ throw AxCloudError.timeoutError(requestTimeout);
160
+ }
161
+ throw AxCloudError.networkError(error instanceof Error ? error : void 0);
162
+ } finally {
163
+ clearTimeout(timeoutId);
164
+ }
165
+ }
166
+ /**
167
+ * GET request
168
+ */
169
+ get(path, params) {
170
+ return this.request(path, { method: "GET", params });
171
+ }
172
+ /**
173
+ * POST request
174
+ */
175
+ post(path, body) {
176
+ return this.request(path, { method: "POST", body });
177
+ }
178
+ /**
179
+ * PUT request
180
+ */
181
+ put(path, body) {
182
+ return this.request(path, { method: "PUT", body });
183
+ }
184
+ /**
185
+ * PATCH request
186
+ */
187
+ patch(path, body) {
188
+ return this.request(path, { method: "PATCH", body });
189
+ }
190
+ /**
191
+ * DELETE request
192
+ */
193
+ delete(path) {
194
+ return this.request(path, { method: "DELETE" });
195
+ }
196
+ };
197
+ var clientRegistry = /* @__PURE__ */ new WeakMap();
198
+ function createClient(config, key) {
199
+ const client = new AxCloudClient(config);
200
+ if (key) {
201
+ clientRegistry.set(key, client);
202
+ }
203
+ return client;
204
+ }
205
+ function getClient(key) {
206
+ if (key) {
207
+ const client = clientRegistry.get(key);
208
+ if (client) {
209
+ return client;
210
+ }
211
+ }
212
+ throw new Error("AxCloud client not found. Make sure AxCloudProvider is mounted and use useAxCloudContext() to get the client.");
213
+ }
214
+ var AxCloudContext = react.createContext(null);
215
+ function useAxCloudContext() {
216
+ const context = react.useContext(AxCloudContext);
217
+ if (!context) {
218
+ throw new Error("useAxCloudContext must be used within a AxCloudProvider");
219
+ }
220
+ return context;
221
+ }
222
+
223
+ exports.AxCloudClient = AxCloudClient;
224
+ exports.AxCloudContext = AxCloudContext;
225
+ exports.AxCloudError = AxCloudError;
226
+ exports.createClient = createClient;
227
+ exports.getClient = getClient;
228
+ exports.isAxCloudError = isAxCloudError;
229
+ exports.useAxCloudContext = useAxCloudContext;
230
+ //# sourceMappingURL=chunk-7K5N3DQ4.js.map
231
+ //# sourceMappingURL=chunk-7K5N3DQ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/errors.ts","../src/core/client.ts","../src/react/context.tsx"],"names":["createContext","useContext"],"mappings":"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","file":"chunk-7K5N3DQ4.js","sourcesContent":["/**\n * AxCloud SDK Error Types\n */\n\nexport type AxCloudErrorCode =\n | 'UNAUTHORIZED'\n | 'FORBIDDEN'\n | 'NOT_FOUND'\n | 'VALIDATION_ERROR'\n | 'NETWORK_ERROR'\n | 'TIMEOUT_ERROR'\n | 'SERVER_ERROR'\n | 'UNKNOWN_ERROR';\n\nexport class AxCloudError extends Error {\n readonly code: AxCloudErrorCode;\n readonly status: number;\n readonly details?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: AxCloudErrorCode,\n status: number,\n details?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'AxCloudError';\n this.code = code;\n this.status = status;\n this.details = details;\n\n // Maintains proper stack trace for where error was thrown (V8 only)\n const ErrorWithCapture = Error as typeof Error & {\n captureStackTrace?: (target: object, constructor?: typeof AxCloudError) => void;\n };\n if (ErrorWithCapture.captureStackTrace) {\n ErrorWithCapture.captureStackTrace(this, AxCloudError);\n }\n }\n\n static fromResponse(status: number, body?: unknown): AxCloudError {\n const details = typeof body === 'object' ? (body as Record<string, unknown>) : undefined;\n const message =\n (typeof details?.message === 'string' ? details.message : undefined) ||\n (typeof details?.error === 'string' ? details.error : undefined);\n\n switch (status) {\n case 401:\n return new AxCloudError(\n message || 'Authentication required',\n 'UNAUTHORIZED',\n status,\n details\n );\n case 403:\n return new AxCloudError(message || 'Access denied', 'FORBIDDEN', status, details);\n case 404:\n return new AxCloudError(message || 'Resource not found', 'NOT_FOUND', status, details);\n case 422:\n return new AxCloudError(\n message || 'Validation failed',\n 'VALIDATION_ERROR',\n status,\n details\n );\n default:\n if (status >= 500) {\n return new AxCloudError(message || 'Server error', 'SERVER_ERROR', status, details);\n }\n return new AxCloudError(message || 'An error occurred', 'UNKNOWN_ERROR', status, details);\n }\n }\n\n static networkError(originalError?: Error): AxCloudError {\n // Don't include original error details in production to avoid leaking sensitive info\n // Use typeof check to avoid issues in environments where process is not defined\n const isDev = typeof process !== 'undefined' && process.env?.NODE_ENV === 'development';\n const message =\n isDev && originalError?.message ? originalError.message : 'Network request failed';\n\n return new AxCloudError(\n message,\n 'NETWORK_ERROR',\n 0,\n isDev ? { originalError: originalError?.message } : undefined\n );\n }\n\n static timeoutError(timeoutMs: number): AxCloudError {\n return new AxCloudError(`Request timed out after ${timeoutMs}ms`, 'TIMEOUT_ERROR', 0, {\n timeout: timeoutMs,\n });\n }\n}\n\nexport function isAxCloudError(error: unknown): error is AxCloudError {\n return error instanceof AxCloudError;\n}\n","/**\n * AxCloud API Client\n *\n * Fetch wrapper with authentication header injection and error handling.\n */\n\nimport { AxCloudError } from './errors'\n\nexport interface ClientConfig {\n baseUrl: string\n getAccessToken?: () => Promise<string | undefined>\n /** API key for public content endpoints */\n apiKey?: string\n /** Default request timeout in milliseconds (default: 30000) */\n timeout?: number\n}\n\nexport interface RequestOptions extends Omit<RequestInit, 'body'> {\n body?: unknown\n params?: Record<string, string | number | boolean | undefined>\n /** Request timeout in milliseconds (overrides client default) */\n timeout?: number\n}\n\nexport class AxCloudClient {\n private baseUrl: string\n private getAccessToken?: () => Promise<string | undefined>\n private apiKey?: string\n private defaultTimeout: number\n\n constructor(config: ClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '')\n this.getAccessToken = config.getAccessToken\n this.apiKey = config.apiKey\n this.defaultTimeout = config.timeout ?? 30000\n }\n\n /**\n * Update the access token getter (used when auth state changes)\n */\n setAccessTokenGetter(getter: () => Promise<string | undefined>) {\n this.getAccessToken = getter\n }\n\n /**\n * Build URL with query parameters\n */\n private buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(`${this.baseUrl}${path}`)\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.append(key, String(value))\n }\n })\n }\n\n return url.toString()\n }\n\n /**\n * API key should only be sent to public endpoints.\n * This avoids leaking public keys to authenticated/internal routes.\n */\n private shouldAttachApiKey(path: string): boolean {\n const normalized = path.startsWith('/') ? path : `/${path}`\n return (\n normalized.startsWith('/public/') ||\n normalized.startsWith('/api/public/') ||\n normalized.startsWith('/content/public/') ||\n normalized.startsWith('/media/public/') ||\n normalized.startsWith('/documents/public/') ||\n normalized.startsWith('/barnsport/public/') ||\n normalized.startsWith('/api/barnsport/public/')\n )\n }\n\n /**\n * Make an authenticated request\n */\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { body, params, headers: customHeaders, timeout, ...restOptions } = options\n\n // Initialize headers as Record<string, string> to avoid type casting\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n // Merge custom headers\n if (customHeaders) {\n const customHeadersRecord = customHeaders as Record<string, string>\n Object.assign(headers, customHeadersRecord)\n }\n\n // Add API key header only for public endpoints\n if (this.apiKey && this.shouldAttachApiKey(path)) {\n headers['x-api-key'] = this.apiKey\n }\n\n // Add auth header if we have a token getter\n if (this.getAccessToken) {\n try {\n const token = await this.getAccessToken()\n if (token) {\n headers['Authorization'] = `Bearer ${token}`\n }\n } catch (error) {\n // Log in development to help with debugging auth issues\n // Use typeof check to avoid issues in environments where process is not defined\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') {\n console.warn(\n '[AxCloud SDK] Failed to fetch access token:',\n error instanceof Error ? error.message : error\n )\n }\n // Don't throw - allow request to continue (backend will return 401 if needed)\n }\n }\n\n const url = this.buildUrl(path, params)\n\n // Setup AbortController for timeout\n const controller = new AbortController()\n const requestTimeout = timeout ?? this.defaultTimeout\n const timeoutId = setTimeout(() => controller.abort(), requestTimeout)\n\n try {\n const response = await fetch(url, {\n ...restOptions,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n })\n\n // Handle non-JSON responses\n const contentType = response.headers.get('content-type')\n const isJson = contentType?.includes('application/json')\n\n if (!response.ok) {\n const errorBody = isJson ? await response.json().catch(() => null) : null\n throw AxCloudError.fromResponse(response.status, errorBody)\n }\n\n // Return empty object for 204 No Content\n if (response.status === 204) {\n return {} as T\n }\n\n return isJson ? await response.json() : ({} as T)\n } catch (error) {\n if (error instanceof AxCloudError) {\n throw error\n }\n // Handle abort/timeout errors\n if (error instanceof Error && error.name === 'AbortError') {\n throw AxCloudError.timeoutError(requestTimeout)\n }\n throw AxCloudError.networkError(error instanceof Error ? error : undefined)\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n /**\n * GET request\n */\n get<T>(path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return this.request<T>(path, { method: 'GET', params })\n }\n\n /**\n * POST request\n */\n post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'POST', body })\n }\n\n /**\n * PUT request\n */\n put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PUT', body })\n }\n\n /**\n * PATCH request\n */\n patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PATCH', body })\n }\n\n /**\n * DELETE request\n */\n delete<T>(path: string): Promise<T> {\n return this.request<T>(path, { method: 'DELETE' })\n }\n}\n\n// Client instance registry - allows multiple providers without SSR issues\n// Uses WeakMap to prevent memory leaks when providers unmount\nconst clientRegistry = new WeakMap<object, AxCloudClient>()\n\n/**\n * Create a client instance associated with a key (typically the provider instance)\n * This allows multiple AxCloudProviders to coexist without conflicts\n */\nexport function createClient(config: ClientConfig, key?: object): AxCloudClient {\n const client = new AxCloudClient(config)\n if (key) {\n clientRegistry.set(key, client)\n }\n return client\n}\n\n/**\n * Get a client instance by key\n * @deprecated Use the client from useAxCloudContext() instead\n */\nexport function getClient(key?: object): AxCloudClient {\n if (key) {\n const client = clientRegistry.get(key)\n if (client) {\n return client\n }\n }\n throw new Error('AxCloud client not found. Make sure AxCloudProvider is mounted and use useAxCloudContext() to get the client.')\n}\n","import { createContext, useContext } from 'react';\nimport type { AxCloudClient } from '../core/client';\nimport type { AxCloudConfig } from '../core/types';\nimport type { AnalyticsRuntime } from '../core/analytics';\n\nexport interface AxCloudContextValue {\n config: AxCloudConfig;\n client: AxCloudClient;\n orgId: string;\n /** API stage (e.g., 'dev', 'prod') */\n stage: string;\n /** Whether using public API mode (API key, no auth) */\n isPublicMode: boolean;\n /** Auth0 has completed its initial session check. */\n isAuthLoading?: boolean;\n /** Whether the current browser session is authenticated. */\n isAuthenticated?: boolean;\n /** Auth0 subject used to isolate member-only query caches. */\n authSubject?: string;\n /** Remove identity-bound AxCloud query data before logout or account changes. */\n clearContentCache?: () => void;\n analytics: AnalyticsRuntime;\n}\n\nexport const AxCloudContext = createContext<AxCloudContextValue | null>(null);\n\nexport function useAxCloudContext(): AxCloudContextValue {\n const context = useContext(AxCloudContext);\n if (!context) {\n throw new Error('useAxCloudContext must be used within a AxCloudProvider');\n }\n return context;\n}\n"]}