@bernierllc/backoff-retry 0.1.1 → 0.3.0

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 (137) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +110 -0
  3. package/dist/enhancement-manager.d.ts +205 -0
  4. package/dist/enhancement-manager.d.ts.map +1 -0
  5. package/dist/enhancement-manager.js +533 -0
  6. package/dist/enhancement-manager.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +4 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/memory-protection.js +1 -1
  12. package/dist/memory-protection.js.map +1 -1
  13. package/dist/neveradmin/components/RetryAnalyticsPage.d.ts +15 -0
  14. package/dist/neveradmin/components/RetryAnalyticsPage.d.ts.map +1 -0
  15. package/dist/neveradmin/components/RetryAnalyticsPage.js +28 -0
  16. package/dist/neveradmin/components/RetryAnalyticsPage.js.map +1 -0
  17. package/dist/neveradmin/components/RetryConfigurationPage.d.ts +15 -0
  18. package/dist/neveradmin/components/RetryConfigurationPage.d.ts.map +1 -0
  19. package/dist/neveradmin/components/RetryConfigurationPage.js +28 -0
  20. package/dist/neveradmin/components/RetryConfigurationPage.js.map +1 -0
  21. package/dist/neveradmin/components/RetryEnhancementsPage.d.ts +15 -0
  22. package/dist/neveradmin/components/RetryEnhancementsPage.d.ts.map +1 -0
  23. package/dist/neveradmin/components/RetryEnhancementsPage.js +28 -0
  24. package/dist/neveradmin/components/RetryEnhancementsPage.js.map +1 -0
  25. package/dist/neveradmin/components/RetryOperationsPage.d.ts +15 -0
  26. package/dist/neveradmin/components/RetryOperationsPage.d.ts.map +1 -0
  27. package/dist/neveradmin/components/RetryOperationsPage.js +28 -0
  28. package/dist/neveradmin/components/RetryOperationsPage.js.map +1 -0
  29. package/dist/neveradmin/components/RetryOverviewPage.d.ts +15 -0
  30. package/dist/neveradmin/components/RetryOverviewPage.d.ts.map +1 -0
  31. package/dist/neveradmin/components/RetryOverviewPage.js +28 -0
  32. package/dist/neveradmin/components/RetryOverviewPage.js.map +1 -0
  33. package/dist/neveradmin/components/index.d.ts +7 -0
  34. package/dist/neveradmin/components/index.d.ts.map +1 -0
  35. package/dist/neveradmin/components/index.js +32 -0
  36. package/dist/neveradmin/components/index.js.map +1 -0
  37. package/dist/neveradmin/components/types.d.ts +64 -0
  38. package/dist/neveradmin/components/types.d.ts.map +1 -0
  39. package/dist/neveradmin/components/types.js +10 -0
  40. package/dist/neveradmin/components/types.js.map +1 -0
  41. package/dist/neveradmin/hooks/index.d.ts +5 -0
  42. package/dist/neveradmin/hooks/index.d.ts.map +1 -0
  43. package/dist/neveradmin/hooks/index.js +28 -0
  44. package/dist/neveradmin/hooks/index.js.map +1 -0
  45. package/dist/neveradmin/hooks/useRetryConfiguration.d.ts +23 -0
  46. package/dist/neveradmin/hooks/useRetryConfiguration.d.ts.map +1 -0
  47. package/dist/neveradmin/hooks/useRetryConfiguration.js +162 -0
  48. package/dist/neveradmin/hooks/useRetryConfiguration.js.map +1 -0
  49. package/dist/neveradmin/hooks/useRetryEnhancements.d.ts +39 -0
  50. package/dist/neveradmin/hooks/useRetryEnhancements.d.ts.map +1 -0
  51. package/dist/neveradmin/hooks/useRetryEnhancements.js +197 -0
  52. package/dist/neveradmin/hooks/useRetryEnhancements.js.map +1 -0
  53. package/dist/neveradmin/hooks/useRetryOperations.d.ts +28 -0
  54. package/dist/neveradmin/hooks/useRetryOperations.d.ts.map +1 -0
  55. package/dist/neveradmin/hooks/useRetryOperations.js +166 -0
  56. package/dist/neveradmin/hooks/useRetryOperations.js.map +1 -0
  57. package/dist/neveradmin/hooks/useRetryStats.d.ts +19 -0
  58. package/dist/neveradmin/hooks/useRetryStats.d.ts.map +1 -0
  59. package/dist/neveradmin/hooks/useRetryStats.js +81 -0
  60. package/dist/neveradmin/hooks/useRetryStats.js.map +1 -0
  61. package/dist/neveradmin/index.d.ts +6 -0
  62. package/dist/neveradmin/index.d.ts.map +1 -0
  63. package/dist/neveradmin/index.js +29 -0
  64. package/dist/neveradmin/index.js.map +1 -0
  65. package/dist/neveradmin/registration.d.ts +33 -0
  66. package/dist/neveradmin/registration.d.ts.map +1 -0
  67. package/dist/neveradmin/registration.js +96 -0
  68. package/dist/neveradmin/registration.js.map +1 -0
  69. package/dist/neveradmin/types.d.ts +88 -0
  70. package/dist/neveradmin/types.d.ts.map +1 -0
  71. package/dist/neveradmin/types.js +10 -0
  72. package/dist/neveradmin/types.js.map +1 -0
  73. package/dist/neveradmin/utils/formatting.d.ts +41 -0
  74. package/dist/neveradmin/utils/formatting.d.ts.map +1 -0
  75. package/dist/neveradmin/utils/formatting.js +142 -0
  76. package/dist/neveradmin/utils/formatting.js.map +1 -0
  77. package/dist/neveradmin/utils/index.d.ts +4 -0
  78. package/dist/neveradmin/utils/index.d.ts.map +1 -0
  79. package/dist/neveradmin/utils/index.js +27 -0
  80. package/dist/neveradmin/utils/index.js.map +1 -0
  81. package/dist/neveradmin/utils/permissions.d.ts +74 -0
  82. package/dist/neveradmin/utils/permissions.d.ts.map +1 -0
  83. package/dist/neveradmin/utils/permissions.js +152 -0
  84. package/dist/neveradmin/utils/permissions.js.map +1 -0
  85. package/dist/neveradmin/utils/validation.d.ts +38 -0
  86. package/dist/neveradmin/utils/validation.d.ts.map +1 -0
  87. package/dist/neveradmin/utils/validation.js +142 -0
  88. package/dist/neveradmin/utils/validation.js.map +1 -0
  89. package/dist/retry-manager.d.ts +32 -11
  90. package/dist/retry-manager.d.ts.map +1 -1
  91. package/dist/retry-manager.js +128 -82
  92. package/dist/retry-manager.js.map +1 -1
  93. package/dist/security/index.d.ts +3 -0
  94. package/dist/security/index.d.ts.map +1 -0
  95. package/dist/security/index.js +26 -0
  96. package/dist/security/index.js.map +1 -0
  97. package/dist/security/secure-storage.d.ts +61 -0
  98. package/dist/security/secure-storage.d.ts.map +1 -0
  99. package/dist/security/secure-storage.js +418 -0
  100. package/dist/security/secure-storage.js.map +1 -0
  101. package/dist/security/security-manager.d.ts +172 -0
  102. package/dist/security/security-manager.d.ts.map +1 -0
  103. package/dist/security/security-manager.js +417 -0
  104. package/dist/security/security-manager.js.map +1 -0
  105. package/dist/storage/backend-selector.d.ts +96 -0
  106. package/dist/storage/backend-selector.d.ts.map +1 -0
  107. package/dist/storage/backend-selector.js +466 -0
  108. package/dist/storage/backend-selector.js.map +1 -0
  109. package/dist/storage/index.d.ts +7 -0
  110. package/dist/storage/index.d.ts.map +1 -0
  111. package/dist/storage/index.js +30 -0
  112. package/dist/storage/index.js.map +1 -0
  113. package/dist/storage/memory-storage.d.ts +55 -0
  114. package/dist/storage/memory-storage.d.ts.map +1 -0
  115. package/dist/storage/memory-storage.js +106 -0
  116. package/dist/storage/memory-storage.js.map +1 -0
  117. package/dist/storage/postgresql-storage.d.ts +77 -0
  118. package/dist/storage/postgresql-storage.d.ts.map +1 -0
  119. package/dist/storage/postgresql-storage.js +314 -0
  120. package/dist/storage/postgresql-storage.js.map +1 -0
  121. package/dist/storage/redis-cluster-storage.d.ts +88 -0
  122. package/dist/storage/redis-cluster-storage.d.ts.map +1 -0
  123. package/dist/storage/redis-cluster-storage.js +414 -0
  124. package/dist/storage/redis-cluster-storage.js.map +1 -0
  125. package/dist/storage/redis-storage.d.ts +67 -0
  126. package/dist/storage/redis-storage.d.ts.map +1 -0
  127. package/dist/storage/redis-storage.js +236 -0
  128. package/dist/storage/redis-storage.js.map +1 -0
  129. package/dist/storage/types.d.ts +55 -0
  130. package/dist/storage/types.d.ts.map +1 -0
  131. package/dist/storage/types.js +10 -0
  132. package/dist/storage/types.js.map +1 -0
  133. package/dist/types.d.ts +7 -32
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +1 -0
  136. package/dist/types.js.map +1 -1
  137. package/package.json +15 -2
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.useRetryEnhancements = useRetryEnhancements;
11
+ const react_1 = require("react");
12
+ /**
13
+ * Hook for managing retry enhancements in NeverAdmin
14
+ */
15
+ function useRetryEnhancements(enhancementManager, options = {}) {
16
+ const { refreshInterval = 5000, autoRefresh = true } = options;
17
+ const [enhancements, setEnhancements] = (0, react_1.useState)([]);
18
+ const [recommendations, setRecommendations] = (0, react_1.useState)([]);
19
+ const [loading, setLoading] = (0, react_1.useState)(true);
20
+ const [error, setError] = (0, react_1.useState)(null);
21
+ const [lastUpdated, setLastUpdated] = (0, react_1.useState)(null);
22
+ const fetchEnhancements = (0, react_1.useCallback)(async () => {
23
+ try {
24
+ setLoading(true);
25
+ setError(null);
26
+ // Get active enhancements
27
+ const activeEnhancements = enhancementManager.getActiveEnhancements();
28
+ const metrics = enhancementManager.getMetrics();
29
+ const storageConfig = enhancementManager.getEnhancementConfig('storage');
30
+ const notificationsConfig = enhancementManager.getEnhancementConfig('notifications');
31
+ const analyticsConfig = enhancementManager.getEnhancementConfig('memoryProtection');
32
+ const mlConfig = enhancementManager.getEnhancementConfig('ml');
33
+ // Build enhancement status list
34
+ const enhancementStatuses = [
35
+ {
36
+ id: 'storage',
37
+ name: 'Storage Enhancement',
38
+ enabled: storageConfig?.enabled || false,
39
+ status: storageConfig?.enabled ? 'active' : 'inactive',
40
+ description: 'Enhanced storage backend with auto-upgrade capabilities',
41
+ config: {
42
+ type: storageConfig?.type || 'memory',
43
+ autoUpgrade: storageConfig?.autoUpgrade || false,
44
+ thresholdNotifications: storageConfig?.thresholdNotifications || false,
45
+ memoryThreshold: storageConfig?.memoryThreshold || 80
46
+ },
47
+ lastUpdated: new Date()
48
+ },
49
+ {
50
+ id: 'notifications',
51
+ name: 'Notification System',
52
+ enabled: notificationsConfig?.enabled || false,
53
+ status: notificationsConfig?.enabled ? 'active' : 'inactive',
54
+ description: 'Advanced notification system with multiple channels',
55
+ config: {
56
+ email: false, // Default values since we can't access nested properties
57
+ webhook: false,
58
+ slack: false,
59
+ pagerduty: false
60
+ },
61
+ lastUpdated: new Date()
62
+ },
63
+ {
64
+ id: 'analytics',
65
+ name: 'Advanced Analytics',
66
+ enabled: analyticsConfig?.enabled || false,
67
+ status: analyticsConfig?.enabled ? 'active' : 'inactive',
68
+ description: 'Advanced analytics and performance monitoring',
69
+ config: {
70
+ predictiveForecasting: analyticsConfig?.predictiveForecasting || false,
71
+ leakDetection: analyticsConfig?.leakDetection || false,
72
+ autoAdjustment: analyticsConfig?.autoAdjustment || false
73
+ },
74
+ lastUpdated: new Date()
75
+ },
76
+ {
77
+ id: 'ml',
78
+ name: 'Machine Learning',
79
+ enabled: mlConfig?.enabled || false,
80
+ status: mlConfig?.enabled ? 'active' : 'inactive',
81
+ description: 'ML-powered retry optimization and error classification',
82
+ config: {
83
+ predictiveRetry: mlConfig?.predictiveRetry || false,
84
+ errorClassification: mlConfig?.errorClassification || false,
85
+ performanceOptimization: mlConfig?.performanceOptimization || false
86
+ },
87
+ lastUpdated: new Date()
88
+ }
89
+ ];
90
+ setEnhancements(enhancementStatuses);
91
+ // Get recommendations
92
+ const rawRecommendations = enhancementManager.getRecommendations();
93
+ const enhancementRecommendations = rawRecommendations.map(rec => {
94
+ // Parse recommendation text to extract structured data
95
+ if (rec.includes('memory usage')) {
96
+ return {
97
+ id: 'upgrade-storage',
98
+ title: 'Upgrade Storage Backend',
99
+ description: rec,
100
+ priority: 'high',
101
+ impact: 'Improved performance and scalability',
102
+ action: 'Enable Redis or PostgreSQL storage',
103
+ estimatedTime: '5 minutes'
104
+ };
105
+ }
106
+ else if (rec.includes('performance')) {
107
+ return {
108
+ id: 'enable-analytics',
109
+ title: 'Enable Advanced Analytics',
110
+ description: rec,
111
+ priority: 'medium',
112
+ impact: 'Better monitoring and optimization',
113
+ action: 'Enable analytics enhancement',
114
+ estimatedTime: '2 minutes'
115
+ };
116
+ }
117
+ else {
118
+ return {
119
+ id: 'general-optimization',
120
+ title: 'General Optimization',
121
+ description: rec,
122
+ priority: 'low',
123
+ impact: 'Improved system efficiency',
124
+ action: 'Review and apply recommendations',
125
+ estimatedTime: '10 minutes'
126
+ };
127
+ }
128
+ });
129
+ setRecommendations(enhancementRecommendations);
130
+ setLastUpdated(new Date());
131
+ }
132
+ catch (err) {
133
+ setError(err instanceof Error ? err.message : 'Failed to fetch enhancements');
134
+ }
135
+ finally {
136
+ setLoading(false);
137
+ }
138
+ }, [enhancementManager]);
139
+ const enableEnhancement = (0, react_1.useCallback)(async (id, config) => {
140
+ try {
141
+ enhancementManager.enableEnhancement(id, config);
142
+ await fetchEnhancements();
143
+ return true;
144
+ }
145
+ catch (err) {
146
+ setError(err instanceof Error ? err.message : `Failed to enable enhancement: ${id}`);
147
+ return false;
148
+ }
149
+ }, [enhancementManager, fetchEnhancements]);
150
+ const disableEnhancement = (0, react_1.useCallback)(async (id) => {
151
+ try {
152
+ enhancementManager.disableEnhancement(id);
153
+ await fetchEnhancements();
154
+ return true;
155
+ }
156
+ catch (err) {
157
+ setError(err instanceof Error ? err.message : `Failed to disable enhancement: ${id}`);
158
+ return false;
159
+ }
160
+ }, [enhancementManager, fetchEnhancements]);
161
+ const updateEnhancementConfig = (0, react_1.useCallback)(async (id, config) => {
162
+ try {
163
+ // This would need to be implemented in EnhancementManager
164
+ // const result = enhancementManager.updateEnhancementConfig(id, config);
165
+ // For now, we'll just refresh the enhancements
166
+ await fetchEnhancements();
167
+ return true;
168
+ }
169
+ catch (err) {
170
+ setError(err instanceof Error ? err.message : `Failed to update enhancement config: ${id}`);
171
+ return false;
172
+ }
173
+ }, [fetchEnhancements]);
174
+ // Initial fetch
175
+ (0, react_1.useEffect)(() => {
176
+ fetchEnhancements();
177
+ }, [fetchEnhancements]);
178
+ // Auto-refresh
179
+ (0, react_1.useEffect)(() => {
180
+ if (!autoRefresh)
181
+ return;
182
+ const interval = setInterval(fetchEnhancements, refreshInterval);
183
+ return () => clearInterval(interval);
184
+ }, [fetchEnhancements, refreshInterval, autoRefresh]);
185
+ return {
186
+ enhancements,
187
+ recommendations,
188
+ loading,
189
+ error,
190
+ refresh: fetchEnhancements,
191
+ enableEnhancement,
192
+ disableEnhancement,
193
+ updateEnhancementConfig,
194
+ lastUpdated
195
+ };
196
+ }
197
+ //# sourceMappingURL=useRetryEnhancements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRetryEnhancements.js","sourceRoot":"","sources":["../../../src/neveradmin/hooks/useRetryEnhancements.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;AA6CF,oDA+LC;AA1OD,iCAAyD;AAwCzD;;GAEG;AACH,SAAgB,oBAAoB,CAClC,kBAAsC,EACtC,UAAuC,EAAE;IAEzC,MAAM,EAAE,eAAe,GAAG,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAsB,EAAE,CAAC,CAAC;IAC1E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAA8B,EAAE,CAAC,CAAC;IACxF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAc,IAAI,CAAC,CAAC;IAElE,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAC/C,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEf,0BAA0B;YAC1B,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;YACtE,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC;YAChD,MAAM,aAAa,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YACzE,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;YACrF,MAAM,eAAe,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;YACpF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAE/D,gCAAgC;YAChC,MAAM,mBAAmB,GAAwB;gBAC/C;oBACE,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,KAAK;oBACxC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;oBACtD,WAAW,EAAE,yDAAyD;oBACtE,MAAM,EAAE;wBACN,IAAI,EAAE,aAAa,EAAE,IAAI,IAAI,QAAQ;wBACrC,WAAW,EAAE,aAAa,EAAE,WAAW,IAAI,KAAK;wBAChD,sBAAsB,EAAE,aAAa,EAAE,sBAAsB,IAAI,KAAK;wBACtE,eAAe,EAAE,aAAa,EAAE,eAAe,IAAI,EAAE;qBACtD;oBACD,WAAW,EAAE,IAAI,IAAI,EAAE;iBACxB;gBACD;oBACE,EAAE,EAAE,eAAe;oBACnB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,mBAAmB,EAAE,OAAO,IAAI,KAAK;oBAC9C,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;oBAC5D,WAAW,EAAE,qDAAqD;oBAClE,MAAM,EAAE;wBACN,KAAK,EAAE,KAAK,EAAE,yDAAyD;wBACvE,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK;wBACZ,SAAS,EAAE,KAAK;qBACjB;oBACD,WAAW,EAAE,IAAI,IAAI,EAAE;iBACxB;gBACD;oBACE,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,eAAe,EAAE,OAAO,IAAI,KAAK;oBAC1C,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;oBACxD,WAAW,EAAE,+CAA+C;oBAC5D,MAAM,EAAE;wBACN,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,IAAI,KAAK;wBACtE,aAAa,EAAE,eAAe,EAAE,aAAa,IAAI,KAAK;wBACtD,cAAc,EAAE,eAAe,EAAE,cAAc,IAAI,KAAK;qBACzD;oBACD,WAAW,EAAE,IAAI,IAAI,EAAE;iBACxB;gBACD;oBACE,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,KAAK;oBACnC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;oBACjD,WAAW,EAAE,wDAAwD;oBACrE,MAAM,EAAE;wBACN,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,KAAK;wBACnD,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB,IAAI,KAAK;wBAC3D,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB,IAAI,KAAK;qBACpE;oBACD,WAAW,EAAE,IAAI,IAAI,EAAE;iBACxB;aACF,CAAC;YAEF,eAAe,CAAC,mBAAmB,CAAC,CAAC;YAErC,sBAAsB;YACtB,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;YACnE,MAAM,0BAA0B,GAAgC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3F,uDAAuD;gBACvD,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACjC,OAAO;wBACL,EAAE,EAAE,iBAAiB;wBACrB,KAAK,EAAE,yBAAyB;wBAChC,WAAW,EAAE,GAAG;wBAChB,QAAQ,EAAE,MAAM;wBAChB,MAAM,EAAE,sCAAsC;wBAC9C,MAAM,EAAE,oCAAoC;wBAC5C,aAAa,EAAE,WAAW;qBAC3B,CAAC;gBACJ,CAAC;qBAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBACvC,OAAO;wBACL,EAAE,EAAE,kBAAkB;wBACtB,KAAK,EAAE,2BAA2B;wBAClC,WAAW,EAAE,GAAG;wBAChB,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,oCAAoC;wBAC5C,MAAM,EAAE,8BAA8B;wBACtC,aAAa,EAAE,WAAW;qBAC3B,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO;wBACL,EAAE,EAAE,sBAAsB;wBAC1B,KAAK,EAAE,sBAAsB;wBAC7B,WAAW,EAAE,GAAG;wBAChB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,4BAA4B;wBACpC,MAAM,EAAE,kCAAkC;wBAC1C,aAAa,EAAE,YAAY;qBAC5B,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;YAC/C,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAChF,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EAAC,KAAK,EAAE,EAAU,EAAE,MAA4B,EAAoB,EAAE;QACzG,IAAI,CAAC;YACH,kBAAkB,CAAC,iBAAiB,CAAC,EAAS,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,iBAAiB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;YACrF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE5C,MAAM,kBAAkB,GAAG,IAAA,mBAAW,EAAC,KAAK,EAAE,EAAU,EAAoB,EAAE;QAC5E,IAAI,CAAC;YACH,kBAAkB,CAAC,kBAAkB,CAAC,EAAS,CAAC,CAAC;YACjD,MAAM,iBAAiB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;YACtF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE5C,MAAM,uBAAuB,GAAG,IAAA,mBAAW,EAAC,KAAK,EAAE,EAAU,EAAE,MAA2B,EAAoB,EAAE;QAC9G,IAAI,CAAC;YACH,0DAA0D;YAC1D,yEAAyE;YAEzE,+CAA+C;YAC/C,MAAM,iBAAiB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;YAC5F,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,gBAAgB;IAChB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,iBAAiB,EAAE,CAAC;IACtB,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,eAAe;IACf,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QACjE,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,iBAAiB,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IAEtD,OAAO;QACL,YAAY;QACZ,eAAe;QACf,OAAO;QACP,KAAK;QACL,OAAO,EAAE,iBAAiB;QAC1B,iBAAiB;QACjB,kBAAkB;QAClB,uBAAuB;QACvB,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { RetryManager } from '../../retry-manager';
2
+ import { RetryOperation, RetryFilterOptions, RetryBulkAction } from '../types';
3
+ export interface UseRetryOperationsOptions {
4
+ refreshInterval?: number;
5
+ autoRefresh?: boolean;
6
+ defaultFilters?: RetryFilterOptions;
7
+ }
8
+ export interface UseRetryOperationsReturn {
9
+ operations: RetryOperation[];
10
+ loading: boolean;
11
+ error: string | null;
12
+ refresh: () => Promise<void>;
13
+ filter: (options: RetryFilterOptions) => Promise<void>;
14
+ cancelRetry: (retryId: string) => Promise<boolean>;
15
+ retryOperation: (retryId: string) => Promise<boolean>;
16
+ bulkAction: (action: RetryBulkAction) => Promise<{
17
+ success: string[];
18
+ failed: string[];
19
+ }>;
20
+ lastUpdated: Date | null;
21
+ totalCount: number;
22
+ filteredCount: number;
23
+ }
24
+ /**
25
+ * Hook for managing retry operations in NeverAdmin
26
+ */
27
+ export declare function useRetryOperations(retryManager: RetryManager, options?: UseRetryOperationsOptions): UseRetryOperationsReturn;
28
+ //# sourceMappingURL=useRetryOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRetryOperations.d.ts","sourceRoot":"","sources":["../../../src/neveradmin/hooks/useRetryOperations.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE/E,MAAM,WAAW,yBAAyB;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,UAAU,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC1F,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CA4K1B"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.useRetryOperations = useRetryOperations;
11
+ const react_1 = require("react");
12
+ /**
13
+ * Hook for managing retry operations in NeverAdmin
14
+ */
15
+ function useRetryOperations(retryManager, options = {}) {
16
+ const { refreshInterval = 5000, autoRefresh = true, defaultFilters = {} } = options;
17
+ const [operations, setOperations] = (0, react_1.useState)([]);
18
+ const [loading, setLoading] = (0, react_1.useState)(true);
19
+ const [error, setError] = (0, react_1.useState)(null);
20
+ const [lastUpdated, setLastUpdated] = (0, react_1.useState)(null);
21
+ const [currentFilters, setCurrentFilters] = (0, react_1.useState)(defaultFilters);
22
+ const [totalCount, setTotalCount] = (0, react_1.useState)(0);
23
+ const [filteredCount, setFilteredCount] = (0, react_1.useState)(0);
24
+ const fetchOperations = (0, react_1.useCallback)(async (filters = {}) => {
25
+ try {
26
+ setLoading(true);
27
+ setError(null);
28
+ // Get all retry states from RetryManager
29
+ const retryStates = await retryManager.listRetryStates();
30
+ // Convert to RetryOperation format
31
+ const allOperations = retryStates.map((state) => ({
32
+ id: state.id,
33
+ status: state.status,
34
+ operation: state.operation,
35
+ attempts: state.attempts,
36
+ maxAttempts: state.maxAttempts,
37
+ lastAttempt: new Date(state.lastAttempt),
38
+ nextRetry: state.nextRetry ? new Date(state.nextRetry) : undefined,
39
+ totalTime: state.totalTime,
40
+ error: state.error?.message,
41
+ metadata: state.metadata
42
+ }));
43
+ setTotalCount(allOperations.length);
44
+ // Apply filters
45
+ let filteredOperations = allOperations;
46
+ if (filters.status && filters.status.length > 0) {
47
+ filteredOperations = filteredOperations.filter(op => filters.status.includes(op.status));
48
+ }
49
+ if (filters.operation) {
50
+ filteredOperations = filteredOperations.filter(op => op.operation.toLowerCase().includes(filters.operation.toLowerCase()));
51
+ }
52
+ if (filters.dateRange) {
53
+ filteredOperations = filteredOperations.filter(op => {
54
+ const lastAttempt = op.lastAttempt;
55
+ return lastAttempt >= filters.dateRange.start && lastAttempt <= filters.dateRange.end;
56
+ });
57
+ }
58
+ // Apply pagination
59
+ if (filters.limit || filters.offset) {
60
+ const offset = filters.offset || 0;
61
+ const limit = filters.limit || filteredOperations.length;
62
+ filteredOperations = filteredOperations.slice(offset, offset + limit);
63
+ }
64
+ setOperations(filteredOperations);
65
+ setFilteredCount(filteredOperations.length);
66
+ setLastUpdated(new Date());
67
+ }
68
+ catch (err) {
69
+ setError(err instanceof Error ? err.message : 'Failed to fetch retry operations');
70
+ }
71
+ finally {
72
+ setLoading(false);
73
+ }
74
+ }, [retryManager]);
75
+ const filter = (0, react_1.useCallback)(async (options) => {
76
+ setCurrentFilters(options);
77
+ await fetchOperations(options);
78
+ }, [fetchOperations]);
79
+ const cancelRetry = (0, react_1.useCallback)(async (retryId) => {
80
+ try {
81
+ await retryManager.cancelRetry(retryId);
82
+ // Refresh operations after cancellation
83
+ await fetchOperations(currentFilters);
84
+ return true;
85
+ }
86
+ catch (err) {
87
+ setError(err instanceof Error ? err.message : 'Failed to cancel retry');
88
+ return false;
89
+ }
90
+ }, [retryManager, fetchOperations, currentFilters]);
91
+ const retryOperation = (0, react_1.useCallback)(async (retryId) => {
92
+ try {
93
+ // Find the operation and retry it
94
+ const operation = operations.find(op => op.id === retryId);
95
+ if (!operation) {
96
+ throw new Error('Operation not found');
97
+ }
98
+ // This would need to be implemented in RetryManager
99
+ // For now, we'll just refresh the operations
100
+ await fetchOperations(currentFilters);
101
+ return true;
102
+ }
103
+ catch (err) {
104
+ setError(err instanceof Error ? err.message : 'Failed to retry operation');
105
+ return false;
106
+ }
107
+ }, [operations, fetchOperations, currentFilters]);
108
+ const bulkAction = (0, react_1.useCallback)(async (action) => {
109
+ const success = [];
110
+ const failed = [];
111
+ for (const retryId of action.retryIds) {
112
+ try {
113
+ let result = false;
114
+ switch (action.action) {
115
+ case 'cancel':
116
+ result = await cancelRetry(retryId);
117
+ break;
118
+ case 'retry':
119
+ result = await retryOperation(retryId);
120
+ break;
121
+ case 'delete':
122
+ // This would need to be implemented in RetryManager
123
+ result = true;
124
+ break;
125
+ }
126
+ if (result) {
127
+ success.push(retryId);
128
+ }
129
+ else {
130
+ failed.push(retryId);
131
+ }
132
+ }
133
+ catch (err) {
134
+ failed.push(retryId);
135
+ }
136
+ }
137
+ // Refresh operations after bulk action
138
+ await fetchOperations(currentFilters);
139
+ return { success, failed };
140
+ }, [cancelRetry, retryOperation, fetchOperations, currentFilters]);
141
+ // Initial fetch
142
+ (0, react_1.useEffect)(() => {
143
+ fetchOperations(currentFilters);
144
+ }, [fetchOperations, currentFilters]);
145
+ // Auto-refresh
146
+ (0, react_1.useEffect)(() => {
147
+ if (!autoRefresh)
148
+ return;
149
+ const interval = setInterval(() => fetchOperations(currentFilters), refreshInterval);
150
+ return () => clearInterval(interval);
151
+ }, [fetchOperations, currentFilters, refreshInterval, autoRefresh]);
152
+ return {
153
+ operations,
154
+ loading,
155
+ error,
156
+ refresh: () => fetchOperations(currentFilters),
157
+ filter,
158
+ cancelRetry,
159
+ retryOperation,
160
+ bulkAction,
161
+ lastUpdated,
162
+ totalCount,
163
+ filteredCount
164
+ };
165
+ }
166
+ //# sourceMappingURL=useRetryOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRetryOperations.js","sourceRoot":"","sources":["../../../src/neveradmin/hooks/useRetryOperations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { RetryManager } from '../../retry-manager';
2
+ import { EnhancementManager } from '../../enhancement-manager';
3
+ import { RetryOverviewStats } from '../types';
4
+ export interface UseRetryStatsOptions {
5
+ refreshInterval?: number;
6
+ autoRefresh?: boolean;
7
+ }
8
+ export interface UseRetryStatsReturn {
9
+ stats: RetryOverviewStats | null;
10
+ loading: boolean;
11
+ error: string | null;
12
+ refresh: () => Promise<void>;
13
+ lastUpdated: Date | null;
14
+ }
15
+ /**
16
+ * Hook for managing retry statistics in NeverAdmin
17
+ */
18
+ export declare function useRetryStats(retryManager: RetryManager, enhancementManager: EnhancementManager, options?: UseRetryStatsOptions): UseRetryStatsReturn;
19
+ //# sourceMappingURL=useRetryStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRetryStats.d.ts","sourceRoot":"","sources":["../../../src/neveradmin/hooks/useRetryStats.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CA6ErB"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.useRetryStats = useRetryStats;
11
+ const react_1 = require("react");
12
+ /**
13
+ * Hook for managing retry statistics in NeverAdmin
14
+ */
15
+ function useRetryStats(retryManager, enhancementManager, options = {}) {
16
+ const { refreshInterval = 5000, autoRefresh = true } = options;
17
+ const [stats, setStats] = (0, react_1.useState)(null);
18
+ const [loading, setLoading] = (0, react_1.useState)(true);
19
+ const [error, setError] = (0, react_1.useState)(null);
20
+ const [lastUpdated, setLastUpdated] = (0, react_1.useState)(null);
21
+ const fetchStats = (0, react_1.useCallback)(async () => {
22
+ try {
23
+ setLoading(true);
24
+ setError(null);
25
+ // Get retry metrics from RetryManager
26
+ const retryMetrics = retryManager.getMetrics();
27
+ // Get enhancement metrics from EnhancementManager
28
+ const enhancementMetrics = enhancementManager.getMetrics();
29
+ // Get memory protection stats
30
+ const memoryProtection = retryManager.getMemoryStats();
31
+ // Calculate success rate
32
+ const totalRetries = retryMetrics.totalRetries;
33
+ const successfulRetries = retryMetrics.successfulRetries;
34
+ const successRate = totalRetries > 0 ? (successfulRetries / totalRetries) * 100 : 0;
35
+ // Get active retries
36
+ const retryStates = await retryManager.listRetryStates();
37
+ const activeRetries = retryStates.filter((state) => state.status === 'pending' || state.status === 'retrying').length;
38
+ const statsData = {
39
+ totalRetries,
40
+ successfulRetries,
41
+ failedRetries: retryMetrics.failedRetries,
42
+ successRate,
43
+ averageRetryTime: retryMetrics.averageRetryTime,
44
+ activeRetries,
45
+ memoryUsage: {
46
+ current: memoryProtection.currentUsage,
47
+ max: memoryProtection.maxUsage,
48
+ percentage: memoryProtection.usagePercentage
49
+ },
50
+ performanceScore: enhancementMetrics.performanceScore
51
+ };
52
+ setStats(statsData);
53
+ setLastUpdated(new Date());
54
+ }
55
+ catch (err) {
56
+ setError(err instanceof Error ? err.message : 'Failed to fetch retry stats');
57
+ }
58
+ finally {
59
+ setLoading(false);
60
+ }
61
+ }, [retryManager, enhancementManager]);
62
+ // Initial fetch
63
+ (0, react_1.useEffect)(() => {
64
+ fetchStats();
65
+ }, [fetchStats]);
66
+ // Auto-refresh
67
+ (0, react_1.useEffect)(() => {
68
+ if (!autoRefresh)
69
+ return;
70
+ const interval = setInterval(fetchStats, refreshInterval);
71
+ return () => clearInterval(interval);
72
+ }, [fetchStats, refreshInterval, autoRefresh]);
73
+ return {
74
+ stats,
75
+ loading,
76
+ error,
77
+ refresh: fetchStats,
78
+ lastUpdated
79
+ };
80
+ }
81
+ //# sourceMappingURL=useRetryStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRetryStats.js","sourceRoot":"","sources":["../../../src/neveradmin/hooks/useRetryStats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './components';
2
+ export * from './hooks';
3
+ export * from './types';
4
+ export * from './utils';
5
+ export * from './registration';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/neveradmin/index.ts"],"names":[],"mappings":"AAQA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ __exportStar(require("./components"), exports);
25
+ __exportStar(require("./hooks"), exports);
26
+ __exportStar(require("./types"), exports);
27
+ __exportStar(require("./utils"), exports);
28
+ __exportStar(require("./registration"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/neveradmin/index.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;;;;;;;;;;;;;;AAEF,+CAA6B;AAC7B,0CAAwB;AACxB,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B"}
@@ -0,0 +1,33 @@
1
+ import { RetryManager } from '../retry-manager';
2
+ import { EnhancementManager } from '../enhancement-manager';
3
+ export interface NeverAdminUtilityRegistration {
4
+ id: string;
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ icon?: string;
9
+ permissions: string[];
10
+ pages: NeverAdminPageRegistration[];
11
+ hooks: string[];
12
+ config: Record<string, any>;
13
+ }
14
+ export interface NeverAdminPageRegistration {
15
+ path: string;
16
+ title: string;
17
+ component: string;
18
+ permissions: string[];
19
+ icon?: string;
20
+ description?: string;
21
+ }
22
+ /**
23
+ * Registers the backoff-retry utility with NeverAdmin
24
+ */
25
+ export declare function registerBackoffRetryUtility(retryManager: RetryManager, enhancementManager: EnhancementManager): NeverAdminUtilityRegistration;
26
+ /**
27
+ * Creates the NeverAdmin context for backoff-retry
28
+ */
29
+ export declare function createRetryAdminContext(retryManager: RetryManager, enhancementManager: EnhancementManager): {
30
+ retryManager: RetryManager;
31
+ enhancementManager: EnhancementManager;
32
+ };
33
+ //# sourceMappingURL=registration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../../src/neveradmin/registration.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,0BAA0B,EAAE,CAAC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,kBAAkB,GACrC,6BAA6B,CAsE/B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,kBAAkB;;;EAOvC"}