pi-kiosk-shared 2.1.86 → 2.1.88

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 (130) hide show
  1. package/dist/analyticsCatalogVersion.d.ts +2 -1
  2. package/dist/analyticsCatalogVersion.d.ts.map +1 -1
  3. package/dist/analyticsCatalogVersion.js +1 -0
  4. package/dist/analyticsCatalogVersion.js.map +1 -1
  5. package/dist/analyticsEmitterManifest.js +1 -1
  6. package/dist/analyticsEmitterManifest.js.map +1 -1
  7. package/dist/analyticsEventLabels.d.ts +1 -1
  8. package/dist/analyticsEventLabels.d.ts.map +1 -1
  9. package/dist/analyticsEventLabels.js +83 -5
  10. package/dist/analyticsEventLabels.js.map +1 -1
  11. package/dist/analyticsIngestOutboxPolicy.d.ts +19 -0
  12. package/dist/analyticsIngestOutboxPolicy.d.ts.map +1 -0
  13. package/dist/analyticsIngestOutboxPolicy.js +78 -0
  14. package/dist/analyticsIngestOutboxPolicy.js.map +1 -0
  15. package/dist/auditEventCodes.d.ts +1 -1
  16. package/dist/auditEventCodes.d.ts.map +1 -1
  17. package/dist/auditEventCodes.js +1 -0
  18. package/dist/auditEventCodes.js.map +1 -1
  19. package/dist/auditEventDescriptions.d.ts.map +1 -1
  20. package/dist/auditEventDescriptions.js +4 -0
  21. package/dist/auditEventDescriptions.js.map +1 -1
  22. package/dist/auditEventLabels.d.ts.map +1 -1
  23. package/dist/auditEventLabels.js +4 -0
  24. package/dist/auditEventLabels.js.map +1 -1
  25. package/dist/catalog/createCoalescedRefetchScheduler.d.ts +12 -0
  26. package/dist/catalog/createCoalescedRefetchScheduler.d.ts.map +1 -0
  27. package/dist/catalog/createCoalescedRefetchScheduler.js +59 -0
  28. package/dist/catalog/createCoalescedRefetchScheduler.js.map +1 -0
  29. package/dist/checkout/resolvePickupHandoffModeForCheckout.d.ts +3 -0
  30. package/dist/checkout/resolvePickupHandoffModeForCheckout.d.ts.map +1 -0
  31. package/dist/checkout/resolvePickupHandoffModeForCheckout.js +18 -0
  32. package/dist/checkout/resolvePickupHandoffModeForCheckout.js.map +1 -0
  33. package/dist/errors/formatRateLimitMessage.d.ts +5 -0
  34. package/dist/errors/formatRateLimitMessage.d.ts.map +1 -0
  35. package/dist/errors/formatRateLimitMessage.js +8 -0
  36. package/dist/errors/formatRateLimitMessage.js.map +1 -0
  37. package/dist/getAnalyticsEventLabel.d.ts +1 -1
  38. package/dist/getAnalyticsEventLabel.d.ts.map +1 -1
  39. package/dist/getAnalyticsEventLabel.js +2 -1
  40. package/dist/getAnalyticsEventLabel.js.map +1 -1
  41. package/dist/hooks/databaseHealthCoordinator.d.ts +31 -0
  42. package/dist/hooks/databaseHealthCoordinator.d.ts.map +1 -0
  43. package/dist/hooks/databaseHealthCoordinator.js +371 -0
  44. package/dist/hooks/databaseHealthCoordinator.js.map +1 -0
  45. package/dist/hooks/useDatabaseHealth.d.ts +2 -6
  46. package/dist/hooks/useDatabaseHealth.d.ts.map +1 -1
  47. package/dist/hooks/useDatabaseHealth.js +22 -143
  48. package/dist/hooks/useDatabaseHealth.js.map +1 -1
  49. package/dist/hooks/useSubmitCooldown.d.ts +11 -0
  50. package/dist/hooks/useSubmitCooldown.d.ts.map +1 -0
  51. package/dist/hooks/useSubmitCooldown.js +46 -0
  52. package/dist/hooks/useSubmitCooldown.js.map +1 -0
  53. package/dist/http/rateLimitError.d.ts +9 -0
  54. package/dist/http/rateLimitError.d.ts.map +1 -0
  55. package/dist/http/rateLimitError.js +97 -0
  56. package/dist/http/rateLimitError.js.map +1 -0
  57. package/dist/index.d.ts +6 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +6 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/sales-point/salesPointPublicConfig.d.ts +20 -0
  62. package/dist/sales-point/salesPointPublicConfig.d.ts.map +1 -1
  63. package/dist/sales-point/salesPointPublicConfig.js +18 -0
  64. package/dist/sales-point/salesPointPublicConfig.js.map +1 -1
  65. package/dist/sentry/captureRateLimitBreadcrumb.d.ts +12 -0
  66. package/dist/sentry/captureRateLimitBreadcrumb.d.ts.map +1 -0
  67. package/dist/sentry/captureRateLimitBreadcrumb.js +23 -0
  68. package/dist/sentry/captureRateLimitBreadcrumb.js.map +1 -0
  69. package/dist/sentry/initSentry.d.ts +1 -1
  70. package/dist/sentry/initSentry.d.ts.map +1 -1
  71. package/dist/tenant-entitlements/catalog.d.ts +11 -0
  72. package/dist/tenant-entitlements/catalog.d.ts.map +1 -0
  73. package/dist/tenant-entitlements/catalog.js +347 -0
  74. package/dist/tenant-entitlements/catalog.js.map +1 -0
  75. package/dist/tenant-entitlements/evaluateNavEntitlement.d.ts +14 -0
  76. package/dist/tenant-entitlements/evaluateNavEntitlement.d.ts.map +1 -0
  77. package/dist/tenant-entitlements/evaluateNavEntitlement.js +19 -0
  78. package/dist/tenant-entitlements/evaluateNavEntitlement.js.map +1 -0
  79. package/dist/tenant-entitlements/evaluatePosture.d.ts +11 -0
  80. package/dist/tenant-entitlements/evaluatePosture.d.ts.map +1 -0
  81. package/dist/tenant-entitlements/evaluatePosture.js +21 -0
  82. package/dist/tenant-entitlements/evaluatePosture.js.map +1 -0
  83. package/dist/tenant-entitlements/index.d.ts +9 -0
  84. package/dist/tenant-entitlements/index.d.ts.map +1 -0
  85. package/dist/tenant-entitlements/index.js +6 -0
  86. package/dist/tenant-entitlements/index.js.map +1 -0
  87. package/dist/tenant-entitlements/types.d.ts +63 -0
  88. package/dist/tenant-entitlements/types.d.ts.map +1 -0
  89. package/dist/tenant-entitlements/types.js +114 -0
  90. package/dist/tenant-entitlements/types.js.map +1 -0
  91. package/dist/ui/Button/Button.d.ts +18 -0
  92. package/dist/ui/Button/Button.d.ts.map +1 -0
  93. package/dist/ui/Button/Button.js +151 -0
  94. package/dist/ui/Button/Button.js.map +1 -0
  95. package/dist/ui/Card/Card.d.ts +14 -0
  96. package/dist/ui/Card/Card.d.ts.map +1 -0
  97. package/dist/ui/Card/Card.js +56 -0
  98. package/dist/ui/Card/Card.js.map +1 -0
  99. package/dist/ui/FormField/FormField.d.ts +8 -0
  100. package/dist/ui/FormField/FormField.d.ts.map +1 -0
  101. package/dist/ui/FormField/FormField.js +43 -0
  102. package/dist/ui/FormField/FormField.js.map +1 -0
  103. package/dist/ui/LanguageToggle/LanguageToggle.d.ts +8 -0
  104. package/dist/ui/LanguageToggle/LanguageToggle.d.ts.map +1 -0
  105. package/dist/ui/LanguageToggle/LanguageToggle.js +89 -0
  106. package/dist/ui/LanguageToggle/LanguageToggle.js.map +1 -0
  107. package/dist/ui/Turnstile/TurnstileExecuteWidget.d.ts +11 -0
  108. package/dist/ui/Turnstile/TurnstileExecuteWidget.d.ts.map +1 -0
  109. package/dist/ui/Turnstile/TurnstileExecuteWidget.js +28 -0
  110. package/dist/ui/Turnstile/TurnstileExecuteWidget.js.map +1 -0
  111. package/dist/ui/Turnstile/TurnstileWidget.d.ts +9 -0
  112. package/dist/ui/Turnstile/TurnstileWidget.d.ts.map +1 -0
  113. package/dist/ui/Turnstile/TurnstileWidget.js +18 -0
  114. package/dist/ui/Turnstile/TurnstileWidget.js.map +1 -0
  115. package/dist/ui/Turnstile/useTurnstileAuth.d.ts +14 -0
  116. package/dist/ui/Turnstile/useTurnstileAuth.d.ts.map +1 -0
  117. package/dist/ui/Turnstile/useTurnstileAuth.js +35 -0
  118. package/dist/ui/Turnstile/useTurnstileAuth.js.map +1 -0
  119. package/dist/ui/Turnstile/useTurnstileExecute.d.ts +16 -0
  120. package/dist/ui/Turnstile/useTurnstileExecute.d.ts.map +1 -0
  121. package/dist/ui/Turnstile/useTurnstileExecute.js +73 -0
  122. package/dist/ui/Turnstile/useTurnstileExecute.js.map +1 -0
  123. package/dist/ui/index.d.ts +12 -0
  124. package/dist/ui/index.d.ts.map +1 -0
  125. package/dist/ui/index.js +12 -0
  126. package/dist/ui/index.js.map +1 -0
  127. package/package.json +178 -133
  128. package/src/tokens/__tests__/theme-exports.test.mjs +24 -0
  129. package/src/tokens/admin-theme.css +37 -0
  130. package/src/tokens/theme.css +49 -0
@@ -1,156 +1,35 @@
1
1
  /**
2
2
  * Database Health Check Hook
3
3
  *
4
- * Polls backend health endpoint to determine database availability.
5
- * Features:
6
- * - At most one request in flight at a time (prevents duplicate/burst requests)
7
- * - Minimum 15s between automatic checks when unhealthy (prevents rapid retry storm)
8
- * - Poll interval when healthy: 60s default (1 request/min)
9
- * - User-triggered retry is not throttled (only automatic checks use the 15s minimum interval)
4
+ * Delegates to a singleton coordinator (one poll schedule per /health endpoint).
5
+ * See databaseHealthCoordinator.ts for cross-tab, visibility, and 429 handling.
10
6
  */
11
7
  import { useState, useEffect, useCallback, useRef } from 'react';
12
- const MIN_AUTO_INTERVAL_MS = 15000; // Minimum 15s between automatic checks to avoid hammering /health
8
+ import { requestDatabaseHealthCheck, resolveDatabaseHealthEndpoint, subscribeDatabaseHealth, } from './databaseHealthCoordinator.js';
13
9
  export function useDatabaseHealth(options = {}) {
14
- const { pollInterval = 60000, maxRetries = 5, retryDelay = 1000, enabled = true, } = options;
15
- const [isDatabaseAvailable, setIsDatabaseAvailable] = useState(true);
16
- const [isChecking, setIsChecking] = useState(false);
17
- const [retryCount, setRetryCount] = useState(0);
18
- const [nextRetryDelay, setNextRetryDelay] = useState(0);
19
- const [error, setError] = useState(null);
20
- const [healthEndpoint] = useState(() => {
21
- if (typeof window === 'undefined') {
22
- return 'http://localhost:3015/health';
23
- }
24
- const pageOrigin = window.location.origin;
25
- const windowConfig = window.__RUNTIME_CONFIG__;
26
- const apiUrl = windowConfig?.apiUrl?.trim();
27
- if (apiUrl) {
28
- try {
29
- return `${new URL(apiUrl).origin}/health`;
30
- }
31
- catch {
32
- return `${apiUrl.replace(/\/+$/, '')}/health`;
33
- }
34
- }
35
- return `${pageOrigin}/health`;
10
+ const { pollInterval = 120_000, maxRetries = 5, enabled = true, } = options;
11
+ const endpointRef = useRef(resolveDatabaseHealthEndpoint());
12
+ const [snapshot, setSnapshot] = useState({
13
+ isDatabaseAvailable: true,
14
+ isChecking: false,
15
+ retryCount: 0,
16
+ nextRetryDelay: 0,
17
+ error: null,
36
18
  });
37
- const retryCountRef = useRef(0);
38
- const currentDelayRef = useRef(retryDelay);
39
- const pollTimeoutRef = useRef(null);
40
- const retryTimeoutRef = useRef(null);
41
- const checkHealthRef = useRef(null);
42
- const isCheckingRef = useRef(false);
43
- const lastCheckTimeRef = useRef(0);
44
- const checkHealth = useCallback(async () => {
45
- if (!enabled) {
46
- return;
47
- }
48
- // Prevent overlapping requests (e.g. Strict Mode double-mount or poll + retry at once)
49
- if (isCheckingRef.current) {
50
- return;
51
- }
52
- isCheckingRef.current = true;
53
- setIsChecking(true);
54
- setError(null);
55
- try {
56
- const response = await fetch(healthEndpoint, {
57
- method: 'GET',
58
- headers: { 'Content-Type': 'application/json' },
59
- cache: 'no-cache',
60
- });
61
- if (!response.ok) {
62
- throw new Error(`Health check failed: ${response.status} ${response.statusText}`);
63
- }
64
- const contentType = response.headers.get('content-type');
65
- if (!contentType?.includes('application/json')) {
66
- throw new Error(`Invalid response: expected JSON, got ${contentType}`);
67
- }
68
- const data = (await response.json());
69
- if (data.success === true) {
70
- setIsDatabaseAvailable(true);
71
- setRetryCount(0);
72
- setNextRetryDelay(0);
73
- retryCountRef.current = 0;
74
- currentDelayRef.current = retryDelay;
75
- }
76
- else {
77
- throw new Error('Database reported unhealthy status');
78
- }
79
- }
80
- catch (err) {
81
- const e = err instanceof Error ? err : new Error('Health check failed');
82
- setError(e);
83
- setIsDatabaseAvailable(false);
84
- const newRetryCount = retryCountRef.current + 1;
85
- retryCountRef.current = newRetryCount;
86
- setRetryCount(newRetryCount);
87
- const nextDelay = Math.min(currentDelayRef.current * 2, retryDelay * 30);
88
- currentDelayRef.current = nextDelay;
89
- const delayMs = Math.max(nextDelay, MIN_AUTO_INTERVAL_MS);
90
- setNextRetryDelay(delayMs);
91
- if (newRetryCount < maxRetries) {
92
- retryTimeoutRef.current = setTimeout(() => {
93
- void checkHealthRef.current?.();
94
- }, delayMs);
95
- }
96
- else {
97
- retryTimeoutRef.current = setTimeout(() => {
98
- void checkHealthRef.current?.();
99
- }, Math.max(pollInterval, MIN_AUTO_INTERVAL_MS));
100
- }
101
- }
102
- finally {
103
- lastCheckTimeRef.current = Date.now();
104
- isCheckingRef.current = false;
105
- setIsChecking(false);
106
- }
107
- }, [enabled, healthEndpoint, maxRetries, retryDelay, pollInterval]);
108
- checkHealthRef.current = checkHealth;
109
19
  useEffect(() => {
110
- if (!enabled) {
111
- return;
112
- }
113
- const doCheck = () => {
114
- const now = Date.now();
115
- if (now - lastCheckTimeRef.current < MIN_AUTO_INTERVAL_MS) {
116
- return;
117
- }
118
- if (checkHealthRef.current) {
119
- void checkHealthRef.current();
120
- }
121
- };
122
- const startPolling = () => {
123
- if (pollTimeoutRef.current) {
124
- clearTimeout(pollTimeoutRef.current);
125
- }
126
- pollTimeoutRef.current = setTimeout(() => {
127
- doCheck();
128
- startPolling();
129
- }, pollInterval);
130
- };
131
- doCheck();
132
- startPolling();
133
- return () => {
134
- if (pollTimeoutRef.current) {
135
- clearTimeout(pollTimeoutRef.current);
136
- pollTimeoutRef.current = null;
137
- }
138
- if (retryTimeoutRef.current) {
139
- clearTimeout(retryTimeoutRef.current);
140
- retryTimeoutRef.current = null;
141
- }
142
- };
143
- }, [enabled, healthEndpoint, pollInterval]);
144
- const checkHealthPublic = useCallback(() => {
145
- return checkHealthRef.current?.() ?? Promise.resolve();
20
+ const endpoint = endpointRef.current;
21
+ return subscribeDatabaseHealth({ endpoint, enabled, pollInterval, maxRetries }, setSnapshot);
22
+ }, [enabled, pollInterval, maxRetries]);
23
+ const checkHealth = useCallback(async () => {
24
+ await requestDatabaseHealthCheck(endpointRef.current, { force: true });
146
25
  }, []);
147
26
  return {
148
- isDatabaseAvailable,
149
- isChecking,
150
- retryCount,
151
- nextRetryDelay,
152
- error,
153
- checkHealth: checkHealthPublic,
27
+ isDatabaseAvailable: snapshot.isDatabaseAvailable,
28
+ isChecking: snapshot.isChecking,
29
+ retryCount: snapshot.retryCount,
30
+ nextRetryDelay: snapshot.nextRetryDelay,
31
+ error: snapshot.error,
32
+ checkHealth,
154
33
  };
155
34
  }
156
35
  //# sourceMappingURL=useDatabaseHealth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDatabaseHealth.js","sourceRoot":"","sources":["../../src/hooks/useDatabaseHealth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDatabaseHealth.js","sourceRoot":"","sources":["../../src/hooks/useDatabaseHealth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAEL,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AAkBxC,MAAM,UAAU,iBAAiB,CAC/B,UAAoC,EAAE;IAEtC,MAAM,EACJ,YAAY,GAAG,OAAO,EACtB,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,IAAI,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,WAAW,GAAG,MAAM,CAAC,6BAA6B,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAA4B;QAClE,mBAAmB,EAAE,IAAI;QACzB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,CAAC;QACjB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,OAAO,uBAAuB,CAC5B,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,EAC/C,WAAW,CACZ,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAExC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAmB,EAAE;QACxD,MAAM,0BAA0B,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;QACjD,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface UseSubmitCooldownResult {
2
+ readonly isCoolingDown: boolean;
3
+ readonly remainingSeconds: number;
4
+ readonly startCooldown: (durationMs: number) => void;
5
+ readonly clearCooldown: () => void;
6
+ }
7
+ /**
8
+ * Prevents double-tab / rapid repeat submits after rate-limit or mutation errors.
9
+ */
10
+ export declare function useSubmitCooldown(): UseSubmitCooldownResult;
11
+ //# sourceMappingURL=useSubmitCooldown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSubmitCooldown.d.ts","sourceRoot":"","sources":["../../src/hooks/useSubmitCooldown.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,uBAAuB,CA8C3D"}
@@ -0,0 +1,46 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ /**
3
+ * Prevents double-tab / rapid repeat submits after rate-limit or mutation errors.
4
+ */
5
+ export function useSubmitCooldown() {
6
+ const [cooldownUntil, setCooldownUntil] = useState(null);
7
+ const [remainingSeconds, setRemainingSeconds] = useState(0);
8
+ useEffect(() => {
9
+ if (cooldownUntil === null) {
10
+ setRemainingSeconds(0);
11
+ return;
12
+ }
13
+ const tick = () => {
14
+ const remainingMs = cooldownUntil - Date.now();
15
+ if (remainingMs <= 0) {
16
+ setCooldownUntil(null);
17
+ setRemainingSeconds(0);
18
+ return;
19
+ }
20
+ setRemainingSeconds(Math.ceil(remainingMs / 1000));
21
+ };
22
+ tick();
23
+ const intervalId = setInterval(tick, 250);
24
+ return () => {
25
+ clearInterval(intervalId);
26
+ };
27
+ }, [cooldownUntil]);
28
+ const startCooldown = useCallback((durationMs) => {
29
+ const safeMs = Math.max(durationMs, 0);
30
+ if (safeMs === 0) {
31
+ return;
32
+ }
33
+ setCooldownUntil(Date.now() + safeMs);
34
+ }, []);
35
+ const clearCooldown = useCallback(() => {
36
+ setCooldownUntil(null);
37
+ setRemainingSeconds(0);
38
+ }, []);
39
+ return {
40
+ isCoolingDown: cooldownUntil !== null && Date.now() < cooldownUntil,
41
+ remainingSeconds,
42
+ startCooldown,
43
+ clearCooldown,
44
+ };
45
+ }
46
+ //# sourceMappingURL=useSubmitCooldown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSubmitCooldown.js","sourceRoot":"","sources":["../../src/hooks/useSubmitCooldown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AASzD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,MAAM,WAAW,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/C,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACvB,mBAAmB,CAAC,CAAC,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC;QAEF,IAAI,EAAE,CAAC;QACP,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,UAAkB,EAAQ,EAAE;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;IACxC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,WAAW,CAAC,GAAS,EAAE;QAC3C,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,aAAa,EAAE,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;QACnE,gBAAgB;QAChB,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Detect HTTP 429 rate-limit errors across admin, customer, kiosk, and pickup ApiError shapes.
3
+ */
4
+ export declare function isRateLimitError(error: unknown): boolean;
5
+ /**
6
+ * Extract retry delay in milliseconds from a rate-limit error or response envelope.
7
+ */
8
+ export declare function getRetryAfterMs(error: unknown, fallbackMs?: number): number;
9
+ //# sourceMappingURL=rateLimitError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitError.d.ts","sourceRoot":"","sources":["../../src/http/rateLimitError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAcxD;AAyED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,SAAS,GAAG,MAAM,CAsB3E"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Detect HTTP 429 rate-limit errors across admin, customer, kiosk, and pickup ApiError shapes.
3
+ */
4
+ export function isRateLimitError(error) {
5
+ if (typeof error !== 'object' || error === null) {
6
+ return false;
7
+ }
8
+ if ('statusCode' in error && typeof error.statusCode === 'number' && error.statusCode === 429) {
9
+ return true;
10
+ }
11
+ if ('status' in error && typeof error.status === 'number' && error.status === 429) {
12
+ return true;
13
+ }
14
+ return false;
15
+ }
16
+ function parseRetryAfterHeaderValue(value) {
17
+ const seconds = Number(value);
18
+ if (Number.isFinite(seconds) && seconds >= 0) {
19
+ return Math.max(seconds * 1000, 0);
20
+ }
21
+ const dateMs = Date.parse(value);
22
+ if (!Number.isNaN(dateMs)) {
23
+ return Math.max(dateMs - Date.now(), 0);
24
+ }
25
+ return null;
26
+ }
27
+ function readHeader(headers, name) {
28
+ if (headers === null || headers === undefined) {
29
+ return null;
30
+ }
31
+ if (headers instanceof Headers) {
32
+ return headers.get(name);
33
+ }
34
+ if (typeof headers === 'object') {
35
+ const record = headers;
36
+ const direct = record[name] ?? record[name.toLowerCase()];
37
+ if (typeof direct === 'string') {
38
+ return direct;
39
+ }
40
+ if (Array.isArray(direct) && direct.length > 0) {
41
+ return direct[0] ?? null;
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ function retryAfterFromResponse(response) {
47
+ if (typeof response !== 'object' || response === null) {
48
+ return null;
49
+ }
50
+ if ('headers' in response) {
51
+ const retryAfter = readHeader(response.headers, 'retry-after');
52
+ if (retryAfter !== null) {
53
+ const parsed = parseRetryAfterHeaderValue(retryAfter);
54
+ if (parsed !== null) {
55
+ return parsed;
56
+ }
57
+ }
58
+ const reset = readHeader(response.headers, 'ratelimit-reset');
59
+ if (reset !== null) {
60
+ const resetSeconds = Number(reset);
61
+ if (Number.isFinite(resetSeconds) && resetSeconds >= 0) {
62
+ return Math.max(resetSeconds * 1000, 0);
63
+ }
64
+ }
65
+ }
66
+ if ('retryAfterMs' in response && typeof response.retryAfterMs === 'number') {
67
+ return Math.max(response.retryAfterMs, 0);
68
+ }
69
+ if ('retryAfter' in response && typeof response.retryAfter === 'number') {
70
+ return Math.max(response.retryAfter * 1000, 0);
71
+ }
72
+ return null;
73
+ }
74
+ /**
75
+ * Extract retry delay in milliseconds from a rate-limit error or response envelope.
76
+ */
77
+ export function getRetryAfterMs(error, fallbackMs = 60_000) {
78
+ if (typeof error === 'object' && error !== null) {
79
+ if ('retryAfterMs' in error && typeof error.retryAfterMs === 'number') {
80
+ return Math.max(error.retryAfterMs, 0);
81
+ }
82
+ if ('response' in error) {
83
+ const fromResponse = retryAfterFromResponse(error.response);
84
+ if (fromResponse !== null) {
85
+ return fromResponse;
86
+ }
87
+ }
88
+ if ('data' in error) {
89
+ const fromData = retryAfterFromResponse(error.data);
90
+ if (fromData !== null) {
91
+ return fromData;
92
+ }
93
+ }
94
+ }
95
+ return fallbackMs;
96
+ }
97
+ //# sourceMappingURL=rateLimitError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitError.js","sourceRoot":"","sources":["../../src/http/rateLimitError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,YAAY,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,OAAgB,EAAE,IAAY;IAChD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,YAAY,OAAO,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,OAAwD,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAiB;IAC/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC/D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAC9D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,YAAY,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,UAAU,GAAG,MAAM;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,IAAI,cAAc,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export * from './api.js';
19
19
  export * from './errors.js';
20
20
  export * from './components/DatabaseUnavailable.js';
21
21
  export * from './hooks/useDatabaseHealth.js';
22
+ export { useSubmitCooldown, type UseSubmitCooldownResult } from './hooks/useSubmitCooldown.js';
22
23
  export * from './analyticsEvents.js';
23
24
  export * from './analyticsEmitterManifest.js';
24
25
  export * from './analyticsCatalogV2.js';
@@ -58,4 +59,9 @@ export { expandCapabilitiesForClientCheck, grantImpliesTarget, hasEffectiveCapab
58
59
  export type { PermissionLevel } from './permissions/permissionLabels.js';
59
60
  export { TURNSTILE_PUBLIC_CONFIG_PATH, fetchTurnstileConfig, appendTurnstileToken, } from './auth/turnstileTypes.js';
60
61
  export type { TurnstileConfigData, TurnstileAuthBodyFields, AdminLoginRequest, ExchangeSuperAdminInviteSessionRequest, CompleteSuperAdminInviteRequest, PickupStaffLoginRequest, CustomerAuthTurnstileBody, } from './auth/turnstileTypes.js';
62
+ export { isRateLimitError, getRetryAfterMs } from './http/rateLimitError.js';
63
+ export { formatRateLimitMessage } from './errors/formatRateLimitMessage.js';
64
+ export { createCoalescedRefetchScheduler, type CoalescedRefetchScheduler, } from './catalog/createCoalescedRefetchScheduler.js';
65
+ export { resolvePickupHandoffModeForCheckout } from './checkout/resolvePickupHandoffModeForCheckout.js';
66
+ export * from './tenant-entitlements/index.js';
61
67
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,OAAO,EACL,wCAAwC,EACxC,yCAAyC,GAC1C,MAAM,yCAAyC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AACnD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,sCAAsC,EACtC,+BAA+B,EAC/B,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,OAAO,EACL,wCAAwC,EACxC,yCAAyC,GAC1C,MAAM,yCAAyC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AACnD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,sCAAsC,EACtC,+BAA+B,EAC/B,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EACL,+BAA+B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,mCAAmC,EAAE,MAAM,mDAAmD,CAAC;AACxG,cAAc,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -19,6 +19,7 @@ export * from './api.js';
19
19
  export * from './errors.js';
20
20
  export * from './components/DatabaseUnavailable.js';
21
21
  export * from './hooks/useDatabaseHealth.js';
22
+ export { useSubmitCooldown } from './hooks/useSubmitCooldown.js';
22
23
  export * from './analyticsEvents.js';
23
24
  export * from './analyticsEmitterManifest.js';
24
25
  export * from './analyticsCatalogV2.js';
@@ -56,4 +57,9 @@ export * from './tenant/tenantPathResolution.js';
56
57
  export { PERMISSION_DOMAIN_LABELS, PERMISSION_LEVEL_LABELS, getPermissionDomainLabel, getPermissionLevelLabel, } from './permissions/permissionLabels.js';
57
58
  export { expandCapabilitiesForClientCheck, grantImpliesTarget, hasEffectiveCapability, hasAnyEffectiveCapability, ADMIN_USERS_MANAGE_BRIDGE_SOURCES, ADMIN_USERS_MANAGE_BRIDGE_TARGETS, BRIDGE_PARITY_FIXTURE_GRANTS, BRIDGE_PARITY_FIXTURE_EXPECTED_TARGETS, } from './permissions/effectiveCapabilities.js';
58
59
  export { TURNSTILE_PUBLIC_CONFIG_PATH, fetchTurnstileConfig, appendTurnstileToken, } from './auth/turnstileTypes.js';
60
+ export { isRateLimitError, getRetryAfterMs } from './http/rateLimitError.js';
61
+ export { formatRateLimitMessage } from './errors/formatRateLimitMessage.js';
62
+ export { createCoalescedRefetchScheduler, } from './catalog/createCoalescedRefetchScheduler.js';
63
+ export { resolvePickupHandoffModeForCheckout } from './checkout/resolvePickupHandoffModeForCheckout.js';
64
+ export * from './tenant-entitlements/index.js';
59
65
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,OAAO,EACL,wCAAwC,EACxC,yCAAyC,GAC1C,MAAM,yCAAyC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AACnD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,OAAO,EACL,wCAAwC,EACxC,yCAAyC,GAC1C,MAAM,yCAAyC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AACnD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAgC,MAAM,8BAA8B,CAAC;AAC/F,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAUlC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EACL,+BAA+B,GAEhC,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,mCAAmC,EAAE,MAAM,mDAAmD,CAAC;AACxG,cAAc,gCAAgC,CAAC"}
@@ -75,6 +75,24 @@ export interface SalesPointPublicLoyaltyCapability {
75
75
  readonly enabled: boolean;
76
76
  readonly previewRequired: false;
77
77
  }
78
+ /** Per-block posture on device public-config (ENT-PR-17 ceiling). */
79
+ export interface SalesPointPublicEntitlementBlockPosture {
80
+ readonly entitled: boolean;
81
+ readonly allowReads: boolean;
82
+ readonly allowWrites: boolean;
83
+ }
84
+ /** Tenant entitlement ceiling emitted on sales-point public-config (§4, §16.1). */
85
+ export interface SalesPointPublicEntitlementCeiling {
86
+ readonly revision: number;
87
+ readonly surfaceKiosk: SalesPointPublicEntitlementBlockPosture;
88
+ readonly realtimeDeviceTransport: SalesPointPublicEntitlementBlockPosture;
89
+ /** Sales point acts as implicit pickup point (ENT-PR-12 mirror mode). */
90
+ readonly pickupMirrorMode: boolean;
91
+ }
92
+ /** WS/SSE disconnect reason when surface or transport block is off (§12.3). */
93
+ export declare const ENTITLEMENT_SURFACE_DISABLED_CODE: "ENTITLEMENT_SURFACE_DISABLED";
94
+ export declare const DEFAULT_ENTITLED_PUBLIC_POSTURE: SalesPointPublicEntitlementBlockPosture;
95
+ export declare function resolveSalesPointEntitlementCeiling(config: Pick<SalesPointPublicConfigV1, 'entitlementCeiling'>): SalesPointPublicEntitlementCeiling;
78
96
  export type SalesPointPublicConfigV1 = ({
79
97
  readonly configVersion: number;
80
98
  readonly salesPointOperationalMode: 'PRODUCTS';
@@ -84,6 +102,7 @@ export type SalesPointPublicConfigV1 = ({
84
102
  readonly catalogMedia?: SalesPointPublicCatalogMedia;
85
103
  readonly outboxObligationsEnabled: boolean;
86
104
  readonly loyalty?: SalesPointPublicLoyaltyCapability;
105
+ readonly entitlementCeiling?: SalesPointPublicEntitlementCeiling;
87
106
  readonly warnings?: ReadonlyArray<PublicConfigWarningCode>;
88
107
  } & SalesPointPublicConfigLocationFields) | ({
89
108
  readonly configVersion: number;
@@ -95,6 +114,7 @@ export type SalesPointPublicConfigV1 = ({
95
114
  readonly catalogMedia?: SalesPointPublicCatalogMedia;
96
115
  readonly outboxObligationsEnabled: boolean;
97
116
  readonly loyalty?: SalesPointPublicLoyaltyCapability;
117
+ readonly entitlementCeiling?: SalesPointPublicEntitlementCeiling;
98
118
  readonly warnings?: ReadonlyArray<PublicConfigWarningCode>;
99
119
  } & SalesPointPublicConfigLocationFields);
100
120
  /** Current contract version emitted by the backend. */
@@ -1 +1 @@
1
- {"version":3,"file":"salesPointPublicConfig.d.ts","sourceRoot":"","sources":["../../src/sales-point/salesPointPublicConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"salesPointPublicConfig.d.ts","sourceRoot":"","sources":["../../src/sales-point/salesPointPublicConfig.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,24 @@ export function parsePaymentRailsMobileFromCommerceConfig(commerceConfigJson) {
43
43
  gateway: rails.gateway === true,
44
44
  };
45
45
  }
46
+ /** WS/SSE disconnect reason when surface or transport block is off (§12.3). */
47
+ export const ENTITLEMENT_SURFACE_DISABLED_CODE = 'ENTITLEMENT_SURFACE_DISABLED';
48
+ export const DEFAULT_ENTITLED_PUBLIC_POSTURE = {
49
+ entitled: true,
50
+ allowReads: true,
51
+ allowWrites: true,
52
+ };
53
+ export function resolveSalesPointEntitlementCeiling(config) {
54
+ if (config.entitlementCeiling !== undefined) {
55
+ return config.entitlementCeiling;
56
+ }
57
+ return {
58
+ revision: 0,
59
+ surfaceKiosk: DEFAULT_ENTITLED_PUBLIC_POSTURE,
60
+ realtimeDeviceTransport: DEFAULT_ENTITLED_PUBLIC_POSTURE,
61
+ pickupMirrorMode: false,
62
+ };
63
+ }
46
64
  /** Current contract version emitted by the backend. */
47
65
  export const SALES_POINT_PUBLIC_CONFIG_VERSION = 5;
48
66
  //# sourceMappingURL=salesPointPublicConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"salesPointPublicConfig.js","sourceRoot":"","sources":["../../src/sales-point/salesPointPublicConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsEH,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,wCAAwC,CACtD,kBAAqE;IAErE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,iBAAiB,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI;QACzB,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI;QACzC,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;QACvC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,KAAK,IAAI;QACnD,cAAc,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;KAC9C,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,yCAAyC,CACvD,kBAAqE;IAErE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,kBAAkB,CAAC;IACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI;QACzC,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;KAChC,CAAC;AACJ,CAAC;AA6CD,uDAAuD;AACvD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"salesPointPublicConfig.js","sourceRoot":"","sources":["../../src/sales-point/salesPointPublicConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsEH,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,wCAAwC,CACtD,kBAAqE;IAErE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,iBAAiB,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI;QACzB,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI;QACzC,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;QACvC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,KAAK,IAAI;QACnD,cAAc,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;KAC9C,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,yCAAyC,CACvD,kBAAqE;IAErE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,kBAAkB,CAAC;IACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI;QACzC,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;KAChC,CAAC;AACJ,CAAC;AAoCD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iCAAiC,GAAG,8BAAuC,CAAC;AAEzF,MAAM,CAAC,MAAM,+BAA+B,GAA4C;IACtF,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,UAAU,mCAAmC,CACjD,MAA4D;IAE5D,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,kBAAkB,CAAC;IACnC,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,+BAA+B;QAC7C,uBAAuB,EAAE,+BAA+B;QACxD,gBAAgB,EAAE,KAAK;KACxB,CAAC;AACJ,CAAC;AA6BD,uDAAuD;AACvD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { SentryAppName } from './initSentry.js';
2
+ export interface RateLimitBreadcrumbContext {
3
+ readonly app: SentryAppName;
4
+ readonly path?: string;
5
+ readonly method?: string;
6
+ readonly retryAfterMs?: number;
7
+ }
8
+ /**
9
+ * Records a Sentry breadcrumb when a client observes HTTP 429 / rate limiting.
10
+ */
11
+ export declare function captureRateLimitBreadcrumb(context: RateLimitBreadcrumbContext): void;
12
+ //# sourceMappingURL=captureRateLimitBreadcrumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureRateLimitBreadcrumb.d.ts","sourceRoot":"","sources":["../../src/sentry/captureRateLimitBreadcrumb.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAgBpF"}
@@ -0,0 +1,23 @@
1
+ import * as Sentry from '@sentry/react';
2
+ /**
3
+ * Records a Sentry breadcrumb when a client observes HTTP 429 / rate limiting.
4
+ */
5
+ export function captureRateLimitBreadcrumb(context) {
6
+ try {
7
+ Sentry.addBreadcrumb({
8
+ category: 'rate_limit',
9
+ message: context.path !== undefined ? `HTTP 429 ${context.method ?? 'GET'} ${context.path}` : 'HTTP 429',
10
+ level: 'warning',
11
+ data: {
12
+ app: context.app,
13
+ path: context.path,
14
+ method: context.method,
15
+ retryAfterMs: context.retryAfterMs,
16
+ },
17
+ });
18
+ }
19
+ catch {
20
+ // Sentry optional in dev / when DSN unset
21
+ }
22
+ }
23
+ //# sourceMappingURL=captureRateLimitBreadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureRateLimitBreadcrumb.js","sourceRoot":"","sources":["../../src/sentry/captureRateLimitBreadcrumb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAWxC;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAmC;IAC5E,IAAI,CAAC;QACH,MAAM,CAAC,aAAa,CAAC;YACnB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU;YACxG,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE;gBACJ,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { ErrorInfo } from 'react';
2
- export type SentryAppName = 'admin' | 'kiosk' | 'customer';
2
+ export type SentryAppName = 'admin' | 'kiosk' | 'customer' | 'pickup';
3
3
  export interface InitSentryOptions {
4
4
  readonly dsn?: string;
5
5
  readonly environment?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"initSentry.d.ts","sourceRoot":"","sources":["../../src/sentry/initSentry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAsBD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CA0B3D;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CASN;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAgB7E"}
1
+ {"version":3,"file":"initSentry.d.ts","sourceRoot":"","sources":["../../src/sentry/initSentry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAsBD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CA0B3D;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CASN;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAgB7E"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Authoritative tenant entitlement block catalog — 44 blocks (§6.3).
3
+ * Code catalogVersion must stay in sync with DB seed (ENT-PR-01).
4
+ */
5
+ import type { EntitlementBlockCatalogEntry, EntitlementBlockKey } from './types.js';
6
+ import { ENTITLEMENT_BLOCK_KEYS, TENANT_ENTITLEMENT_BLOCK_COUNT, TENANT_ENTITLEMENT_CATALOG_VERSION } from './types.js';
7
+ export declare const TENANT_ENTITLEMENT_BLOCK_CATALOG: readonly EntitlementBlockCatalogEntry[];
8
+ export declare function isEntitlementBlockKey(value: string): value is EntitlementBlockKey;
9
+ export declare function getEntitlementBlockCatalogEntry(blockKey: EntitlementBlockKey): EntitlementBlockCatalogEntry;
10
+ export { TENANT_ENTITLEMENT_CATALOG_VERSION, TENANT_ENTITLEMENT_BLOCK_COUNT, ENTITLEMENT_BLOCK_KEYS, };
11
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/tenant-entitlements/catalog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,4BAA4B,EAC5B,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAYpB,eAAO,MAAM,gCAAgC,EAAE,SAAS,4BAA4B,EA8T1E,CAAC;AAmBX,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,mBAAmB,CAEjF;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,mBAAmB,GAC5B,4BAA4B,CAM9B;AAED,OAAO,EACL,kCAAkC,EAClC,8BAA8B,EAC9B,sBAAsB,GACvB,CAAC"}