dd-trace 5.53.0 → 5.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/index.d.ts +33 -16
- package/initialize.mjs +3 -4
- package/package.json +36 -34
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
- package/packages/datadog-instrumentations/src/couchbase.js +3 -3
- package/packages/datadog-instrumentations/src/cucumber.js +87 -40
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +5 -7
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +137 -48
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +38 -61
- package/packages/datadog-instrumentations/src/mocha/main.js +63 -24
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +21 -23
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +1 -2
- package/packages/datadog-instrumentations/src/playwright.js +112 -69
- package/packages/datadog-instrumentations/src/redis.js +3 -3
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +22 -25
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +77 -28
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +57 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +7 -6
- package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +18 -7
- package/packages/datadog-plugin-http2/src/client.js +20 -20
- package/packages/datadog-plugin-jest/src/index.js +23 -21
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +33 -13
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +6 -5
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +10 -14
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +22 -2
- package/packages/datadog-plugin-redis/src/index.js +1 -1
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +47 -31
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
- package/packages/dd-trace/src/azure_metadata.js +2 -7
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
- package/packages/dd-trace/src/config.js +82 -51
- package/packages/dd-trace/src/config_stable.js +3 -3
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +74 -67
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -1
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/dogstatsd.js +5 -4
- package/packages/dd-trace/src/encode/0.4.js +9 -9
- package/packages/dd-trace/src/encode/0.5.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +6 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +1 -1
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/common/util.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +12 -6
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/lambda/handler.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/llmobs/tagger.js +110 -96
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +4 -4
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +2 -2
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +28 -28
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +3 -5
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
- package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +9 -14
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +23 -15
- package/packages/dd-trace/src/plugins/util/git.js +165 -11
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +311 -48
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
- package/packages/dd-trace/src/plugins/util/web.js +5 -4
- package/packages/dd-trace/src/priority_sampler.js +22 -22
- package/packages/dd-trace/src/profiling/config.js +44 -8
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +37 -2
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/tagger.js +3 -5
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +7 -9
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/sampler.js +33 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +3 -3
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +2 -2
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
- package/packages/dd-trace/src/util.js +1 -1
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
channel,
|
|
5
|
-
addHook
|
|
6
|
-
AsyncResource
|
|
5
|
+
addHook
|
|
7
6
|
} = require('./helpers/instrument')
|
|
8
7
|
const shimmer = require('../../datadog-shimmer')
|
|
9
8
|
|
|
@@ -65,38 +64,32 @@ function wrapMethod (method) {
|
|
|
65
64
|
return function (request) {
|
|
66
65
|
if (!requestStartCh.hasSubscribers) return method.apply(this, arguments)
|
|
67
66
|
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
return innerAsyncResource.runInAsyncScope(() => {
|
|
71
|
-
const projectId = this.auth._cachedProjectId
|
|
67
|
+
const ctx = { request, api, projectId: this.auth._cachedProjectId }
|
|
68
|
+
return requestStartCh.runStores(ctx, () => {
|
|
72
69
|
const cb = arguments[arguments.length - 1]
|
|
73
70
|
|
|
74
|
-
requestStartCh.publish({ request, api, projectId })
|
|
75
|
-
|
|
76
71
|
if (typeof cb === 'function') {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
arguments[arguments.length - 1] = shimmer.wrapFunction(cb, cb => innerAsyncResource.bind(function (error) {
|
|
72
|
+
arguments[arguments.length - 1] = shimmer.wrapFunction(cb, cb => function (error) {
|
|
80
73
|
if (error) {
|
|
81
|
-
|
|
74
|
+
ctx.error = error
|
|
75
|
+
requestErrorCh.publish(ctx)
|
|
82
76
|
}
|
|
83
77
|
|
|
84
|
-
requestFinishCh.
|
|
85
|
-
|
|
86
|
-
return outerAsyncResource.runInAsyncScope(() => cb.apply(this, arguments))
|
|
87
|
-
}))
|
|
78
|
+
return requestFinishCh.runStores(ctx, cb, this, ...arguments)
|
|
79
|
+
})
|
|
88
80
|
|
|
89
81
|
return method.apply(this, arguments)
|
|
90
82
|
} else {
|
|
91
83
|
return method.apply(this, arguments)
|
|
92
84
|
.then(
|
|
93
85
|
response => {
|
|
94
|
-
requestFinishCh.publish()
|
|
86
|
+
requestFinishCh.publish(ctx)
|
|
95
87
|
return response
|
|
96
88
|
},
|
|
97
89
|
error => {
|
|
98
|
-
|
|
99
|
-
|
|
90
|
+
ctx.error = error
|
|
91
|
+
requestErrorCh.publish(ctx)
|
|
92
|
+
requestFinishCh.publish(ctx)
|
|
100
93
|
throw error
|
|
101
94
|
}
|
|
102
95
|
)
|
|
@@ -119,16 +112,14 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'] }, (obj) => {
|
|
|
119
112
|
shimmer.wrap(Subscription.prototype, 'emit', emit => function (eventName, message) {
|
|
120
113
|
if (eventName !== 'message' || !message) return emit.apply(this, arguments)
|
|
121
114
|
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
})
|
|
115
|
+
const ctx = {}
|
|
116
|
+
try {
|
|
117
|
+
return emit.apply(this, arguments)
|
|
118
|
+
} catch (err) {
|
|
119
|
+
ctx.error = err
|
|
120
|
+
receiveErrorCh.publish(ctx)
|
|
121
|
+
throw err
|
|
122
|
+
}
|
|
132
123
|
})
|
|
133
124
|
|
|
134
125
|
return obj
|
|
@@ -136,22 +127,25 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'] }, (obj) => {
|
|
|
136
127
|
|
|
137
128
|
addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/lease-manager.js' }, (obj) => {
|
|
138
129
|
const LeaseManager = obj.LeaseManager
|
|
130
|
+
const ctx = {}
|
|
139
131
|
|
|
140
132
|
shimmer.wrap(LeaseManager.prototype, '_dispense', dispense => function (message) {
|
|
141
133
|
if (receiveStartCh.hasSubscribers) {
|
|
142
|
-
|
|
134
|
+
ctx.message = message
|
|
135
|
+
return receiveStartCh.runStores(ctx, dispense, this, ...arguments)
|
|
136
|
+
} else {
|
|
137
|
+
return dispense.apply(this, arguments)
|
|
143
138
|
}
|
|
144
|
-
return dispense.apply(this, arguments)
|
|
145
139
|
})
|
|
146
140
|
|
|
147
141
|
shimmer.wrap(LeaseManager.prototype, 'remove', remove => function (message) {
|
|
148
|
-
receiveFinishCh.
|
|
149
|
-
return remove.apply(this, arguments)
|
|
142
|
+
return receiveFinishCh.runStores(ctx, remove, this, ...arguments)
|
|
150
143
|
})
|
|
151
144
|
|
|
152
145
|
shimmer.wrap(LeaseManager.prototype, 'clear', clear => function () {
|
|
153
146
|
for (const message of this._messages) {
|
|
154
|
-
|
|
147
|
+
ctx.message = message
|
|
148
|
+
receiveFinishCh.publish(ctx)
|
|
155
149
|
}
|
|
156
150
|
return clear.apply(this, arguments)
|
|
157
151
|
})
|
|
@@ -44,27 +44,24 @@ class AbortError extends Error {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
const types = new Set(['query', 'mutation', 'subscription'])
|
|
48
|
+
|
|
47
49
|
function getOperation (document, operationName) {
|
|
48
50
|
if (!document || !Array.isArray(document.definitions)) {
|
|
49
51
|
return
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return definitions
|
|
57
|
-
.filter(def => types.indexOf(def.operation) !== -1)
|
|
58
|
-
.find(def => operationName === (def.name && def.name.value))
|
|
59
|
-
} else {
|
|
60
|
-
return definitions.find(def => types.indexOf(def.operation) !== -1)
|
|
54
|
+
for (const definition of document.definitions) {
|
|
55
|
+
if (definition && types.has(definition.operation) && (!operationName || definition.name?.value === operationName)) {
|
|
56
|
+
return definition
|
|
57
|
+
}
|
|
61
58
|
}
|
|
62
59
|
}
|
|
63
60
|
|
|
64
61
|
function normalizeArgs (args, defaultFieldResolver) {
|
|
65
62
|
if (args.length !== 1) return normalizePositional(args, defaultFieldResolver)
|
|
66
63
|
|
|
67
|
-
args[0].contextValue
|
|
64
|
+
args[0].contextValue ||= {}
|
|
68
65
|
args[0].fieldResolver = wrapResolve(args[0].fieldResolver || defaultFieldResolver)
|
|
69
66
|
|
|
70
67
|
return args[0]
|
|
@@ -4,8 +4,6 @@ const types = require('./types')
|
|
|
4
4
|
const { addHook, channel } = require('../helpers/instrument')
|
|
5
5
|
const shimmer = require('../../../datadog-shimmer')
|
|
6
6
|
|
|
7
|
-
const nodeMajor = parseInt(process.versions.node.split('.')[0])
|
|
8
|
-
|
|
9
7
|
const patched = new WeakSet()
|
|
10
8
|
const instances = new WeakMap()
|
|
11
9
|
|
|
@@ -98,7 +96,7 @@ function wrapMethod (method, path, type, hasPeer) {
|
|
|
98
96
|
return wrapped
|
|
99
97
|
}
|
|
100
98
|
|
|
101
|
-
function wrapCallback (ctx, callback = () => {
|
|
99
|
+
function wrapCallback (ctx, callback = () => {}) {
|
|
102
100
|
return shimmer.wrapFunction(callback, callback => function (err) {
|
|
103
101
|
if (err) {
|
|
104
102
|
ctx.error = err
|
|
@@ -112,18 +110,18 @@ function wrapCallback (ctx, callback = () => { }) {
|
|
|
112
110
|
})
|
|
113
111
|
}
|
|
114
112
|
|
|
115
|
-
function
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
113
|
+
const onStatusWithPeer = function (ctx, arg1, thisArg) {
|
|
114
|
+
ctx.result = arg1
|
|
115
|
+
ctx.peer = thisArg.getPeer()
|
|
116
|
+
finishChannel.publish(ctx)
|
|
117
|
+
}
|
|
121
118
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
const onStatusWithoutPeer = function (ctx, arg1) {
|
|
120
|
+
ctx.result = arg1
|
|
121
|
+
finishChannel.publish(ctx)
|
|
122
|
+
}
|
|
126
123
|
|
|
124
|
+
function createWrapEmit (ctx, hasPeer = false) {
|
|
127
125
|
const onStatus = hasPeer ? onStatusWithPeer : onStatusWithoutPeer
|
|
128
126
|
|
|
129
127
|
return function wrapEmit (emit) {
|
|
@@ -245,16 +243,6 @@ function patch (hasPeer = false) {
|
|
|
245
243
|
}
|
|
246
244
|
}
|
|
247
245
|
|
|
248
|
-
if (nodeMajor <= 14) {
|
|
249
|
-
addHook({ name: 'grpc', versions: ['>=1.24.3'] }, patch(true))
|
|
250
|
-
|
|
251
|
-
addHook({ name: 'grpc', versions: ['>=1.24.3'], file: 'src/client.js' }, client => {
|
|
252
|
-
shimmer.wrap(client, 'makeClientConstructor', createWrapMakeClientConstructor(true))
|
|
253
|
-
|
|
254
|
-
return client
|
|
255
|
-
})
|
|
256
|
-
}
|
|
257
|
-
|
|
258
246
|
addHook({ name: '@grpc/grpc-js', versions: ['>=1.0.3 <1.1.4'] }, patch(false))
|
|
259
247
|
|
|
260
248
|
addHook({ name: '@grpc/grpc-js', versions: ['>=1.0.3 <1.1.4'], file: 'build/src/make-client.js' }, client => {
|
|
@@ -4,8 +4,6 @@ const types = require('./types')
|
|
|
4
4
|
const { channel, addHook } = require('../helpers/instrument')
|
|
5
5
|
const shimmer = require('../../../datadog-shimmer')
|
|
6
6
|
|
|
7
|
-
const nodeMajor = parseInt(process.versions.node.split('.')[0])
|
|
8
|
-
|
|
9
7
|
const startChannel = channel('apm:grpc:server:request:start')
|
|
10
8
|
const asyncStartChannel = channel('apm:grpc:server:request:asyncStart')
|
|
11
9
|
const errorChannel = channel('apm:grpc:server:request:error')
|
|
@@ -17,17 +15,14 @@ const emitChannel = channel('apm:grpc:server:request:emit')
|
|
|
17
15
|
const OK = 0
|
|
18
16
|
const CANCELLED = 1
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (server.type === 'unary' && typeof args[1] !== 'function') return false
|
|
27
|
-
|
|
28
|
-
return true
|
|
29
|
-
}
|
|
18
|
+
const isValid = (server, args) => {
|
|
19
|
+
return Boolean(startChannel.hasSubscribers &&
|
|
20
|
+
server?.type &&
|
|
21
|
+
args[0] &&
|
|
22
|
+
(server.type === 'unary' ? typeof args[1] === 'function' : isEmitter(args[0])))
|
|
23
|
+
}
|
|
30
24
|
|
|
25
|
+
function wrapHandler (func, name) {
|
|
31
26
|
return function (call, callback) {
|
|
32
27
|
if (!isValid(this, arguments)) return func.apply(this, arguments)
|
|
33
28
|
|
|
@@ -152,14 +147,6 @@ function isEmitter (obj) {
|
|
|
152
147
|
return typeof obj.emit === 'function' && typeof obj.once === 'function'
|
|
153
148
|
}
|
|
154
149
|
|
|
155
|
-
if (nodeMajor <= 14) {
|
|
156
|
-
addHook({ name: 'grpc', versions: ['>=1.24.3'], file: 'src/server.js' }, server => {
|
|
157
|
-
shimmer.wrap(server.Server.prototype, 'register', wrapRegister)
|
|
158
|
-
|
|
159
|
-
return server
|
|
160
|
-
})
|
|
161
|
-
}
|
|
162
|
-
|
|
163
150
|
addHook({ name: '@grpc/grpc-js', versions: ['>=1.0.3'], file: 'build/src/server.js' }, server => {
|
|
164
151
|
shimmer.wrap(server.Server.prototype, 'register', wrapRegister)
|
|
165
152
|
|
|
@@ -10,27 +10,33 @@ const NM = 'node_modules/'
|
|
|
10
10
|
*/
|
|
11
11
|
module.exports = function extractPackageAndModulePath (fullPath) {
|
|
12
12
|
const nm = fullPath.lastIndexOf(NM)
|
|
13
|
-
if (nm
|
|
13
|
+
if (nm === -1) {
|
|
14
14
|
return { pkg: null, path: null }
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
const subPath = fullPath.
|
|
17
|
+
const subPath = fullPath.slice(nm + NM.length)
|
|
18
18
|
const firstSlash = subPath.indexOf('/')
|
|
19
19
|
|
|
20
|
-
const firstPath = fullPath.
|
|
20
|
+
const firstPath = fullPath.slice(0, nm + NM.length)
|
|
21
|
+
|
|
22
|
+
const firstSlashSubPath = subPath.slice(Math.max(0, firstSlash + 1))
|
|
21
23
|
|
|
22
24
|
if (subPath[0] === '@') {
|
|
23
|
-
const secondSlash =
|
|
25
|
+
const secondSlash = firstSlashSubPath.indexOf('/')
|
|
26
|
+
const pkg = subPath.slice(0, Math.max(0, firstSlash + 1 + secondSlash))
|
|
27
|
+
|
|
24
28
|
return {
|
|
25
|
-
pkg
|
|
26
|
-
path: subPath.
|
|
27
|
-
pkgJson: firstPath +
|
|
29
|
+
pkg,
|
|
30
|
+
path: subPath.slice(Math.max(0, firstSlash + 1 + secondSlash + 1)),
|
|
31
|
+
pkgJson: firstPath + pkg + '/package.json'
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
|
|
35
|
+
const pkg = subPath.slice(0, Math.max(0, firstSlash))
|
|
36
|
+
|
|
31
37
|
return {
|
|
32
|
-
pkg
|
|
33
|
-
path:
|
|
34
|
-
pkgJson: firstPath +
|
|
38
|
+
pkg,
|
|
39
|
+
path: firstSlashSubPath,
|
|
40
|
+
pkgJson: firstPath + pkg + '/package.json'
|
|
35
41
|
}
|
|
36
42
|
}
|
|
@@ -22,7 +22,7 @@ function Hook (modules, hookOptions, onrequire) {
|
|
|
22
22
|
this._patched = Object.create(null)
|
|
23
23
|
|
|
24
24
|
const safeHook = (moduleExports, moduleName, moduleBaseDir, moduleVersion) => {
|
|
25
|
-
const parts = [moduleBaseDir, moduleName].filter(
|
|
25
|
+
const parts = [moduleBaseDir, moduleName].filter(Boolean)
|
|
26
26
|
const filename = path.join(...parts)
|
|
27
27
|
|
|
28
28
|
if (this._patched[filename]) return moduleExports
|
|
@@ -105,7 +105,6 @@ module.exports = {
|
|
|
105
105
|
nyc: () => require('../nyc'),
|
|
106
106
|
oracledb: () => require('../oracledb'),
|
|
107
107
|
openai: { esmFirst: true, fn: () => require('../openai') },
|
|
108
|
-
paperplane: () => require('../paperplane'),
|
|
109
108
|
passport: () => require('../passport'),
|
|
110
109
|
'passport-http': () => require('../passport-http'),
|
|
111
110
|
'passport-local': () => require('../passport-local'),
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const dc = require('dc-polyfill')
|
|
4
|
-
const satisfies = require('semifies')
|
|
5
4
|
const instrumentations = require('./instrumentations')
|
|
6
5
|
const { AsyncResource } = require('async_hooks')
|
|
7
6
|
|
|
@@ -34,43 +33,4 @@ exports.addHook = function addHook ({ name, versions, file, filePattern }, hook)
|
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
// https://nodejs.org/api/async_context.html#asyncresourcebindfn-thisarg
|
|
39
|
-
if (satisfies(process.versions.node, '>=17.8.0')) {
|
|
40
|
-
exports.AsyncResource = AsyncResource
|
|
41
|
-
} else {
|
|
42
|
-
exports.AsyncResource = class extends AsyncResource {
|
|
43
|
-
static bind (fn, type, thisArg) {
|
|
44
|
-
type = type || fn.name
|
|
45
|
-
return (new exports.AsyncResource(type || 'bound-anonymous-fn')).bind(fn, thisArg)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
bind (fn, thisArg) {
|
|
49
|
-
let bound
|
|
50
|
-
if (thisArg === undefined) {
|
|
51
|
-
const resource = this
|
|
52
|
-
bound = function (...args) {
|
|
53
|
-
args.unshift(fn, this)
|
|
54
|
-
return Reflect.apply(resource.runInAsyncScope, resource, args)
|
|
55
|
-
}
|
|
56
|
-
} else {
|
|
57
|
-
bound = this.runInAsyncScope.bind(this, fn, thisArg)
|
|
58
|
-
}
|
|
59
|
-
Object.defineProperties(bound, {
|
|
60
|
-
length: {
|
|
61
|
-
configurable: true,
|
|
62
|
-
enumerable: false,
|
|
63
|
-
value: fn.length,
|
|
64
|
-
writable: false
|
|
65
|
-
},
|
|
66
|
-
asyncResource: {
|
|
67
|
-
configurable: true,
|
|
68
|
-
enumerable: true,
|
|
69
|
-
value: this,
|
|
70
|
-
writable: true
|
|
71
|
-
}
|
|
72
|
-
})
|
|
73
|
-
return bound
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
36
|
+
exports.AsyncResource = AsyncResource
|
|
@@ -26,7 +26,7 @@ const disabledInstrumentations = new Set(
|
|
|
26
26
|
// Check for DD_TRACE_<INTEGRATION>_ENABLED environment variables
|
|
27
27
|
for (const [key, value] of Object.entries(process.env)) {
|
|
28
28
|
const match = key.match(/^DD_TRACE_(.+)_ENABLED$/)
|
|
29
|
-
if (match && (value
|
|
29
|
+
if (match && (value?.toLowerCase() === 'false' || value === '0')) {
|
|
30
30
|
const integration = match[1].toLowerCase()
|
|
31
31
|
disabledInstrumentations.add(integration)
|
|
32
32
|
}
|
|
@@ -115,7 +115,7 @@ for (const packageName of names) {
|
|
|
115
115
|
log.error('Error getting version for "%s": %s', name, e.message, e)
|
|
116
116
|
continue
|
|
117
117
|
}
|
|
118
|
-
if (namesAndSuccesses[`${name}@${version}`] === undefined) {
|
|
118
|
+
if (namesAndSuccesses[`${name}@${version}`] === undefined && !file) {
|
|
119
119
|
// TODO If `file` is present, we might elsewhere instrument the result of the module
|
|
120
120
|
// for a version range that actually matches, so we can't assume that we're _not_
|
|
121
121
|
// going to instrument that. However, the way the data model around instrumentation
|
|
@@ -123,9 +123,7 @@ for (const packageName of names) {
|
|
|
123
123
|
// ignore this if there is a `file` in the hook. The thing to do here is rework
|
|
124
124
|
// everything so that we can be sure that there are _no_ instrumentations that it
|
|
125
125
|
// could match.
|
|
126
|
-
|
|
127
|
-
namesAndSuccesses[`${name}@${version}`] = false
|
|
128
|
-
}
|
|
126
|
+
namesAndSuccesses[`${name}@${version}`] = false
|
|
129
127
|
}
|
|
130
128
|
|
|
131
129
|
if (matchVersion(version, versions)) {
|
|
@@ -190,7 +188,7 @@ function getVersion (moduleBaseDir) {
|
|
|
190
188
|
}
|
|
191
189
|
|
|
192
190
|
function filename (name, file) {
|
|
193
|
-
return [name, file].filter(
|
|
191
|
+
return [name, file].filter(Boolean).join('/')
|
|
194
192
|
}
|
|
195
193
|
|
|
196
194
|
// This function captures the instrumentation file name for a given package by parsing the hook require
|
|
@@ -217,7 +215,7 @@ function parseHookInstrumentationFileName (packageName) {
|
|
|
217
215
|
let moduleName = match[1]
|
|
218
216
|
// Remove leading '../' if present
|
|
219
217
|
if (moduleName.startsWith('../')) {
|
|
220
|
-
moduleName = moduleName.
|
|
218
|
+
moduleName = moduleName.slice(3)
|
|
221
219
|
}
|
|
222
220
|
return moduleName
|
|
223
221
|
}
|
|
@@ -26,6 +26,19 @@ function hookFn (http) {
|
|
|
26
26
|
return http
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
function combineOptions (inputURL, inputOptions) {
|
|
30
|
+
return inputOptions !== null && typeof inputOptions === 'object'
|
|
31
|
+
? Object.assign(inputURL || {}, inputOptions)
|
|
32
|
+
: inputURL
|
|
33
|
+
}
|
|
34
|
+
function normalizeHeaders (options) {
|
|
35
|
+
options.headers ??= {}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function normalizeCallback (inputOptions, callback, inputURL) {
|
|
39
|
+
return typeof inputOptions === 'function' ? [inputOptions, inputURL || {}] : [callback, inputOptions]
|
|
40
|
+
}
|
|
41
|
+
|
|
29
42
|
function patch (http, methodName) {
|
|
30
43
|
shimmer.wrap(http, methodName, instrumentRequest)
|
|
31
44
|
|
|
@@ -143,30 +156,11 @@ function patch (http, methodName) {
|
|
|
143
156
|
return { uri, options, callback, originalUrl }
|
|
144
157
|
}
|
|
145
158
|
|
|
146
|
-
function combineOptions (inputURL, inputOptions) {
|
|
147
|
-
if (inputOptions !== null && typeof inputOptions === 'object') {
|
|
148
|
-
return Object.assign(inputURL || {}, inputOptions)
|
|
149
|
-
} else {
|
|
150
|
-
return inputURL
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
function normalizeHeaders (options) {
|
|
154
|
-
options.headers = options.headers || {}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function normalizeCallback (inputOptions, callback, inputURL) {
|
|
158
|
-
if (typeof inputOptions === 'function') {
|
|
159
|
-
return [inputOptions, inputURL || {}]
|
|
160
|
-
} else {
|
|
161
|
-
return [callback, inputOptions]
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
159
|
function normalizeOptions (inputURL) {
|
|
166
160
|
if (typeof inputURL === 'string') {
|
|
167
161
|
try {
|
|
168
162
|
return urlToOptions(new url.URL(inputURL))
|
|
169
|
-
} catch
|
|
163
|
+
} catch {
|
|
170
164
|
// eslint-disable-next-line n/no-deprecated-api
|
|
171
165
|
return url.parse(inputURL)
|
|
172
166
|
}
|