@dexto/core 1.1.11 → 1.2.1
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/README.md +24 -4
- package/dist/Dexto.cjs +4 -14
- package/dist/Dexto.d.ts +8 -29
- package/dist/Dexto.d.ts.map +1 -1
- package/dist/Dexto.js +4 -12
- package/dist/agent/DextoAgent.cjs +92 -3
- package/dist/agent/DextoAgent.d.ts +12 -4
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +52 -3
- package/dist/agent/agentCard.js +1 -0
- package/dist/agent/error-codes.cjs +1 -0
- package/dist/agent/error-codes.d.ts +1 -0
- package/dist/agent/error-codes.d.ts.map +1 -1
- package/dist/agent/error-codes.js +2 -0
- package/dist/agent/errors.cjs +13 -0
- package/dist/agent/errors.d.ts +4 -0
- package/dist/agent/errors.d.ts.map +1 -1
- package/dist/agent/errors.js +14 -0
- package/dist/agent/index.js +1 -0
- package/dist/agent/registry/error-codes.js +1 -0
- package/dist/agent/registry/errors.js +1 -0
- package/dist/agent/registry/registry.js +1 -0
- package/dist/agent/registry/types.js +1 -0
- package/dist/agent/registry/user-registry.js +1 -0
- package/dist/agent/schemas.cjs +6 -1
- package/dist/agent/schemas.d.ts +113 -3
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +7 -1
- package/dist/agent/state-manager.js +1 -0
- package/dist/approval/error-codes.js +1 -0
- package/dist/approval/errors.js +1 -0
- package/dist/approval/index.js +1 -0
- package/dist/approval/manager.cjs +30 -0
- package/dist/approval/manager.d.ts +23 -1
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +31 -0
- package/dist/approval/providers/event-based-approval-provider.js +1 -0
- package/dist/approval/providers/factory.js +1 -0
- package/dist/approval/providers/noop-approval-provider.js +1 -0
- package/dist/approval/schemas.cjs +36 -0
- package/dist/approval/schemas.d.ts +173 -0
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +33 -0
- package/dist/approval/types.cjs +1 -0
- package/dist/approval/types.d.ts +27 -1
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +2 -0
- package/dist/chunk-C6A6W6XS.js +53 -0
- package/dist/config/agent-resolver.js +1 -0
- package/dist/config/error-codes.js +1 -0
- package/dist/config/errors.js +1 -0
- package/dist/config/loader.js +1 -0
- package/dist/config/writer.js +1 -0
- package/dist/context/compression/middle-removal.js +1 -0
- package/dist/context/compression/oldest-removal.js +1 -0
- package/dist/context/error-codes.js +1 -0
- package/dist/context/errors.js +1 -0
- package/dist/context/index.js +1 -0
- package/dist/context/manager.cjs +36 -1
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +27 -1
- package/dist/context/media-helpers.js +1 -0
- package/dist/context/utils.cjs +102 -6
- package/dist/context/utils.d.ts +35 -2
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +100 -6
- package/dist/errors/DextoBaseError.js +1 -0
- package/dist/errors/DextoRuntimeError.js +1 -0
- package/dist/errors/DextoValidationError.js +1 -0
- package/dist/errors/index.js +1 -0
- package/dist/errors/result-bridge.js +1 -0
- package/dist/errors/types.cjs +3 -0
- package/dist/errors/types.d.ts +7 -2
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/errors/types.js +4 -0
- package/dist/events/index.cjs +1 -0
- package/dist/events/index.d.ts +6 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +2 -0
- package/dist/filesystem/error-codes.cjs +53 -0
- package/dist/filesystem/error-codes.d.ts +31 -0
- package/dist/filesystem/error-codes.d.ts.map +1 -0
- package/dist/filesystem/error-codes.js +30 -0
- package/dist/filesystem/errors.cjs +303 -0
- package/dist/filesystem/errors.d.ts +109 -0
- package/dist/filesystem/errors.d.ts.map +1 -0
- package/dist/filesystem/errors.js +280 -0
- package/dist/filesystem/filesystem-service.cjs +482 -0
- package/dist/filesystem/filesystem-service.d.ts +57 -0
- package/dist/filesystem/filesystem-service.d.ts.map +1 -0
- package/dist/filesystem/filesystem-service.js +449 -0
- package/dist/filesystem/index.cjs +37 -0
- package/dist/filesystem/index.d.ts +11 -0
- package/dist/filesystem/index.d.ts.map +1 -0
- package/dist/filesystem/index.js +11 -0
- package/dist/filesystem/path-validator.cjs +172 -0
- package/dist/filesystem/path-validator.d.ts +53 -0
- package/dist/filesystem/path-validator.d.ts.map +1 -0
- package/dist/filesystem/path-validator.js +139 -0
- package/dist/filesystem/types.cjs +16 -0
- package/dist/filesystem/types.d.ts +171 -0
- package/dist/filesystem/types.d.ts.map +1 -0
- package/dist/filesystem/types.js +0 -0
- package/dist/index.browser.js +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/llm/error-codes.js +1 -0
- package/dist/llm/errors.js +1 -0
- package/dist/llm/formatters/anthropic.js +1 -0
- package/dist/llm/formatters/factory.js +1 -0
- package/dist/llm/formatters/openai.js +1 -0
- package/dist/llm/formatters/vercel.js +1 -0
- package/dist/llm/registry.cjs +15 -15
- package/dist/llm/registry.d.ts +1 -1
- package/dist/llm/registry.js +16 -15
- package/dist/llm/resolver.js +1 -0
- package/dist/llm/schemas.cjs +6 -2
- package/dist/llm/schemas.d.ts +10 -0
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +7 -2
- package/dist/llm/services/anthropic.cjs +67 -0
- package/dist/llm/services/anthropic.d.ts +6 -0
- package/dist/llm/services/anthropic.d.ts.map +1 -1
- package/dist/llm/services/anthropic.js +27 -0
- package/dist/llm/services/factory.js +1 -0
- package/dist/llm/services/openai.cjs +87 -0
- package/dist/llm/services/openai.d.ts +6 -0
- package/dist/llm/services/openai.d.ts.map +1 -1
- package/dist/llm/services/openai.js +47 -0
- package/dist/llm/services/test-utils.integration.cjs +1 -1
- package/dist/llm/services/test-utils.integration.js +2 -1
- package/dist/llm/services/vercel.cjs +144 -97
- package/dist/llm/services/vercel.d.ts +6 -1
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +105 -98
- package/dist/llm/tokenizer/anthropic.js +1 -0
- package/dist/llm/tokenizer/default.js +1 -0
- package/dist/llm/tokenizer/factory.js +1 -0
- package/dist/llm/tokenizer/google.js +1 -0
- package/dist/llm/tokenizer/openai.cjs +1 -1
- package/dist/llm/tokenizer/openai.d.ts +1 -1
- package/dist/llm/tokenizer/openai.js +2 -1
- package/dist/llm/tokenizer/types.js +1 -0
- package/dist/llm/types.d.ts +2 -2
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +1 -0
- package/dist/llm/validation.js +1 -0
- package/dist/logger/browser.js +1 -0
- package/dist/logger/logger.d.ts +42 -0
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.js +1 -0
- package/dist/mcp/error-codes.cjs +1 -0
- package/dist/mcp/error-codes.d.ts +1 -0
- package/dist/mcp/error-codes.d.ts.map +1 -1
- package/dist/mcp/error-codes.js +2 -0
- package/dist/mcp/errors.cjs +12 -0
- package/dist/mcp/errors.d.ts +7 -0
- package/dist/mcp/errors.d.ts.map +1 -1
- package/dist/mcp/errors.js +13 -0
- package/dist/mcp/manager.cjs +66 -16
- package/dist/mcp/manager.d.ts +7 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +67 -16
- package/dist/mcp/mcp-client.js +1 -0
- package/dist/mcp/resolver.js +1 -0
- package/dist/mcp/schemas.js +1 -0
- package/dist/mcp/types.d.ts +1 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/memory/error-codes.js +1 -0
- package/dist/memory/errors.js +1 -0
- package/dist/memory/index.js +1 -0
- package/dist/memory/manager.js +1 -0
- package/dist/memory/schemas.js +1 -0
- package/dist/plugins/builtins/content-policy.js +1 -0
- package/dist/plugins/builtins/response-sanitizer.js +1 -0
- package/dist/plugins/error-codes.js +1 -0
- package/dist/plugins/index.js +1 -0
- package/dist/plugins/loader.js +1 -0
- package/dist/plugins/manager.js +1 -0
- package/dist/plugins/registrations/builtins.js +1 -0
- package/dist/plugins/schemas.js +1 -0
- package/dist/preferences/constants.js +1 -0
- package/dist/preferences/error-codes.js +1 -0
- package/dist/preferences/errors.js +1 -0
- package/dist/preferences/index.js +1 -0
- package/dist/preferences/loader.cjs +3 -1
- package/dist/preferences/loader.d.ts +10 -1
- package/dist/preferences/loader.d.ts.map +1 -1
- package/dist/preferences/loader.js +4 -1
- package/dist/preferences/schemas.cjs +2 -1
- package/dist/preferences/schemas.d.ts +8 -0
- package/dist/preferences/schemas.d.ts.map +1 -1
- package/dist/preferences/schemas.js +3 -1
- package/dist/process/command-validator.cjs +544 -0
- package/dist/process/command-validator.d.ts +46 -0
- package/dist/process/command-validator.d.ts.map +1 -0
- package/dist/process/command-validator.js +521 -0
- package/dist/process/error-codes.cjs +47 -0
- package/dist/process/error-codes.d.ts +25 -0
- package/dist/process/error-codes.d.ts.map +1 -0
- package/dist/process/error-codes.js +24 -0
- package/dist/process/errors.cjs +244 -0
- package/dist/process/errors.d.ts +87 -0
- package/dist/process/errors.d.ts.map +1 -0
- package/dist/process/errors.js +221 -0
- package/dist/process/index.cjs +37 -0
- package/dist/process/index.d.ts +11 -0
- package/dist/process/index.d.ts.map +1 -0
- package/dist/process/index.js +11 -0
- package/dist/process/process-service.cjs +443 -0
- package/dist/process/process-service.d.ts +62 -0
- package/dist/process/process-service.d.ts.map +1 -0
- package/dist/process/process-service.js +410 -0
- package/dist/process/types.cjs +16 -0
- package/dist/process/types.d.ts +107 -0
- package/dist/process/types.d.ts.map +1 -0
- package/dist/process/types.js +0 -0
- package/dist/prompts/error-codes.js +1 -0
- package/dist/prompts/errors.js +1 -0
- package/dist/prompts/index.js +1 -0
- package/dist/prompts/name-validation.js +1 -0
- package/dist/prompts/prompt-manager.js +1 -0
- package/dist/prompts/providers/custom-prompt-provider.js +1 -0
- package/dist/prompts/providers/file-prompt-provider.js +1 -0
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -0
- package/dist/prompts/providers/starter-prompt-provider.js +1 -0
- package/dist/prompts/schemas.js +1 -0
- package/dist/prompts/utils.js +1 -0
- package/dist/resources/error-codes.js +1 -0
- package/dist/resources/errors.js +1 -0
- package/dist/resources/handlers/blob-handler.js +1 -0
- package/dist/resources/handlers/factory.js +1 -0
- package/dist/resources/handlers/filesystem-handler.cjs +1 -1
- package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
- package/dist/resources/handlers/filesystem-handler.js +2 -1
- package/dist/resources/index.js +1 -0
- package/dist/resources/internal-provider.js +1 -0
- package/dist/resources/manager.js +1 -0
- package/dist/resources/reference-parser.js +1 -0
- package/dist/resources/schemas.js +1 -0
- package/dist/search/index.js +1 -0
- package/dist/search/search-service.js +1 -0
- package/dist/session/chat-session.cjs +2 -2
- package/dist/session/chat-session.d.ts +2 -2
- package/dist/session/chat-session.js +3 -2
- package/dist/session/error-codes.js +1 -0
- package/dist/session/errors.js +1 -0
- package/dist/session/history/database.js +1 -0
- package/dist/session/history/factory.js +1 -0
- package/dist/session/history/memory.js +1 -0
- package/dist/session/index.js +1 -0
- package/dist/session/schemas.js +1 -0
- package/dist/session/session-manager.d.ts +6 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +1 -0
- package/dist/session/title-generator.js +1 -0
- package/dist/storage/blob/factory.cjs +3 -3
- package/dist/storage/blob/factory.d.ts +3 -1
- package/dist/storage/blob/factory.d.ts.map +1 -1
- package/dist/storage/blob/factory.js +4 -3
- package/dist/storage/blob/local-blob-store.cjs +18 -2
- package/dist/storage/blob/local-blob-store.d.ts +2 -1
- package/dist/storage/blob/local-blob-store.d.ts.map +1 -1
- package/dist/storage/blob/local-blob-store.js +19 -2
- package/dist/storage/blob/schemas.js +1 -0
- package/dist/storage/cache/factory.js +1 -0
- package/dist/storage/cache/memory-cache-store.js +1 -0
- package/dist/storage/cache/redis-store.js +1 -0
- package/dist/storage/cache/schemas.js +1 -0
- package/dist/storage/database/factory.cjs +7 -5
- package/dist/storage/database/factory.d.ts +3 -1
- package/dist/storage/database/factory.d.ts.map +1 -1
- package/dist/storage/database/factory.js +8 -5
- package/dist/storage/database/memory-database-store.js +1 -0
- package/dist/storage/database/postgres-store.js +1 -0
- package/dist/storage/database/schemas.cjs +1 -1
- package/dist/storage/database/schemas.js +2 -1
- package/dist/storage/database/sqlite-store.cjs +20 -2
- package/dist/storage/database/sqlite-store.d.ts +2 -1
- package/dist/storage/database/sqlite-store.d.ts.map +1 -1
- package/dist/storage/database/sqlite-store.js +21 -2
- package/dist/storage/error-codes.cjs +1 -0
- package/dist/storage/error-codes.d.ts +1 -0
- package/dist/storage/error-codes.d.ts.map +1 -1
- package/dist/storage/error-codes.js +2 -0
- package/dist/storage/errors.cjs +15 -0
- package/dist/storage/errors.d.ts +4 -0
- package/dist/storage/errors.d.ts.map +1 -1
- package/dist/storage/errors.js +16 -0
- package/dist/storage/index.js +1 -0
- package/dist/storage/schemas.js +1 -0
- package/dist/storage/storage-manager.cjs +7 -5
- package/dist/storage/storage-manager.d.ts +5 -2
- package/dist/storage/storage-manager.d.ts.map +1 -1
- package/dist/storage/storage-manager.js +8 -5
- package/dist/systemPrompt/contributors.js +1 -0
- package/dist/systemPrompt/error-codes.js +1 -0
- package/dist/systemPrompt/errors.js +1 -0
- package/dist/systemPrompt/in-built-prompts.js +1 -0
- package/dist/systemPrompt/index.js +1 -0
- package/dist/systemPrompt/manager.js +1 -0
- package/dist/systemPrompt/registry.js +1 -0
- package/dist/systemPrompt/schemas.js +1 -0
- package/dist/telemetry/decorators.cjs +175 -0
- package/dist/telemetry/decorators.d.ts +17 -0
- package/dist/telemetry/decorators.d.ts.map +1 -0
- package/dist/telemetry/decorators.js +157 -0
- package/dist/telemetry/exporters.cjs +108 -0
- package/dist/telemetry/exporters.d.ts +29 -0
- package/dist/telemetry/exporters.d.ts.map +1 -0
- package/dist/telemetry/exporters.js +85 -0
- package/dist/telemetry/index.cjs +28 -0
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +5 -0
- package/dist/telemetry/schemas.cjs +71 -0
- package/dist/telemetry/schemas.d.ts +54 -0
- package/dist/telemetry/schemas.d.ts.map +1 -0
- package/dist/telemetry/schemas.js +48 -0
- package/dist/telemetry/telemetry.cjs +228 -0
- package/dist/telemetry/telemetry.d.ts +74 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -0
- package/dist/telemetry/telemetry.js +205 -0
- package/dist/telemetry/types.cjs +16 -0
- package/dist/telemetry/types.d.ts +22 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +0 -0
- package/dist/telemetry/utils.cjs +87 -0
- package/dist/telemetry/utils.d.ts +21 -0
- package/dist/telemetry/utils.d.ts.map +1 -0
- package/dist/telemetry/utils.js +62 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -0
- package/dist/tools/error-codes.js +1 -0
- package/dist/tools/errors.js +1 -0
- package/dist/tools/index.js +1 -0
- package/dist/tools/internal-tools/constants.cjs +39 -0
- package/dist/tools/internal-tools/constants.d.ts +12 -0
- package/dist/tools/internal-tools/constants.d.ts.map +1 -0
- package/dist/tools/internal-tools/constants.js +16 -0
- package/dist/tools/internal-tools/implementations/ask-user-tool.js +1 -0
- package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +106 -0
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +13 -0
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/bash-exec-tool.js +73 -0
- package/dist/tools/internal-tools/implementations/bash-output-tool.cjs +49 -0
- package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts +12 -0
- package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/bash-output-tool.js +26 -0
- package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +62 -0
- package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts +12 -0
- package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/edit-file-tool.js +39 -0
- package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +57 -0
- package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts +12 -0
- package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/glob-files-tool.js +34 -0
- package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +71 -0
- package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts +12 -0
- package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/grep-content-tool.js +48 -0
- package/dist/tools/internal-tools/implementations/kill-process-tool.cjs +47 -0
- package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts +12 -0
- package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/kill-process-tool.js +24 -0
- package/dist/tools/internal-tools/implementations/read-file-tool.cjs +55 -0
- package/dist/tools/internal-tools/implementations/read-file-tool.d.ts +12 -0
- package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/read-file-tool.js +32 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -0
- package/dist/tools/internal-tools/implementations/write-file-tool.cjs +56 -0
- package/dist/tools/internal-tools/implementations/write-file-tool.d.ts +12 -0
- package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/write-file-tool.js +33 -0
- package/dist/tools/internal-tools/index.cjs +3 -1
- package/dist/tools/internal-tools/index.d.ts +1 -0
- package/dist/tools/internal-tools/index.d.ts.map +1 -1
- package/dist/tools/internal-tools/index.js +1 -0
- package/dist/tools/internal-tools/provider.js +1 -0
- package/dist/tools/internal-tools/registry.cjs +40 -4
- package/dist/tools/internal-tools/registry.d.ts +5 -9
- package/dist/tools/internal-tools/registry.d.ts.map +1 -1
- package/dist/tools/internal-tools/registry.js +41 -3
- package/dist/tools/schemas.cjs +18 -5
- package/dist/tools/schemas.d.ts +30 -1
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +15 -2
- package/dist/tools/tool-manager.cjs +158 -19
- package/dist/tools/tool-manager.d.ts +48 -2
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +118 -19
- package/dist/utils/api-key-resolver.js +1 -0
- package/dist/utils/api-key-store.js +1 -0
- package/dist/utils/async-context.js +1 -0
- package/dist/utils/debug.js +1 -0
- package/dist/utils/env.js +1 -0
- package/dist/utils/error-conversion.js +1 -0
- package/dist/utils/execution-context.js +1 -0
- package/dist/utils/fs-walk.js +1 -0
- package/dist/utils/path.js +1 -0
- package/dist/utils/port-utils.js +1 -0
- package/dist/utils/redactor.js +1 -0
- package/dist/utils/result.js +1 -0
- package/dist/utils/safe-stringify.js +1 -0
- package/dist/utils/schema-metadata.js +1 -0
- package/dist/utils/schema.js +1 -0
- package/dist/utils/service-initializer.cjs +42 -4
- package/dist/utils/service-initializer.d.ts +2 -1
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +33 -4
- package/dist/utils/user-info.js +1 -0
- package/dist/utils/zod-schema-converter.js +1 -0
- package/package.json +11 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var exporters_exports = {};
|
|
20
|
+
__export(exporters_exports, {
|
|
21
|
+
CompositeExporter: () => CompositeExporter
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(exporters_exports);
|
|
24
|
+
var import_core = require("@opentelemetry/core");
|
|
25
|
+
function normalizeUrlPath(url) {
|
|
26
|
+
try {
|
|
27
|
+
const parsedUrl = new URL(url);
|
|
28
|
+
let pathname = parsedUrl.pathname.toLowerCase().trim();
|
|
29
|
+
if (pathname.endsWith("/")) {
|
|
30
|
+
pathname = pathname.slice(0, -1);
|
|
31
|
+
}
|
|
32
|
+
return pathname;
|
|
33
|
+
} catch (_e) {
|
|
34
|
+
let path = url.toLowerCase().trim();
|
|
35
|
+
if (path.endsWith("/")) {
|
|
36
|
+
path = path.slice(0, -1);
|
|
37
|
+
}
|
|
38
|
+
return path;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
class CompositeExporter {
|
|
42
|
+
exporters;
|
|
43
|
+
constructor(exporters) {
|
|
44
|
+
this.exporters = exporters;
|
|
45
|
+
}
|
|
46
|
+
export(spans, resultCallback) {
|
|
47
|
+
const telemetryTraceIds = new Set(
|
|
48
|
+
spans.filter((span) => {
|
|
49
|
+
const attrs = span.attributes || {};
|
|
50
|
+
const relevantHttpAttributes = [
|
|
51
|
+
attrs["http.target"],
|
|
52
|
+
attrs["http.route"],
|
|
53
|
+
attrs["http.url"],
|
|
54
|
+
attrs["url.path"],
|
|
55
|
+
attrs["http.request_path"]
|
|
56
|
+
];
|
|
57
|
+
const isTelemetrySpan = relevantHttpAttributes.some((attr) => {
|
|
58
|
+
if (typeof attr === "string") {
|
|
59
|
+
const normalizedPath = normalizeUrlPath(attr);
|
|
60
|
+
return normalizedPath === "/api/telemetry" || normalizedPath.startsWith("/api/telemetry/");
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
});
|
|
64
|
+
return isTelemetrySpan;
|
|
65
|
+
}).map((span) => span.spanContext().traceId)
|
|
66
|
+
);
|
|
67
|
+
const filteredSpans = spans.filter(
|
|
68
|
+
(span) => !telemetryTraceIds.has(span.spanContext().traceId)
|
|
69
|
+
);
|
|
70
|
+
if (filteredSpans.length === 0) {
|
|
71
|
+
resultCallback({ code: import_core.ExportResultCode.SUCCESS });
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
void Promise.all(
|
|
75
|
+
this.exporters.map(
|
|
76
|
+
(exporter) => new Promise((resolve) => {
|
|
77
|
+
if (exporter.export) {
|
|
78
|
+
exporter.export(filteredSpans, resolve);
|
|
79
|
+
} else {
|
|
80
|
+
resolve({ code: import_core.ExportResultCode.FAILED });
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
)
|
|
84
|
+
).then((results) => {
|
|
85
|
+
const hasError = results.some((r) => r.code === import_core.ExportResultCode.FAILED);
|
|
86
|
+
resultCallback({
|
|
87
|
+
code: hasError ? import_core.ExportResultCode.FAILED : import_core.ExportResultCode.SUCCESS
|
|
88
|
+
});
|
|
89
|
+
}).catch((error) => {
|
|
90
|
+
console.error("[CompositeExporter] Export error:", error);
|
|
91
|
+
resultCallback({ code: import_core.ExportResultCode.FAILED });
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
shutdown() {
|
|
95
|
+
return Promise.all(this.exporters.map((e) => e.shutdown?.() ?? Promise.resolve())).then(
|
|
96
|
+
() => void 0
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
forceFlush() {
|
|
100
|
+
return Promise.all(this.exporters.map((e) => e.forceFlush?.() ?? Promise.resolve())).then(
|
|
101
|
+
() => void 0
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
106
|
+
0 && (module.exports = {
|
|
107
|
+
CompositeExporter
|
|
108
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ExportResult } from '@opentelemetry/core';
|
|
2
|
+
import type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
/**
|
|
4
|
+
* CompositeExporter wraps multiple span exporters and provides two key features:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Multi-exporter support**: Exports spans to multiple destinations in parallel
|
|
7
|
+
* (e.g., console for development + OTLP for production monitoring)
|
|
8
|
+
*
|
|
9
|
+
* 2. **Recursive telemetry filtering**: Prevents telemetry infinity loops by filtering
|
|
10
|
+
* out spans from `/api/telemetry` endpoints. Without this, telemetry API calls would
|
|
11
|
+
* generate spans, which would be exported via HTTP to `/api/telemetry`, generating
|
|
12
|
+
* more spans, creating an infinite loop.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const exporter = new CompositeExporter([
|
|
17
|
+
* new ConsoleSpanExporter(),
|
|
18
|
+
* new OTLPHttpExporter({ url: 'http://localhost:4318/v1/traces' })
|
|
19
|
+
* ]);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class CompositeExporter implements SpanExporter {
|
|
23
|
+
private exporters;
|
|
24
|
+
constructor(exporters: SpanExporter[]);
|
|
25
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
|
|
26
|
+
shutdown(): Promise<void>;
|
|
27
|
+
forceFlush(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=exporters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporters.d.ts","sourceRoot":"","sources":["../../src/telemetry/exporters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA0BhF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAClD,OAAO,CAAC,SAAS,CAAiB;gBAEtB,SAAS,EAAE,YAAY,EAAE;IAIrC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAiEnF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import "../chunk-C6A6W6XS.js";
|
|
2
|
+
import { ExportResultCode } from "@opentelemetry/core";
|
|
3
|
+
function normalizeUrlPath(url) {
|
|
4
|
+
try {
|
|
5
|
+
const parsedUrl = new URL(url);
|
|
6
|
+
let pathname = parsedUrl.pathname.toLowerCase().trim();
|
|
7
|
+
if (pathname.endsWith("/")) {
|
|
8
|
+
pathname = pathname.slice(0, -1);
|
|
9
|
+
}
|
|
10
|
+
return pathname;
|
|
11
|
+
} catch (_e) {
|
|
12
|
+
let path = url.toLowerCase().trim();
|
|
13
|
+
if (path.endsWith("/")) {
|
|
14
|
+
path = path.slice(0, -1);
|
|
15
|
+
}
|
|
16
|
+
return path;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
class CompositeExporter {
|
|
20
|
+
exporters;
|
|
21
|
+
constructor(exporters) {
|
|
22
|
+
this.exporters = exporters;
|
|
23
|
+
}
|
|
24
|
+
export(spans, resultCallback) {
|
|
25
|
+
const telemetryTraceIds = new Set(
|
|
26
|
+
spans.filter((span) => {
|
|
27
|
+
const attrs = span.attributes || {};
|
|
28
|
+
const relevantHttpAttributes = [
|
|
29
|
+
attrs["http.target"],
|
|
30
|
+
attrs["http.route"],
|
|
31
|
+
attrs["http.url"],
|
|
32
|
+
attrs["url.path"],
|
|
33
|
+
attrs["http.request_path"]
|
|
34
|
+
];
|
|
35
|
+
const isTelemetrySpan = relevantHttpAttributes.some((attr) => {
|
|
36
|
+
if (typeof attr === "string") {
|
|
37
|
+
const normalizedPath = normalizeUrlPath(attr);
|
|
38
|
+
return normalizedPath === "/api/telemetry" || normalizedPath.startsWith("/api/telemetry/");
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
});
|
|
42
|
+
return isTelemetrySpan;
|
|
43
|
+
}).map((span) => span.spanContext().traceId)
|
|
44
|
+
);
|
|
45
|
+
const filteredSpans = spans.filter(
|
|
46
|
+
(span) => !telemetryTraceIds.has(span.spanContext().traceId)
|
|
47
|
+
);
|
|
48
|
+
if (filteredSpans.length === 0) {
|
|
49
|
+
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
void Promise.all(
|
|
53
|
+
this.exporters.map(
|
|
54
|
+
(exporter) => new Promise((resolve) => {
|
|
55
|
+
if (exporter.export) {
|
|
56
|
+
exporter.export(filteredSpans, resolve);
|
|
57
|
+
} else {
|
|
58
|
+
resolve({ code: ExportResultCode.FAILED });
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
).then((results) => {
|
|
63
|
+
const hasError = results.some((r) => r.code === ExportResultCode.FAILED);
|
|
64
|
+
resultCallback({
|
|
65
|
+
code: hasError ? ExportResultCode.FAILED : ExportResultCode.SUCCESS
|
|
66
|
+
});
|
|
67
|
+
}).catch((error) => {
|
|
68
|
+
console.error("[CompositeExporter] Export error:", error);
|
|
69
|
+
resultCallback({ code: ExportResultCode.FAILED });
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
shutdown() {
|
|
73
|
+
return Promise.all(this.exporters.map((e) => e.shutdown?.() ?? Promise.resolve())).then(
|
|
74
|
+
() => void 0
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
forceFlush() {
|
|
78
|
+
return Promise.all(this.exporters.map((e) => e.forceFlush?.() ?? Promise.resolve())).then(
|
|
79
|
+
() => void 0
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export {
|
|
84
|
+
CompositeExporter
|
|
85
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var telemetry_exports = {};
|
|
20
|
+
__export(telemetry_exports, {
|
|
21
|
+
Telemetry: () => import_telemetry.Telemetry
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(telemetry_exports);
|
|
24
|
+
var import_telemetry = require("./telemetry.js");
|
|
25
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
+
0 && (module.exports = {
|
|
27
|
+
Telemetry
|
|
28
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var schemas_exports = {};
|
|
20
|
+
__export(schemas_exports, {
|
|
21
|
+
OtelConfigurationSchema: () => OtelConfigurationSchema
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(schemas_exports);
|
|
24
|
+
var import_zod = require("zod");
|
|
25
|
+
const OtelConfigurationSchema = import_zod.z.object({
|
|
26
|
+
serviceName: import_zod.z.string().optional(),
|
|
27
|
+
enabled: import_zod.z.boolean().optional(),
|
|
28
|
+
tracerName: import_zod.z.string().optional(),
|
|
29
|
+
// TODO (Telemetry): Implement sampling support in Phase 5
|
|
30
|
+
// Currently sampling schema is defined but not implemented in telemetry.ts
|
|
31
|
+
// See feature-plans/telemetry.md Phase 5 for implementation details
|
|
32
|
+
// sampling: z
|
|
33
|
+
// .discriminatedUnion('type', [
|
|
34
|
+
// z.object({
|
|
35
|
+
// type: z.literal('ratio'),
|
|
36
|
+
// probability: z.number().min(0).max(1),
|
|
37
|
+
// }),
|
|
38
|
+
// z.object({
|
|
39
|
+
// type: z.literal('always_on'),
|
|
40
|
+
// }),
|
|
41
|
+
// z.object({
|
|
42
|
+
// type: z.literal('always_off'),
|
|
43
|
+
// }),
|
|
44
|
+
// z.object({
|
|
45
|
+
// type: z.literal('parent_based'),
|
|
46
|
+
// root: z.object({
|
|
47
|
+
// probability: z.number().min(0).max(1),
|
|
48
|
+
// }),
|
|
49
|
+
// }),
|
|
50
|
+
// ])
|
|
51
|
+
// .optional(),
|
|
52
|
+
export: import_zod.z.union([
|
|
53
|
+
import_zod.z.object({
|
|
54
|
+
type: import_zod.z.literal("otlp"),
|
|
55
|
+
protocol: import_zod.z.enum(["grpc", "http"]).optional(),
|
|
56
|
+
endpoint: import_zod.z.union([
|
|
57
|
+
import_zod.z.string().url(),
|
|
58
|
+
import_zod.z.string().regex(/^[\w.-]+:\d+$/)
|
|
59
|
+
// host:port
|
|
60
|
+
]).optional(),
|
|
61
|
+
headers: import_zod.z.record(import_zod.z.string()).optional()
|
|
62
|
+
}),
|
|
63
|
+
import_zod.z.object({
|
|
64
|
+
type: import_zod.z.literal("console")
|
|
65
|
+
})
|
|
66
|
+
]).optional()
|
|
67
|
+
});
|
|
68
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
69
|
+
0 && (module.exports = {
|
|
70
|
+
OtelConfigurationSchema
|
|
71
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const OtelConfigurationSchema: z.ZodObject<{
|
|
3
|
+
serviceName: z.ZodOptional<z.ZodString>;
|
|
4
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
5
|
+
tracerName: z.ZodOptional<z.ZodString>;
|
|
6
|
+
export: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
|
|
7
|
+
type: z.ZodLiteral<"otlp">;
|
|
8
|
+
protocol: z.ZodOptional<z.ZodEnum<["grpc", "http"]>>;
|
|
9
|
+
endpoint: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodString]>>;
|
|
10
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
type: "otlp";
|
|
13
|
+
headers?: Record<string, string> | undefined;
|
|
14
|
+
protocol?: "http" | "grpc" | undefined;
|
|
15
|
+
endpoint?: string | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
type: "otlp";
|
|
18
|
+
headers?: Record<string, string> | undefined;
|
|
19
|
+
protocol?: "http" | "grpc" | undefined;
|
|
20
|
+
endpoint?: string | undefined;
|
|
21
|
+
}>, z.ZodObject<{
|
|
22
|
+
type: z.ZodLiteral<"console">;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
type: "console";
|
|
25
|
+
}, {
|
|
26
|
+
type: "console";
|
|
27
|
+
}>]>>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
enabled?: boolean | undefined;
|
|
30
|
+
serviceName?: string | undefined;
|
|
31
|
+
tracerName?: string | undefined;
|
|
32
|
+
export?: {
|
|
33
|
+
type: "otlp";
|
|
34
|
+
headers?: Record<string, string> | undefined;
|
|
35
|
+
protocol?: "http" | "grpc" | undefined;
|
|
36
|
+
endpoint?: string | undefined;
|
|
37
|
+
} | {
|
|
38
|
+
type: "console";
|
|
39
|
+
} | undefined;
|
|
40
|
+
}, {
|
|
41
|
+
enabled?: boolean | undefined;
|
|
42
|
+
serviceName?: string | undefined;
|
|
43
|
+
tracerName?: string | undefined;
|
|
44
|
+
export?: {
|
|
45
|
+
type: "otlp";
|
|
46
|
+
headers?: Record<string, string> | undefined;
|
|
47
|
+
protocol?: "http" | "grpc" | undefined;
|
|
48
|
+
endpoint?: string | undefined;
|
|
49
|
+
} | {
|
|
50
|
+
type: "console";
|
|
51
|
+
} | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
export type OtelConfiguration = z.output<typeof OtelConfigurationSchema>;
|
|
54
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/telemetry/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6ClC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import "../chunk-C6A6W6XS.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const OtelConfigurationSchema = z.object({
|
|
4
|
+
serviceName: z.string().optional(),
|
|
5
|
+
enabled: z.boolean().optional(),
|
|
6
|
+
tracerName: z.string().optional(),
|
|
7
|
+
// TODO (Telemetry): Implement sampling support in Phase 5
|
|
8
|
+
// Currently sampling schema is defined but not implemented in telemetry.ts
|
|
9
|
+
// See feature-plans/telemetry.md Phase 5 for implementation details
|
|
10
|
+
// sampling: z
|
|
11
|
+
// .discriminatedUnion('type', [
|
|
12
|
+
// z.object({
|
|
13
|
+
// type: z.literal('ratio'),
|
|
14
|
+
// probability: z.number().min(0).max(1),
|
|
15
|
+
// }),
|
|
16
|
+
// z.object({
|
|
17
|
+
// type: z.literal('always_on'),
|
|
18
|
+
// }),
|
|
19
|
+
// z.object({
|
|
20
|
+
// type: z.literal('always_off'),
|
|
21
|
+
// }),
|
|
22
|
+
// z.object({
|
|
23
|
+
// type: z.literal('parent_based'),
|
|
24
|
+
// root: z.object({
|
|
25
|
+
// probability: z.number().min(0).max(1),
|
|
26
|
+
// }),
|
|
27
|
+
// }),
|
|
28
|
+
// ])
|
|
29
|
+
// .optional(),
|
|
30
|
+
export: z.union([
|
|
31
|
+
z.object({
|
|
32
|
+
type: z.literal("otlp"),
|
|
33
|
+
protocol: z.enum(["grpc", "http"]).optional(),
|
|
34
|
+
endpoint: z.union([
|
|
35
|
+
z.string().url(),
|
|
36
|
+
z.string().regex(/^[\w.-]+:\d+$/)
|
|
37
|
+
// host:port
|
|
38
|
+
]).optional(),
|
|
39
|
+
headers: z.record(z.string()).optional()
|
|
40
|
+
}),
|
|
41
|
+
z.object({
|
|
42
|
+
type: z.literal("console")
|
|
43
|
+
})
|
|
44
|
+
]).optional()
|
|
45
|
+
});
|
|
46
|
+
export {
|
|
47
|
+
OtelConfigurationSchema
|
|
48
|
+
};
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var telemetry_exports = {};
|
|
20
|
+
__export(telemetry_exports, {
|
|
21
|
+
Telemetry: () => Telemetry
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(telemetry_exports);
|
|
24
|
+
var import_api = require("@opentelemetry/api");
|
|
25
|
+
var import_sdk_node = require("@opentelemetry/sdk-node");
|
|
26
|
+
var import_sdk_trace_base = require("@opentelemetry/sdk-trace-base");
|
|
27
|
+
var import_exporter_trace_otlp_http = require("@opentelemetry/exporter-trace-otlp-http");
|
|
28
|
+
var import_exporter_trace_otlp_grpc = require("@opentelemetry/exporter-trace-otlp-grpc");
|
|
29
|
+
var import_auto_instrumentations_node = require("@opentelemetry/auto-instrumentations-node");
|
|
30
|
+
var import_resources = require("@opentelemetry/resources");
|
|
31
|
+
var import_semantic_conventions = require("@opentelemetry/semantic-conventions");
|
|
32
|
+
var import_exporters = require("./exporters.js");
|
|
33
|
+
var import_logger = require("../logger/logger.js");
|
|
34
|
+
class Telemetry {
|
|
35
|
+
tracer = import_api.trace.getTracer("dexto");
|
|
36
|
+
name = "dexto-service";
|
|
37
|
+
_isInitialized = false;
|
|
38
|
+
_sdk;
|
|
39
|
+
static _initPromise;
|
|
40
|
+
static _signalHandlers;
|
|
41
|
+
constructor(config, enabled, sdk) {
|
|
42
|
+
const serviceName = config.serviceName ?? "dexto-service";
|
|
43
|
+
const tracerName = config.tracerName ?? serviceName;
|
|
44
|
+
this.name = serviceName;
|
|
45
|
+
this.tracer = import_api.trace.getTracer(tracerName);
|
|
46
|
+
if (sdk) {
|
|
47
|
+
this._sdk = sdk;
|
|
48
|
+
}
|
|
49
|
+
this._isInitialized = enabled && !!sdk;
|
|
50
|
+
}
|
|
51
|
+
static buildTraceExporter(config) {
|
|
52
|
+
const e = config?.export;
|
|
53
|
+
if (!e || e.type === "console") {
|
|
54
|
+
return new import_sdk_trace_base.ConsoleSpanExporter();
|
|
55
|
+
}
|
|
56
|
+
if (e.type === "otlp") {
|
|
57
|
+
if (e.protocol === "grpc") {
|
|
58
|
+
const options2 = {};
|
|
59
|
+
if (e.endpoint) {
|
|
60
|
+
options2.url = e.endpoint;
|
|
61
|
+
}
|
|
62
|
+
return new import_exporter_trace_otlp_grpc.OTLPTraceExporter(options2);
|
|
63
|
+
}
|
|
64
|
+
const options = {};
|
|
65
|
+
if (e.endpoint) {
|
|
66
|
+
options.url = e.endpoint;
|
|
67
|
+
}
|
|
68
|
+
if (e.headers) {
|
|
69
|
+
options.headers = e.headers;
|
|
70
|
+
}
|
|
71
|
+
return new import_exporter_trace_otlp_http.OTLPTraceExporter(options);
|
|
72
|
+
}
|
|
73
|
+
return new import_sdk_trace_base.ConsoleSpanExporter();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Initialize telemetry with the given configuration
|
|
77
|
+
* @param config - Optional telemetry configuration object
|
|
78
|
+
* @param exporter - Optional custom span exporter (overrides config.export, useful for testing)
|
|
79
|
+
* @returns Telemetry instance that can be used for tracing
|
|
80
|
+
*/
|
|
81
|
+
static async init(config = {}, exporter) {
|
|
82
|
+
try {
|
|
83
|
+
if (globalThis.__TELEMETRY__) return globalThis.__TELEMETRY__;
|
|
84
|
+
if (Telemetry._initPromise) return Telemetry._initPromise;
|
|
85
|
+
Telemetry._initPromise = (async () => {
|
|
86
|
+
if (!globalThis.__TELEMETRY__) {
|
|
87
|
+
const enabled = config.enabled !== false;
|
|
88
|
+
let sdk;
|
|
89
|
+
if (enabled) {
|
|
90
|
+
const resource = new import_resources.Resource({
|
|
91
|
+
[import_semantic_conventions.ATTR_SERVICE_NAME]: config.serviceName ?? "dexto-service"
|
|
92
|
+
});
|
|
93
|
+
const spanExporter = exporter || Telemetry.buildTraceExporter(config);
|
|
94
|
+
const traceExporter = spanExporter instanceof import_exporters.CompositeExporter ? spanExporter : new import_exporters.CompositeExporter([spanExporter]);
|
|
95
|
+
sdk = new import_sdk_node.NodeSDK({
|
|
96
|
+
resource,
|
|
97
|
+
traceExporter,
|
|
98
|
+
instrumentations: [(0, import_auto_instrumentations_node.getNodeAutoInstrumentations)()]
|
|
99
|
+
});
|
|
100
|
+
await sdk.start();
|
|
101
|
+
const sigterm = () => {
|
|
102
|
+
void sdk?.shutdown();
|
|
103
|
+
};
|
|
104
|
+
const sigint = () => {
|
|
105
|
+
void sdk?.shutdown();
|
|
106
|
+
};
|
|
107
|
+
process.once("SIGTERM", sigterm);
|
|
108
|
+
process.once("SIGINT", sigint);
|
|
109
|
+
Telemetry._signalHandlers = { sigterm, sigint };
|
|
110
|
+
}
|
|
111
|
+
globalThis.__TELEMETRY__ = new Telemetry(config, enabled, sdk);
|
|
112
|
+
}
|
|
113
|
+
return globalThis.__TELEMETRY__;
|
|
114
|
+
})();
|
|
115
|
+
return Telemetry._initPromise;
|
|
116
|
+
} catch (error) {
|
|
117
|
+
const wrappedError = new Error(
|
|
118
|
+
`Failed to initialize telemetry: ${error instanceof Error ? error.message : String(error)}`
|
|
119
|
+
);
|
|
120
|
+
Telemetry._initPromise = void 0;
|
|
121
|
+
throw wrappedError;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
static getActiveSpan() {
|
|
125
|
+
const span = import_api.trace.getActiveSpan();
|
|
126
|
+
return span;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get the global telemetry instance
|
|
130
|
+
* @throws {Error} If telemetry has not been initialized
|
|
131
|
+
* @returns {Telemetry} The global telemetry instance
|
|
132
|
+
*/
|
|
133
|
+
static get() {
|
|
134
|
+
if (!globalThis.__TELEMETRY__) {
|
|
135
|
+
throw new Error("Telemetry not initialized");
|
|
136
|
+
}
|
|
137
|
+
return globalThis.__TELEMETRY__;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Check if global telemetry instance exists
|
|
141
|
+
* @returns True if telemetry has been initialized, false otherwise
|
|
142
|
+
*/
|
|
143
|
+
static hasGlobalInstance() {
|
|
144
|
+
return globalThis.__TELEMETRY__ !== void 0;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Shutdown global telemetry instance
|
|
148
|
+
* Used during agent switching to cleanly shutdown old agent's telemetry
|
|
149
|
+
* before initializing new agent's telemetry with potentially different config
|
|
150
|
+
* @returns Promise that resolves when shutdown is complete
|
|
151
|
+
*/
|
|
152
|
+
static async shutdownGlobal() {
|
|
153
|
+
if (globalThis.__TELEMETRY__) {
|
|
154
|
+
await globalThis.__TELEMETRY__.shutdown();
|
|
155
|
+
globalThis.__TELEMETRY__ = void 0;
|
|
156
|
+
}
|
|
157
|
+
Telemetry._initPromise = void 0;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Checks if the Telemetry instance has been successfully initialized.
|
|
161
|
+
* @returns True if the instance is initialized, false otherwise.
|
|
162
|
+
*/
|
|
163
|
+
isInitialized() {
|
|
164
|
+
return this._isInitialized;
|
|
165
|
+
}
|
|
166
|
+
static setBaggage(baggage, ctx = import_api.context.active()) {
|
|
167
|
+
const currentBaggage = Object.fromEntries(
|
|
168
|
+
import_api.propagation.getBaggage(ctx)?.getAllEntries() ?? []
|
|
169
|
+
);
|
|
170
|
+
const newCtx = import_api.propagation.setBaggage(
|
|
171
|
+
ctx,
|
|
172
|
+
import_api.propagation.createBaggage({
|
|
173
|
+
...currentBaggage,
|
|
174
|
+
...baggage
|
|
175
|
+
})
|
|
176
|
+
);
|
|
177
|
+
return newCtx;
|
|
178
|
+
}
|
|
179
|
+
static withContext(ctx, fn) {
|
|
180
|
+
return import_api.context.with(ctx, fn);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Forces pending spans to be exported immediately.
|
|
184
|
+
* Useful for testing to ensure spans are available in exporters.
|
|
185
|
+
*/
|
|
186
|
+
async forceFlush() {
|
|
187
|
+
if (this._isInitialized) {
|
|
188
|
+
const provider = import_api.trace.getTracerProvider();
|
|
189
|
+
if (provider && typeof provider.forceFlush === "function") {
|
|
190
|
+
await provider.forceFlush();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Shuts down the OpenTelemetry SDK, flushing any pending spans.
|
|
196
|
+
* This should be called before the application exits.
|
|
197
|
+
*
|
|
198
|
+
* Uses two-phase shutdown:
|
|
199
|
+
* 1. Best-effort flush - Try to export pending spans (can fail if backend unavailable)
|
|
200
|
+
* 2. Force cleanup - Always clear global state to allow re-initialization
|
|
201
|
+
*
|
|
202
|
+
* This ensures agent switching works even when telemetry export fails.
|
|
203
|
+
*/
|
|
204
|
+
async shutdown() {
|
|
205
|
+
if (this._sdk) {
|
|
206
|
+
try {
|
|
207
|
+
await this._sdk.shutdown();
|
|
208
|
+
} catch (error) {
|
|
209
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
210
|
+
import_logger.logger.warn(`Telemetry shutdown failed to flush spans (non-blocking): ${errorMsg}`);
|
|
211
|
+
} finally {
|
|
212
|
+
this._isInitialized = false;
|
|
213
|
+
globalThis.__TELEMETRY__ = void 0;
|
|
214
|
+
if (Telemetry._signalHandlers) {
|
|
215
|
+
process.off("SIGTERM", Telemetry._signalHandlers.sigterm);
|
|
216
|
+
process.off("SIGINT", Telemetry._signalHandlers.sigint);
|
|
217
|
+
Telemetry._signalHandlers = void 0;
|
|
218
|
+
}
|
|
219
|
+
this._sdk = void 0;
|
|
220
|
+
Telemetry._initPromise = void 0;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
226
|
+
0 && (module.exports = {
|
|
227
|
+
Telemetry
|
|
228
|
+
});
|