@revealui/core 0.2.1 → 0.5.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.
- package/dist/api/compression.d.ts.map +1 -1
- package/dist/api/payload-optimization.d.ts.map +1 -1
- package/dist/api/rate-limit.d.ts +29 -28
- package/dist/api/rate-limit.d.ts.map +1 -1
- package/dist/api/rate-limit.js +63 -3
- package/dist/api/response-cache.d.ts.map +1 -1
- package/dist/api/response-cache.js +1 -1
- package/dist/api/rest.d.ts.map +1 -1
- package/dist/api/rest.js +3 -2
- package/dist/auth/access.d.ts.map +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/cache/query-cache.d.ts +12 -10
- package/dist/cache/query-cache.d.ts.map +1 -1
- package/dist/cache/query-cache.js +38 -42
- package/dist/caching/index.d.ts +6 -0
- package/dist/caching/index.d.ts.map +1 -0
- package/dist/caching/index.js +5 -0
- package/dist/client/admin/RichText.d.ts +1 -1
- package/dist/client/admin/RichText.d.ts.map +1 -1
- package/dist/client/admin/components/AdminDashboard.d.ts.map +1 -1
- package/dist/client/admin/components/AdminDashboard.js +195 -205
- package/dist/client/admin/components/CollectionList.d.ts.map +1 -1
- package/dist/client/admin/components/DocumentForm.d.ts.map +1 -1
- package/dist/client/admin/components/DocumentForm.js +130 -6
- package/dist/client/admin/components/GlobalForm.d.ts.map +1 -1
- package/dist/client/admin/context/ServerFunctionContext.d.ts +8 -0
- package/dist/client/admin/context/ServerFunctionContext.d.ts.map +1 -0
- package/dist/client/admin/context/ServerFunctionContext.js +15 -0
- package/dist/client/admin/i18n/en.d.ts.map +1 -1
- package/dist/client/admin/index.d.ts +1 -0
- package/dist/client/admin/index.d.ts.map +1 -1
- package/dist/client/admin/index.js +1 -0
- package/dist/client/admin/layout.d.ts +1 -1
- package/dist/client/admin/layout.d.ts.map +1 -1
- package/dist/client/admin/layout.js +3 -2
- package/dist/client/admin/page.d.ts.map +1 -1
- package/dist/client/admin/utils/apiClient.d.ts.map +1 -1
- package/dist/client/admin/utils/apiClient.js +0 -4
- package/dist/client/admin/utils/index.d.ts +0 -1
- package/dist/client/admin/utils/index.d.ts.map +1 -1
- package/dist/client/admin/utils/index.js +0 -1
- package/dist/client/admin/utils/serializeConfig.d.ts.map +1 -1
- package/dist/client/hooks.d.ts.map +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/richtext/RichTextEditor.d.ts.map +1 -1
- package/dist/client/richtext/components/ImageNodeComponent.d.ts.map +1 -1
- package/dist/client/richtext/components/ImageNodeComponent.js +0 -1
- package/dist/client/richtext/components/ImageUploadButton.d.ts +2 -0
- package/dist/client/richtext/components/ImageUploadButton.d.ts.map +1 -1
- package/dist/client/richtext/components/ImageUploadButton.js +30 -15
- package/dist/client/richtext/index.d.ts.map +1 -1
- package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts.map +1 -1
- package/dist/client/richtext/nodes/ImageNode.d.ts.map +1 -1
- package/dist/client/richtext/plugins/CollaborationPlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.js +1 -3
- package/dist/client/richtext/plugins/ImagePlugin.d.ts.map +1 -1
- package/dist/client/richtext/plugins/ToolbarPlugin.d.ts.map +1 -1
- package/dist/client/ui/index.d.ts.map +1 -1
- package/dist/client/ui/index.js +1 -1
- package/dist/collections/CollectionOperations.d.ts +7 -7
- package/dist/collections/CollectionOperations.d.ts.map +1 -1
- package/dist/collections/CollectionOperations.js +15 -1
- package/dist/collections/hooks.d.ts.map +1 -1
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/operations/create.d.ts +4 -5
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +35 -6
- package/dist/collections/operations/createMany.d.ts +12 -0
- package/dist/collections/operations/createMany.d.ts.map +1 -0
- package/dist/collections/operations/createMany.js +43 -0
- package/dist/collections/operations/delete.d.ts +1 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +31 -2
- package/dist/collections/operations/deleteMany.d.ts +11 -0
- package/dist/collections/operations/deleteMany.d.ts.map +1 -0
- package/dist/collections/operations/deleteMany.js +50 -0
- package/dist/collections/operations/fieldHooks.d.ts +2 -2
- package/dist/collections/operations/fieldHooks.d.ts.map +1 -1
- package/dist/collections/operations/fieldHooks.js +4 -4
- package/dist/collections/operations/find.d.ts +2 -4
- package/dist/collections/operations/find.d.ts.map +1 -1
- package/dist/collections/operations/find.js +115 -8
- package/dist/collections/operations/findById.d.ts +3 -4
- package/dist/collections/operations/findById.d.ts.map +1 -1
- package/dist/collections/operations/findById.js +53 -1
- package/dist/collections/operations/sqlAdapter.d.ts +23 -0
- package/dist/collections/operations/sqlAdapter.d.ts.map +1 -0
- package/dist/collections/operations/sqlAdapter.js +76 -0
- package/dist/collections/operations/update.d.ts +3 -5
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +103 -11
- package/dist/collections/operations/updateMany.d.ts +11 -0
- package/dist/collections/operations/updateMany.d.ts.map +1 -0
- package/dist/collections/operations/updateMany.js +52 -0
- package/dist/collections/registry.d.ts +12 -0
- package/dist/collections/registry.d.ts.map +1 -0
- package/dist/collections/registry.js +38 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/utils.d.ts +0 -10
- package/dist/config/utils.d.ts.map +1 -1
- package/dist/config/utils.js +0 -13
- package/dist/database/index.d.ts +3 -0
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +1 -5
- package/dist/database/safe-parse.d.ts.map +1 -1
- package/dist/database/ssl-config.d.ts.map +1 -1
- package/dist/database/type-adapter.d.ts.map +1 -1
- package/dist/database/universal-postgres.d.ts.map +1 -1
- package/dist/database/universal-postgres.js +6 -1
- package/dist/dataloader.d.ts.map +1 -1
- package/dist/error-handling/error-boundary.d.ts.map +1 -1
- package/dist/error-handling/error-reporter.d.ts +1 -1
- package/dist/error-handling/error-reporter.d.ts.map +1 -1
- package/dist/error-handling/error-reporter.js +19 -5
- package/dist/error-handling/fallback-components.d.ts.map +1 -1
- package/dist/error-handling/fallback-components.js +1 -1
- package/dist/error-handling/index.d.ts +2 -4
- package/dist/error-handling/index.d.ts.map +1 -1
- package/dist/error-handling/index.js +1 -4
- package/dist/factories/builders.d.ts.map +1 -1
- package/dist/factories/index.d.ts.map +1 -1
- package/dist/features.d.ts +7 -7
- package/dist/features.d.ts.map +1 -1
- package/dist/features.js +2 -2
- package/dist/fieldTraversal.d.ts.map +1 -1
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/getDefaultValue.d.ts.map +1 -1
- package/dist/fields/getFieldPaths.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/generated/types/cms.d.ts.map +1 -1
- package/dist/generated/types/cms.js +0 -1
- package/dist/generated/types/neon.d.ts.map +1 -1
- package/dist/generated/types/neon.js +4 -2
- package/dist/globals/GlobalOperations.d.ts.map +1 -1
- package/dist/globals/GlobalOperations.js +16 -4
- package/dist/globals/index.d.ts.map +1 -1
- package/dist/index.d.ts +15 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/instance/RevealUIInstance.d.ts.map +1 -1
- package/dist/instance/RevealUIInstance.js +6 -19
- package/dist/instance/index.d.ts.map +1 -1
- package/dist/instance/logger.d.ts.map +1 -1
- package/dist/instance/methods/create.d.ts.map +1 -1
- package/dist/instance/methods/create.js +0 -3
- package/dist/instance/methods/delete.d.ts.map +1 -1
- package/dist/instance/methods/delete.js +1 -4
- package/dist/instance/methods/find.d.ts.map +1 -1
- package/dist/instance/methods/find.js +0 -3
- package/dist/instance/methods/findById.d.ts.map +1 -1
- package/dist/instance/methods/findById.js +0 -3
- package/dist/instance/methods/hooks.d.ts.map +1 -1
- package/dist/instance/methods/update.d.ts.map +1 -1
- package/dist/instance/methods/update.js +0 -3
- package/dist/jobs/index.d.ts +16 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +14 -0
- package/dist/jobs/queue.d.ts +57 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +134 -0
- package/dist/license-encryption.d.ts +21 -0
- package/dist/license-encryption.d.ts.map +1 -0
- package/dist/license-encryption.js +74 -0
- package/dist/license.d.ts +26 -3
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +87 -7
- package/dist/monitoring/alerts.d.ts +4 -4
- package/dist/monitoring/alerts.d.ts.map +1 -1
- package/dist/monitoring/cleanup-manager.d.ts.map +1 -1
- package/dist/monitoring/health-monitor.d.ts.map +1 -1
- package/dist/monitoring/index.d.ts.map +1 -1
- package/dist/monitoring/process-registry.d.ts.map +1 -1
- package/dist/monitoring/query-monitor.d.ts.map +1 -1
- package/dist/monitoring/types.d.ts.map +1 -1
- package/dist/monitoring/zombie-detector.d.ts.map +1 -1
- package/dist/monitoring/zombie-detector.js +5 -0
- package/dist/nextjs/index.d.ts.map +1 -1
- package/dist/nextjs/utilities.d.ts.map +1 -1
- package/dist/nextjs/withRevealUI.d.ts.map +1 -1
- package/dist/observability/alerts.d.ts.map +1 -1
- package/dist/observability/alerts.js +1 -2
- package/dist/observability/health-check.d.ts +0 -4
- package/dist/observability/health-check.d.ts.map +1 -1
- package/dist/observability/health-check.js +0 -36
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/logger.d.ts.map +1 -1
- package/dist/observability/logger.js +1 -1
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/tracing.d.ts.map +1 -1
- package/dist/observability/tracing.js +0 -1
- package/dist/plugins/form-builder.d.ts.map +1 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/nested-docs.d.ts +4 -0
- package/dist/plugins/nested-docs.d.ts.map +1 -1
- package/dist/plugins/nested-docs.js +50 -6
- package/dist/plugins/redirects.d.ts.map +1 -1
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/queryBuilder.d.ts.map +1 -1
- package/dist/queries/queryBuilder.js +13 -5
- package/dist/relationships/analyzer.d.ts.map +1 -1
- package/dist/relationships/analyzer.js +8 -0
- package/dist/relationships/index.d.ts.map +1 -1
- package/dist/relationships/populate-core.d.ts +57 -0
- package/dist/relationships/populate-core.d.ts.map +1 -0
- package/dist/relationships/populate-core.js +116 -0
- package/dist/relationships/populate-helpers.d.ts +5 -51
- package/dist/relationships/populate-helpers.d.ts.map +1 -1
- package/dist/relationships/populate-helpers.js +4 -109
- package/dist/relationships/population.d.ts +1 -9
- package/dist/relationships/population.d.ts.map +1 -1
- package/dist/relationships/population.js +8 -3
- package/dist/revealui.d.ts.map +1 -1
- package/dist/richtext/exports/client/rcc.d.ts.map +1 -1
- package/dist/richtext/exports/client/rcc.js +1 -1
- package/dist/richtext/exports/server/rsc.d.ts +17 -0
- package/dist/richtext/exports/server/rsc.d.ts.map +1 -1
- package/dist/richtext/exports/server/rsc.js +61 -5
- package/dist/richtext/index.d.ts.map +1 -1
- package/dist/richtext/lexical.d.ts.map +1 -1
- package/dist/security/index.d.ts +3 -16
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +3 -16
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/renderPage.d.ts.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +2 -4
- package/dist/storage/vercel-blob.d.ts.map +1 -1
- package/dist/storage/vercel-blob.js +3 -0
- package/dist/translations/index.d.ts.map +1 -1
- package/dist/types/access.d.ts.map +1 -1
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/cms.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/core.d.ts +1 -1
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/extensions.d.ts.map +1 -1
- package/dist/types/frontend.d.ts.map +1 -1
- package/dist/types/generated.d.ts.map +1 -1
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/interfaces/app.d.ts.map +1 -1
- package/dist/types/jobs.d.ts.map +1 -1
- package/dist/types/legacy.d.ts.map +1 -1
- package/dist/types/plugins.d.ts.map +1 -1
- package/dist/types/query.d.ts.map +1 -1
- package/dist/types/request.d.ts.map +1 -1
- package/dist/types/richtext.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +60 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/types/user.d.ts.map +1 -1
- package/dist/utils/access-conversion.d.ts.map +1 -1
- package/dist/utils/api-wrapper.d.ts.map +1 -1
- package/dist/utils/api-wrapper.js +1 -1
- package/dist/utils/block-conversion.d.ts.map +1 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/deep-clone.js +0 -1
- package/dist/utils/error-responses.d.ts.map +1 -1
- package/dist/utils/error-responses.js +2 -3
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +103 -0
- package/dist/utils/field-conversion.d.ts +1 -1
- package/dist/utils/field-conversion.d.ts.map +1 -1
- package/dist/utils/flattenResult.d.ts.map +1 -1
- package/dist/utils/flattenResult.js +0 -1
- package/dist/utils/getBlockSelect.d.ts.map +1 -1
- package/dist/utils/getSelectMode.d.ts.map +1 -1
- package/dist/utils/isValidID.d.ts.map +1 -1
- package/dist/utils/json-parsing.d.ts.map +1 -1
- package/dist/utils/logger-client.d.ts.map +1 -1
- package/dist/utils/logger-server.d.ts.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/request-context.d.ts.map +1 -1
- package/dist/utils/stripUnselectedFields.d.ts.map +1 -1
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/package.json +58 -26
- package/dist/caching/app-cache.d.ts +0 -237
- package/dist/caching/app-cache.d.ts.map +0 -1
- package/dist/caching/app-cache.js +0 -430
- package/dist/caching/cdn-config.d.ts +0 -155
- package/dist/caching/cdn-config.d.ts.map +0 -1
- package/dist/caching/cdn-config.js +0 -411
- package/dist/caching/edge-cache.d.ts +0 -177
- package/dist/caching/edge-cache.d.ts.map +0 -1
- package/dist/caching/edge-cache.js +0 -385
- package/dist/caching/service-worker.d.ts +0 -154
- package/dist/caching/service-worker.d.ts.map +0 -1
- package/dist/caching/service-worker.js +0 -437
- package/dist/client/admin/utils/auth.d.ts +0 -23
- package/dist/client/admin/utils/auth.d.ts.map +0 -1
- package/dist/client/admin/utils/auth.js +0 -52
- package/dist/client/http/client.d.ts +0 -15
- package/dist/client/http/client.d.ts.map +0 -1
- package/dist/client/http/client.js +0 -49
- package/dist/client/http/fetchBanner.d.ts +0 -18
- package/dist/client/http/fetchBanner.d.ts.map +0 -1
- package/dist/client/http/fetchBanner.js +0 -44
- package/dist/client/http/fetchCard.d.ts +0 -18
- package/dist/client/http/fetchCard.d.ts.map +0 -1
- package/dist/client/http/fetchCard.js +0 -46
- package/dist/client/http/fetchEvents.d.ts +0 -18
- package/dist/client/http/fetchEvents.d.ts.map +0 -1
- package/dist/client/http/fetchEvents.js +0 -44
- package/dist/client/http/fetchHero.d.ts +0 -17
- package/dist/client/http/fetchHero.d.ts.map +0 -1
- package/dist/client/http/fetchHero.js +0 -55
- package/dist/client/http/fetchMainInfos.d.ts +0 -17
- package/dist/client/http/fetchMainInfos.d.ts.map +0 -1
- package/dist/client/http/fetchMainInfos.js +0 -44
- package/dist/client/http/fetchVideos.d.ts +0 -13
- package/dist/client/http/fetchVideos.d.ts.map +0 -1
- package/dist/client/http/fetchVideos.js +0 -36
- package/dist/client/http/index.d.ts +0 -19
- package/dist/client/http/index.d.ts.map +0 -1
- package/dist/client/http/index.js +0 -11
- package/dist/error-handling/circuit-breaker.d.ts +0 -262
- package/dist/error-handling/circuit-breaker.d.ts.map +0 -1
- package/dist/error-handling/circuit-breaker.js +0 -542
- package/dist/error-handling/retry.d.ts +0 -194
- package/dist/error-handling/retry.d.ts.map +0 -1
- package/dist/error-handling/retry.js +0 -450
- package/dist/errors/index.d.ts +0 -23
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -40
- package/dist/generated/agents/index.d.ts +0 -8
- package/dist/generated/agents/index.d.ts.map +0 -1
- package/dist/generated/agents/index.js +0 -7
- package/dist/generated/components/index.d.ts +0 -8
- package/dist/generated/components/index.d.ts.map +0 -1
- package/dist/generated/components/index.js +0 -7
- package/dist/generated/functions/index.d.ts +0 -8
- package/dist/generated/functions/index.d.ts.map +0 -1
- package/dist/generated/functions/index.js +0 -7
- package/dist/generated/hooks/index.d.ts +0 -8
- package/dist/generated/hooks/index.d.ts.map +0 -1
- package/dist/generated/hooks/index.js +0 -7
- package/dist/generated/plans/index.d.ts +0 -8
- package/dist/generated/plans/index.d.ts.map +0 -1
- package/dist/generated/plans/index.js +0 -7
- package/dist/generated/prompts/index.d.ts +0 -8
- package/dist/generated/prompts/index.d.ts.map +0 -1
- package/dist/generated/prompts/index.js +0 -7
- package/dist/generated/tools/index.d.ts +0 -8
- package/dist/generated/tools/index.d.ts.map +0 -1
- package/dist/generated/tools/index.js +0 -7
- package/dist/generated/types/supabase.d.ts +0 -193
- package/dist/generated/types/supabase.d.ts.map +0 -1
- package/dist/generated/types/supabase.js +0 -5
- package/dist/optimization/asset-optimizer.d.ts +0 -202
- package/dist/optimization/asset-optimizer.d.ts.map +0 -1
- package/dist/optimization/asset-optimizer.js +0 -312
- package/dist/optimization/build-optimizer.d.ts +0 -202
- package/dist/optimization/build-optimizer.d.ts.map +0 -1
- package/dist/optimization/build-optimizer.js +0 -271
- package/dist/optimization/bundle-analyzer.d.ts +0 -98
- package/dist/optimization/bundle-analyzer.d.ts.map +0 -1
- package/dist/optimization/bundle-analyzer.js +0 -322
- package/dist/optimization/code-splitting.d.ts +0 -131
- package/dist/optimization/code-splitting.d.ts.map +0 -1
- package/dist/optimization/code-splitting.js +0 -277
- package/dist/plugin/index.d.ts +0 -12
- package/dist/plugin/index.d.ts.map +0 -1
- package/dist/plugin/index.js +0 -4
- package/dist/security/audit.d.ts +0 -188
- package/dist/security/audit.d.ts.map +0 -1
- package/dist/security/audit.js +0 -431
- package/dist/security/auth.d.ts +0 -241
- package/dist/security/auth.d.ts.map +0 -1
- package/dist/security/auth.js +0 -476
- package/dist/security/authorization.d.ts +0 -235
- package/dist/security/authorization.d.ts.map +0 -1
- package/dist/security/authorization.js +0 -434
- package/dist/security/encryption.d.ts +0 -214
- package/dist/security/encryption.d.ts.map +0 -1
- package/dist/security/encryption.js +0 -517
- package/dist/security/gdpr.d.ts +0 -300
- package/dist/security/gdpr.d.ts.map +0 -1
- package/dist/security/gdpr.js +0 -465
- package/dist/security/headers.d.ts +0 -182
- package/dist/security/headers.d.ts.map +0 -1
- package/dist/security/headers.js +0 -402
- package/dist/utils/jwt-validation.d.ts +0 -14
- package/dist/utils/jwt-validation.d.ts.map +0 -1
- package/dist/utils/jwt-validation.js +0 -36
- package/dist/utils/request-headers.d.ts +0 -15
- package/dist/utils/request-headers.d.ts.map +0 -1
- package/dist/utils/request-headers.js +0 -31
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Logic for API Calls
|
|
3
|
-
*
|
|
4
|
-
* Implements exponential backoff and retry strategies
|
|
5
|
-
*/
|
|
6
|
-
export interface HttpError extends Error {
|
|
7
|
-
statusCode?: number;
|
|
8
|
-
response?: Response;
|
|
9
|
-
}
|
|
10
|
-
export interface RetryConfig {
|
|
11
|
-
maxRetries?: number;
|
|
12
|
-
baseDelay?: number;
|
|
13
|
-
maxDelay?: number;
|
|
14
|
-
exponentialBackoff?: boolean;
|
|
15
|
-
jitter?: boolean;
|
|
16
|
-
retryableErrors?: (error: Error) => boolean;
|
|
17
|
-
onRetry?: (error: Error, attempt: number) => void;
|
|
18
|
-
}
|
|
19
|
-
export interface RetryOptions {
|
|
20
|
-
signal?: AbortSignal;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Retry a function with exponential backoff
|
|
24
|
-
*/
|
|
25
|
-
export declare function retry<T>(fn: () => Promise<T>, config?: RetryConfig, options?: RetryOptions): Promise<T>;
|
|
26
|
-
/**
|
|
27
|
-
* Calculate retry delay with exponential backoff
|
|
28
|
-
*/
|
|
29
|
-
export declare function calculateDelay(attempt: number, baseDelay: number, maxDelay: number, exponentialBackoff: boolean, jitter: boolean): number;
|
|
30
|
-
/**
|
|
31
|
-
* Sleep with abort support
|
|
32
|
-
*/
|
|
33
|
-
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Retry wrapper for fetch
|
|
36
|
-
*/
|
|
37
|
-
export declare function fetchWithRetry(url: string, init?: RequestInit, config?: RetryConfig): Promise<Response>;
|
|
38
|
-
/**
|
|
39
|
-
* Retry wrapper class
|
|
40
|
-
*/
|
|
41
|
-
export declare class RetryableOperation<T> {
|
|
42
|
-
private fn;
|
|
43
|
-
private config;
|
|
44
|
-
private abortController;
|
|
45
|
-
private attempts;
|
|
46
|
-
private lastError?;
|
|
47
|
-
constructor(fn: () => Promise<T>, config?: RetryConfig);
|
|
48
|
-
/**
|
|
49
|
-
* Execute with retry
|
|
50
|
-
*/
|
|
51
|
-
execute(): Promise<T>;
|
|
52
|
-
/**
|
|
53
|
-
* Abort operation
|
|
54
|
-
*/
|
|
55
|
-
abort(): void;
|
|
56
|
-
/**
|
|
57
|
-
* Get retry statistics
|
|
58
|
-
*/
|
|
59
|
-
getStats(): {
|
|
60
|
-
attempts: number;
|
|
61
|
-
lastError?: Error;
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Retry decorator
|
|
66
|
-
*/
|
|
67
|
-
export declare function Retryable(config?: RetryConfig): (_target: object, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
68
|
-
/**
|
|
69
|
-
* Create retry middleware for API client
|
|
70
|
-
*/
|
|
71
|
-
export declare function createRetryMiddleware<TRequest = unknown, TResponse = unknown>(config?: RetryConfig): (_request: TRequest, next: () => Promise<TResponse>) => Promise<TResponse>;
|
|
72
|
-
/**
|
|
73
|
-
* Batch retry - retry multiple operations
|
|
74
|
-
*/
|
|
75
|
-
export declare function retryBatch<T>(operations: Array<() => Promise<T>>, config?: RetryConfig): Promise<Array<T | Error>>;
|
|
76
|
-
/**
|
|
77
|
-
* Retry with fallback
|
|
78
|
-
*/
|
|
79
|
-
export declare function retryWithFallback<T>(primary: () => Promise<T>, fallback: () => Promise<T>, config?: RetryConfig): Promise<T>;
|
|
80
|
-
/**
|
|
81
|
-
* Conditional retry - only retry if condition is met
|
|
82
|
-
*/
|
|
83
|
-
export declare function retryIf<T>(fn: () => Promise<T>, condition: (error: Error, attempt: number) => boolean, config?: RetryConfig): Promise<T>;
|
|
84
|
-
/**
|
|
85
|
-
* Retry until condition is met
|
|
86
|
-
*/
|
|
87
|
-
export declare function retryUntil<T>(fn: () => Promise<T>, predicate: (result: T) => boolean, config?: RetryConfig, maxAttempts?: number): Promise<T>;
|
|
88
|
-
/**
|
|
89
|
-
* Exponential backoff iterator
|
|
90
|
-
*/
|
|
91
|
-
export declare class ExponentialBackoff implements AsyncIterable<number> {
|
|
92
|
-
private baseDelay;
|
|
93
|
-
private maxDelay;
|
|
94
|
-
private maxAttempts;
|
|
95
|
-
private jitter;
|
|
96
|
-
constructor(baseDelay?: number, maxDelay?: number, maxAttempts?: number, jitter?: boolean);
|
|
97
|
-
[Symbol.asyncIterator](): AsyncIterator<number>;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Retry policy builder
|
|
101
|
-
*/
|
|
102
|
-
export declare class RetryPolicyBuilder {
|
|
103
|
-
private config;
|
|
104
|
-
/**
|
|
105
|
-
* Set max retries
|
|
106
|
-
*/
|
|
107
|
-
maxRetries(count: number): this;
|
|
108
|
-
/**
|
|
109
|
-
* Set base delay
|
|
110
|
-
*/
|
|
111
|
-
baseDelay(ms: number): this;
|
|
112
|
-
/**
|
|
113
|
-
* Set max delay
|
|
114
|
-
*/
|
|
115
|
-
maxDelay(ms: number): this;
|
|
116
|
-
/**
|
|
117
|
-
* Enable/disable exponential backoff
|
|
118
|
-
*/
|
|
119
|
-
exponentialBackoff(enabled?: boolean): this;
|
|
120
|
-
/**
|
|
121
|
-
* Enable/disable jitter
|
|
122
|
-
*/
|
|
123
|
-
jitter(enabled?: boolean): this;
|
|
124
|
-
/**
|
|
125
|
-
* Set custom retryable errors function
|
|
126
|
-
*/
|
|
127
|
-
retryOn(fn: (error: Error) => boolean): this;
|
|
128
|
-
/**
|
|
129
|
-
* Set retry callback
|
|
130
|
-
*/
|
|
131
|
-
onRetry(fn: (error: Error, attempt: number) => void): this;
|
|
132
|
-
/**
|
|
133
|
-
* Build retry config
|
|
134
|
-
*/
|
|
135
|
-
build(): RetryConfig;
|
|
136
|
-
/**
|
|
137
|
-
* Execute function with built policy
|
|
138
|
-
*/
|
|
139
|
-
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Common retry policies
|
|
143
|
-
*/
|
|
144
|
-
export declare const RetryPolicies: {
|
|
145
|
-
/**
|
|
146
|
-
* Default policy - 3 retries with exponential backoff
|
|
147
|
-
*/
|
|
148
|
-
default: () => RetryConfig;
|
|
149
|
-
/**
|
|
150
|
-
* Aggressive policy - more retries, faster backoff
|
|
151
|
-
*/
|
|
152
|
-
aggressive: () => RetryConfig;
|
|
153
|
-
/**
|
|
154
|
-
* Conservative policy - fewer retries, longer backoff
|
|
155
|
-
*/
|
|
156
|
-
conservative: () => RetryConfig;
|
|
157
|
-
/**
|
|
158
|
-
* Linear backoff policy
|
|
159
|
-
*/
|
|
160
|
-
linear: () => RetryConfig;
|
|
161
|
-
/**
|
|
162
|
-
* Immediate retry policy - no delay
|
|
163
|
-
*/
|
|
164
|
-
immediate: () => RetryConfig;
|
|
165
|
-
/**
|
|
166
|
-
* Network error only policy
|
|
167
|
-
*/
|
|
168
|
-
networkOnly: () => RetryConfig;
|
|
169
|
-
/**
|
|
170
|
-
* Idempotent operations policy (safe to retry)
|
|
171
|
-
*/
|
|
172
|
-
idempotent: () => RetryConfig;
|
|
173
|
-
};
|
|
174
|
-
/**
|
|
175
|
-
* Global retry configuration
|
|
176
|
-
*/
|
|
177
|
-
declare class GlobalRetryConfig {
|
|
178
|
-
private config;
|
|
179
|
-
/**
|
|
180
|
-
* Set global retry config
|
|
181
|
-
*/
|
|
182
|
-
setConfig(config: RetryConfig): void;
|
|
183
|
-
/**
|
|
184
|
-
* Get global retry config
|
|
185
|
-
*/
|
|
186
|
-
getConfig(): RetryConfig;
|
|
187
|
-
/**
|
|
188
|
-
* Reset to default config
|
|
189
|
-
*/
|
|
190
|
-
reset(): void;
|
|
191
|
-
}
|
|
192
|
-
export declare const globalRetryConfig: GlobalRetryConfig;
|
|
193
|
-
export {};
|
|
194
|
-
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/error-handling/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Logic for API Calls
|
|
3
|
-
*
|
|
4
|
-
* Implements exponential backoff and retry strategies
|
|
5
|
-
*/
|
|
6
|
-
import { logger } from '../observability/logger.js';
|
|
7
|
-
const DEFAULT_CONFIG = {
|
|
8
|
-
maxRetries: 3,
|
|
9
|
-
baseDelay: 1000,
|
|
10
|
-
maxDelay: 30000,
|
|
11
|
-
exponentialBackoff: true,
|
|
12
|
-
jitter: true,
|
|
13
|
-
retryableErrors: (error) => {
|
|
14
|
-
// Check for explicit non-retryable status codes (4xx client errors)
|
|
15
|
-
if ('statusCode' in error) {
|
|
16
|
-
const statusCode = error.statusCode;
|
|
17
|
-
// Don't retry 4xx errors except 408 (timeout) and 429 (rate limit)
|
|
18
|
-
if (statusCode !== undefined && statusCode >= 400 && statusCode < 500) {
|
|
19
|
-
return statusCode === 408 || statusCode === 429;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
// Retry all other errors by default (network errors, 5xx, generic errors)
|
|
23
|
-
return true;
|
|
24
|
-
},
|
|
25
|
-
onRetry: () => { },
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Retry a function with exponential backoff
|
|
29
|
-
*/
|
|
30
|
-
export async function retry(fn, config = {}, options = {}) {
|
|
31
|
-
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
32
|
-
let lastError;
|
|
33
|
-
for (let attempt = 0; attempt <= mergedConfig.maxRetries; attempt++) {
|
|
34
|
-
try {
|
|
35
|
-
// Check if aborted
|
|
36
|
-
if (options.signal?.aborted) {
|
|
37
|
-
throw new Error('Request aborted');
|
|
38
|
-
}
|
|
39
|
-
return await fn();
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
43
|
-
// Don't retry if it's the last attempt
|
|
44
|
-
if (attempt === mergedConfig.maxRetries) {
|
|
45
|
-
throw lastError;
|
|
46
|
-
}
|
|
47
|
-
// Don't retry if error is not retryable
|
|
48
|
-
if (!mergedConfig.retryableErrors(lastError)) {
|
|
49
|
-
throw lastError;
|
|
50
|
-
}
|
|
51
|
-
// Call retry callback
|
|
52
|
-
mergedConfig.onRetry(lastError, attempt + 1);
|
|
53
|
-
// Calculate delay
|
|
54
|
-
const delay = calculateDelay(attempt, mergedConfig.baseDelay, mergedConfig.maxDelay, mergedConfig.exponentialBackoff, mergedConfig.jitter);
|
|
55
|
-
// Wait before retrying
|
|
56
|
-
await sleep(delay, options.signal);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
throw lastError;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Calculate retry delay with exponential backoff
|
|
63
|
-
*/
|
|
64
|
-
export function calculateDelay(attempt, baseDelay, maxDelay, exponentialBackoff, jitter) {
|
|
65
|
-
let delay = baseDelay;
|
|
66
|
-
if (exponentialBackoff) {
|
|
67
|
-
// Exponential backoff: 2^attempt * baseDelay
|
|
68
|
-
delay = Math.min(baseDelay * 2 ** attempt, maxDelay);
|
|
69
|
-
}
|
|
70
|
-
if (jitter) {
|
|
71
|
-
// Add random jitter (±25%)
|
|
72
|
-
const jitterAmount = delay * 0.25;
|
|
73
|
-
delay = delay + (Math.random() * jitterAmount * 2 - jitterAmount);
|
|
74
|
-
}
|
|
75
|
-
return Math.floor(delay);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Sleep with abort support
|
|
79
|
-
*/
|
|
80
|
-
export function sleep(ms, signal) {
|
|
81
|
-
return new Promise((resolve, reject) => {
|
|
82
|
-
if (signal?.aborted) {
|
|
83
|
-
reject(new Error('Request aborted'));
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const timeout = setTimeout(resolve, ms);
|
|
87
|
-
if (signal) {
|
|
88
|
-
signal.addEventListener('abort', () => {
|
|
89
|
-
clearTimeout(timeout);
|
|
90
|
-
reject(new Error('Request aborted'));
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Retry wrapper for fetch
|
|
97
|
-
*/
|
|
98
|
-
export async function fetchWithRetry(url, init, config) {
|
|
99
|
-
const abortController = new AbortController();
|
|
100
|
-
const signal = init?.signal || abortController.signal;
|
|
101
|
-
return retry(async () => {
|
|
102
|
-
const response = await fetch(url, {
|
|
103
|
-
...init,
|
|
104
|
-
signal,
|
|
105
|
-
});
|
|
106
|
-
// Throw on error status
|
|
107
|
-
if (!response.ok) {
|
|
108
|
-
const error = new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
109
|
-
error.statusCode = response.status;
|
|
110
|
-
error.response = response;
|
|
111
|
-
throw error;
|
|
112
|
-
}
|
|
113
|
-
return response;
|
|
114
|
-
}, {
|
|
115
|
-
...config,
|
|
116
|
-
retryableErrors: (error) => {
|
|
117
|
-
// Check custom retryable errors first
|
|
118
|
-
if (config?.retryableErrors && !config.retryableErrors(error)) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
// Don't retry 4xx errors (except 408, 429)
|
|
122
|
-
if ('statusCode' in error) {
|
|
123
|
-
const statusCode = error.statusCode;
|
|
124
|
-
if (statusCode !== undefined && statusCode >= 400 && statusCode < 500) {
|
|
125
|
-
return statusCode === 408 || statusCode === 429;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return true;
|
|
129
|
-
},
|
|
130
|
-
}, { signal });
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Retry wrapper class
|
|
134
|
-
*/
|
|
135
|
-
export class RetryableOperation {
|
|
136
|
-
fn;
|
|
137
|
-
config;
|
|
138
|
-
abortController;
|
|
139
|
-
attempts = 0;
|
|
140
|
-
lastError;
|
|
141
|
-
constructor(fn, config = {}) {
|
|
142
|
-
this.fn = fn;
|
|
143
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
144
|
-
this.abortController = new AbortController();
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Execute with retry
|
|
148
|
-
*/
|
|
149
|
-
async execute() {
|
|
150
|
-
return retry(this.fn, this.config, { signal: this.abortController.signal });
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Abort operation
|
|
154
|
-
*/
|
|
155
|
-
abort() {
|
|
156
|
-
this.abortController.abort();
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Get retry statistics
|
|
160
|
-
*/
|
|
161
|
-
getStats() {
|
|
162
|
-
return {
|
|
163
|
-
attempts: this.attempts,
|
|
164
|
-
lastError: this.lastError,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Retry decorator
|
|
170
|
-
*/
|
|
171
|
-
export function Retryable(config) {
|
|
172
|
-
return (_target, _propertyKey, descriptor) => {
|
|
173
|
-
const originalMethod = descriptor.value;
|
|
174
|
-
descriptor.value = async function (...args) {
|
|
175
|
-
return retry(() => originalMethod.apply(this, args), config);
|
|
176
|
-
};
|
|
177
|
-
return descriptor;
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Create retry middleware for API client
|
|
182
|
-
*/
|
|
183
|
-
export function createRetryMiddleware(config = {}) {
|
|
184
|
-
return async (_request, next) => {
|
|
185
|
-
return retry(next, config);
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Batch retry - retry multiple operations
|
|
190
|
-
*/
|
|
191
|
-
export async function retryBatch(operations, config = {}) {
|
|
192
|
-
return Promise.all(operations.map(async (op) => {
|
|
193
|
-
try {
|
|
194
|
-
return await retry(op, config);
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
198
|
-
}
|
|
199
|
-
}));
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Retry with fallback
|
|
203
|
-
*/
|
|
204
|
-
export async function retryWithFallback(primary, fallback, config = {}) {
|
|
205
|
-
try {
|
|
206
|
-
return await retry(primary, config);
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
logger.warn('Primary operation failed, trying fallback', {
|
|
210
|
-
error: error instanceof Error ? error.message : String(error),
|
|
211
|
-
});
|
|
212
|
-
return fallback();
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Conditional retry - only retry if condition is met
|
|
217
|
-
*/
|
|
218
|
-
export async function retryIf(fn, condition, config = {}) {
|
|
219
|
-
return retry(fn, {
|
|
220
|
-
...config,
|
|
221
|
-
retryableErrors: (error) => {
|
|
222
|
-
// Check original retryable condition first
|
|
223
|
-
const originalCheck = config.retryableErrors?.(error) ?? DEFAULT_CONFIG.retryableErrors(error);
|
|
224
|
-
if (!originalCheck)
|
|
225
|
-
return false;
|
|
226
|
-
// Then check custom condition
|
|
227
|
-
return condition(error, 0);
|
|
228
|
-
},
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Retry until condition is met
|
|
233
|
-
*/
|
|
234
|
-
export async function retryUntil(fn, predicate, config = {}, maxAttempts = 10) {
|
|
235
|
-
let attempts = 0;
|
|
236
|
-
while (attempts < maxAttempts) {
|
|
237
|
-
try {
|
|
238
|
-
const result = await fn();
|
|
239
|
-
if (predicate(result)) {
|
|
240
|
-
return result;
|
|
241
|
-
}
|
|
242
|
-
// Result doesn't match predicate, treat as retryable error
|
|
243
|
-
attempts++;
|
|
244
|
-
if (attempts >= maxAttempts) {
|
|
245
|
-
throw new Error('Max attempts reached without matching predicate');
|
|
246
|
-
}
|
|
247
|
-
const delay = calculateDelay(attempts - 1, config.baseDelay || DEFAULT_CONFIG.baseDelay, config.maxDelay || DEFAULT_CONFIG.maxDelay, config.exponentialBackoff ?? DEFAULT_CONFIG.exponentialBackoff, config.jitter ?? DEFAULT_CONFIG.jitter);
|
|
248
|
-
await sleep(delay);
|
|
249
|
-
}
|
|
250
|
-
catch (error) {
|
|
251
|
-
attempts++;
|
|
252
|
-
if (attempts >= maxAttempts) {
|
|
253
|
-
throw error;
|
|
254
|
-
}
|
|
255
|
-
const delay = calculateDelay(attempts - 1, config.baseDelay || DEFAULT_CONFIG.baseDelay, config.maxDelay || DEFAULT_CONFIG.maxDelay, config.exponentialBackoff ?? DEFAULT_CONFIG.exponentialBackoff, config.jitter ?? DEFAULT_CONFIG.jitter);
|
|
256
|
-
await sleep(delay);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
throw new Error('Max attempts reached');
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Exponential backoff iterator
|
|
263
|
-
*/
|
|
264
|
-
export class ExponentialBackoff {
|
|
265
|
-
baseDelay;
|
|
266
|
-
maxDelay;
|
|
267
|
-
maxAttempts;
|
|
268
|
-
jitter;
|
|
269
|
-
constructor(baseDelay = 1000, maxDelay = 30000, maxAttempts = 10, jitter = true) {
|
|
270
|
-
this.baseDelay = baseDelay;
|
|
271
|
-
this.maxDelay = maxDelay;
|
|
272
|
-
this.maxAttempts = maxAttempts;
|
|
273
|
-
this.jitter = jitter;
|
|
274
|
-
}
|
|
275
|
-
async *[Symbol.asyncIterator]() {
|
|
276
|
-
for (let attempt = 0; attempt < this.maxAttempts; attempt++) {
|
|
277
|
-
const delay = calculateDelay(attempt, this.baseDelay, this.maxDelay, true, this.jitter);
|
|
278
|
-
yield delay;
|
|
279
|
-
await sleep(delay);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Retry policy builder
|
|
285
|
-
*/
|
|
286
|
-
export class RetryPolicyBuilder {
|
|
287
|
-
config = {};
|
|
288
|
-
/**
|
|
289
|
-
* Set max retries
|
|
290
|
-
*/
|
|
291
|
-
maxRetries(count) {
|
|
292
|
-
this.config.maxRetries = count;
|
|
293
|
-
return this;
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Set base delay
|
|
297
|
-
*/
|
|
298
|
-
baseDelay(ms) {
|
|
299
|
-
this.config.baseDelay = ms;
|
|
300
|
-
return this;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Set max delay
|
|
304
|
-
*/
|
|
305
|
-
maxDelay(ms) {
|
|
306
|
-
this.config.maxDelay = ms;
|
|
307
|
-
return this;
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Enable/disable exponential backoff
|
|
311
|
-
*/
|
|
312
|
-
exponentialBackoff(enabled = true) {
|
|
313
|
-
this.config.exponentialBackoff = enabled;
|
|
314
|
-
return this;
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Enable/disable jitter
|
|
318
|
-
*/
|
|
319
|
-
jitter(enabled = true) {
|
|
320
|
-
this.config.jitter = enabled;
|
|
321
|
-
return this;
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Set custom retryable errors function
|
|
325
|
-
*/
|
|
326
|
-
retryOn(fn) {
|
|
327
|
-
this.config.retryableErrors = fn;
|
|
328
|
-
return this;
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Set retry callback
|
|
332
|
-
*/
|
|
333
|
-
onRetry(fn) {
|
|
334
|
-
this.config.onRetry = fn;
|
|
335
|
-
return this;
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Build retry config
|
|
339
|
-
*/
|
|
340
|
-
build() {
|
|
341
|
-
return this.config;
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Execute function with built policy
|
|
345
|
-
*/
|
|
346
|
-
async execute(fn) {
|
|
347
|
-
return retry(fn, this.build());
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Common retry policies
|
|
352
|
-
*/
|
|
353
|
-
export const RetryPolicies = {
|
|
354
|
-
/**
|
|
355
|
-
* Default policy - 3 retries with exponential backoff
|
|
356
|
-
*/
|
|
357
|
-
default: () => ({
|
|
358
|
-
maxRetries: 3,
|
|
359
|
-
baseDelay: 1000,
|
|
360
|
-
maxDelay: 30000,
|
|
361
|
-
exponentialBackoff: true,
|
|
362
|
-
jitter: true,
|
|
363
|
-
}),
|
|
364
|
-
/**
|
|
365
|
-
* Aggressive policy - more retries, faster backoff
|
|
366
|
-
*/
|
|
367
|
-
aggressive: () => ({
|
|
368
|
-
maxRetries: 5,
|
|
369
|
-
baseDelay: 500,
|
|
370
|
-
maxDelay: 10000,
|
|
371
|
-
exponentialBackoff: true,
|
|
372
|
-
jitter: true,
|
|
373
|
-
}),
|
|
374
|
-
/**
|
|
375
|
-
* Conservative policy - fewer retries, longer backoff
|
|
376
|
-
*/
|
|
377
|
-
conservative: () => ({
|
|
378
|
-
maxRetries: 2,
|
|
379
|
-
baseDelay: 2000,
|
|
380
|
-
maxDelay: 60000,
|
|
381
|
-
exponentialBackoff: true,
|
|
382
|
-
jitter: true,
|
|
383
|
-
}),
|
|
384
|
-
/**
|
|
385
|
-
* Linear backoff policy
|
|
386
|
-
*/
|
|
387
|
-
linear: () => ({
|
|
388
|
-
maxRetries: 3,
|
|
389
|
-
baseDelay: 1000,
|
|
390
|
-
maxDelay: 10000,
|
|
391
|
-
exponentialBackoff: false,
|
|
392
|
-
jitter: false,
|
|
393
|
-
}),
|
|
394
|
-
/**
|
|
395
|
-
* Immediate retry policy - no delay
|
|
396
|
-
*/
|
|
397
|
-
immediate: () => ({
|
|
398
|
-
maxRetries: 3,
|
|
399
|
-
baseDelay: 0,
|
|
400
|
-
maxDelay: 0,
|
|
401
|
-
exponentialBackoff: false,
|
|
402
|
-
jitter: false,
|
|
403
|
-
}),
|
|
404
|
-
/**
|
|
405
|
-
* Network error only policy
|
|
406
|
-
*/
|
|
407
|
-
networkOnly: () => ({
|
|
408
|
-
maxRetries: 3,
|
|
409
|
-
baseDelay: 1000,
|
|
410
|
-
maxDelay: 30000,
|
|
411
|
-
exponentialBackoff: true,
|
|
412
|
-
jitter: true,
|
|
413
|
-
retryableErrors: (error) => error.name === 'NetworkError',
|
|
414
|
-
}),
|
|
415
|
-
/**
|
|
416
|
-
* Idempotent operations policy (safe to retry)
|
|
417
|
-
*/
|
|
418
|
-
idempotent: () => ({
|
|
419
|
-
maxRetries: 5,
|
|
420
|
-
baseDelay: 1000,
|
|
421
|
-
maxDelay: 30000,
|
|
422
|
-
exponentialBackoff: true,
|
|
423
|
-
jitter: true,
|
|
424
|
-
}),
|
|
425
|
-
};
|
|
426
|
-
/**
|
|
427
|
-
* Global retry configuration
|
|
428
|
-
*/
|
|
429
|
-
class GlobalRetryConfig {
|
|
430
|
-
config = RetryPolicies.default();
|
|
431
|
-
/**
|
|
432
|
-
* Set global retry config
|
|
433
|
-
*/
|
|
434
|
-
setConfig(config) {
|
|
435
|
-
this.config = { ...this.config, ...config };
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Get global retry config
|
|
439
|
-
*/
|
|
440
|
-
getConfig() {
|
|
441
|
-
return this.config;
|
|
442
|
-
}
|
|
443
|
-
/**
|
|
444
|
-
* Reset to default config
|
|
445
|
-
*/
|
|
446
|
-
reset() {
|
|
447
|
-
this.config = RetryPolicies.default();
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
export const globalRetryConfig = new GlobalRetryConfig();
|
package/dist/errors/index.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RevealUI CMS Errors
|
|
3
|
-
* @module @revealui/core/errors
|
|
4
|
-
*/
|
|
5
|
-
export declare class RevealUIError extends Error {
|
|
6
|
-
constructor(message: string);
|
|
7
|
-
}
|
|
8
|
-
export declare class MissingEditorProp extends RevealUIError {
|
|
9
|
-
constructor(fieldName?: string);
|
|
10
|
-
}
|
|
11
|
-
export declare class ValidationError extends RevealUIError {
|
|
12
|
-
constructor(message: string);
|
|
13
|
-
}
|
|
14
|
-
export declare class ConfigurationError extends RevealUIError {
|
|
15
|
-
constructor(message: string);
|
|
16
|
-
}
|
|
17
|
-
export declare class AccessDeniedError extends RevealUIError {
|
|
18
|
-
constructor(message?: string);
|
|
19
|
-
}
|
|
20
|
-
export declare class NotFoundError extends RevealUIError {
|
|
21
|
-
constructor(resource?: string);
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,aAAa;gBACtC,SAAS,CAAC,EAAE,MAAM;CAI/B;AAED,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,aAAa;gBACtC,OAAO,SAAkB;CAItC;AAED,qBAAa,aAAc,SAAQ,aAAa;gBAClC,QAAQ,CAAC,EAAE,MAAM;CAI9B"}
|