veryfront 0.1.128 → 0.1.129
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/esm/cli/router.d.ts +0 -5
- package/esm/cli/router.d.ts.map +1 -1
- package/esm/cli/router.js +30 -2
- package/esm/cli/shared/update-check.d.ts +4 -0
- package/esm/cli/shared/update-check.d.ts.map +1 -0
- package/esm/cli/shared/update-check.js +97 -0
- package/esm/deno.d.ts +5 -0
- package/esm/deno.js +13 -8
- package/esm/src/channels/control-plane.d.ts.map +1 -1
- package/esm/src/channels/control-plane.js +5 -5
- package/esm/src/channels/invoke.d.ts +1 -1
- package/esm/src/channels/invoke.d.ts.map +1 -1
- package/esm/src/channels/invoke.js +6 -6
- package/esm/src/chat/index.d.ts +12 -24
- package/esm/src/chat/index.d.ts.map +1 -1
- package/esm/src/chat/index.js +5 -25
- package/esm/src/config/env.d.ts.map +1 -1
- package/esm/src/config/env.js +18 -10
- package/esm/src/data/static-data-fetcher.d.ts +3 -0
- package/esm/src/data/static-data-fetcher.d.ts.map +1 -1
- package/esm/src/data/static-data-fetcher.js +29 -25
- package/esm/src/data/static-paths-fetcher.d.ts.map +1 -1
- package/esm/src/data/static-paths-fetcher.js +3 -2
- package/esm/src/errors/logging.d.ts.map +1 -1
- package/esm/src/errors/logging.js +16 -7
- package/esm/src/errors/user-friendly/error-formatter.d.ts.map +1 -1
- package/esm/src/errors/user-friendly/error-formatter.js +9 -25
- package/esm/src/fs/index.d.ts +11 -12
- package/esm/src/fs/index.d.ts.map +1 -1
- package/esm/src/fs/index.js +11 -24
- package/esm/src/html/dev-scripts.d.ts.map +1 -1
- package/esm/src/html/dev-scripts.js +5 -8
- package/esm/src/html/html-escape.d.ts +1 -0
- package/esm/src/html/html-escape.d.ts.map +1 -1
- package/esm/src/html/html-escape.js +3 -0
- package/esm/src/html/html-injection.js +2 -2
- package/esm/src/html/html-shell-generator.d.ts +5 -2
- package/esm/src/html/html-shell-generator.d.ts.map +1 -1
- package/esm/src/html/html-shell-generator.js +41 -30
- package/esm/src/html/hydration-script-builder/dev-client-renderer.js +2 -2
- package/esm/src/html/hydration-script-builder/dev-component-manifest.js +2 -2
- package/esm/src/html/hydration-script-builder/dev-error-logger.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/dev-error-logger.js +2 -6
- package/esm/src/html/hydration-script-builder/dev-scripts.js +2 -2
- package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts +3 -1
- package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/hydration-data-generator.js +2 -2
- package/esm/src/html/hydration-script-builder/index.d.ts +1 -1
- package/esm/src/html/hydration-script-builder/index.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/index.js +1 -1
- package/esm/src/html/hydration-script-builder/prod-hydration.js +2 -2
- package/esm/src/html/hydration-script-builder/prod-scripts.d.ts +2 -0
- package/esm/src/html/hydration-script-builder/prod-scripts.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/prod-scripts.js +14 -14
- package/esm/src/html/schemas/html.schema.d.ts +2 -0
- package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
- package/esm/src/html/schemas/html.schema.js +2 -0
- package/esm/src/html/styles-builder/css-pregeneration.d.ts +17 -1
- package/esm/src/html/styles-builder/css-pregeneration.d.ts.map +1 -1
- package/esm/src/html/styles-builder/css-pregeneration.js +103 -1
- package/esm/src/html/styles-builder/dev-styles.js +2 -2
- package/esm/src/html/utils.d.ts +2 -0
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +49 -28
- package/esm/src/integrations/remote-tools.d.ts.map +1 -1
- package/esm/src/integrations/remote-tools.js +32 -39
- package/esm/src/internal-agents/ag-ui-sse.d.ts +0 -1
- package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -1
- package/esm/src/internal-agents/ag-ui-sse.js +2 -16
- package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
- package/esm/src/internal-agents/control-plane-auth.js +5 -3
- package/esm/src/internal-agents/request-body.d.ts.map +1 -1
- package/esm/src/internal-agents/request-body.js +6 -3
- package/esm/src/internal-agents/session-manager.d.ts +1 -0
- package/esm/src/internal-agents/session-manager.d.ts.map +1 -1
- package/esm/src/internal-agents/session-manager.js +12 -18
- package/esm/src/issues/core.d.ts.map +1 -1
- package/esm/src/issues/core.js +24 -23
- package/esm/src/issues/schemas/issue.schema.d.ts.map +1 -1
- package/esm/src/issues/schemas/issue.schema.js +2 -1
- package/esm/src/jobs/runtime-env.d.ts.map +1 -1
- package/esm/src/jobs/runtime-env.js +21 -44
- package/esm/src/markdown/index.d.ts +1 -2
- package/esm/src/markdown/index.d.ts.map +1 -1
- package/esm/src/markdown/index.js +1 -6
- package/esm/src/mcp/server.d.ts +0 -1
- package/esm/src/mcp/server.d.ts.map +1 -1
- package/esm/src/mcp/server.js +40 -41
- package/esm/src/mdx/index.d.ts +3 -2
- package/esm/src/mdx/index.d.ts.map +1 -1
- package/esm/src/mdx/index.js +3 -5
- package/esm/src/middleware/builtin/logger.d.ts.map +1 -1
- package/esm/src/middleware/builtin/logger.js +31 -28
- package/esm/src/middleware/builtin/security/rate-limit.d.ts.map +1 -1
- package/esm/src/middleware/builtin/security/rate-limit.js +17 -12
- package/esm/src/middleware/builtin/timeout.d.ts.map +1 -1
- package/esm/src/middleware/builtin/timeout.js +17 -10
- package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
- package/esm/src/modules/import-map/default-import-map.js +4 -3
- package/esm/src/oauth/handlers/callback-handler.d.ts +0 -5
- package/esm/src/oauth/handlers/callback-handler.d.ts.map +1 -1
- package/esm/src/oauth/handlers/callback-handler.js +9 -14
- package/esm/src/oauth/handlers/index.d.ts +1 -1
- package/esm/src/oauth/handlers/index.js +1 -1
- package/esm/src/oauth/handlers/init-handler.d.ts.map +1 -1
- package/esm/src/oauth/handlers/init-handler.js +32 -20
- package/esm/src/oauth/providers/index.d.ts +1 -1
- package/esm/src/oauth/providers/index.js +1 -1
- package/esm/src/oauth/schemas/index.d.ts +1 -1
- package/esm/src/oauth/schemas/index.js +1 -1
- package/esm/src/oauth/token-store/index.d.ts +1 -1
- package/esm/src/oauth/token-store/index.js +1 -1
- package/esm/src/oauth/token-store/memory.d.ts +1 -1
- package/esm/src/oauth/token-store/memory.d.ts.map +1 -1
- package/esm/src/oauth/token-store/memory.js +8 -8
- package/esm/src/observability/request-profiler.d.ts +31 -0
- package/esm/src/observability/request-profiler.d.ts.map +1 -0
- package/esm/src/observability/request-profiler.js +94 -0
- package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
- package/esm/src/observability/tracing/otlp-setup.js +16 -21
- package/esm/src/prompt/factory.d.ts.map +1 -1
- package/esm/src/prompt/factory.js +10 -12
- package/esm/src/prompt/registry.d.ts.map +1 -1
- package/esm/src/prompt/registry.js +12 -10
- package/esm/src/prompt/schemas/prompt.schema.d.ts.map +1 -1
- package/esm/src/prompt/schemas/prompt.schema.js +0 -2
- package/esm/src/prompt/types.d.ts +1 -1
- package/esm/src/prompt/types.d.ts.map +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.d.ts.map +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.js +3 -8
- package/esm/src/provider/local/env.d.ts +4 -6
- package/esm/src/provider/local/env.d.ts.map +1 -1
- package/esm/src/provider/local/env.js +14 -1
- package/esm/src/provider/local/local-engine.d.ts.map +1 -1
- package/esm/src/provider/local/local-engine.js +2 -7
- package/esm/src/provider/model-registry.d.ts.map +1 -1
- package/esm/src/provider/model-registry.js +2 -7
- package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/provider.js +1 -7
- package/esm/src/provider/veryfront-cloud/shared.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/shared.js +9 -11
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +56 -57
- package/esm/src/react/compat/hooks-adapter.d.ts +1 -7
- package/esm/src/react/compat/hooks-adapter.d.ts.map +1 -1
- package/esm/src/react/compat/hooks-adapter.js +35 -40
- package/esm/src/react/components/Head.d.ts +1 -26
- package/esm/src/react/components/Head.d.ts.map +1 -1
- package/esm/src/react/components/Head.js +1 -172
- package/esm/src/react/context/index.d.ts +2 -46
- package/esm/src/react/context/index.d.ts.map +1 -1
- package/esm/src/react/context/index.js +1 -44
- package/esm/src/react/head-collector.d.ts +1 -10
- package/esm/src/react/head-collector.d.ts.map +1 -1
- package/esm/src/react/head-collector.js +4 -0
- package/esm/src/react/router/index.d.ts +2 -45
- package/esm/src/react/router/index.d.ts.map +1 -1
- package/esm/src/react/router/index.js +1 -49
- package/esm/src/react/runtime/core.d.ts +49 -0
- package/esm/src/react/runtime/core.d.ts.map +1 -0
- package/esm/src/react/runtime/core.js +200 -0
- package/esm/src/rendering/orchestrator/html.d.ts +2 -0
- package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/html.js +69 -12
- package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/ssr-orchestrator.js +4 -0
- package/esm/src/rendering/orchestrator/types.d.ts +4 -0
- package/esm/src/rendering/orchestrator/types.d.ts.map +1 -1
- package/esm/src/repositories/types.d.ts.map +1 -1
- package/esm/src/resource/factory.d.ts.map +1 -1
- package/esm/src/resource/factory.js +12 -9
- package/esm/src/resource/registry.d.ts +3 -3
- package/esm/src/resource/registry.d.ts.map +1 -1
- package/esm/src/resource/registry.js +7 -7
- package/esm/src/schemas/common.d.ts.map +1 -1
- package/esm/src/schemas/common.js +7 -4
- package/esm/src/security/http/config.d.ts +0 -1
- package/esm/src/security/http/config.d.ts.map +1 -1
- package/esm/src/security/http/config.js +3 -16
- package/esm/src/security/http/response/security-handler.d.ts +1 -0
- package/esm/src/security/http/response/security-handler.d.ts.map +1 -1
- package/esm/src/security/http/response/security-handler.js +17 -12
- package/esm/src/security/index.d.ts +4 -2
- package/esm/src/security/index.d.ts.map +1 -1
- package/esm/src/security/index.js +3 -1
- package/esm/src/server/handlers/dev/styles-css.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/styles-css.handler.js +8 -7
- package/esm/src/server/handlers/monitoring/metrics.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/monitoring/metrics.handler.js +3 -1
- package/esm/src/server/handlers/request/module/module-server-handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/module/module-server-handler.js +18 -15
- package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts +8 -0
- package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/prod-hydration-module.handler.js +41 -0
- package/esm/src/server/handlers/request/ssr/ssr.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/ssr/ssr.handler.js +3 -0
- package/esm/src/server/production-server.d.ts.map +1 -1
- package/esm/src/server/production-server.js +65 -0
- package/esm/src/server/runtime-handler/handler-context-builder.d.ts +1 -1
- package/esm/src/server/runtime-handler/handler-context-builder.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.d.ts +1 -1
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +36 -11
- package/esm/src/server/runtime-handler/request-utils.d.ts +7 -0
- package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/request-utils.js +10 -0
- package/esm/src/server/services/rendering/ssr.service.d.ts +1 -0
- package/esm/src/server/services/rendering/ssr.service.d.ts.map +1 -1
- package/esm/src/server/services/rendering/ssr.service.js +12 -5
- package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +1 -1
- package/esm/src/skill/allowed-tools.d.ts +3 -8
- package/esm/src/skill/allowed-tools.d.ts.map +1 -1
- package/esm/src/skill/executor.js +2 -2
- package/esm/src/skill/parser.d.ts.map +1 -1
- package/esm/src/skill/parser.js +12 -12
- package/esm/src/skill/path-safety.js +1 -1
- package/esm/src/skill/tools.d.ts.map +1 -1
- package/esm/src/skill/tools.js +18 -11
- package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
- package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
- package/esm/src/task/discovery.d.ts.map +1 -1
- package/esm/src/task/discovery.js +73 -95
- package/esm/src/tool/executor.d.ts.map +1 -1
- package/esm/src/tool/executor.js +8 -7
- package/esm/src/tool/factory.d.ts.map +1 -1
- package/esm/src/tool/factory.js +13 -16
- package/esm/src/transforms/esm/package-registry.d.ts +4 -0
- package/esm/src/transforms/esm/package-registry.d.ts.map +1 -1
- package/esm/src/transforms/esm/package-registry.js +34 -17
- package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.js +2 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.js +26 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts +1 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.js +3 -0
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.d.ts +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.js +1 -1
- package/esm/src/transforms/veryfront-module-urls.d.ts.map +1 -1
- package/esm/src/transforms/veryfront-module-urls.js +7 -3
- package/esm/src/types/entities/getEntityInfo.d.ts.map +1 -1
- package/esm/src/types/entities/getEntityInfo.js +79 -127
- package/esm/src/utils/path-utils.d.ts +1 -1
- package/esm/src/utils/path-utils.d.ts.map +1 -1
- package/esm/src/utils/path-utils.js +16 -7
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/esm/src/utils/version.d.ts.map +1 -1
- package/esm/src/utils/version.js +0 -1
- package/esm/src/workflow/worker/dynamic-job-entrypoint.d.ts.map +1 -1
- package/esm/src/workflow/worker/dynamic-job-entrypoint.js +5 -72
- package/esm/src/workflow/worker/job-entrypoint.d.ts.map +1 -1
- package/esm/src/workflow/worker/job-entrypoint.js +5 -72
- package/esm/src/workflow/worker/shared.d.ts +18 -0
- package/esm/src/workflow/worker/shared.d.ts.map +1 -0
- package/esm/src/workflow/worker/shared.js +77 -0
- package/package.json +1 -1
- package/src/cli/router.ts +41 -2
- package/src/cli/shared/update-check.ts +110 -0
- package/src/deno.js +13 -8
- package/src/src/channels/control-plane.ts +6 -10
- package/src/src/channels/invoke.ts +7 -7
- package/src/src/chat/index.ts +96 -132
- package/src/src/config/env.ts +24 -11
- package/src/src/data/static-data-fetcher.ts +59 -34
- package/src/src/data/static-paths-fetcher.ts +4 -2
- package/src/src/errors/logging.ts +21 -7
- package/src/src/errors/user-friendly/error-formatter.ts +14 -29
- package/src/src/fs/index.ts +21 -30
- package/src/src/html/dev-scripts.ts +5 -9
- package/src/src/html/html-escape.ts +4 -0
- package/src/src/html/html-injection.ts +2 -2
- package/src/src/html/html-shell-generator.ts +60 -26
- package/src/src/html/hydration-script-builder/dev-client-renderer.ts +2 -2
- package/src/src/html/hydration-script-builder/dev-component-manifest.ts +2 -2
- package/src/src/html/hydration-script-builder/dev-error-logger.ts +2 -8
- package/src/src/html/hydration-script-builder/dev-scripts.ts +2 -2
- package/src/src/html/hydration-script-builder/hydration-data-generator.ts +2 -1
- package/src/src/html/hydration-script-builder/index.ts +5 -1
- package/src/src/html/hydration-script-builder/prod-hydration.ts +2 -2
- package/src/src/html/hydration-script-builder/prod-scripts.ts +16 -15
- package/src/src/html/schemas/html.schema.ts +2 -0
- package/src/src/html/styles-builder/css-pregeneration.ts +133 -1
- package/src/src/html/styles-builder/dev-styles.ts +2 -2
- package/src/src/html/utils.ts +62 -29
- package/src/src/integrations/remote-tools.ts +39 -37
- package/src/src/internal-agents/ag-ui-sse.ts +2 -17
- package/src/src/internal-agents/control-plane-auth.ts +8 -6
- package/src/src/internal-agents/request-body.ts +7 -5
- package/src/src/internal-agents/session-manager.ts +16 -20
- package/src/src/issues/core.ts +24 -27
- package/src/src/issues/schemas/issue.schema.ts +3 -1
- package/src/src/jobs/runtime-env.ts +24 -50
- package/src/src/markdown/index.ts +5 -8
- package/src/src/mcp/server.ts +50 -53
- package/src/src/mdx/index.ts +7 -8
- package/src/src/middleware/builtin/logger.ts +44 -29
- package/src/src/middleware/builtin/security/rate-limit.ts +20 -11
- package/src/src/middleware/builtin/timeout.ts +22 -13
- package/src/src/modules/import-map/default-import-map.ts +4 -3
- package/src/src/oauth/handlers/callback-handler.ts +9 -16
- package/src/src/oauth/handlers/index.ts +1 -1
- package/src/src/oauth/handlers/init-handler.ts +56 -27
- package/src/src/oauth/providers/index.ts +1 -1
- package/src/src/oauth/schemas/index.ts +1 -1
- package/src/src/oauth/token-store/index.ts +1 -1
- package/src/src/oauth/token-store/memory.ts +8 -8
- package/src/src/observability/request-profiler.ts +140 -0
- package/src/src/observability/tracing/otlp-setup.ts +16 -22
- package/src/src/prompt/factory.ts +16 -14
- package/src/src/prompt/registry.ts +14 -13
- package/src/src/prompt/schemas/prompt.schema.ts +0 -4
- package/src/src/prompt/types.ts +1 -2
- package/src/src/provider/local/ai-sdk-adapter.ts +3 -10
- package/src/src/provider/local/env.ts +22 -2
- package/src/src/provider/local/local-engine.ts +2 -9
- package/src/src/provider/model-registry.ts +2 -9
- package/src/src/provider/veryfront-cloud/provider.ts +1 -8
- package/src/src/provider/veryfront-cloud/shared.ts +12 -15
- package/src/src/proxy/handler.ts +90 -74
- package/src/src/react/compat/hooks-adapter.ts +43 -44
- package/src/src/react/components/Head.tsx +1 -181
- package/src/src/react/context/index.tsx +2 -83
- package/src/src/react/head-collector.ts +9 -0
- package/src/src/react/router/index.tsx +2 -100
- package/src/src/react/runtime/core.ts +303 -0
- package/src/src/rendering/orchestrator/html.ts +122 -18
- package/src/src/rendering/orchestrator/ssr-orchestrator.ts +8 -0
- package/src/src/rendering/orchestrator/types.ts +4 -0
- package/src/src/repositories/types.ts +0 -4
- package/src/src/resource/factory.ts +15 -11
- package/src/src/resource/registry.ts +7 -7
- package/src/src/schemas/common.ts +8 -5
- package/src/src/security/http/config.ts +3 -19
- package/src/src/security/http/response/security-handler.ts +22 -13
- package/src/src/security/index.ts +4 -7
- package/src/src/server/handlers/dev/styles-css.handler.ts +32 -14
- package/src/src/server/handlers/monitoring/metrics.handler.ts +3 -1
- package/src/src/server/handlers/request/module/module-server-handler.ts +24 -17
- package/src/src/server/handlers/request/prod-hydration-module.handler.ts +61 -0
- package/src/src/server/handlers/request/ssr/ssr.handler.ts +3 -0
- package/src/src/server/production-server.ts +84 -0
- package/src/src/server/runtime-handler/handler-context-builder.ts +1 -1
- package/src/src/server/runtime-handler/index.ts +44 -13
- package/src/src/server/runtime-handler/request-utils.ts +11 -0
- package/src/src/server/services/rendering/ssr.service.ts +31 -18
- package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +1 -1
- package/src/src/skill/allowed-tools.ts +1 -8
- package/src/src/skill/executor.ts +2 -2
- package/src/src/skill/parser.ts +13 -20
- package/src/src/skill/path-safety.ts +1 -1
- package/src/src/skill/tools.ts +27 -20
- package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
- package/src/src/task/discovery.ts +97 -97
- package/src/src/tool/executor.ts +10 -8
- package/src/src/tool/factory.ts +21 -22
- package/src/src/tool/types.ts +0 -17
- package/src/src/transforms/esm/package-registry.ts +52 -20
- package/src/src/transforms/import-rewriter/strategies/veryfront-strategy.ts +2 -1
- package/src/src/transforms/mdx/esm-module-loader/cache-format.ts +34 -1
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +1 -1
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.ts +4 -0
- package/src/src/transforms/pipeline/stages/ssr-vf-modules/index.ts +1 -1
- package/src/src/transforms/veryfront-module-urls.ts +6 -2
- package/src/src/types/entities/getEntityInfo.ts +131 -152
- package/src/src/utils/path-utils.ts +16 -7
- package/src/src/utils/version-constant.ts +1 -1
- package/src/src/utils/version.ts +0 -1
- package/src/src/workflow/worker/dynamic-job-entrypoint.ts +18 -84
- package/src/src/workflow/worker/job-entrypoint.ts +18 -85
- package/src/src/workflow/worker/shared.ts +127 -0
- package/esm/src/prompt/schemas/index.d.ts +0 -7
- package/esm/src/prompt/schemas/index.d.ts.map +0 -1
- package/esm/src/prompt/schemas/index.js +0 -6
- package/esm/src/security/http/handlers-index.d.ts +0 -5
- package/esm/src/security/http/handlers-index.d.ts.map +0 -1
- package/esm/src/security/http/handlers-index.js +0 -3
- package/src/src/prompt/schemas/index.ts +0 -7
- package/src/src/security/http/handlers-index.ts +0 -4
|
@@ -2,7 +2,7 @@ import { logger as baseLogger } from "../utils/index.js";
|
|
|
2
2
|
const logger = baseLogger.component("job-runtime-env");
|
|
3
3
|
export const INJECTED_TASK_ENV_JSON = "VERYFRONT_TASK_ENV_JSON";
|
|
4
4
|
const UNSAFE_INJECTED_ENV_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
5
|
-
const
|
|
5
|
+
const RESERVED_TASK_ENV_KEYS = new Set([
|
|
6
6
|
"VERYFRONT_API_TOKEN",
|
|
7
7
|
"VERYFRONT_API_URL",
|
|
8
8
|
"VERYFRONT_PROJECT_API_URL",
|
|
@@ -15,30 +15,14 @@ const HIDDEN_TASK_CONTEXT_ENV_KEYS = new Set([
|
|
|
15
15
|
"VERYFRONT_JOB_RESULT_PATH",
|
|
16
16
|
INJECTED_TASK_ENV_JSON,
|
|
17
17
|
]);
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
"VERYFRONT_API_URL",
|
|
21
|
-
"VERYFRONT_PROJECT_API_URL",
|
|
22
|
-
"VERYFRONT_API_BASE_URL",
|
|
23
|
-
"VERYFRONT_PROJECT_ID",
|
|
24
|
-
"VERYFRONT_PROJECT_SLUG",
|
|
25
|
-
"VERYFRONT_BRANCH_REF",
|
|
26
|
-
"VERYFRONT_API_USER",
|
|
27
|
-
"VERYFRONT_API_PASS",
|
|
28
|
-
"VERYFRONT_JOB_RESULT_PATH",
|
|
29
|
-
INJECTED_TASK_ENV_JSON,
|
|
30
|
-
]);
|
|
31
|
-
function isHiddenTaskContextEnvKey(key) {
|
|
32
|
-
return key.startsWith("TENANT_") || HIDDEN_TASK_CONTEXT_ENV_KEYS.has(key);
|
|
33
|
-
}
|
|
34
|
-
function isDisallowedInjectedEnvKey(key) {
|
|
35
|
-
return key.startsWith("TENANT_") || DISALLOWED_INJECTED_ENV_KEYS.has(key);
|
|
18
|
+
function isReservedTaskEnvKey(key) {
|
|
19
|
+
return key.startsWith("TENANT_") || RESERVED_TASK_ENV_KEYS.has(key);
|
|
36
20
|
}
|
|
37
|
-
function
|
|
21
|
+
function filterSafeWorkflowEnv(env) {
|
|
38
22
|
const filtered = {};
|
|
39
23
|
for (const [key, value] of Object.entries(env ?? {})) {
|
|
40
24
|
if (UNSAFE_INJECTED_ENV_KEYS.has(key) ||
|
|
41
|
-
|
|
25
|
+
isReservedTaskEnvKey(key) ||
|
|
42
26
|
typeof value !== "string") {
|
|
43
27
|
continue;
|
|
44
28
|
}
|
|
@@ -47,25 +31,18 @@ function filterExistingProjectEnv(env) {
|
|
|
47
31
|
return filtered;
|
|
48
32
|
}
|
|
49
33
|
export function readInjectedProjectEnv(allEnv) {
|
|
50
|
-
const
|
|
51
|
-
if (!
|
|
34
|
+
const rawInjectedEnv = allEnv[INJECTED_TASK_ENV_JSON];
|
|
35
|
+
if (!rawInjectedEnv) {
|
|
52
36
|
return {};
|
|
53
37
|
}
|
|
54
38
|
try {
|
|
55
|
-
const
|
|
56
|
-
if (!
|
|
39
|
+
const parsedInjectedEnv = JSON.parse(rawInjectedEnv);
|
|
40
|
+
if (!parsedInjectedEnv ||
|
|
41
|
+
typeof parsedInjectedEnv !== "object" ||
|
|
42
|
+
Array.isArray(parsedInjectedEnv)) {
|
|
57
43
|
return {};
|
|
58
44
|
}
|
|
59
|
-
|
|
60
|
-
for (const [key, value] of Object.entries(parsed)) {
|
|
61
|
-
if (UNSAFE_INJECTED_ENV_KEYS.has(key) ||
|
|
62
|
-
isDisallowedInjectedEnvKey(key) ||
|
|
63
|
-
typeof value !== "string") {
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
injectedEnv[key] = value;
|
|
67
|
-
}
|
|
68
|
-
return injectedEnv;
|
|
45
|
+
return filterSafeWorkflowEnv(parsedInjectedEnv);
|
|
69
46
|
}
|
|
70
47
|
catch {
|
|
71
48
|
logger.warn(`Ignoring invalid ${INJECTED_TASK_ENV_JSON}`);
|
|
@@ -73,28 +50,28 @@ export function readInjectedProjectEnv(allEnv) {
|
|
|
73
50
|
}
|
|
74
51
|
}
|
|
75
52
|
export function buildTaskContextEnv(allEnv, envAllowlist) {
|
|
76
|
-
const
|
|
77
|
-
const
|
|
53
|
+
const allowedEnvKeys = envAllowlist ? new Set(envAllowlist) : null;
|
|
54
|
+
const taskContextEnv = {};
|
|
78
55
|
for (const [key, value] of Object.entries(allEnv)) {
|
|
79
|
-
if (
|
|
56
|
+
if (isReservedTaskEnvKey(key)) {
|
|
80
57
|
continue;
|
|
81
58
|
}
|
|
82
|
-
if (
|
|
59
|
+
if (allowedEnvKeys && !allowedEnvKeys.has(key)) {
|
|
83
60
|
continue;
|
|
84
61
|
}
|
|
85
|
-
|
|
62
|
+
taskContextEnv[key] = value;
|
|
86
63
|
}
|
|
87
64
|
for (const [key, value] of Object.entries(readInjectedProjectEnv(allEnv))) {
|
|
88
|
-
if (
|
|
65
|
+
if (allowedEnvKeys && !allowedEnvKeys.has(key)) {
|
|
89
66
|
continue;
|
|
90
67
|
}
|
|
91
|
-
|
|
68
|
+
taskContextEnv[key] = value;
|
|
92
69
|
}
|
|
93
|
-
return
|
|
70
|
+
return taskContextEnv;
|
|
94
71
|
}
|
|
95
72
|
export function mergeInjectedWorkflowEnv(existingEnv, allEnv) {
|
|
96
73
|
const mergedEnv = {
|
|
97
|
-
...
|
|
74
|
+
...filterSafeWorkflowEnv(existingEnv),
|
|
98
75
|
...readInjectedProjectEnv(allEnv),
|
|
99
76
|
};
|
|
100
77
|
return Object.keys(mergedEnv).length > 0 ? mergedEnv : undefined;
|
|
@@ -11,6 +11,5 @@
|
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
13
|
import "../../_dnt.polyfills.js";
|
|
14
|
-
export { Markdown } from "../react/components/ai/markdown.js";
|
|
15
|
-
export type { CodeBlockProps, MarkdownProps } from "../react/components/ai/markdown.js";
|
|
14
|
+
export { type CodeBlockProps, Markdown, type MarkdownProps, } from "../react/components/ai/markdown.js";
|
|
16
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/markdown/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/markdown/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,cAAc,EACnB,QAAQ,EACR,KAAK,aAAa,GACnB,MAAM,oCAAoC,CAAC"}
|
|
@@ -10,10 +10,5 @@
|
|
|
10
10
|
* <Markdown># Hello{"\n\n"}Some **bold** text with `code`.</Markdown>
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
|
-
// veryfront/markdown — Markdown rendering component
|
|
14
|
-
//
|
|
15
|
-
// Renders markdown strings at runtime with syntax highlighting and
|
|
16
|
-
// Mermaid diagram support. Used for displaying AI-generated content.
|
|
17
|
-
// For MDX page customization, use veryfront/mdx instead.
|
|
18
13
|
import "../../_dnt.polyfills.js";
|
|
19
|
-
export { Markdown } from "../react/components/ai/markdown.js";
|
|
14
|
+
export { Markdown, } from "../react/components/ai/markdown.js";
|
package/esm/src/mcp/server.d.ts
CHANGED
|
@@ -49,7 +49,6 @@ export declare class MCPServer {
|
|
|
49
49
|
createHTTPHandler(): (request: dntShim.Request) => Promise<dntShim.Response>;
|
|
50
50
|
private extractRequestContext;
|
|
51
51
|
private validateAuth;
|
|
52
|
-
private handleCORS;
|
|
53
52
|
private getCORSHeaders;
|
|
54
53
|
private loadRemoteIntegrationTools;
|
|
55
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAWzE,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;AAoCzD,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IACpD,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,MAAM,EAAE,eAAe;IAQnC;;;;;;OAMG;IACH,oBAAoB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAK3D,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsBhG,OAAO,CAAC,QAAQ;IA8BhB,OAAO,CAAC,UAAU;YAYJ,SAAS;IA0BvB,OAAO,CAAC,QAAQ;IAmChB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,YAAY;IA6CpB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,SAAS;IAuCjB,iBAAiB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;IAiD5E,OAAO,CAAC,qBAAqB;YAgBf,YAAY;IAsB1B,OAAO,CAAC,cAAc;YAqBR,0BAA0B;CAqBzC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAElE"}
|
package/esm/src/mcp/server.js
CHANGED
|
@@ -12,11 +12,34 @@ import { VeryfrontError } from "../security/input-validation/errors.js";
|
|
|
12
12
|
import { logger as baseLogger } from "../utils/index.js";
|
|
13
13
|
const logger = baseLogger.component("mcp-server");
|
|
14
14
|
const MAX_REQUEST_BODY_SIZE = 1_048_576; // 1 MB
|
|
15
|
-
|
|
15
|
+
const MAX_CONTEXT_HEADER_LENGTH = 255;
|
|
16
|
+
const JSON_CONTENT_TYPE = "application/json";
|
|
17
|
+
const END_USER_ID_PATTERN = /^[a-zA-Z0-9._@-]+$/;
|
|
18
|
+
const PROJECT_ID_PATTERN = /^[a-zA-Z0-9._-]+$/;
|
|
19
|
+
function toParamsRecord(params) {
|
|
16
20
|
if (!params || Array.isArray(params))
|
|
17
21
|
return {};
|
|
18
22
|
return params;
|
|
19
23
|
}
|
|
24
|
+
function createJSONResponse(body, init) {
|
|
25
|
+
const headers = new dntShim.Headers(init?.headers);
|
|
26
|
+
headers.set("Content-Type", JSON_CONTENT_TYPE);
|
|
27
|
+
return new dntShim.Response(JSON.stringify(body), { ...init, headers });
|
|
28
|
+
}
|
|
29
|
+
function createJSONRPCErrorResponse(status, code, message) {
|
|
30
|
+
return createJSONResponse({
|
|
31
|
+
jsonrpc: "2.0",
|
|
32
|
+
id: null,
|
|
33
|
+
error: { code, message },
|
|
34
|
+
}, { status });
|
|
35
|
+
}
|
|
36
|
+
function readAllowedHeader(request, headerName, pattern) {
|
|
37
|
+
const value = request.headers.get(headerName);
|
|
38
|
+
if (!value || value.length > MAX_CONTEXT_HEADER_LENGTH || !pattern.test(value)) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
20
43
|
export class MCPServer {
|
|
21
44
|
config;
|
|
22
45
|
integrationLoader;
|
|
@@ -114,7 +137,7 @@ export class MCPServer {
|
|
|
114
137
|
return { tools };
|
|
115
138
|
}
|
|
116
139
|
callTool(params, context) {
|
|
117
|
-
const { name, arguments: args } =
|
|
140
|
+
const { name, arguments: args } = toParamsRecord(params);
|
|
118
141
|
if (!name) {
|
|
119
142
|
throw toError(createError({
|
|
120
143
|
type: "agent",
|
|
@@ -148,7 +171,7 @@ export class MCPServer {
|
|
|
148
171
|
return Promise.resolve({ resources });
|
|
149
172
|
}
|
|
150
173
|
readResource(params) {
|
|
151
|
-
const { uri } =
|
|
174
|
+
const { uri } = toParamsRecord(params);
|
|
152
175
|
if (!uri) {
|
|
153
176
|
throw toError(createError({
|
|
154
177
|
type: "agent",
|
|
@@ -189,7 +212,7 @@ export class MCPServer {
|
|
|
189
212
|
return Promise.resolve({ prompts });
|
|
190
213
|
}
|
|
191
214
|
getPrompt(params) {
|
|
192
|
-
const { name, arguments: args } =
|
|
215
|
+
const { name, arguments: args } = toParamsRecord(params);
|
|
193
216
|
if (!name) {
|
|
194
217
|
throw toError(createError({
|
|
195
218
|
type: "agent",
|
|
@@ -216,8 +239,9 @@ export class MCPServer {
|
|
|
216
239
|
createHTTPHandler() {
|
|
217
240
|
return async (request) => {
|
|
218
241
|
const requestOrigin = request.headers.get("Origin");
|
|
219
|
-
if (request.method === "OPTIONS")
|
|
220
|
-
return this.
|
|
242
|
+
if (request.method === "OPTIONS") {
|
|
243
|
+
return new dntShim.Response(null, { status: 204, headers: this.getCORSHeaders(requestOrigin) });
|
|
244
|
+
}
|
|
221
245
|
if (this.config.auth?.type && this.config.auth.type !== "none") {
|
|
222
246
|
const authorized = await this.validateAuth(request);
|
|
223
247
|
if (!authorized)
|
|
@@ -226,52 +250,32 @@ export class MCPServer {
|
|
|
226
250
|
// Enforce request body size limit (fast path via Content-Length header)
|
|
227
251
|
const contentLength = request.headers.get("content-length");
|
|
228
252
|
if (contentLength && Number(contentLength) > MAX_REQUEST_BODY_SIZE) {
|
|
229
|
-
return
|
|
230
|
-
jsonrpc: "2.0",
|
|
231
|
-
id: null,
|
|
232
|
-
error: { code: -32600, message: "Request body too large" },
|
|
233
|
-
}), { status: 413, headers: { "Content-Type": "application/json" } });
|
|
253
|
+
return createJSONRPCErrorResponse(413, -32600, "Request body too large");
|
|
234
254
|
}
|
|
235
255
|
try {
|
|
236
|
-
validateContentType(request,
|
|
256
|
+
validateContentType(request, JSON_CONTENT_TYPE);
|
|
237
257
|
}
|
|
238
258
|
catch (error) {
|
|
239
259
|
const message = error instanceof VeryfrontError ? error.message : "Invalid Content-Type";
|
|
240
|
-
return
|
|
241
|
-
jsonrpc: "2.0",
|
|
242
|
-
id: null,
|
|
243
|
-
error: { code: -32700, message },
|
|
244
|
-
}), { status: 400, headers: { "Content-Type": "application/json" } });
|
|
260
|
+
return createJSONRPCErrorResponse(400, -32700, message);
|
|
245
261
|
}
|
|
246
262
|
let rpcRequest;
|
|
247
263
|
try {
|
|
248
264
|
const bodyText = await request.text();
|
|
249
265
|
if (bodyText.length > MAX_REQUEST_BODY_SIZE) {
|
|
250
|
-
return
|
|
251
|
-
jsonrpc: "2.0",
|
|
252
|
-
id: null,
|
|
253
|
-
error: { code: -32600, message: "Request body too large" },
|
|
254
|
-
}), { status: 413, headers: { "Content-Type": "application/json" } });
|
|
266
|
+
return createJSONRPCErrorResponse(413, -32600, "Request body too large");
|
|
255
267
|
}
|
|
256
268
|
rpcRequest = JSON.parse(bodyText);
|
|
257
269
|
}
|
|
258
270
|
catch (_) {
|
|
259
271
|
// expected: malformed JSON in request body
|
|
260
|
-
return
|
|
261
|
-
jsonrpc: "2.0",
|
|
262
|
-
id: null,
|
|
263
|
-
error: { code: -32700, message: "Parse error" },
|
|
264
|
-
}), {
|
|
265
|
-
status: 400,
|
|
266
|
-
headers: { "Content-Type": "application/json" },
|
|
267
|
-
});
|
|
272
|
+
return createJSONRPCErrorResponse(400, -32700, "Parse error");
|
|
268
273
|
}
|
|
269
274
|
// Extract end-user identity from request headers for per-user token flows
|
|
270
275
|
const context = this.extractRequestContext(request);
|
|
271
276
|
const rpcResponse = await this.handleRequest(rpcRequest, context);
|
|
272
|
-
return
|
|
277
|
+
return createJSONResponse(rpcResponse, {
|
|
273
278
|
headers: {
|
|
274
|
-
"Content-Type": "application/json",
|
|
275
279
|
...this.getCORSHeaders(requestOrigin),
|
|
276
280
|
},
|
|
277
281
|
});
|
|
@@ -279,14 +283,12 @@ export class MCPServer {
|
|
|
279
283
|
}
|
|
280
284
|
extractRequestContext(request) {
|
|
281
285
|
const context = {};
|
|
282
|
-
const endUserId = request
|
|
283
|
-
|
|
284
|
-
if (endUserId && endUserId.length <= 255 && /^[a-zA-Z0-9._@-]+$/.test(endUserId)) {
|
|
286
|
+
const endUserId = readAllowedHeader(request, "x-end-user-id", END_USER_ID_PATTERN);
|
|
287
|
+
if (endUserId) {
|
|
285
288
|
context.endUserId = endUserId;
|
|
286
289
|
}
|
|
287
|
-
const projectId = request
|
|
288
|
-
|
|
289
|
-
if (projectId && projectId.length <= 255 && /^[a-zA-Z0-9._-]+$/.test(projectId)) {
|
|
290
|
+
const projectId = readAllowedHeader(request, "x-project-id", PROJECT_ID_PATTERN);
|
|
291
|
+
if (projectId) {
|
|
290
292
|
context.projectId = projectId;
|
|
291
293
|
}
|
|
292
294
|
return Object.keys(context).length > 0 ? context : undefined;
|
|
@@ -310,9 +312,6 @@ export class MCPServer {
|
|
|
310
312
|
const validate = auth.validate;
|
|
311
313
|
return await validate(token);
|
|
312
314
|
}
|
|
313
|
-
handleCORS(requestOrigin) {
|
|
314
|
-
return new dntShim.Response(null, { status: 204, headers: this.getCORSHeaders(requestOrigin) });
|
|
315
|
-
}
|
|
316
315
|
getCORSHeaders(requestOrigin) {
|
|
317
316
|
if (!this.config.cors?.enabled)
|
|
318
317
|
return {};
|
package/esm/src/mdx/index.d.ts
CHANGED
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* {children}
|
|
12
12
|
* </MDXProvider>
|
|
13
13
|
* ```
|
|
14
|
+
*
|
|
15
|
+
* For runtime markdown string rendering, use `veryfront/markdown` instead.
|
|
14
16
|
*/
|
|
15
17
|
import "../../_dnt.polyfills.js";
|
|
16
|
-
export { MDXProvider, useMDXComponents } from "../react/components/MDXProvider.js";
|
|
17
|
-
export type { MDXProviderProps } from "../react/components/MDXProvider.js";
|
|
18
|
+
export { MDXProvider, type MDXProviderProps, useMDXComponents, } from "../react/components/MDXProvider.js";
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/mdx/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/mdx/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,yBAAyB,CAAC;AAEjC,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,gBAAgB,GACjB,MAAM,oCAAoC,CAAC"}
|
package/esm/src/mdx/index.js
CHANGED
|
@@ -11,10 +11,8 @@
|
|
|
11
11
|
* {children}
|
|
12
12
|
* </MDXProvider>
|
|
13
13
|
* ```
|
|
14
|
+
*
|
|
15
|
+
* For runtime markdown string rendering, use `veryfront/markdown` instead.
|
|
14
16
|
*/
|
|
15
|
-
// veryfront/mdx — MDX provider and component overrides
|
|
16
|
-
//
|
|
17
|
-
// For customizing how .mdx pages render components.
|
|
18
|
-
// For runtime markdown string rendering, use veryfront/markdown instead.
|
|
19
17
|
import "../../_dnt.polyfills.js";
|
|
20
|
-
export { MDXProvider, useMDXComponents } from "../react/components/MDXProvider.js";
|
|
18
|
+
export { MDXProvider, useMDXComponents, } from "../react/components/MDXProvider.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/src/middleware/builtin/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAY7C,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC;IACzC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/src/middleware/builtin/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAY7C,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC;IACzC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAoJD,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAkD1D;AAED,wBAAgB,SAAS,IAAI,UAAU,CAEtC;AAED,wBAAgB,UAAU,IAAI,UAAU,CAEvC"}
|
|
@@ -41,6 +41,18 @@ function getTimestamp() {
|
|
|
41
41
|
function getRemoteAddr(req) {
|
|
42
42
|
return req.headers.get("x-forwarded-for") ?? req.headers.get("x-real-ip") ?? "-";
|
|
43
43
|
}
|
|
44
|
+
function getRequestLogDetails(req) {
|
|
45
|
+
return {
|
|
46
|
+
method: req.method,
|
|
47
|
+
pathname: new URL(req.url).pathname,
|
|
48
|
+
remoteAddr: getRemoteAddr(req),
|
|
49
|
+
referer: req.headers.get("referer") ?? undefined,
|
|
50
|
+
requestId: req.headers.get("x-request-id") ?? undefined,
|
|
51
|
+
traceId: req.headers.get("x-trace-id") ?? req.headers.get("traceparent") ?? undefined,
|
|
52
|
+
projectSlug: req.headers.get("x-project-slug") ?? undefined,
|
|
53
|
+
userAgent: req.headers.get("user-agent") ?? undefined,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
44
56
|
function getLogLevel(status) {
|
|
45
57
|
if (status >= HTTP_STATUS_SERVER_ERROR_MIN)
|
|
46
58
|
return "error";
|
|
@@ -49,29 +61,24 @@ function getLogLevel(status) {
|
|
|
49
61
|
return "info";
|
|
50
62
|
}
|
|
51
63
|
function formatJsonLog(req, status, duration) {
|
|
52
|
-
const
|
|
53
|
-
const userAgent = req.headers.get("user-agent");
|
|
54
|
-
const referer = req.headers.get("referer");
|
|
55
|
-
const requestId = req.headers.get("x-request-id");
|
|
56
|
-
const traceId = req.headers.get("x-trace-id") ?? req.headers.get("traceparent");
|
|
57
|
-
const projectSlug = req.headers.get("x-project-slug");
|
|
64
|
+
const details = getRequestLogDetails(req);
|
|
58
65
|
const entry = {
|
|
59
66
|
timestamp: new Date().toISOString(),
|
|
60
67
|
level: getLogLevel(status),
|
|
61
68
|
service: "server",
|
|
62
|
-
message: `${
|
|
69
|
+
message: `${details.method} ${details.pathname} ${status}`,
|
|
63
70
|
http: {
|
|
64
|
-
method:
|
|
65
|
-
path: pathname,
|
|
71
|
+
method: details.method,
|
|
72
|
+
path: details.pathname,
|
|
66
73
|
status,
|
|
67
74
|
durationMs: Math.round(duration),
|
|
68
|
-
remoteAddr:
|
|
69
|
-
...(userAgent && userAgent !== "-" ? { userAgent } : {}),
|
|
70
|
-
...(referer && referer !== "-" ? { referer } : {}),
|
|
75
|
+
remoteAddr: details.remoteAddr,
|
|
76
|
+
...(details.userAgent && details.userAgent !== "-" ? { userAgent: details.userAgent } : {}),
|
|
77
|
+
...(details.referer && details.referer !== "-" ? { referer: details.referer } : {}),
|
|
71
78
|
},
|
|
72
|
-
...(requestId ? { requestId } : {}),
|
|
73
|
-
...(traceId ? { traceId } : {}),
|
|
74
|
-
...(projectSlug ? { projectSlug } : {}),
|
|
79
|
+
...(details.requestId ? { requestId: details.requestId } : {}),
|
|
80
|
+
...(details.traceId ? { traceId: details.traceId } : {}),
|
|
81
|
+
...(details.projectSlug ? { projectSlug: details.projectSlug } : {}),
|
|
75
82
|
};
|
|
76
83
|
return JSON.stringify(entry);
|
|
77
84
|
}
|
|
@@ -117,21 +124,17 @@ export function logger(options) {
|
|
|
117
124
|
serverLogger.info(formatLog(format, req, status, duration));
|
|
118
125
|
return;
|
|
119
126
|
}
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
requestId,
|
|
127
|
-
traceId,
|
|
128
|
-
project_slug: projectSlug,
|
|
129
|
-
request_url: pathname,
|
|
127
|
+
const details = getRequestLogDetails(req);
|
|
128
|
+
serverLogger.info(`${details.method} ${details.pathname} ${status}`, {
|
|
129
|
+
requestId: details.requestId,
|
|
130
|
+
traceId: details.traceId,
|
|
131
|
+
project_slug: details.projectSlug,
|
|
132
|
+
request_url: details.pathname,
|
|
130
133
|
durationMs: Math.round(duration),
|
|
131
|
-
method:
|
|
134
|
+
method: details.method,
|
|
132
135
|
statusCode: status,
|
|
133
|
-
remoteAddr:
|
|
134
|
-
...(userAgent ? { userAgent } : {}),
|
|
136
|
+
remoteAddr: details.remoteAddr,
|
|
137
|
+
...(details.userAgent ? { userAgent: details.userAgent } : {}),
|
|
135
138
|
});
|
|
136
139
|
}
|
|
137
140
|
return async (ctx, next) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../../../src/src/middleware/builtin/security/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../../../src/src/middleware/builtin/security/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4BjE,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,eAAe,CAAC,CAAyC;gBAErD,QAAQ,EAAE,MAAM;IAgB5B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAcjE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,OAAO,IAAI,IAAI;CAKhB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC;CACjD;AAED,wBAAgB,SAAS,CACvB,oBAAoB,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAChD,WAAW,CAAC,EAAE,MAAM,GACnB,UAAU,CA0BZ;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,UAAU,CAMhE"}
|
|
@@ -5,6 +5,19 @@ import { CLEANUP_INTERVAL_MULTIPLIER } from "../../../utils/constants/cache.js";
|
|
|
5
5
|
import { unrefTimer } from "../../../platform/compat/process.js";
|
|
6
6
|
const DEFAULT_RATE_LIMIT_REQUESTS = 100;
|
|
7
7
|
const DEFAULT_RATE_LIMIT_WINDOW_MS = MS_PER_MINUTE;
|
|
8
|
+
function createRateLimitEntry(windowMs) {
|
|
9
|
+
return { count: 1, resetAt: Date.now() + windowMs };
|
|
10
|
+
}
|
|
11
|
+
function getRightmostForwardedIp(req) {
|
|
12
|
+
const forwarded = req.headers.get("x-forwarded-for");
|
|
13
|
+
if (!forwarded)
|
|
14
|
+
return undefined;
|
|
15
|
+
const parts = forwarded.split(",").map((value) => value.trim()).filter(Boolean);
|
|
16
|
+
return parts.at(-1);
|
|
17
|
+
}
|
|
18
|
+
function defaultKeyGenerator(req) {
|
|
19
|
+
return getRightmostForwardedIp(req) ?? "anonymous";
|
|
20
|
+
}
|
|
8
21
|
export class MemoryRateLimitStore {
|
|
9
22
|
counts = new Map();
|
|
10
23
|
cleanupInterval;
|
|
@@ -22,10 +35,10 @@ export class MemoryRateLimitStore {
|
|
|
22
35
|
unrefTimer(this.cleanupInterval);
|
|
23
36
|
}
|
|
24
37
|
increment(key, windowMs) {
|
|
25
|
-
const now = Date.now();
|
|
26
38
|
const existing = this.counts.get(key);
|
|
39
|
+
const now = Date.now();
|
|
27
40
|
if (!existing || existing.resetAt < now) {
|
|
28
|
-
const entry =
|
|
41
|
+
const entry = createRateLimitEntry(windowMs);
|
|
29
42
|
this.counts.set(key, entry);
|
|
30
43
|
return Promise.resolve(entry);
|
|
31
44
|
}
|
|
@@ -40,6 +53,7 @@ export class MemoryRateLimitStore {
|
|
|
40
53
|
if (!this.cleanupInterval)
|
|
41
54
|
return;
|
|
42
55
|
clearInterval(this.cleanupInterval);
|
|
56
|
+
this.cleanupInterval = undefined;
|
|
43
57
|
}
|
|
44
58
|
}
|
|
45
59
|
export function rateLimit(optionsOrMaxRequests, windowMsArg) {
|
|
@@ -49,16 +63,7 @@ export function rateLimit(optionsOrMaxRequests, windowMsArg) {
|
|
|
49
63
|
const maxRequests = options.maxRequests ?? DEFAULT_RATE_LIMIT_REQUESTS;
|
|
50
64
|
const windowMs = options.windowMs ?? DEFAULT_RATE_LIMIT_WINDOW_MS;
|
|
51
65
|
const store = options.store ?? new MemoryRateLimitStore(windowMs);
|
|
52
|
-
const keyGenerator = options.keyGenerator ??
|
|
53
|
-
const forwarded = req.headers.get("x-forwarded-for");
|
|
54
|
-
if (forwarded) {
|
|
55
|
-
const parts = forwarded.split(",").map((s) => s.trim()).filter(Boolean);
|
|
56
|
-
// Use rightmost IP — added by nearest trusted proxy, not spoofable by clients
|
|
57
|
-
if (parts.length > 0)
|
|
58
|
-
return parts[parts.length - 1];
|
|
59
|
-
}
|
|
60
|
-
return "anonymous";
|
|
61
|
-
});
|
|
66
|
+
const keyGenerator = options.keyGenerator ?? defaultKeyGenerator;
|
|
62
67
|
return async (ctx, next) => {
|
|
63
68
|
const req = getRequest(ctx);
|
|
64
69
|
const key = keyGenerator(req);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../../src/src/middleware/builtin/timeout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../../src/src/middleware/builtin/timeout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,oCAAoC,CAAC;AAS5C,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAoBD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAmC5D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,iBAA0C,GAAG,MAAM,CAGzF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,UAAU,CAEtF"}
|
|
@@ -6,6 +6,20 @@ import { HTTP_GATEWAY_TIMEOUT } from "../../utils/constants/http.js";
|
|
|
6
6
|
const logger = serverLogger.component("timeout");
|
|
7
7
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
8
8
|
const TIMEOUT_SENTINEL = Symbol("timeout");
|
|
9
|
+
const DEFAULT_EXCLUDE_PATHS = ["/healthz", "/readyz", "/_health"];
|
|
10
|
+
function isExcludedPath(pathname, exclude) {
|
|
11
|
+
return exclude.some((path) => pathname === path || pathname.startsWith(path));
|
|
12
|
+
}
|
|
13
|
+
function timeoutResponse(pathname, timeoutMs, message) {
|
|
14
|
+
return new dntShim.Response(JSON.stringify({
|
|
15
|
+
error: message,
|
|
16
|
+
timeoutMs,
|
|
17
|
+
path: pathname,
|
|
18
|
+
}), {
|
|
19
|
+
status: HTTP_GATEWAY_TIMEOUT,
|
|
20
|
+
headers: { "Content-Type": "application/json" },
|
|
21
|
+
});
|
|
22
|
+
}
|
|
9
23
|
/**
|
|
10
24
|
* Creates a middleware that enforces request timeouts.
|
|
11
25
|
*
|
|
@@ -15,11 +29,11 @@ const TIMEOUT_SENTINEL = Symbol("timeout");
|
|
|
15
29
|
export function timeout(options) {
|
|
16
30
|
const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
17
31
|
const message = options?.message ?? "Request timeout";
|
|
18
|
-
const exclude = options?.exclude ??
|
|
32
|
+
const exclude = options?.exclude ?? DEFAULT_EXCLUDE_PATHS;
|
|
19
33
|
return async (ctx, next) => {
|
|
20
34
|
const req = getRequest(ctx);
|
|
21
35
|
const { pathname } = new URL(req.url);
|
|
22
|
-
if (
|
|
36
|
+
if (isExcludedPath(pathname, exclude)) {
|
|
23
37
|
return next();
|
|
24
38
|
}
|
|
25
39
|
let timeoutId;
|
|
@@ -37,14 +51,7 @@ export function timeout(options) {
|
|
|
37
51
|
method: req.method,
|
|
38
52
|
timeoutMs,
|
|
39
53
|
});
|
|
40
|
-
return
|
|
41
|
-
error: message,
|
|
42
|
-
timeoutMs,
|
|
43
|
-
path: pathname,
|
|
44
|
-
}), {
|
|
45
|
-
status: HTTP_GATEWAY_TIMEOUT,
|
|
46
|
-
headers: { "Content-Type": "application/json" },
|
|
47
|
-
});
|
|
54
|
+
return timeoutResponse(pathname, timeoutMs, message);
|
|
48
55
|
}
|
|
49
56
|
finally {
|
|
50
57
|
if (timeoutId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-import-map.d.ts","sourceRoot":"","sources":["../../../../src/src/modules/import-map/default-import-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"default-import-map.d.ts","sourceRoot":"","sources":["../../../../src/src/modules/import-map/default-import-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAyDlD,wBAAgB,mBAAmB,IAAI,eAAe,CAIrD"}
|
|
@@ -10,9 +10,10 @@ import { getReactImportMap } from "../../transforms/esm/package-registry.js";
|
|
|
10
10
|
function getVeryfrontSsrImportMap() {
|
|
11
11
|
const base = "/_vf_modules/_veryfront";
|
|
12
12
|
const ssr = "?ssr=true";
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
13
|
+
const coreReact = `${base}/react/runtime/core.js${ssr}`;
|
|
14
|
+
const head = coreReact;
|
|
15
|
+
const router = coreReact;
|
|
16
|
+
const context = coreReact;
|
|
16
17
|
const fonts = `${base}/react/fonts/index.js${ssr}`;
|
|
17
18
|
const markdown = `${base}/markdown/index.js${ssr}`;
|
|
18
19
|
const chat = `${base}/chat/index.js${ssr}`;
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**************************************************
|
|
2
|
-
* OAuth Callback Handler
|
|
3
|
-
*
|
|
4
|
-
* Reusable handler for OAuth callback routes.
|
|
5
|
-
**************************************************/
|
|
6
1
|
import * as dntShim from "../../../_dnt.shims.js";
|
|
7
2
|
import { type EnvironmentConfig } from "../../config/environment-config.js";
|
|
8
3
|
import { type EnvReader } from "../providers/base.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/handlers/callback-handler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"callback-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/handlers/callback-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9E,MAAM,WAAW,2BAA2B;IAC1C,oDAAoD;IACpD,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,gFAAgF;IAChF,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,2BAAgC,GACxC,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAkHzD"}
|