@jmruthers/pace-core 0.6.7 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audit-tool/00-dependencies.cjs +215 -9
- package/audit-tool/audits/02-project-structure.cjs +3 -18
- package/audit-tool/audits/03-architecture.cjs +34 -6
- package/audit-tool/audits/06-security-rbac.cjs +10 -0
- package/audit-tool/audits/07-api-tech-stack.cjs +55 -1
- package/audit-tool/index.cjs +23 -19
- package/audit-tool/utils/report-utils.cjs +141 -2
- package/dist/{DataTable-7PMH7XN7.js → DataTable-6RMSCQJ6.js} +5 -5
- package/dist/{PublicPageProvider-DlsCaR5v.d.ts → PublicPageProvider-CIGSujI2.d.ts} +14 -8
- package/dist/{UnifiedAuthProvider-ZT6TIGM7.js → UnifiedAuthProvider-7SNDOWYD.js} +2 -2
- package/dist/{api-Y4MQWOFW.js → api-7P7DI652.js} +1 -1
- package/dist/{chunk-L4XMVJKY.js → chunk-4DDCYDQ3.js} +8 -7
- package/dist/{chunk-ZKAWKYT4.js → chunk-5W2A3DRC.js} +2 -1
- package/dist/{chunk-VBCS3DUA.js → chunk-EF2UGZWY.js} +3 -3
- package/dist/{chunk-JGWDVX64.js → chunk-EURB7QFZ.js} +123 -53
- package/dist/{chunk-BM4CQ5P3.js → chunk-GS5672WG.js} +6 -6
- package/dist/{chunk-ZFYPMX46.js → chunk-LX6U42O3.js} +1 -1
- package/dist/{chunk-5X4QLXRG.js → chunk-MPBLMWVR.js} +5 -3
- package/dist/{chunk-Q7Q7V5NV.js → chunk-NKHKXPI4.js} +7 -7
- package/dist/{chunk-6F3IILHI.js → chunk-S6ZQKDY6.js} +1 -1
- package/dist/{chunk-FTCRZOG2.js → chunk-T5CVK4R3.js} +5 -5
- package/dist/{chunk-GHYHJTYV.js → chunk-Z2FNRKF3.js} +13 -13
- package/dist/components.d.ts +1 -1
- package/dist/components.js +12 -12
- package/dist/eslint-rules/rules/04-code-quality.cjs +66 -10
- package/dist/eslint-rules/rules/06-security-rbac.cjs +8 -3
- package/dist/eslint-rules/rules/07-api-tech-stack.cjs +190 -68
- package/dist/{functions-DHebl8-F.d.ts → functions-lBy5L2ry.d.ts} +1 -1
- package/dist/hooks.js +7 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -15
- package/dist/providers.js +2 -2
- package/dist/rbac/index.d.ts +1 -1
- package/dist/rbac/index.js +6 -6
- package/dist/theming/runtime.d.ts +48 -1
- package/dist/theming/runtime.js +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/utils.js +1 -1
- package/docs/api/modules.md +63 -14
- package/docs/getting-started/dependencies.md +23 -0
- package/docs/implementation-guides/app-layout.md +1 -1
- package/docs/implementation-guides/data-tables.md +1 -1
- package/docs/standards/1-pace-core-compliance-standards.md +38 -1
- package/eslint-config-pace-core.cjs +30 -11
- package/package.json +45 -15
- package/scripts/eslint-audit.cjs +123 -0
- package/scripts/install-eslint-config.cjs +67 -2
- package/scripts/validate-dependencies.cjs +248 -0
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +20 -8
- package/src/__tests__/templates/accessibility.test.template.tsx +1 -0
- package/src/components/AddressField/AddressField.tsx +26 -1
- package/src/components/Alert/Alert.test.tsx +86 -22
- package/src/components/Alert/Alert.tsx +19 -11
- package/src/components/Badge/Badge.tsx +1 -1
- package/src/components/Checkbox/Checkbox.test.tsx +2 -1
- package/src/components/ContextSelector/ContextSelector.tsx +39 -41
- package/src/components/DataTable/DataTable.tsx +1 -19
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +6 -10
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +18 -9
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +3 -2
- package/src/components/DataTable/components/EmptyState.tsx +1 -1
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +1 -1
- package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +3 -3
- package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +33 -29
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -2
- package/src/components/FileUpload/FileUpload.test.tsx +22 -31
- package/src/components/FileUpload/FileUpload.tsx +29 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -12
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +9 -9
- package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +30 -30
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +4 -4
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +7 -1
- package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +8 -5
- package/src/hooks/__tests__/useFileUrl.unit.test.ts +4 -0
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +3 -3
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +45 -8
- package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +22 -2
- package/src/hooks/public/usePublicRouteParams.ts +8 -4
- package/src/hooks/useAddressAutocomplete.test.ts +18 -18
- package/src/hooks/useEventTheme.ts +5 -1
- package/src/hooks/useFileUrl.ts +52 -8
- package/src/hooks/useOrganisationSecurity.test.ts +2 -1
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +1 -1
- package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +15 -6
- package/src/rbac/__tests__/rbac-functions.test.ts +3 -3
- package/src/rbac/api.test.ts +104 -0
- package/src/rbac/engine.ts +1 -1
- package/src/rbac/hooks/useCan.test.ts +2 -2
- package/src/rbac/secureClient.ts +1 -1
- package/src/rbac/types/functions.ts +1 -1
- package/src/theming/__tests__/parseEventColours.test.ts +117 -8
- package/src/theming/parseEventColours.ts +56 -2
- package/src/types/supabase.ts +2 -3
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +9 -9
- package/src/utils/file-reference/__tests__/file-reference.test.ts +4 -0
- package/src/utils/formatting/formatDate.test.ts +3 -2
- package/src/utils/formatting/formatDateTime.test.ts +2 -2
- package/src/utils/google-places/googlePlacesUtils.test.ts +36 -24
- package/src/utils/storage/__tests__/helpers.unit.test.ts +19 -12
- package/src/utils/storage/helpers.test.ts +69 -3
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { AccessDenied } from './chunk-
|
|
2
|
-
import { Input, Dialog, DialogContent, DialogHeader, DialogBody, DialogFooter, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Alert, AlertDescription, Label, SelectLabel, SelectSeparator, DialogTitle, deriveFormKey, useSessionDraft, filterSensitiveFields, isSensitiveField, SelectGroup, AlertTitle, Progress } from './chunk-
|
|
3
|
-
import { Button, useRBAC, useResolvedScope, usePermissions, useEvents, useCan } from './chunk-
|
|
4
|
-
import { useAddressAutocomplete, createFileReferenceService, uploadFileWithReference, usePublicFileDisplay, useFileDisplay, getPublicUrl, getSignedUrl, generateFileUrlsBatch, useEventTheme, usePreventTabReload } from './chunk-
|
|
5
|
-
import { clearPalette } from './chunk-
|
|
1
|
+
import { AccessDenied } from './chunk-S6ZQKDY6.js';
|
|
2
|
+
import { Input, Dialog, DialogContent, DialogHeader, DialogBody, DialogFooter, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Alert, AlertDescription, Label, SelectLabel, SelectSeparator, DialogTitle, deriveFormKey, useSessionDraft, filterSensitiveFields, isSensitiveField, SelectGroup, AlertTitle, Progress } from './chunk-NKHKXPI4.js';
|
|
3
|
+
import { Button, useRBAC, useResolvedScope, usePermissions, useEvents, useCan } from './chunk-GS5672WG.js';
|
|
4
|
+
import { useAddressAutocomplete, createFileReferenceService, uploadFileWithReference, usePublicFileDisplay, useFileDisplay, getPublicUrl, getSignedUrl, generateFileUrlsBatch, useEventTheme, usePreventTabReload } from './chunk-MPBLMWVR.js';
|
|
5
|
+
import { clearPalette } from './chunk-5W2A3DRC.js';
|
|
6
6
|
import { useToast } from './chunk-S7DKJPLT.js';
|
|
7
|
-
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, useIsPublicPage, PublicPageContext, useAppConfig, ErrorBoundary } from './chunk-
|
|
8
|
-
import { useUnifiedAuth, useOrganisations, UnifiedAuthContext, EventServiceContext, useSessionRestoration } from './chunk-
|
|
9
|
-
import { EventContextRequiredError, OrganisationContextRequiredError, isSuperAdmin } from './chunk-
|
|
7
|
+
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, useIsPublicPage, PublicPageContext, useAppConfig, ErrorBoundary } from './chunk-EF2UGZWY.js';
|
|
8
|
+
import { useUnifiedAuth, useOrganisations, UnifiedAuthContext, EventServiceContext, useSessionRestoration } from './chunk-T5CVK4R3.js';
|
|
9
|
+
import { EventContextRequiredError, OrganisationContextRequiredError, isSuperAdmin } from './chunk-LX6U42O3.js';
|
|
10
10
|
import { assertAppId } from './chunk-4SXLQIZO.js';
|
|
11
11
|
import { getAppId } from './chunk-FEJLJNWA.js';
|
|
12
12
|
import { LoadingSpinner } from './chunk-A3W6LW53.js';
|
|
@@ -16,7 +16,7 @@ import { createLogger, logger } from './chunk-TTRFSOKR.js';
|
|
|
16
16
|
import * as React6 from 'react';
|
|
17
17
|
import React6__default, { useState, useRef, useMemo, useCallback, useEffect, useContext } from 'react';
|
|
18
18
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
19
|
-
import { FileText, ExternalLink, X, ChevronDown, KeyRound, LogOut,
|
|
19
|
+
import { FileText, ExternalLink, X, ChevronDown, KeyRound, LogOut, Calendar as Calendar$1, Building2, AlertCircle, RefreshCw, File, Check } from 'lucide-react';
|
|
20
20
|
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
21
21
|
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
22
22
|
import { useDayPicker, DayPicker } from 'react-day-picker';
|
|
@@ -53,6 +53,7 @@ var AddressField = React6.forwardRef(
|
|
|
53
53
|
const inputRef = React6.useRef(null);
|
|
54
54
|
const suggestionsRef = React6.useRef(null);
|
|
55
55
|
const containerRef = React6.useRef(null);
|
|
56
|
+
const blurTimeoutRef = React6.useRef(null);
|
|
56
57
|
const value = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
57
58
|
const { suggestions, isLoading, error: autocompleteError, selectAddress, clearSuggestions } = useAddressAutocomplete(apiKey, value, {
|
|
58
59
|
autocompleteOptions,
|
|
@@ -145,16 +146,33 @@ var AddressField = React6.forwardRef(
|
|
|
145
146
|
}, [suggestions, value]);
|
|
146
147
|
const handleBlur = React6.useCallback(
|
|
147
148
|
(e) => {
|
|
148
|
-
|
|
149
|
+
if (blurTimeoutRef.current) {
|
|
150
|
+
clearTimeout(blurTimeoutRef.current);
|
|
151
|
+
blurTimeoutRef.current = null;
|
|
152
|
+
}
|
|
153
|
+
blurTimeoutRef.current = setTimeout(() => {
|
|
154
|
+
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
155
|
+
blurTimeoutRef.current = null;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
149
158
|
if (!containerRef.current?.contains(document.activeElement)) {
|
|
150
159
|
setInputFocused(false);
|
|
151
160
|
setIsOpen(false);
|
|
152
161
|
setSelectedIndex(-1);
|
|
153
162
|
}
|
|
163
|
+
blurTimeoutRef.current = null;
|
|
154
164
|
}, 200);
|
|
155
165
|
},
|
|
156
166
|
[]
|
|
157
167
|
);
|
|
168
|
+
React6.useEffect(() => {
|
|
169
|
+
return () => {
|
|
170
|
+
if (blurTimeoutRef.current) {
|
|
171
|
+
clearTimeout(blurTimeoutRef.current);
|
|
172
|
+
blurTimeoutRef.current = null;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}, []);
|
|
158
176
|
React6.useEffect(() => {
|
|
159
177
|
const handleClickOutside = (event) => {
|
|
160
178
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
@@ -282,20 +300,28 @@ function useFileUrl(fileReference, options) {
|
|
|
282
300
|
const [isLoading, setIsLoading] = useState(false);
|
|
283
301
|
const [error, setError] = useState(null);
|
|
284
302
|
const fileReferenceIdRef = useRef(null);
|
|
303
|
+
const isLoadingRef = useRef(false);
|
|
304
|
+
const urlRef = useRef(null);
|
|
305
|
+
useEffect(() => {
|
|
306
|
+
isLoadingRef.current = isLoading;
|
|
307
|
+
urlRef.current = url;
|
|
308
|
+
}, [isLoading, url]);
|
|
285
309
|
const loadUrl = useCallback(async () => {
|
|
286
310
|
if (!fileReference) {
|
|
287
311
|
setUrl(null);
|
|
288
312
|
setIsLoading(false);
|
|
289
313
|
setError(null);
|
|
314
|
+
fileReferenceIdRef.current = null;
|
|
290
315
|
return;
|
|
291
316
|
}
|
|
292
317
|
if (!supabase) {
|
|
293
318
|
setUrl(null);
|
|
294
319
|
setIsLoading(false);
|
|
295
320
|
setError(new Error("Supabase client is required for URL generation"));
|
|
321
|
+
fileReferenceIdRef.current = null;
|
|
296
322
|
return;
|
|
297
323
|
}
|
|
298
|
-
if (
|
|
324
|
+
if (isLoadingRef.current || urlRef.current && fileReferenceIdRef.current === fileReference.id) {
|
|
299
325
|
return;
|
|
300
326
|
}
|
|
301
327
|
setIsLoading(true);
|
|
@@ -323,24 +349,49 @@ function useFileUrl(fileReference, options) {
|
|
|
323
349
|
} finally {
|
|
324
350
|
setIsLoading(false);
|
|
325
351
|
}
|
|
326
|
-
}, [fileReference, supabase, organisation_id
|
|
352
|
+
}, [fileReference, supabase, organisation_id]);
|
|
327
353
|
const clear = useCallback(() => {
|
|
328
354
|
setUrl(null);
|
|
329
355
|
setError(null);
|
|
330
356
|
setIsLoading(false);
|
|
331
357
|
fileReferenceIdRef.current = null;
|
|
358
|
+
urlRef.current = null;
|
|
332
359
|
}, []);
|
|
333
360
|
useEffect(() => {
|
|
334
|
-
if (autoLoad) {
|
|
335
|
-
|
|
361
|
+
if (!autoLoad) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const currentFileId = fileReference?.id ?? null;
|
|
365
|
+
const previousFileId = fileReferenceIdRef.current;
|
|
366
|
+
if (!fileReference) {
|
|
367
|
+
if (previousFileId !== null) {
|
|
336
368
|
setUrl(null);
|
|
337
369
|
setError(null);
|
|
370
|
+
fileReferenceIdRef.current = null;
|
|
371
|
+
urlRef.current = null;
|
|
338
372
|
}
|
|
339
|
-
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
if (previousFileId !== null && previousFileId !== currentFileId) {
|
|
376
|
+
setUrl(null);
|
|
377
|
+
setError(null);
|
|
378
|
+
fileReferenceIdRef.current = null;
|
|
379
|
+
urlRef.current = null;
|
|
380
|
+
loadUrl();
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
if (previousFileId === null && currentFileId !== null) {
|
|
384
|
+
fileReferenceIdRef.current = currentFileId;
|
|
385
|
+
if (!isLoading && !url) {
|
|
340
386
|
loadUrl();
|
|
341
387
|
}
|
|
388
|
+
} else if (previousFileId === currentFileId && !url && !isLoading) {
|
|
389
|
+
if (fileReferenceIdRef.current !== currentFileId) {
|
|
390
|
+
fileReferenceIdRef.current = currentFileId;
|
|
391
|
+
}
|
|
392
|
+
loadUrl();
|
|
342
393
|
}
|
|
343
|
-
}, [fileReference
|
|
394
|
+
}, [fileReference, autoLoad, loadUrl, url, isLoading]);
|
|
344
395
|
return {
|
|
345
396
|
url,
|
|
346
397
|
isLoading,
|
|
@@ -2604,7 +2655,6 @@ function ContextSelector({
|
|
|
2604
2655
|
error: eventError,
|
|
2605
2656
|
refreshEvents
|
|
2606
2657
|
} = useEvents();
|
|
2607
|
-
const { isSuperAdmin: isSuperAdmin2 } = useRBAC();
|
|
2608
2658
|
const isLoading = showOrganisations && orgLoading || showEvents && eventLoading;
|
|
2609
2659
|
const hasError = showOrganisations && orgError || showEvents && eventError;
|
|
2610
2660
|
const hasItems = showOrganisations && (organisations?.length || 0) > 0 || showEvents && (events?.length || 0) > 0;
|
|
@@ -2617,6 +2667,36 @@ function ContextSelector({
|
|
|
2617
2667
|
}
|
|
2618
2668
|
return "";
|
|
2619
2669
|
}, [showOrganisations, showEvents, selectedOrganisation?.id, selectedEvent]);
|
|
2670
|
+
const displayValue = useMemo(() => {
|
|
2671
|
+
if (showEvents && selectedEvent) {
|
|
2672
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2673
|
+
/* @__PURE__ */ jsx(Calendar$1, { className: "inline-block size-4 mr-2" }),
|
|
2674
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: selectedEvent.event_name })
|
|
2675
|
+
] });
|
|
2676
|
+
}
|
|
2677
|
+
if (showOrganisations && selectedOrganisation) {
|
|
2678
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2679
|
+
/* @__PURE__ */ jsx(Building2, { className: "inline-block size-4 mr-2" }),
|
|
2680
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: selectedOrganisation.display_name })
|
|
2681
|
+
] });
|
|
2682
|
+
}
|
|
2683
|
+
return null;
|
|
2684
|
+
}, [showOrganisations, showEvents, selectedOrganisation, selectedEvent]);
|
|
2685
|
+
const effectivePlaceholder = useMemo(() => {
|
|
2686
|
+
if (placeholder !== "Select organisation or event") {
|
|
2687
|
+
return placeholder;
|
|
2688
|
+
}
|
|
2689
|
+
if (showOrganisations && showEvents) {
|
|
2690
|
+
return "Select organisation or event";
|
|
2691
|
+
}
|
|
2692
|
+
if (showOrganisations) {
|
|
2693
|
+
return "Select organisation";
|
|
2694
|
+
}
|
|
2695
|
+
if (showEvents) {
|
|
2696
|
+
return "Select event";
|
|
2697
|
+
}
|
|
2698
|
+
return placeholder;
|
|
2699
|
+
}, [placeholder, showOrganisations, showEvents]);
|
|
2620
2700
|
const handleValueChange = (value) => {
|
|
2621
2701
|
if (disabled || isLoading) return;
|
|
2622
2702
|
if (value.startsWith("org:") && showOrganisations) {
|
|
@@ -2704,36 +2784,6 @@ function ContextSelector({
|
|
|
2704
2784
|
}
|
|
2705
2785
|
return null;
|
|
2706
2786
|
}
|
|
2707
|
-
const displayValue = useMemo(() => {
|
|
2708
|
-
if (showEvents && selectedEvent) {
|
|
2709
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2710
|
-
/* @__PURE__ */ jsx(Calendar$1, { className: "inline-block size-4 mr-2" }),
|
|
2711
|
-
/* @__PURE__ */ jsx("span", { className: "truncate", children: selectedEvent.event_name })
|
|
2712
|
-
] });
|
|
2713
|
-
}
|
|
2714
|
-
if (showOrganisations && selectedOrganisation) {
|
|
2715
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2716
|
-
/* @__PURE__ */ jsx(Building2, { className: "inline-block size-4 mr-2" }),
|
|
2717
|
-
/* @__PURE__ */ jsx("span", { className: "truncate", children: selectedOrganisation.display_name })
|
|
2718
|
-
] });
|
|
2719
|
-
}
|
|
2720
|
-
return null;
|
|
2721
|
-
}, [showOrganisations, showEvents, selectedOrganisation, selectedEvent]);
|
|
2722
|
-
const effectivePlaceholder = useMemo(() => {
|
|
2723
|
-
if (placeholder !== "Select organisation or event") {
|
|
2724
|
-
return placeholder;
|
|
2725
|
-
}
|
|
2726
|
-
if (showOrganisations && showEvents) {
|
|
2727
|
-
return "Select organisation or event";
|
|
2728
|
-
}
|
|
2729
|
-
if (showOrganisations) {
|
|
2730
|
-
return "Select organisation";
|
|
2731
|
-
}
|
|
2732
|
-
if (showEvents) {
|
|
2733
|
-
return "Select event";
|
|
2734
|
-
}
|
|
2735
|
-
return placeholder;
|
|
2736
|
-
}, [placeholder, showOrganisations, showEvents]);
|
|
2737
2787
|
return /* @__PURE__ */ jsxs(
|
|
2738
2788
|
Select,
|
|
2739
2789
|
{
|
|
@@ -2994,7 +3044,7 @@ function useNavigationFiltering({
|
|
|
2994
3044
|
}
|
|
2995
3045
|
const userId2 = authContext.user.id;
|
|
2996
3046
|
const appName = authContext.appName;
|
|
2997
|
-
import('./api-
|
|
3047
|
+
import('./api-7P7DI652.js').then(({ resolveAppContext }) => {
|
|
2998
3048
|
resolveAppContext({
|
|
2999
3049
|
userId: userId2,
|
|
3000
3050
|
appName
|
|
@@ -3783,7 +3833,7 @@ function PaceAppLayout({
|
|
|
3783
3833
|
return;
|
|
3784
3834
|
}
|
|
3785
3835
|
try {
|
|
3786
|
-
const { isSuperAdmin: checkSuperAdminDynamic } = await import('./api-
|
|
3836
|
+
const { isSuperAdmin: checkSuperAdminDynamic } = await import('./api-7P7DI652.js');
|
|
3787
3837
|
const isSuper = await checkSuperAdminDynamic(user.id);
|
|
3788
3838
|
if (isSuper) {
|
|
3789
3839
|
if (isMounted) {
|
|
@@ -3797,7 +3847,7 @@ function PaceAppLayout({
|
|
|
3797
3847
|
}
|
|
3798
3848
|
}
|
|
3799
3849
|
try {
|
|
3800
|
-
const { getPermissionMap } = await import('./api-
|
|
3850
|
+
const { getPermissionMap } = await import('./api-7P7DI652.js');
|
|
3801
3851
|
const permissionScope = {
|
|
3802
3852
|
organisationId: currentScope.organisationId,
|
|
3803
3853
|
eventId: currentScope.eventId,
|
|
@@ -3808,7 +3858,7 @@ function PaceAppLayout({
|
|
|
3808
3858
|
userId: user.id,
|
|
3809
3859
|
scope: permissionScope
|
|
3810
3860
|
});
|
|
3811
|
-
const { getPageScopeType } = await import('./api-
|
|
3861
|
+
const { getPageScopeType } = await import('./api-7P7DI652.js');
|
|
3812
3862
|
const effectiveAppId = currentScope.appId || resolvedAppId;
|
|
3813
3863
|
const effectiveAppName = appName;
|
|
3814
3864
|
const hasEventContext = !!currentScope.eventId;
|
|
@@ -3917,7 +3967,7 @@ function PaceAppLayout({
|
|
|
3917
3967
|
let hasAccess = true;
|
|
3918
3968
|
if (currentRoute.pageId && currentRoute.permissions && currentRoute.permissions.length > 0) {
|
|
3919
3969
|
try {
|
|
3920
|
-
const { isPermittedCached } = await import('./api-
|
|
3970
|
+
const { isPermittedCached } = await import('./api-7P7DI652.js');
|
|
3921
3971
|
const hasPagePermission = await isPermittedCached({
|
|
3922
3972
|
userId: user?.id || "",
|
|
3923
3973
|
scope,
|
|
@@ -3933,7 +3983,7 @@ function PaceAppLayout({
|
|
|
3933
3983
|
}
|
|
3934
3984
|
}
|
|
3935
3985
|
if (hasAccess && currentRoute.roles && currentRoute.roles.length > 0 && user?.id) {
|
|
3936
|
-
const { useUnifiedAuth: useUnifiedAuth2 } = await import('./UnifiedAuthProvider-
|
|
3986
|
+
const { useUnifiedAuth: useUnifiedAuth2 } = await import('./UnifiedAuthProvider-7SNDOWYD.js');
|
|
3937
3987
|
hasAccess = true;
|
|
3938
3988
|
}
|
|
3939
3989
|
if (!isMounted) return;
|
|
@@ -4424,7 +4474,16 @@ function FileUpload({
|
|
|
4424
4474
|
const [isResolvingAppId, setIsResolvingAppId] = useState(!app_id);
|
|
4425
4475
|
const [appIdError, setAppIdError] = useState(null);
|
|
4426
4476
|
const fileInputRef = useRef(null);
|
|
4477
|
+
const progressIntervalsRef = useRef(/* @__PURE__ */ new Map());
|
|
4427
4478
|
const { uploadFile, isLoading, error } = useFileReference(supabase);
|
|
4479
|
+
useEffect(() => {
|
|
4480
|
+
return () => {
|
|
4481
|
+
progressIntervalsRef.current.forEach((interval) => {
|
|
4482
|
+
clearInterval(interval);
|
|
4483
|
+
});
|
|
4484
|
+
progressIntervalsRef.current.clear();
|
|
4485
|
+
};
|
|
4486
|
+
}, []);
|
|
4428
4487
|
useEffect(() => {
|
|
4429
4488
|
if (app_id) {
|
|
4430
4489
|
setResolvedAppId(app_id);
|
|
@@ -4579,11 +4638,16 @@ function FileUpload({
|
|
|
4579
4638
|
return updated;
|
|
4580
4639
|
});
|
|
4581
4640
|
}, 200);
|
|
4641
|
+
progressIntervalsRef.current.set(fileId, progressInterval);
|
|
4582
4642
|
if (!resolvedAppId) {
|
|
4643
|
+
clearInterval(progressInterval);
|
|
4644
|
+
progressIntervalsRef.current.delete(fileId);
|
|
4583
4645
|
const errorMsg = appIdError || "App ID not available. Please provide app_id prop or set app name.";
|
|
4584
4646
|
throw new Error(errorMsg);
|
|
4585
4647
|
}
|
|
4586
4648
|
if (!pageContext) {
|
|
4649
|
+
clearInterval(progressInterval);
|
|
4650
|
+
progressIntervalsRef.current.delete(fileId);
|
|
4587
4651
|
const errorMsg = "pageContext is required for file upload. This is used for permission checks.";
|
|
4588
4652
|
throw new Error(errorMsg);
|
|
4589
4653
|
}
|
|
@@ -4601,6 +4665,7 @@ function FileUpload({
|
|
|
4601
4665
|
is_public: isPublic
|
|
4602
4666
|
}, file);
|
|
4603
4667
|
clearInterval(progressInterval);
|
|
4668
|
+
progressIntervalsRef.current.delete(fileId);
|
|
4604
4669
|
if (result) {
|
|
4605
4670
|
setUploadStates((prev) => {
|
|
4606
4671
|
const updated = new Map(prev);
|
|
@@ -4656,6 +4721,11 @@ function FileUpload({
|
|
|
4656
4721
|
onUploadError?.("Upload failed", file);
|
|
4657
4722
|
}
|
|
4658
4723
|
} catch (err) {
|
|
4724
|
+
const interval = progressIntervalsRef.current.get(fileId);
|
|
4725
|
+
if (interval) {
|
|
4726
|
+
clearInterval(interval);
|
|
4727
|
+
progressIntervalsRef.current.delete(fileId);
|
|
4728
|
+
}
|
|
4659
4729
|
const errorMessage = err instanceof Error ? err.message : "Upload failed";
|
|
4660
4730
|
setUploadStates((prev) => {
|
|
4661
4731
|
const updated = new Map(prev);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useAppConfig, useOrganisationSecurity } from './chunk-
|
|
2
|
-
import { useEventService, useUnifiedAuth, useOrganisations } from './chunk-
|
|
3
|
-
import { OrganisationContextRequiredError, getRBACLogger, resolveAppContext, getPageScopeType, ContextValidator, getPermissionMap, getRoleContext, getAccessLevel, isPermittedCached, isPermitted, isSuperAdmin } from './chunk-
|
|
1
|
+
import { useAppConfig, useOrganisationSecurity } from './chunk-EF2UGZWY.js';
|
|
2
|
+
import { useEventService, useUnifiedAuth, useOrganisations } from './chunk-T5CVK4R3.js';
|
|
3
|
+
import { OrganisationContextRequiredError, getRBACLogger, resolveAppContext, getPageScopeType, ContextValidator, getPermissionMap, getRoleContext, getAccessLevel, isPermittedCached, isPermitted, isSuperAdmin } from './chunk-LX6U42O3.js';
|
|
4
4
|
import { getCurrentAppName } from './chunk-OJ4SKRSV.js';
|
|
5
5
|
import { cn } from './chunk-7ILTDCL2.js';
|
|
6
6
|
import { createLogger, logger } from './chunk-TTRFSOKR.js';
|
|
@@ -530,7 +530,7 @@ var _SecureSupabaseClient = class _SecureSupabaseClient {
|
|
|
530
530
|
}
|
|
531
531
|
const rpcContextWhitelist = {
|
|
532
532
|
// RPCs that accept all three context parameters
|
|
533
|
-
"
|
|
533
|
+
"data_rbac_roles_list": /* @__PURE__ */ new Set(["p_organisation_id", "p_event_id", "p_app_id"]),
|
|
534
534
|
// RPCs that accept only p_organisation_id (not p_app_id or p_event_id)
|
|
535
535
|
"data_file_reference_by_category_list": /* @__PURE__ */ new Set(["p_organisation_id"])
|
|
536
536
|
// Add more RPCs here as we discover them
|
|
@@ -881,7 +881,7 @@ function useAccessLevel(userId, scope) {
|
|
|
881
881
|
try {
|
|
882
882
|
setIsLoading(true);
|
|
883
883
|
setError(null);
|
|
884
|
-
const { isSuperAdmin: checkSuperAdmin } = await import('./api-
|
|
884
|
+
const { isSuperAdmin: checkSuperAdmin } = await import('./api-7P7DI652.js');
|
|
885
885
|
const isSuperAdminUser = await checkSuperAdmin(userId);
|
|
886
886
|
if (isSuperAdminUser) {
|
|
887
887
|
setAccessLevel("super");
|
|
@@ -959,7 +959,7 @@ function useCan(userId, scope, permission, pageId, useCache = true, precomputedS
|
|
|
959
959
|
const checkSuperAdmin = async () => {
|
|
960
960
|
const startTime = Date.now();
|
|
961
961
|
try {
|
|
962
|
-
const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-
|
|
962
|
+
const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-7P7DI652.js');
|
|
963
963
|
const timeoutWarning = setTimeout(() => {
|
|
964
964
|
if (!cancelled) {
|
|
965
965
|
console.warn("[useCan] Super admin check taking longer than 5 seconds", {
|
|
@@ -1349,7 +1349,7 @@ var RBACEngine = class {
|
|
|
1349
1349
|
async resolveAppContext(input) {
|
|
1350
1350
|
try {
|
|
1351
1351
|
const { userId, appName } = input;
|
|
1352
|
-
const { data, error } = await this.supabase.rpc("
|
|
1352
|
+
const { data, error } = await this.supabase.rpc("data_app_resolve", {
|
|
1353
1353
|
p_user_id: userId,
|
|
1354
1354
|
p_app_name: appName
|
|
1355
1355
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { clearPalette, parseAndNormalizeEventColours, applyPalette } from './chunk-
|
|
2
|
-
import { EventServiceContext } from './chunk-
|
|
1
|
+
import { clearPalette, parseAndNormalizeEventColours, applyPalette } from './chunk-5W2A3DRC.js';
|
|
2
|
+
import { EventServiceContext } from './chunk-T5CVK4R3.js';
|
|
3
3
|
import { assertAppId } from './chunk-4SXLQIZO.js';
|
|
4
4
|
import { fetchPlaceDetails, createAddressFromPlaceResult, getAddressByPlaceId, fetchPlaceAutocomplete, setOrganisationContext } from './chunk-FYHN4DD5.js';
|
|
5
5
|
import { createLogger, logger } from './chunk-TTRFSOKR.js';
|
|
@@ -1238,7 +1238,7 @@ var FileReferenceServiceImpl = class {
|
|
|
1238
1238
|
const userIdForCheck = authenticatedUserId || options.userId;
|
|
1239
1239
|
if (userIdForCheck) {
|
|
1240
1240
|
try {
|
|
1241
|
-
const { isSuperAdmin } = await import('./api-
|
|
1241
|
+
const { isSuperAdmin } = await import('./api-7P7DI652.js');
|
|
1242
1242
|
isSuperAdminUser = await isSuperAdmin(userIdForCheck);
|
|
1243
1243
|
if (isSuperAdminUser) {
|
|
1244
1244
|
log3.debug("Super admin detected - bypassing permission checks", { userId: userIdForCheck });
|
|
@@ -2087,6 +2087,7 @@ function invalidateFileDisplayCache(table_name, record_id, organisation_id, cate
|
|
|
2087
2087
|
authenticatedFileCache.delete(allCategoryKey);
|
|
2088
2088
|
}
|
|
2089
2089
|
}
|
|
2090
|
+
var log4 = createLogger("useEventTheme");
|
|
2090
2091
|
function useEventTheme(event) {
|
|
2091
2092
|
const location = useLocation();
|
|
2092
2093
|
const eventServiceContext = useContext(EventServiceContext);
|
|
@@ -2111,6 +2112,7 @@ function useEventTheme(event) {
|
|
|
2111
2112
|
try {
|
|
2112
2113
|
applyPalette(normalized);
|
|
2113
2114
|
} catch (error) {
|
|
2115
|
+
log4.error("Failed to apply event palette:", error);
|
|
2114
2116
|
}
|
|
2115
2117
|
return () => {
|
|
2116
2118
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Button, ButtonGroup, useResolvedScope, useCan } from './chunk-
|
|
1
|
+
import { Button, ButtonGroup, useResolvedScope, useCan } from './chunk-GS5672WG.js';
|
|
2
2
|
import { useFocusTrap, useDataTablePerformance, toast } from './chunk-S7DKJPLT.js';
|
|
3
|
-
import { Card, CardHeader, CardDescription, CardContent, CardFooter, CardTitle } from './chunk-
|
|
4
|
-
import { useUnifiedAuth } from './chunk-
|
|
5
|
-
import { isSuperAdmin } from './chunk-
|
|
3
|
+
import { Card, CardHeader, CardDescription, CardContent, CardFooter, CardTitle } from './chunk-EF2UGZWY.js';
|
|
4
|
+
import { useUnifiedAuth } from './chunk-T5CVK4R3.js';
|
|
5
|
+
import { isSuperAdmin } from './chunk-LX6U42O3.js';
|
|
6
6
|
import { renderSafeHtml, LoadingSpinner } from './chunk-A3W6LW53.js';
|
|
7
7
|
import { cn } from './chunk-7ILTDCL2.js';
|
|
8
8
|
import { createLogger } from './chunk-TTRFSOKR.js';
|
|
@@ -1153,17 +1153,17 @@ var getAlertClasses = (variant = "default") => {
|
|
|
1153
1153
|
};
|
|
1154
1154
|
return `${baseClasses} ${variantClasses[variant]}`;
|
|
1155
1155
|
};
|
|
1156
|
-
var Alert = React7.forwardRef(({ className, variant = "default", ...props }, ref) => {
|
|
1156
|
+
var Alert = React7.forwardRef(({ className, variant = "default", role = "alert", ...props }, ref) => {
|
|
1157
1157
|
const contextValue = React7.useMemo(() => ({ variant }), [variant]);
|
|
1158
1158
|
if (variant === "inline") {
|
|
1159
1159
|
return /* @__PURE__ */ jsx(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(React7.Fragment, { ...props }) });
|
|
1160
1160
|
}
|
|
1161
1161
|
return /* @__PURE__ */ jsx(AlertContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
1162
|
-
"
|
|
1162
|
+
"p",
|
|
1163
1163
|
{
|
|
1164
1164
|
ref,
|
|
1165
1165
|
className: cn(getAlertClasses(variant), className),
|
|
1166
|
-
role
|
|
1166
|
+
role,
|
|
1167
1167
|
...props
|
|
1168
1168
|
}
|
|
1169
1169
|
) });
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isRBACInitialized, setupRBAC } from './chunk-
|
|
1
|
+
import { isRBACInitialized, setupRBAC } from './chunk-LX6U42O3.js';
|
|
2
2
|
import { assertOrganisationId, assertUserId } from './chunk-4SXLQIZO.js';
|
|
3
3
|
import { secureStorage } from './chunk-HF6O3O37.js';
|
|
4
4
|
import { createLogger, logger } from './chunk-TTRFSOKR.js';
|
|
@@ -1017,7 +1017,7 @@ var _OrganisationService = class _OrganisationService extends BaseService {
|
|
|
1017
1017
|
let userIsSuperAdmin = false;
|
|
1018
1018
|
if (this.user?.id) {
|
|
1019
1019
|
try {
|
|
1020
|
-
const { isSuperAdmin: checkSuperAdmin, isRBACInitialized: isRBACInitialized2, setupRBAC: setupRBAC2 } = await import('./api-
|
|
1020
|
+
const { isSuperAdmin: checkSuperAdmin, isRBACInitialized: isRBACInitialized2, setupRBAC: setupRBAC2 } = await import('./api-7P7DI652.js');
|
|
1021
1021
|
if (!isRBACInitialized2() && this.supabaseClient) {
|
|
1022
1022
|
setupRBAC2(this.supabaseClient);
|
|
1023
1023
|
}
|
|
@@ -1276,7 +1276,7 @@ var _EventService = class _EventService extends BaseService {
|
|
|
1276
1276
|
this.setSelectedEventId = setSelectedEventId;
|
|
1277
1277
|
if (user?.id) {
|
|
1278
1278
|
try {
|
|
1279
|
-
const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-
|
|
1279
|
+
const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-7P7DI652.js');
|
|
1280
1280
|
if (!isRBACInitialized2() && this.supabaseClient) {
|
|
1281
1281
|
setupRBAC2(this.supabaseClient);
|
|
1282
1282
|
}
|
|
@@ -1490,7 +1490,7 @@ var _EventService = class _EventService extends BaseService {
|
|
|
1490
1490
|
let organisationIdForRpc = null;
|
|
1491
1491
|
let userIsSuperAdmin = this.isSuperAdmin;
|
|
1492
1492
|
try {
|
|
1493
|
-
const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-
|
|
1493
|
+
const { isRBACInitialized: isRBACInitialized2, isSuperAdmin: checkSuperAdmin, setupRBAC: setupRBAC2 } = await import('./api-7P7DI652.js');
|
|
1494
1494
|
if (!isRBACInitialized2() && this.supabaseClient) {
|
|
1495
1495
|
setupRBAC2(this.supabaseClient);
|
|
1496
1496
|
}
|
|
@@ -2386,7 +2386,7 @@ function UnifiedAuthContextProvider({
|
|
|
2386
2386
|
resolvedUserIdRef.current = currentUserId;
|
|
2387
2387
|
const userId = currentUserId;
|
|
2388
2388
|
const appNameValue = appName;
|
|
2389
|
-
import('./api-
|
|
2389
|
+
import('./api-7P7DI652.js').then(async ({ resolveAppContext, setupRBAC: setupRBAC2 }) => {
|
|
2390
2390
|
try {
|
|
2391
2391
|
setupRBAC2(supabase);
|
|
2392
2392
|
const result = await resolveAppContext({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AccessDenied } from './chunk-
|
|
2
|
-
import { useResolvedScope, scopeEqual, useCan, useMultiplePermissions } from './chunk-
|
|
3
|
-
import { useUnifiedAuth } from './chunk-
|
|
4
|
-
import { getRBACLogger, getRBACConfig, RBACNotInitializedError } from './chunk-
|
|
1
|
+
import { AccessDenied } from './chunk-S6ZQKDY6.js';
|
|
2
|
+
import { useResolvedScope, scopeEqual, useCan, useMultiplePermissions } from './chunk-GS5672WG.js';
|
|
3
|
+
import { useUnifiedAuth } from './chunk-T5CVK4R3.js';
|
|
4
|
+
import { getRBACLogger, getRBACConfig, RBACNotInitializedError } from './chunk-LX6U42O3.js';
|
|
5
5
|
import { createLogger } from './chunk-TTRFSOKR.js';
|
|
6
6
|
import React, { useRef, useMemo, useState, useEffect } from 'react';
|
|
7
7
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
@@ -14,7 +14,7 @@ var RPCFunction = /* @__PURE__ */ ((RPCFunction2) => {
|
|
|
14
14
|
RPCFunction2["RBAC_PAGE_ACCESS_CHECK"] = "rbac_page_access_check";
|
|
15
15
|
RPCFunction2["RBAC_ROLE_GRANT"] = "rbac_role_grant";
|
|
16
16
|
RPCFunction2["RBAC_ROLE_REVOKE"] = "rbac_role_revoke";
|
|
17
|
-
RPCFunction2["RBAC_ROLES_LIST"] = "
|
|
17
|
+
RPCFunction2["RBAC_ROLES_LIST"] = "data_rbac_roles_list";
|
|
18
18
|
RPCFunction2["RBAC_ROLE_VALIDATE"] = "rbac_role_validate";
|
|
19
19
|
RPCFunction2["RBAC_SESSION_TRACK"] = "rbac_session_track";
|
|
20
20
|
RPCFunction2["RBAC_AUDIT_LOG"] = "rbac_audit_log";
|
|
@@ -74,7 +74,7 @@ var PagePermissionGuardComponent = ({
|
|
|
74
74
|
const checkSuperAdmin = async () => {
|
|
75
75
|
const startTime = Date.now();
|
|
76
76
|
try {
|
|
77
|
-
const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-
|
|
77
|
+
const { isSuperAdmin: checkSuperAdmin2 } = await import('./api-7P7DI652.js');
|
|
78
78
|
const timeoutPromise = new Promise((_, reject) => {
|
|
79
79
|
setTimeout(() => reject(new Error("Super admin check timeout")), 1e4);
|
|
80
80
|
});
|
|
@@ -377,7 +377,7 @@ function withPermissionGuard(config, handler) {
|
|
|
377
377
|
if (!userId || !organisationId) {
|
|
378
378
|
throw new Error("User context required for permission check");
|
|
379
379
|
}
|
|
380
|
-
const { isPermitted: isPermitted2 } = await import('./api-
|
|
380
|
+
const { isPermitted: isPermitted2 } = await import('./api-7P7DI652.js');
|
|
381
381
|
const hasPermission = await isPermitted2({
|
|
382
382
|
userId,
|
|
383
383
|
scope: { organisationId, eventId, appId },
|
|
@@ -400,7 +400,7 @@ function withAccessLevelGuard(minLevel, handler) {
|
|
|
400
400
|
if (!userId || !organisationId) {
|
|
401
401
|
throw new Error("User context required for access level check");
|
|
402
402
|
}
|
|
403
|
-
const { getAccessLevel: getAccessLevel2 } = await import('./api-
|
|
403
|
+
const { getAccessLevel: getAccessLevel2 } = await import('./api-7P7DI652.js');
|
|
404
404
|
const accessLevel = await getAccessLevel2({
|
|
405
405
|
userId,
|
|
406
406
|
scope: { organisationId, eventId, appId }
|
|
@@ -425,7 +425,7 @@ function withRoleGuard(config, handler) {
|
|
|
425
425
|
throw new Error("User context required for role check");
|
|
426
426
|
}
|
|
427
427
|
if (config.globalRoles && config.globalRoles.length > 0) {
|
|
428
|
-
const { isSuperAdmin } = await import('./api-
|
|
428
|
+
const { isSuperAdmin } = await import('./api-7P7DI652.js');
|
|
429
429
|
const isSuper = await isSuperAdmin(userId);
|
|
430
430
|
if (isSuper) {
|
|
431
431
|
if (organisationId) {
|
|
@@ -451,14 +451,14 @@ function withRoleGuard(config, handler) {
|
|
|
451
451
|
}
|
|
452
452
|
}
|
|
453
453
|
if (config.organisationRoles && config.organisationRoles.length > 0) {
|
|
454
|
-
const { isOrganisationAdmin } = await import('./api-
|
|
454
|
+
const { isOrganisationAdmin } = await import('./api-7P7DI652.js');
|
|
455
455
|
const isOrgAdmin = await isOrganisationAdmin(userId, organisationId);
|
|
456
456
|
if (!isOrgAdmin && config.requireAll !== false) {
|
|
457
457
|
throw new Error(`Organisation admin role required`);
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
if (config.eventAppRoles && config.eventAppRoles.length > 0 && eventId && appId) {
|
|
461
|
-
const { isEventAdmin } = await import('./api-
|
|
461
|
+
const { isEventAdmin } = await import('./api-7P7DI652.js');
|
|
462
462
|
const isEventAdminUser = await isEventAdmin(userId, { organisationId, eventId, appId });
|
|
463
463
|
if (!isEventAdminUser && config.requireAll !== false) {
|
|
464
464
|
throw new Error(`Event admin role required`);
|
|
@@ -498,7 +498,7 @@ function createRBACMiddleware(config) {
|
|
|
498
498
|
);
|
|
499
499
|
if (protectedRoute) {
|
|
500
500
|
try {
|
|
501
|
-
const { isPermitted: isPermitted2 } = await import('./api-
|
|
501
|
+
const { isPermitted: isPermitted2 } = await import('./api-7P7DI652.js');
|
|
502
502
|
const hasPermission = await isPermitted2({
|
|
503
503
|
userId,
|
|
504
504
|
scope: { organisationId },
|
|
@@ -525,7 +525,7 @@ function createRBACExpressMiddleware(config) {
|
|
|
525
525
|
return res.status(401).json({ error: "User context required" });
|
|
526
526
|
}
|
|
527
527
|
try {
|
|
528
|
-
const { isPermitted: isPermitted2 } = await import('./api-
|
|
528
|
+
const { isPermitted: isPermitted2 } = await import('./api-7P7DI652.js');
|
|
529
529
|
const hasPermission = await isPermitted2({
|
|
530
530
|
userId,
|
|
531
531
|
scope: { organisationId, eventId, appId },
|
package/dist/components.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { a as UnifiedAuthContextType, d as UnifiedAuthProvider, c as UnifiedAuthProviderProps, u as useUnifiedAuth } from './UnifiedAuthProvider-CKvHP1MK.js';
|
|
2
|
-
export { A as AddressField, k as AddressFieldProps, l as AddressFieldRef, o as Alert, q as AlertDescription, p as AlertTitle, r as Avatar, s as AvatarProps, t as Badge, u as BadgeProps, v as BadgeVariant, B as Button, a as ButtonProps, am as Calendar, an as CalendarProps, C as Card, g as CardActions, i as CardActionsProps, f as CardContent, e as CardDescription, c as CardFooter, b as CardHeader, h as CardProps, d as CardTitle, w as Checkbox, aP as ContextSelector, aQ as ContextSelectorProps, M as Dialog, V as DialogBody, a4 as DialogBodyProps, Q as DialogClose, a1 as DialogCloseProps, R as DialogContent, $ as DialogContentProps, Y as DialogDescription, W as DialogFooter, a3 as DialogFooterProps, U as DialogHeader, a2 as DialogHeaderProps, N as DialogPortal, a0 as DialogPortalProps, Z as DialogProps, a5 as DialogSize, X as DialogTitle, O as DialogTrigger, _ as DialogTriggerProps, aS as ErrorBoundary, aU as ErrorBoundaryProps, aT as ErrorBoundaryProvider, aW as ErrorBoundaryProviderProps, aV as ErrorBoundaryState, b1 as FileDisplay, b2 as FileDisplayProps, a$ as FileUpload, b0 as FileUploadProps, aK as Footer, aL as FooterProps, aD as Form, aE as FormField, aG as FormFieldProps, aF as FormProps, aX as GlobalErrorHandler, aJ as Header, I as Input, j as InputProps, L as Label, m as LabelProps, aY as LoadingSpinner, aH as LoginForm, aI as LoginFormProps, aO as NavigationMenu, bk as PaceAppLayout, bj as PaceAppLayoutProps, bm as PaceLoginPage, bl as PaceLoginPageProps, P as Progress, y as ProgressProps, aM as ProtectedRoute, aN as ProtectedRouteProps, bc as PublicPageFooter, bi as PublicPageFooterProps, bb as PublicPageHeader, bh as PublicPageHeaderProps, ba as PublicPageLayout, bg as PublicPageLayoutProps, bd as PublicPageProvider, a6 as Select, aa as SelectContent, a7 as SelectGroup, ac as SelectItem, ab as SelectLabel, ad as SelectSeparator, a9 as SelectTrigger, a8 as SelectValue, aZ as SessionRestorationLoader, a_ as SessionRestorationLoaderProps, S as Switch, x as SwitchProps, z as Table, E as TableBody, F as TableCaption, G as TableCell, H as TableFooter, J as TableHead, D as TableHeader, K as TableRow, ae as Tabs, ah as TabsContent, al as TabsContentProps, af as TabsList, aj as TabsListProps, ai as TabsProps, ag as TabsTrigger, ak as TabsTriggerProps, T as Textarea, n as TextareaProps, ao as Toast, aq as ToastAction, aw as ToastActionElement, av as ToastClose, au as ToastDescription, ax as ToastProps, ar as ToastProvider, at as ToastTitle, as as ToastViewport, ap as Toaster, ay as Tooltip, aA as TooltipContent, aB as TooltipProvider, aC as TooltipRoot, az as TooltipTrigger, b9 as UseFileReferenceForRecordReturn, b7 as UseFileReferenceOptions, b8 as UseFileReferenceReturn, aR as UserMenu, b3 as useFileReference, b5 as useFileReferenceById, b4 as useFileReferenceForRecord, b6 as useFilesByCategory, bf as useIsPublicPage, be as usePublicPageContext } from './PublicPageProvider-
|
|
2
|
+
export { A as AddressField, k as AddressFieldProps, l as AddressFieldRef, o as Alert, q as AlertDescription, p as AlertTitle, r as Avatar, s as AvatarProps, t as Badge, u as BadgeProps, v as BadgeVariant, B as Button, a as ButtonProps, am as Calendar, an as CalendarProps, C as Card, g as CardActions, i as CardActionsProps, f as CardContent, e as CardDescription, c as CardFooter, b as CardHeader, h as CardProps, d as CardTitle, w as Checkbox, aP as ContextSelector, aQ as ContextSelectorProps, M as Dialog, V as DialogBody, a4 as DialogBodyProps, Q as DialogClose, a1 as DialogCloseProps, R as DialogContent, $ as DialogContentProps, Y as DialogDescription, W as DialogFooter, a3 as DialogFooterProps, U as DialogHeader, a2 as DialogHeaderProps, N as DialogPortal, a0 as DialogPortalProps, Z as DialogProps, a5 as DialogSize, X as DialogTitle, O as DialogTrigger, _ as DialogTriggerProps, aS as ErrorBoundary, aU as ErrorBoundaryProps, aT as ErrorBoundaryProvider, aW as ErrorBoundaryProviderProps, aV as ErrorBoundaryState, b1 as FileDisplay, b2 as FileDisplayProps, a$ as FileUpload, b0 as FileUploadProps, aK as Footer, aL as FooterProps, aD as Form, aE as FormField, aG as FormFieldProps, aF as FormProps, aX as GlobalErrorHandler, aJ as Header, I as Input, j as InputProps, L as Label, m as LabelProps, aY as LoadingSpinner, aH as LoginForm, aI as LoginFormProps, aO as NavigationMenu, bk as PaceAppLayout, bj as PaceAppLayoutProps, bm as PaceLoginPage, bl as PaceLoginPageProps, P as Progress, y as ProgressProps, aM as ProtectedRoute, aN as ProtectedRouteProps, bc as PublicPageFooter, bi as PublicPageFooterProps, bb as PublicPageHeader, bh as PublicPageHeaderProps, ba as PublicPageLayout, bg as PublicPageLayoutProps, bd as PublicPageProvider, a6 as Select, aa as SelectContent, a7 as SelectGroup, ac as SelectItem, ab as SelectLabel, ad as SelectSeparator, a9 as SelectTrigger, a8 as SelectValue, aZ as SessionRestorationLoader, a_ as SessionRestorationLoaderProps, S as Switch, x as SwitchProps, z as Table, E as TableBody, F as TableCaption, G as TableCell, H as TableFooter, J as TableHead, D as TableHeader, K as TableRow, ae as Tabs, ah as TabsContent, al as TabsContentProps, af as TabsList, aj as TabsListProps, ai as TabsProps, ag as TabsTrigger, ak as TabsTriggerProps, T as Textarea, n as TextareaProps, ao as Toast, aq as ToastAction, aw as ToastActionElement, av as ToastClose, au as ToastDescription, ax as ToastProps, ar as ToastProvider, at as ToastTitle, as as ToastViewport, ap as Toaster, ay as Tooltip, aA as TooltipContent, aB as TooltipProvider, aC as TooltipRoot, az as TooltipTrigger, b9 as UseFileReferenceForRecordReturn, b7 as UseFileReferenceOptions, b8 as UseFileReferenceReturn, aR as UserMenu, b3 as useFileReference, b5 as useFileReferenceById, b4 as useFileReferenceForRecord, b6 as useFilesByCategory, bf as useIsPublicPage, be as usePublicPageContext } from './PublicPageProvider-CIGSujI2.js';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
export { u as useToast } from './useToast-AyaT-x7p.js';
|
|
5
5
|
export { D as DataTable, a as DataTableProps } from './DataTable-DRUIgtUH.js';
|
package/dist/components.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { Calendar } from './chunk-
|
|
2
|
-
export { AddressField, Avatar, Badge, Calendar, ContextSelector, FileDisplay, FileUpload, Footer, Form, FormField, Header, LoginForm, NavigationMenu, PaceAppLayout, PaceLoginPage, ProtectedRoute, PublicPageFooter, PublicPageHeader, PublicPageLayout, SessionRestorationLoader, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, UserMenu, useFileReference, useFileReferenceById, useFileReferenceForRecord, useFilesByCategory } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import { Label, Input } from './chunk-
|
|
5
|
-
export { Alert, AlertDescription, AlertTitle, Checkbox, DataTable, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogPortal, DialogTitle, DialogTrigger, Input, Label, Progress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './chunk-
|
|
6
|
-
import { Button } from './chunk-
|
|
7
|
-
export { Button, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from './chunk-
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
1
|
+
import { Calendar } from './chunk-EURB7QFZ.js';
|
|
2
|
+
export { AddressField, Avatar, Badge, Calendar, ContextSelector, FileDisplay, FileUpload, Footer, Form, FormField, Header, LoginForm, NavigationMenu, PaceAppLayout, PaceLoginPage, ProtectedRoute, PublicPageFooter, PublicPageHeader, PublicPageLayout, SessionRestorationLoader, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, UserMenu, useFileReference, useFileReferenceById, useFileReferenceForRecord, useFilesByCategory } from './chunk-EURB7QFZ.js';
|
|
3
|
+
import './chunk-S6ZQKDY6.js';
|
|
4
|
+
import { Label, Input } from './chunk-NKHKXPI4.js';
|
|
5
|
+
export { Alert, AlertDescription, AlertTitle, Checkbox, DataTable, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogPortal, DialogTitle, DialogTrigger, Input, Label, Progress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './chunk-NKHKXPI4.js';
|
|
6
|
+
import { Button } from './chunk-GS5672WG.js';
|
|
7
|
+
export { Button, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from './chunk-GS5672WG.js';
|
|
8
|
+
import './chunk-MPBLMWVR.js';
|
|
9
|
+
import './chunk-5W2A3DRC.js';
|
|
10
10
|
export { useToast } from './chunk-S7DKJPLT.js';
|
|
11
|
-
export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ErrorBoundary, ErrorBoundaryProvider, PublicPageProvider, useIsPublicPage, usePublicPageContext } from './chunk-
|
|
11
|
+
export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ErrorBoundary, ErrorBoundaryProvider, PublicPageProvider, useIsPublicPage, usePublicPageContext } from './chunk-EF2UGZWY.js';
|
|
12
12
|
import './chunk-C7NSAPTL.js';
|
|
13
|
-
export { UnifiedAuthProvider, useUnifiedAuth } from './chunk-
|
|
14
|
-
import './chunk-
|
|
13
|
+
export { UnifiedAuthProvider, useUnifiedAuth } from './chunk-T5CVK4R3.js';
|
|
14
|
+
import './chunk-LX6U42O3.js';
|
|
15
15
|
import './chunk-AHU7G2R5.js';
|
|
16
16
|
export { FileCategory } from './chunk-6QYDGKQY.js';
|
|
17
17
|
import './chunk-4SXLQIZO.js';
|