@zuplo/cli 7.6.8 → 7.6.10
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/node_modules/@inquirer/checkbox/package.json +3 -3
- package/node_modules/@inquirer/confirm/dist/index.js +1 -1
- package/node_modules/@inquirer/confirm/package.json +3 -3
- package/node_modules/@inquirer/core/dist/lib/create-prompt.js +66 -47
- package/node_modules/@inquirer/core/package.json +2 -2
- package/node_modules/@inquirer/editor/package.json +3 -3
- package/node_modules/@inquirer/expand/package.json +3 -3
- package/node_modules/@inquirer/input/package.json +3 -3
- package/node_modules/@inquirer/number/package.json +3 -3
- package/node_modules/@inquirer/password/package.json +3 -3
- package/node_modules/@inquirer/rawlist/package.json +3 -3
- package/node_modules/@inquirer/search/package.json +3 -3
- package/node_modules/@inquirer/select/package.json +3 -3
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/index.d.ts +1 -2
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +12 -25
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +18 -32
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +12 -25
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +24 -50
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +15 -30
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +29 -52
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwk/embedded.d.ts +5 -8
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwk/thumbprint.d.ts +7 -9
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwks/local.d.ts +10 -13
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwks/remote.d.ts +29 -41
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/compact/sign.d.ts +8 -13
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/compact/verify.d.ts +14 -26
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/flattened/sign.d.ts +10 -19
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/flattened/verify.d.ts +14 -26
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/general/sign.d.ts +19 -33
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/general/verify.d.ts +17 -32
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/decrypt.d.ts +20 -27
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/encrypt.d.ts +30 -35
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/sign.d.ts +8 -13
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/unsecured.d.ts +10 -19
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/verify.d.ts +19 -22
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/key/export.d.ts +10 -10
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/key/generate_key_pair.d.ts +15 -22
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/key/generate_secret.d.ts +12 -19
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/key/import.d.ts +25 -31
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/types.d.ts +184 -319
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/util/base64url.d.ts +7 -7
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/util/decode_jwt.d.ts +5 -7
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/util/decode_protected_header.d.ts +6 -5
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/util/errors.d.ts +50 -88
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/index.js +70 -32
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +6 -8
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +25 -48
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -14
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +34 -64
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/general/encrypt.js +100 -172
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwk/embedded.js +29 -32
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwk/thumbprint.js +51 -70
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwks/local.js +53 -64
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwks/remote.js +88 -136
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/compact/sign.js +19 -21
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/flattened/sign.js +22 -31
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/flattened/verify.js +11 -24
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/general/sign.js +55 -73
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/general/verify.js +43 -69
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/decrypt.js +12 -20
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/encrypt.js +43 -70
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/sign.js +17 -16
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/unsecured.js +31 -40
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/export.js +32 -41
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/generate_key_pair.js +32 -49
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/generate_secret.js +35 -40
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/import.js +48 -56
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/asn1.js +128 -169
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/buffer_utils.js +72 -41
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/content_encryption.js +75 -119
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/deflate.js +35 -47
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +102 -93
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +178 -234
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +71 -138
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jws_sign.js +43 -82
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jws_verify.js +78 -131
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +123 -209
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key.js +147 -139
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_management.js +169 -235
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/validate.js +122 -0
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/util/base64url.js +14 -37
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/util/errors.js +94 -84
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/package.json +17 -81
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/index.d.ts +1 -2
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +12 -25
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +18 -32
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +12 -25
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +24 -50
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +15 -30
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +29 -52
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwk/embedded.d.ts +5 -8
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwk/thumbprint.d.ts +7 -9
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwks/local.d.ts +10 -13
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwks/remote.d.ts +29 -41
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/compact/sign.d.ts +8 -13
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/compact/verify.d.ts +14 -26
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/flattened/sign.d.ts +10 -19
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/flattened/verify.d.ts +14 -26
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/general/sign.d.ts +19 -33
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/general/verify.d.ts +17 -32
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/decrypt.d.ts +20 -27
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/encrypt.d.ts +30 -35
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/sign.d.ts +8 -13
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/unsecured.d.ts +10 -19
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/verify.d.ts +19 -22
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/key/export.d.ts +10 -10
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/key/generate_key_pair.d.ts +15 -22
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/key/generate_secret.d.ts +12 -19
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/key/import.d.ts +25 -31
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/types.d.ts +184 -319
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/util/base64url.d.ts +7 -7
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/util/decode_jwt.d.ts +5 -7
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/util/decode_protected_header.d.ts +6 -5
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/util/errors.d.ts +50 -88
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/index.js +70 -32
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +6 -8
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +25 -48
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -14
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +34 -64
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/general/encrypt.js +100 -172
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwk/embedded.js +29 -32
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwk/thumbprint.js +51 -70
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwks/local.js +53 -64
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwks/remote.js +88 -136
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/compact/sign.js +19 -21
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/flattened/sign.js +22 -31
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/flattened/verify.js +11 -24
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/general/sign.js +55 -73
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/general/verify.js +43 -69
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/decrypt.js +12 -20
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/encrypt.js +43 -70
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/sign.js +17 -16
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/unsecured.js +31 -40
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/export.js +32 -41
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/generate_key_pair.js +32 -49
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/generate_secret.js +35 -40
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/import.js +48 -56
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/asn1.js +128 -169
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/buffer_utils.js +72 -41
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/content_encryption.js +75 -119
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/deflate.js +35 -47
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +102 -93
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +178 -234
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +71 -138
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jws_sign.js +43 -82
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jws_verify.js +78 -131
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +123 -209
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key.js +147 -139
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_management.js +169 -235
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/validate.js +122 -0
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/util/base64url.js +14 -37
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/util/errors.js +94 -84
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/package.json +17 -81
- package/node_modules/@posthog/core/dist/cookie.js +17 -13
- package/node_modules/@posthog/core/dist/error-tracking/chunk-ids.js +15 -11
- package/node_modules/@posthog/core/dist/error-tracking/coercers/dom-exception-coercer.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/coercers/error-coercer.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/coercers/error-event-coercer.js +12 -9
- package/node_modules/@posthog/core/dist/error-tracking/coercers/error-event-coercer.mjs +0 -1
- package/node_modules/@posthog/core/dist/error-tracking/coercers/event-coercer.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/coercers/index.js +51 -63
- package/node_modules/@posthog/core/dist/error-tracking/coercers/object-coercer.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/coercers/primitive-coercer.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/coercers/promise-rejection-event.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/coercers/string-coercer.js +15 -11
- package/node_modules/@posthog/core/dist/error-tracking/coercers/utils.js +16 -12
- package/node_modules/@posthog/core/dist/error-tracking/error-properties-builder.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/exception-steps.js +18 -14
- package/node_modules/@posthog/core/dist/error-tracking/exception-steps.mjs +2 -2
- package/node_modules/@posthog/core/dist/error-tracking/index.js +41 -49
- package/node_modules/@posthog/core/dist/error-tracking/parsers/base.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/error-tracking/parsers/base.js +13 -9
- package/node_modules/@posthog/core/dist/error-tracking/parsers/base.mjs +1 -1
- package/node_modules/@posthog/core/dist/error-tracking/parsers/chrome.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/parsers/gecko.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/parsers/index.js +17 -13
- package/node_modules/@posthog/core/dist/error-tracking/parsers/index.mjs +4 -4
- package/node_modules/@posthog/core/dist/error-tracking/parsers/node.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/parsers/opera.js +14 -10
- package/node_modules/@posthog/core/dist/error-tracking/parsers/safari.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/parsers/winjs.js +12 -8
- package/node_modules/@posthog/core/dist/error-tracking/release.js +15 -11
- package/node_modules/@posthog/core/dist/error-tracking/types.js +15 -11
- package/node_modules/@posthog/core/dist/error-tracking/utils.js +15 -11
- package/node_modules/@posthog/core/dist/eventemitter.js +15 -11
- package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.js +18 -14
- package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.mjs +1 -1
- package/node_modules/@posthog/core/dist/featureFlagUtils.js +30 -25
- package/node_modules/@posthog/core/dist/featureFlagUtils.mjs +2 -2
- package/node_modules/@posthog/core/dist/gzip.js +16 -12
- package/node_modules/@posthog/core/dist/index.js +302 -310
- package/node_modules/@posthog/core/dist/index.mjs +12 -12
- package/node_modules/@posthog/core/dist/logs/index.js +13 -9
- package/node_modules/@posthog/core/dist/logs/index.mjs +1 -1
- package/node_modules/@posthog/core/dist/logs/logs-utils.js +16 -12
- package/node_modules/@posthog/core/dist/logs/types.js +2 -2
- package/node_modules/@posthog/core/dist/logs/types.mjs +1 -0
- package/node_modules/@posthog/core/dist/metrics/config.js +15 -11
- package/node_modules/@posthog/core/dist/metrics/index.js +15 -11
- package/node_modules/@posthog/core/dist/metrics/index.mjs +2 -2
- package/node_modules/@posthog/core/dist/metrics/metrics-utils.js +14 -10
- package/node_modules/@posthog/core/dist/metrics/types.js +2 -2
- package/node_modules/@posthog/core/dist/metrics/types.mjs +1 -0
- package/node_modules/@posthog/core/dist/posthog-core-stateless.js +16 -12
- package/node_modules/@posthog/core/dist/posthog-core-stateless.mjs +1 -1
- package/node_modules/@posthog/core/dist/posthog-core.d.ts +14 -0
- package/node_modules/@posthog/core/dist/posthog-core.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/posthog-core.js +12 -8
- package/node_modules/@posthog/core/dist/surveys/activation.js +14 -10
- package/node_modules/@posthog/core/dist/surveys/events.js +14 -10
- package/node_modules/@posthog/core/dist/surveys/index.js +30 -26
- package/node_modules/@posthog/core/dist/surveys/index.mjs +6 -7
- package/node_modules/@posthog/core/dist/surveys/keys.js +16 -12
- package/node_modules/@posthog/core/dist/surveys/property-matching.js +19 -14
- package/node_modules/@posthog/core/dist/surveys/translations.js +16 -12
- package/node_modules/@posthog/core/dist/surveys/validation.js +13 -9
- package/node_modules/@posthog/core/dist/testing/PostHogCoreTestClient.d.ts +3 -3
- package/node_modules/@posthog/core/dist/testing/PostHogCoreTestClient.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/testing/PostHogCoreTestClient.js +15 -11
- package/node_modules/@posthog/core/dist/testing/PostHogCoreTestClient.mjs +3 -3
- package/node_modules/@posthog/core/dist/testing/index.js +21 -21
- package/node_modules/@posthog/core/dist/testing/test-utils.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/testing/test-utils.js +19 -18
- package/node_modules/@posthog/core/dist/testing/test-utils.mjs +7 -10
- package/node_modules/@posthog/core/dist/tracing-headers.js +12 -8
- package/node_modules/@posthog/core/dist/types.d.ts +1 -0
- package/node_modules/@posthog/core/dist/types.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/types.js +31 -26
- package/node_modules/@posthog/core/dist/types.mjs +1 -1
- package/node_modules/@posthog/core/dist/utils/bot-detection.js +16 -12
- package/node_modules/@posthog/core/dist/utils/browser-utils.js +12 -8
- package/node_modules/@posthog/core/dist/utils/bucketed-rate-limiter.js +14 -10
- package/node_modules/@posthog/core/dist/utils/index.d.ts +1 -0
- package/node_modules/@posthog/core/dist/utils/index.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/utils/index.js +205 -192
- package/node_modules/@posthog/core/dist/utils/index.mjs +4 -3
- package/node_modules/@posthog/core/dist/utils/json-utils.js +24 -19
- package/node_modules/@posthog/core/dist/utils/logger.js +17 -12
- package/node_modules/@posthog/core/dist/utils/number-utils.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/utils/number-utils.js +14 -10
- package/node_modules/@posthog/core/dist/utils/number-utils.mjs +1 -1
- package/node_modules/@posthog/core/dist/utils/otlp-any-value.js +15 -11
- package/node_modules/@posthog/core/dist/utils/otlp-any-value.mjs +1 -1
- package/node_modules/@posthog/core/dist/utils/otlp-resource.js +17 -13
- package/node_modules/@posthog/core/dist/utils/promise-queue.js +12 -8
- package/node_modules/@posthog/core/dist/utils/string-utils.js +21 -16
- package/node_modules/@posthog/core/dist/utils/type-utils.js +31 -27
- package/node_modules/@posthog/core/dist/utils/type-utils.mjs +2 -2
- package/node_modules/@posthog/core/dist/utils/user-agent-utils.js +16 -12
- package/node_modules/@posthog/core/dist/utils/webview-app-utils.d.ts +12 -0
- package/node_modules/@posthog/core/dist/utils/webview-app-utils.d.ts.map +1 -0
- package/node_modules/@posthog/core/dist/utils/webview-app-utils.js +132 -0
- package/node_modules/@posthog/core/dist/utils/webview-app-utils.mjs +94 -0
- package/node_modules/@posthog/core/dist/vendor/uuidv7.js +22 -17
- package/node_modules/@posthog/core/dist/vendor/uuidv7.mjs +1 -1
- package/node_modules/@posthog/core/package.json +8 -8
- package/node_modules/@posthog/core/src/error-tracking/coercers/promise-rejection-event.spec.ts +4 -4
- package/node_modules/@posthog/core/src/error-tracking/error-properties-builder.parse.spec.ts +1 -1
- package/node_modules/@posthog/core/src/error-tracking/parsers/base.spec.ts +21 -2
- package/node_modules/@posthog/core/src/error-tracking/parsers/base.ts +6 -2
- package/node_modules/@posthog/core/src/featureFlagLocalEvaluation.ts +1 -1
- package/node_modules/@posthog/core/src/featureFlagUtils.ts +4 -4
- package/node_modules/@posthog/core/src/logs/index.spec.ts +89 -89
- package/node_modules/@posthog/core/src/metrics/index.spec.ts +24 -24
- package/node_modules/@posthog/core/src/posthog-core.ts +14 -1
- package/node_modules/@posthog/core/src/surveys/activation.spec.ts +1 -1
- package/node_modules/@posthog/core/src/surveys/events.spec.ts +1 -1
- package/node_modules/@posthog/core/src/surveys/keys.spec.ts +1 -1
- package/node_modules/@posthog/core/src/surveys/translations.spec.ts +8 -8
- package/node_modules/@posthog/core/src/testing/PostHogCoreTestClient.ts +6 -6
- package/node_modules/@posthog/core/src/testing/test-utils.ts +7 -12
- package/node_modules/@posthog/core/src/types.ts +1 -0
- package/node_modules/@posthog/core/src/utils/bucketed-rate-limiter.spec.ts +13 -13
- package/node_modules/@posthog/core/src/utils/index.ts +1 -0
- package/node_modules/@posthog/core/src/utils/json-utils.spec.ts +5 -5
- package/node_modules/@posthog/core/src/utils/number-utils.spec.ts +20 -0
- package/node_modules/@posthog/core/src/utils/number-utils.ts +3 -1
- package/node_modules/@posthog/core/src/utils/otlp-any-value.spec.ts +4 -4
- package/node_modules/@posthog/core/src/utils/promise-queue.spec.ts +3 -3
- package/node_modules/@posthog/core/src/utils/type-utils.ts +4 -4
- package/node_modules/@posthog/core/src/utils/webview-app-utils.spec.ts +118 -0
- package/node_modules/@posthog/core/src/utils/webview-app-utils.ts +49 -0
- package/node_modules/@posthog/types/dist/capture-log.js +2 -2
- package/node_modules/@posthog/types/dist/capture-log.mjs +1 -0
- package/node_modules/@posthog/types/dist/capture-metric.js +15 -11
- package/node_modules/@posthog/types/dist/capture.js +2 -2
- package/node_modules/@posthog/types/dist/capture.mjs +1 -0
- package/node_modules/@posthog/types/dist/common.js +2 -2
- package/node_modules/@posthog/types/dist/common.mjs +1 -0
- package/node_modules/@posthog/types/dist/feature-flags.d.ts +1 -1
- package/node_modules/@posthog/types/dist/feature-flags.d.ts.map +1 -1
- package/node_modules/@posthog/types/dist/feature-flags.js +2 -2
- package/node_modules/@posthog/types/dist/feature-flags.mjs +1 -0
- package/node_modules/@posthog/types/dist/index.js +12 -8
- package/node_modules/@posthog/types/dist/index.mjs +1 -2
- package/node_modules/@posthog/types/dist/posthog-config.d.ts +15 -1
- package/node_modules/@posthog/types/dist/posthog-config.d.ts.map +1 -1
- package/node_modules/@posthog/types/dist/posthog-config.js +2 -2
- package/node_modules/@posthog/types/dist/posthog-config.mjs +1 -0
- package/node_modules/@posthog/types/dist/posthog.d.ts +2 -2
- package/node_modules/@posthog/types/dist/posthog.d.ts.map +1 -1
- package/node_modules/@posthog/types/dist/posthog.js +2 -2
- package/node_modules/@posthog/types/dist/posthog.mjs +1 -0
- package/node_modules/@posthog/types/dist/request.js +2 -2
- package/node_modules/@posthog/types/dist/request.mjs +1 -0
- package/node_modules/@posthog/types/dist/segment.js +2 -2
- package/node_modules/@posthog/types/dist/segment.mjs +1 -0
- package/node_modules/@posthog/types/dist/session-recording.js +2 -2
- package/node_modules/@posthog/types/dist/session-recording.mjs +1 -0
- package/node_modules/@posthog/types/dist/survey.js +2 -2
- package/node_modules/@posthog/types/dist/survey.mjs +1 -0
- package/node_modules/@posthog/types/dist/toolbar.js +2 -2
- package/node_modules/@posthog/types/dist/toolbar.mjs +1 -0
- package/node_modules/@posthog/types/dist/tree-shakeable.js +2 -2
- package/node_modules/@posthog/types/dist/tree-shakeable.mjs +1 -0
- package/node_modules/@posthog/types/package.json +4 -6
- package/node_modules/@posthog/types/src/feature-flags.ts +1 -1
- package/node_modules/@posthog/types/src/posthog-config.ts +16 -1
- package/node_modules/@posthog/types/src/posthog.ts +2 -2
- package/node_modules/@posthog/types/src/tree-shakeable.ts +1 -1
- package/node_modules/@zuplo/core/package.json +1 -1
- package/node_modules/@zuplo/graphql/package.json +1 -1
- package/node_modules/@zuplo/openapi-tools/package.json +1 -1
- package/node_modules/@zuplo/otel/package.json +1 -1
- package/node_modules/@zuplo/runtime/out/esm/{chunk-ZZCZZHOD.js → chunk-R4PTES5B.js} +104 -104
- package/node_modules/@zuplo/runtime/out/esm/chunk-R4PTES5B.js.map +1 -0
- package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
- package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
- package/node_modules/@zuplo/runtime/out/types/index.d.ts +59 -9
- package/node_modules/@zuplo/runtime/package.json +1 -1
- package/node_modules/hono/dist/cjs/client/client.js +4 -4
- package/node_modules/hono/dist/cjs/hono-base.js +7 -6
- package/node_modules/hono/dist/cjs/jsx/base.js +18 -1
- package/node_modules/hono/dist/cjs/jsx/components.js +25 -26
- package/node_modules/hono/dist/cjs/jsx/context.js +5 -5
- package/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +2 -2
- package/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
- package/node_modules/hono/dist/client/client.js +4 -4
- package/node_modules/hono/dist/hono-base.js +7 -6
- package/node_modules/hono/dist/jsx/base.js +15 -1
- package/node_modules/hono/dist/jsx/components.js +26 -27
- package/node_modules/hono/dist/jsx/context.js +6 -6
- package/node_modules/hono/dist/jsx/dom/server.js +5 -1
- package/node_modules/hono/dist/jsx/intrinsic-element/components.js +3 -3
- package/node_modules/hono/dist/jsx/streaming.js +5 -6
- package/node_modules/hono/dist/types/context.d.ts +2 -2
- package/node_modules/hono/dist/types/jsx/base.d.ts +3 -0
- package/node_modules/hono/package.json +2 -2
- package/package.json +11 -11
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/base64.js +0 -22
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/crypto_key.js +0 -28
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/helpers.js +0 -42
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/invalid_key_input.js +0 -26
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/is_key_like.js +0 -17
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwk_metadata.js +0 -20
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwk_to_key.js +0 -17
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_options.js +0 -6
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/options.js +0 -74
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/signing.js +0 -26
- package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/type_checks.js +0 -33
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/base64.js +0 -22
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/crypto_key.js +0 -28
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/helpers.js +0 -42
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/invalid_key_input.js +0 -26
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/is_key_like.js +0 -17
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwk_metadata.js +0 -20
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwk_to_key.js +0 -17
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_options.js +0 -6
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/options.js +0 -74
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/signing.js +0 -26
- package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/type_checks.js +0 -33
- package/node_modules/@zuplo/runtime/out/esm/chunk-ZZCZZHOD.js.map +0 -1
- /package/node_modules/@zuplo/runtime/out/esm/{chunk-ZZCZZHOD.js.LEGAL.txt → chunk-R4PTES5B.js.LEGAL.txt} +0 -0
|
@@ -34,20 +34,20 @@ const createMockInstance = (overrides: Record<string, any> = {}): any => {
|
|
|
34
34
|
const store: Record<string, any> = {}
|
|
35
35
|
const instance: any = {
|
|
36
36
|
optedOut: false,
|
|
37
|
-
getDistinctId:
|
|
38
|
-
getSessionId:
|
|
39
|
-
getLibraryId:
|
|
40
|
-
getLibraryVersion:
|
|
41
|
-
getPersistedProperty:
|
|
42
|
-
setPersistedProperty:
|
|
37
|
+
getDistinctId: vi.fn(() => 'user-123'),
|
|
38
|
+
getSessionId: vi.fn(() => 'sess-456'),
|
|
39
|
+
getLibraryId: vi.fn(() => 'posthog-core-tests'),
|
|
40
|
+
getLibraryVersion: vi.fn(() => '0.0.0-test'),
|
|
41
|
+
getPersistedProperty: vi.fn((key: string) => store[key]),
|
|
42
|
+
setPersistedProperty: vi.fn((key: string, value: any) => {
|
|
43
43
|
if (value === null || value === undefined) {
|
|
44
44
|
delete store[key]
|
|
45
45
|
} else {
|
|
46
46
|
store[key] = value
|
|
47
47
|
}
|
|
48
48
|
}),
|
|
49
|
-
_sendLogsBatch:
|
|
50
|
-
addPendingPromise:
|
|
49
|
+
_sendLogsBatch: vi.fn(() => Promise.resolve({ kind: 'ok' })),
|
|
50
|
+
addPendingPromise: vi.fn(<T>(promise: Promise<T>) => promise),
|
|
51
51
|
_store: store,
|
|
52
52
|
...overrides,
|
|
53
53
|
}
|
|
@@ -60,13 +60,13 @@ const immediateOnReady = (fn: () => void): void => fn()
|
|
|
60
60
|
|
|
61
61
|
const createMockLogger = (): Logger => {
|
|
62
62
|
const logger: any = {
|
|
63
|
-
debug:
|
|
64
|
-
info:
|
|
65
|
-
warn:
|
|
66
|
-
error:
|
|
67
|
-
critical:
|
|
63
|
+
debug: vi.fn(),
|
|
64
|
+
info: vi.fn(),
|
|
65
|
+
warn: vi.fn(),
|
|
66
|
+
error: vi.fn(),
|
|
67
|
+
critical: vi.fn(),
|
|
68
68
|
}
|
|
69
|
-
logger.createLogger =
|
|
69
|
+
logger.createLogger = vi.fn(() => logger)
|
|
70
70
|
return logger as Logger
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -117,7 +117,7 @@ describe('PostHogLogs over the core sender', () => {
|
|
|
117
117
|
})
|
|
118
118
|
|
|
119
119
|
it('retains and resends records after transport retries are exhausted', async () => {
|
|
120
|
-
|
|
120
|
+
vi.useRealTimers()
|
|
121
121
|
const [client, mocks] = createTestClient('TEST_API_KEY', {
|
|
122
122
|
fetchRetryCount: 2,
|
|
123
123
|
fetchRetryDelay: 1,
|
|
@@ -175,7 +175,7 @@ describe('PostHogLogs', () => {
|
|
|
175
175
|
it('does not let an in-flight batch drop records captured after the clear', async () => {
|
|
176
176
|
let releaseSend: (v: any) => void = () => {}
|
|
177
177
|
const mockInstance = createMockInstance({
|
|
178
|
-
_sendLogsBatch:
|
|
178
|
+
_sendLogsBatch: vi.fn(() => new Promise((resolve) => (releaseSend = resolve))),
|
|
179
179
|
})
|
|
180
180
|
const logs = new PostHogLogs(
|
|
181
181
|
mockInstance,
|
|
@@ -202,7 +202,7 @@ describe('PostHogLogs', () => {
|
|
|
202
202
|
const sentBodies: string[][] = []
|
|
203
203
|
let releaseSend: (v: any) => void = () => {}
|
|
204
204
|
const mockInstance = createMockInstance({
|
|
205
|
-
_sendLogsBatch:
|
|
205
|
+
_sendLogsBatch: vi.fn((payload: any) => {
|
|
206
206
|
sentBodies.push(payload.resourceLogs[0].scopeLogs[0].logRecords.map((r: any) => r.body.stringValue))
|
|
207
207
|
// Only the first send is held open; any retry resolves at once so a
|
|
208
208
|
// regression fails on the assertion rather than by hanging the test.
|
|
@@ -236,7 +236,7 @@ describe('PostHogLogs', () => {
|
|
|
236
236
|
const sent: string[][] = []
|
|
237
237
|
let releasePersist: (() => void) | null = null
|
|
238
238
|
const mockInstance = createMockInstance({
|
|
239
|
-
_sendLogsBatch:
|
|
239
|
+
_sendLogsBatch: vi.fn((payload: any) => {
|
|
240
240
|
sent.push(payload.resourceLogs[0].scopeLogs[0].logRecords.map((r: any) => r.body.stringValue))
|
|
241
241
|
return Promise.resolve({ kind: 'ok' })
|
|
242
242
|
}),
|
|
@@ -280,7 +280,7 @@ describe('PostHogLogs', () => {
|
|
|
280
280
|
it('does not let an in-flight batch drop records captured after the reset', async () => {
|
|
281
281
|
let releaseSend: (v: any) => void = () => {}
|
|
282
282
|
const mockInstance = createMockInstance({
|
|
283
|
-
_sendLogsBatch:
|
|
283
|
+
_sendLogsBatch: vi.fn(() => new Promise((resolve) => (releaseSend = resolve))),
|
|
284
284
|
})
|
|
285
285
|
const logs = new PostHogLogs(
|
|
286
286
|
mockInstance,
|
|
@@ -305,7 +305,7 @@ describe('PostHogLogs', () => {
|
|
|
305
305
|
it('does not let a flush started after the reset run alongside the in-flight one', async () => {
|
|
306
306
|
let releaseSend: (v: any) => void = () => {}
|
|
307
307
|
const mockInstance = createMockInstance({
|
|
308
|
-
_sendLogsBatch:
|
|
308
|
+
_sendLogsBatch: vi.fn(() => new Promise((resolve) => (releaseSend = resolve))),
|
|
309
309
|
})
|
|
310
310
|
const logs = new PostHogLogs(
|
|
311
311
|
mockInstance,
|
|
@@ -624,7 +624,7 @@ describe('PostHogLogs', () => {
|
|
|
624
624
|
})
|
|
625
625
|
|
|
626
626
|
it('silently drops captures when onReady never invokes fn (rejected init)', () => {
|
|
627
|
-
const neverReady =
|
|
627
|
+
const neverReady = vi.fn(() => {
|
|
628
628
|
/* simulate rejected init: fn is never called */
|
|
629
629
|
})
|
|
630
630
|
const logs = new PostHogLogs(mockInstance, resolveForTest(), logger, getContextFor(mockInstance), neverReady)
|
|
@@ -642,13 +642,13 @@ describe('PostHogLogs', () => {
|
|
|
642
642
|
pending.push(fn)
|
|
643
643
|
}
|
|
644
644
|
const instance = createMockInstance({
|
|
645
|
-
getDistinctId:
|
|
645
|
+
getDistinctId: vi.fn().mockReturnValue('user-A'),
|
|
646
646
|
})
|
|
647
647
|
|
|
648
648
|
const logs = new PostHogLogs(instance, resolveForTest(), logger, getContextFor(instance), defer)
|
|
649
649
|
logs.captureLog({ body: 'captured-as-user-A' })
|
|
650
650
|
|
|
651
|
-
instance.getDistinctId =
|
|
651
|
+
instance.getDistinctId = vi.fn().mockReturnValue('user-B')
|
|
652
652
|
|
|
653
653
|
pending.forEach((fn) => fn())
|
|
654
654
|
|
|
@@ -718,7 +718,7 @@ describe('PostHogLogs', () => {
|
|
|
718
718
|
})
|
|
719
719
|
|
|
720
720
|
it('uses the scopeName constructor param as the OTLP scope name', async () => {
|
|
721
|
-
|
|
721
|
+
vi.useFakeTimers()
|
|
722
722
|
const logs = new PostHogLogs(
|
|
723
723
|
mockInstance,
|
|
724
724
|
resolveForTest(),
|
|
@@ -740,7 +740,7 @@ describe('PostHogLogs', () => {
|
|
|
740
740
|
payload.resourceLogs[0].resource.attributes.map((a: any) => [a.key, a.value])
|
|
741
741
|
)
|
|
742
742
|
expect(resourceAttrs['telemetry.sdk.name']).toEqual({ stringValue: 'posthog-core-tests' })
|
|
743
|
-
|
|
743
|
+
vi.useRealTimers()
|
|
744
744
|
})
|
|
745
745
|
|
|
746
746
|
it('defaults service.name to "unknown_service" when not configured', async () => {
|
|
@@ -800,7 +800,7 @@ describe('PostHogLogs', () => {
|
|
|
800
800
|
it('splits a large queue into multiple batches of maxBatchRecordsPerPost and persists after each', async () => {
|
|
801
801
|
const sendOrder: number[] = []
|
|
802
802
|
let persistCallsBeforeSecondSend = 0
|
|
803
|
-
mockInstance._sendLogsBatch =
|
|
803
|
+
mockInstance._sendLogsBatch = vi.fn(async (payload: any) => {
|
|
804
804
|
// Record the persist count *at the start of* send #2. The first send
|
|
805
805
|
// must have already persisted its queue advance by then — otherwise a
|
|
806
806
|
// crash between sends could double-send the first batch.
|
|
@@ -833,7 +833,7 @@ describe('PostHogLogs', () => {
|
|
|
833
833
|
|
|
834
834
|
it('halves maxBatchRecordsPerPost and retries the same records on too-large outcome', async () => {
|
|
835
835
|
const sendSizes: number[] = []
|
|
836
|
-
mockInstance._sendLogsBatch =
|
|
836
|
+
mockInstance._sendLogsBatch = vi.fn(async (payload: any) => {
|
|
837
837
|
const size = payload.resourceLogs[0].scopeLogs[0].logRecords.length
|
|
838
838
|
sendSizes.push(size)
|
|
839
839
|
if (sendSizes.length === 1) {
|
|
@@ -865,7 +865,7 @@ describe('PostHogLogs', () => {
|
|
|
865
865
|
// cap, each healthy send grows it back by 1 until the configured
|
|
866
866
|
// maximum is reached.
|
|
867
867
|
const sendSizes: number[] = []
|
|
868
|
-
mockInstance._sendLogsBatch =
|
|
868
|
+
mockInstance._sendLogsBatch = vi.fn(async (payload: any) => {
|
|
869
869
|
const size = payload.resourceLogs[0].scopeLogs[0].logRecords.length
|
|
870
870
|
sendSizes.push(size)
|
|
871
871
|
// First POST is rejected as too-large; everything else succeeds.
|
|
@@ -897,7 +897,7 @@ describe('PostHogLogs', () => {
|
|
|
897
897
|
})
|
|
898
898
|
|
|
899
899
|
it('drops the only record when too-large arrives on a batch of size 1', async () => {
|
|
900
|
-
mockInstance._sendLogsBatch =
|
|
900
|
+
mockInstance._sendLogsBatch = vi.fn(() => Promise.resolve({ kind: 'too-large' }))
|
|
901
901
|
const logs = new PostHogLogs(
|
|
902
902
|
mockInstance,
|
|
903
903
|
resolveForTest({ maxBatchRecordsPerPost: 1 }),
|
|
@@ -915,7 +915,7 @@ describe('PostHogLogs', () => {
|
|
|
915
915
|
})
|
|
916
916
|
|
|
917
917
|
it('warns explicitly when dropping a size-1 413 (visibility for the lost record)', async () => {
|
|
918
|
-
mockInstance._sendLogsBatch =
|
|
918
|
+
mockInstance._sendLogsBatch = vi.fn(() => Promise.resolve({ kind: 'too-large' }))
|
|
919
919
|
const logs = new PostHogLogs(
|
|
920
920
|
mockInstance,
|
|
921
921
|
resolveForTest({ maxBatchRecordsPerPost: 1 }),
|
|
@@ -935,7 +935,7 @@ describe('PostHogLogs', () => {
|
|
|
935
935
|
// First record returns too-large with size 1 (drops and warns), then
|
|
936
936
|
// the rest of the queue should continue flushing normally.
|
|
937
937
|
let callCount = 0
|
|
938
|
-
mockInstance._sendLogsBatch =
|
|
938
|
+
mockInstance._sendLogsBatch = vi.fn(() => {
|
|
939
939
|
callCount++
|
|
940
940
|
return Promise.resolve(callCount === 1 ? { kind: 'too-large' } : { kind: 'ok' })
|
|
941
941
|
})
|
|
@@ -962,7 +962,7 @@ describe('PostHogLogs', () => {
|
|
|
962
962
|
// then 413 on size 1 is the permanent drop. Verifies the cap actually
|
|
963
963
|
// shrinks all the way down before the size-1 drop fires.
|
|
964
964
|
const sendSizes: number[] = []
|
|
965
|
-
mockInstance._sendLogsBatch =
|
|
965
|
+
mockInstance._sendLogsBatch = vi.fn(async (payload: any) => {
|
|
966
966
|
const size = payload.resourceLogs[0].scopeLogs[0].logRecords.length
|
|
967
967
|
sendSizes.push(size)
|
|
968
968
|
return { kind: 'too-large' }
|
|
@@ -991,7 +991,7 @@ describe('PostHogLogs', () => {
|
|
|
991
991
|
|
|
992
992
|
it('keeps records in the queue on retry-later outcome and re-throws the carried error', async () => {
|
|
993
993
|
const netErr = new Error('offline')
|
|
994
|
-
mockInstance._sendLogsBatch =
|
|
994
|
+
mockInstance._sendLogsBatch = vi.fn(() => Promise.resolve({ kind: 'retry-later', error: netErr }))
|
|
995
995
|
const logs = new PostHogLogs(
|
|
996
996
|
mockInstance,
|
|
997
997
|
resolveForTest(),
|
|
@@ -1008,7 +1008,7 @@ describe('PostHogLogs', () => {
|
|
|
1008
1008
|
|
|
1009
1009
|
it('drops the batch on fatal outcome and re-throws the carried error', async () => {
|
|
1010
1010
|
const bogus = new Error('malformed')
|
|
1011
|
-
mockInstance._sendLogsBatch =
|
|
1011
|
+
mockInstance._sendLogsBatch = vi.fn(() => Promise.resolve({ kind: 'fatal', error: bogus }))
|
|
1012
1012
|
const logs = new PostHogLogs(
|
|
1013
1013
|
mockInstance,
|
|
1014
1014
|
resolveForTest(),
|
|
@@ -1025,11 +1025,11 @@ describe('PostHogLogs', () => {
|
|
|
1025
1025
|
|
|
1026
1026
|
it('awaits _waitForStoragePersist between batches so a crash can’t replay records', async () => {
|
|
1027
1027
|
const sequence: string[] = []
|
|
1028
|
-
mockInstance._sendLogsBatch =
|
|
1028
|
+
mockInstance._sendLogsBatch = vi.fn(async (payload: any) => {
|
|
1029
1029
|
sequence.push(`send:${payload.resourceLogs[0].scopeLogs[0].logRecords.length}`)
|
|
1030
1030
|
return { kind: 'ok' }
|
|
1031
1031
|
})
|
|
1032
|
-
const waitForStoragePersist =
|
|
1032
|
+
const waitForStoragePersist = vi.fn(async () => {
|
|
1033
1033
|
sequence.push('waitForPersist')
|
|
1034
1034
|
})
|
|
1035
1035
|
const logs = new PostHogLogs(
|
|
@@ -1055,7 +1055,7 @@ describe('PostHogLogs', () => {
|
|
|
1055
1055
|
|
|
1056
1056
|
it('serializes concurrent flush calls rather than racing them', async () => {
|
|
1057
1057
|
let resolveFirst: (v: any) => void = () => {}
|
|
1058
|
-
mockInstance._sendLogsBatch =
|
|
1058
|
+
mockInstance._sendLogsBatch = vi.fn(
|
|
1059
1059
|
() =>
|
|
1060
1060
|
new Promise((r) => {
|
|
1061
1061
|
resolveFirst = r
|
|
@@ -1081,8 +1081,8 @@ describe('PostHogLogs', () => {
|
|
|
1081
1081
|
})
|
|
1082
1082
|
|
|
1083
1083
|
describe('flush triggers', () => {
|
|
1084
|
-
beforeEach(() =>
|
|
1085
|
-
afterEach(() =>
|
|
1084
|
+
beforeEach(() => vi.useFakeTimers())
|
|
1085
|
+
afterEach(() => vi.useRealTimers())
|
|
1086
1086
|
|
|
1087
1087
|
it('fires a flush when the buffer hits maxBufferSize', () => {
|
|
1088
1088
|
const logs = new PostHogLogs(
|
|
@@ -1117,9 +1117,9 @@ describe('PostHogLogs', () => {
|
|
|
1117
1117
|
// Only one timer armed, not three — subsequent enqueues inside the
|
|
1118
1118
|
// window must not push the flush out.
|
|
1119
1119
|
expect(mockInstance._sendLogsBatch).not.toHaveBeenCalled()
|
|
1120
|
-
|
|
1120
|
+
vi.advanceTimersByTime(4999)
|
|
1121
1121
|
expect(mockInstance._sendLogsBatch).not.toHaveBeenCalled()
|
|
1122
|
-
|
|
1122
|
+
vi.advanceTimersByTime(1)
|
|
1123
1123
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1124
1124
|
})
|
|
1125
1125
|
|
|
@@ -1135,13 +1135,13 @@ describe('PostHogLogs', () => {
|
|
|
1135
1135
|
logs.captureLog({ body: 'b' })
|
|
1136
1136
|
// Threshold path flushed already; advancing time must not trigger a second send.
|
|
1137
1137
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1138
|
-
|
|
1138
|
+
vi.advanceTimersByTime(5000)
|
|
1139
1139
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1140
1140
|
})
|
|
1141
1141
|
|
|
1142
1142
|
it('re-arms the timer after a failed flush so a retry happens without a new capture', async () => {
|
|
1143
1143
|
// First flush fails (retry-later keeps the records); the second succeeds.
|
|
1144
|
-
mockInstance._sendLogsBatch =
|
|
1144
|
+
mockInstance._sendLogsBatch = vi
|
|
1145
1145
|
.fn()
|
|
1146
1146
|
.mockResolvedValueOnce({ kind: 'retry-later', error: new Error('net') })
|
|
1147
1147
|
.mockResolvedValueOnce({ kind: 'ok' })
|
|
@@ -1156,12 +1156,12 @@ describe('PostHogLogs', () => {
|
|
|
1156
1156
|
logs.captureLog({ body: 'retry-me' })
|
|
1157
1157
|
|
|
1158
1158
|
// First timer fires → flush #1 → retry-later → record retained, timer re-armed.
|
|
1159
|
-
await
|
|
1159
|
+
await vi.advanceTimersByTimeAsync(5000)
|
|
1160
1160
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1161
1161
|
expect(readQueue(mockInstance)).toHaveLength(1)
|
|
1162
1162
|
|
|
1163
1163
|
// No new capture: the re-armed timer alone fires the retry, which drains.
|
|
1164
|
-
await
|
|
1164
|
+
await vi.advanceTimersByTimeAsync(5000)
|
|
1165
1165
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(2)
|
|
1166
1166
|
expect(readQueue(mockInstance)).toHaveLength(0)
|
|
1167
1167
|
})
|
|
@@ -1176,19 +1176,19 @@ describe('PostHogLogs', () => {
|
|
|
1176
1176
|
)
|
|
1177
1177
|
logs.captureLog({ body: 'one' })
|
|
1178
1178
|
|
|
1179
|
-
await
|
|
1179
|
+
await vi.advanceTimersByTimeAsync(5000)
|
|
1180
1180
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1181
1181
|
expect(readQueue(mockInstance)).toHaveLength(0)
|
|
1182
1182
|
|
|
1183
1183
|
// Successful drain leaves nothing queued, so no further timer should fire.
|
|
1184
|
-
await
|
|
1184
|
+
await vi.advanceTimersByTimeAsync(20000)
|
|
1185
1185
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1186
1186
|
})
|
|
1187
1187
|
|
|
1188
1188
|
it('backs off exponentially across consecutive failed flushes', async () => {
|
|
1189
1189
|
// Every flush fails, so the record stays queued and the retry interval grows:
|
|
1190
1190
|
// base (initial), base (1st retry), 2x, 4x, ...
|
|
1191
|
-
mockInstance._sendLogsBatch =
|
|
1191
|
+
mockInstance._sendLogsBatch = vi.fn(() => Promise.resolve({ kind: 'retry-later', error: new Error('down') }))
|
|
1192
1192
|
const base = 1000
|
|
1193
1193
|
const logs = new PostHogLogs(
|
|
1194
1194
|
mockInstance,
|
|
@@ -1199,27 +1199,27 @@ describe('PostHogLogs', () => {
|
|
|
1199
1199
|
)
|
|
1200
1200
|
logs.captureLog({ body: 'x' })
|
|
1201
1201
|
|
|
1202
|
-
await
|
|
1202
|
+
await vi.advanceTimersByTimeAsync(base) // initial timer → attempt #1
|
|
1203
1203
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1204
|
-
await
|
|
1204
|
+
await vi.advanceTimersByTimeAsync(base) // 1st retry still at base → attempt #2
|
|
1205
1205
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(2)
|
|
1206
1206
|
|
|
1207
1207
|
// Now backoff: next retry is 2x base — base alone must not fire it.
|
|
1208
|
-
await
|
|
1208
|
+
await vi.advanceTimersByTimeAsync(base)
|
|
1209
1209
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(2)
|
|
1210
|
-
await
|
|
1210
|
+
await vi.advanceTimersByTimeAsync(base) // 2x base elapsed → attempt #3
|
|
1211
1211
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(3)
|
|
1212
1212
|
|
|
1213
1213
|
// Next retry is 4x base.
|
|
1214
|
-
await
|
|
1214
|
+
await vi.advanceTimersByTimeAsync(2 * base)
|
|
1215
1215
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(3)
|
|
1216
|
-
await
|
|
1216
|
+
await vi.advanceTimersByTimeAsync(2 * base) // 4x base elapsed → attempt #4
|
|
1217
1217
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(4)
|
|
1218
1218
|
})
|
|
1219
1219
|
|
|
1220
1220
|
it('resets the backoff after a successful flush', async () => {
|
|
1221
1221
|
let shouldFail = true
|
|
1222
|
-
mockInstance._sendLogsBatch =
|
|
1222
|
+
mockInstance._sendLogsBatch = vi.fn(() =>
|
|
1223
1223
|
Promise.resolve(shouldFail ? { kind: 'retry-later', error: new Error('down') } : { kind: 'ok' })
|
|
1224
1224
|
)
|
|
1225
1225
|
const base = 1000
|
|
@@ -1232,23 +1232,23 @@ describe('PostHogLogs', () => {
|
|
|
1232
1232
|
)
|
|
1233
1233
|
logs.captureLog({ body: 'a' })
|
|
1234
1234
|
|
|
1235
|
-
await
|
|
1236
|
-
await
|
|
1237
|
-
await
|
|
1235
|
+
await vi.advanceTimersByTimeAsync(base) // attempt #1 fail (failures→1)
|
|
1236
|
+
await vi.advanceTimersByTimeAsync(base) // attempt #2 fail (failures→2, next 2x)
|
|
1237
|
+
await vi.advanceTimersByTimeAsync(2 * base) // attempt #3 fail (failures→3, next 4x)
|
|
1238
1238
|
shouldFail = false
|
|
1239
|
-
await
|
|
1239
|
+
await vi.advanceTimersByTimeAsync(4 * base) // attempt #4 succeeds → drains + resets
|
|
1240
1240
|
expect(readQueue(mockInstance)).toHaveLength(0)
|
|
1241
1241
|
|
|
1242
1242
|
// A new capture flushes at the base interval again, not the backed-off one.
|
|
1243
|
-
;(mockInstance._sendLogsBatch as
|
|
1243
|
+
;(mockInstance._sendLogsBatch as vi.Mock).mockClear()
|
|
1244
1244
|
logs.captureLog({ body: 'b' })
|
|
1245
|
-
await
|
|
1245
|
+
await vi.advanceTimersByTimeAsync(base)
|
|
1246
1246
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1247
1247
|
})
|
|
1248
1248
|
|
|
1249
1249
|
it('onReconnect flushes immediately without waiting out the backoff', async () => {
|
|
1250
1250
|
let shouldFail = true
|
|
1251
|
-
mockInstance._sendLogsBatch =
|
|
1251
|
+
mockInstance._sendLogsBatch = vi.fn(() =>
|
|
1252
1252
|
Promise.resolve(shouldFail ? { kind: 'retry-later', error: new Error('down') } : { kind: 'ok' })
|
|
1253
1253
|
)
|
|
1254
1254
|
const base = 1000
|
|
@@ -1261,22 +1261,22 @@ describe('PostHogLogs', () => {
|
|
|
1261
1261
|
)
|
|
1262
1262
|
logs.captureLog({ body: 'x' })
|
|
1263
1263
|
|
|
1264
|
-
await
|
|
1264
|
+
await vi.advanceTimersByTimeAsync(base) // attempt #1 fails → record retained, backoff armed
|
|
1265
1265
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1266
1266
|
expect(readQueue(mockInstance)).toHaveLength(1)
|
|
1267
1267
|
|
|
1268
1268
|
// Reconnect drains now — no timer advance needed.
|
|
1269
1269
|
shouldFail = false
|
|
1270
1270
|
logs.onReconnect()
|
|
1271
|
-
await
|
|
1271
|
+
await vi.advanceTimersByTimeAsync(0)
|
|
1272
1272
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(2)
|
|
1273
1273
|
expect(readQueue(mockInstance)).toHaveLength(0)
|
|
1274
1274
|
})
|
|
1275
1275
|
})
|
|
1276
1276
|
|
|
1277
1277
|
describe('flushWithTimeout', () => {
|
|
1278
|
-
beforeEach(() =>
|
|
1279
|
-
afterEach(() =>
|
|
1278
|
+
beforeEach(() => vi.useFakeTimers())
|
|
1279
|
+
afterEach(() => vi.useRealTimers())
|
|
1280
1280
|
|
|
1281
1281
|
it('clears the timeout timer when the flush finishes first', async () => {
|
|
1282
1282
|
const logs = new PostHogLogs(
|
|
@@ -1292,13 +1292,13 @@ describe('PostHogLogs', () => {
|
|
|
1292
1292
|
|
|
1293
1293
|
await logs.flushWithTimeout(5000)
|
|
1294
1294
|
|
|
1295
|
-
expect(
|
|
1295
|
+
expect(vi.getTimerCount()).toBe(0)
|
|
1296
1296
|
})
|
|
1297
1297
|
})
|
|
1298
1298
|
|
|
1299
1299
|
describe('shutdown', () => {
|
|
1300
|
-
beforeEach(() =>
|
|
1301
|
-
afterEach(() =>
|
|
1300
|
+
beforeEach(() => vi.useFakeTimers())
|
|
1301
|
+
afterEach(() => vi.useRealTimers())
|
|
1302
1302
|
|
|
1303
1303
|
it('drains the queue and clears any armed flush timer', async () => {
|
|
1304
1304
|
const logs = new PostHogLogs(
|
|
@@ -1316,7 +1316,7 @@ describe('PostHogLogs', () => {
|
|
|
1316
1316
|
|
|
1317
1317
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1318
1318
|
// Advancing past the original interval must not produce a second flush.
|
|
1319
|
-
|
|
1319
|
+
vi.advanceTimersByTime(10000)
|
|
1320
1320
|
expect(mockInstance._sendLogsBatch).toHaveBeenCalledTimes(1)
|
|
1321
1321
|
})
|
|
1322
1322
|
|
|
@@ -1332,11 +1332,11 @@ describe('PostHogLogs', () => {
|
|
|
1332
1332
|
|
|
1333
1333
|
await logs.shutdown(5000)
|
|
1334
1334
|
|
|
1335
|
-
expect(
|
|
1335
|
+
expect(vi.getTimerCount()).toBe(0)
|
|
1336
1336
|
})
|
|
1337
1337
|
|
|
1338
1338
|
it('swallows flush errors so shutdown can complete', async () => {
|
|
1339
|
-
mockInstance._sendLogsBatch =
|
|
1339
|
+
mockInstance._sendLogsBatch = vi.fn(() => Promise.resolve({ kind: 'fatal', error: new Error('boom') }))
|
|
1340
1340
|
const logs = new PostHogLogs(
|
|
1341
1341
|
mockInstance,
|
|
1342
1342
|
resolveForTest(),
|
|
@@ -1380,7 +1380,7 @@ describe('PostHogLogs', () => {
|
|
|
1380
1380
|
|
|
1381
1381
|
it('while a flush is in flight, the shared promise coordinates a single drain', async () => {
|
|
1382
1382
|
let resolveFirst: (v: any) => void = () => {}
|
|
1383
|
-
mockInstance._sendLogsBatch =
|
|
1383
|
+
mockInstance._sendLogsBatch = vi.fn(
|
|
1384
1384
|
() =>
|
|
1385
1385
|
new Promise((r) => {
|
|
1386
1386
|
resolveFirst = r
|
|
@@ -1396,8 +1396,8 @@ describe('PostHogLogs', () => {
|
|
|
1396
1396
|
logs.captureLog({ body: 'a' })
|
|
1397
1397
|
|
|
1398
1398
|
// Real timers only here — shutdown(timeoutMs) path uses safeSetTimeout,
|
|
1399
|
-
// which is incompatible with the default `
|
|
1400
|
-
|
|
1399
|
+
// which is incompatible with the default `vi.useFakeTimers()`.
|
|
1400
|
+
vi.useRealTimers()
|
|
1401
1401
|
|
|
1402
1402
|
const flushP = logs.flush()
|
|
1403
1403
|
const shutdownP = logs.shutdown()
|
|
@@ -1410,9 +1410,9 @@ describe('PostHogLogs', () => {
|
|
|
1410
1410
|
})
|
|
1411
1411
|
|
|
1412
1412
|
it('races the final flush against timeoutMs so a stalled send does not hang shutdown', async () => {
|
|
1413
|
-
|
|
1413
|
+
vi.useRealTimers()
|
|
1414
1414
|
// _sendLogsBatch never resolves — the budget must force shutdown to return.
|
|
1415
|
-
mockInstance._sendLogsBatch =
|
|
1415
|
+
mockInstance._sendLogsBatch = vi.fn(() => new Promise(() => {}))
|
|
1416
1416
|
const logs = new PostHogLogs(
|
|
1417
1417
|
mockInstance,
|
|
1418
1418
|
resolveForTest(),
|
|
@@ -1539,10 +1539,10 @@ describe('PostHogLogs', () => {
|
|
|
1539
1539
|
})
|
|
1540
1540
|
|
|
1541
1541
|
it('never crashes the caller when a fn throws — drops the record (fail closed) and logs', () => {
|
|
1542
|
-
const thrower =
|
|
1542
|
+
const thrower = vi.fn(() => {
|
|
1543
1543
|
throw new Error('bad filter')
|
|
1544
1544
|
})
|
|
1545
|
-
const after =
|
|
1545
|
+
const after = vi.fn((r: any) => ({ ...r, body: `${r.body}!` }))
|
|
1546
1546
|
const logs = new PostHogLogs(
|
|
1547
1547
|
mockInstance,
|
|
1548
1548
|
resolveForTest({ beforeSend: [thrower, after] }),
|
|
@@ -1562,8 +1562,8 @@ describe('PostHogLogs', () => {
|
|
|
1562
1562
|
})
|
|
1563
1563
|
|
|
1564
1564
|
describe('rate limiting', () => {
|
|
1565
|
-
beforeEach(() =>
|
|
1566
|
-
afterEach(() =>
|
|
1565
|
+
beforeEach(() => vi.useFakeTimers({ now: 0 }))
|
|
1566
|
+
afterEach(() => vi.useRealTimers())
|
|
1567
1567
|
|
|
1568
1568
|
// Tabular form for the simple in-window cap cases. Bespoke ones
|
|
1569
1569
|
// (warn-once, window-roll reset, clock-jump backward, beforeSend
|
|
@@ -1632,7 +1632,7 @@ describe('PostHogLogs', () => {
|
|
|
1632
1632
|
expect(readQueue(mockInstance)).toHaveLength(1)
|
|
1633
1633
|
expect(logger.warn).toHaveBeenCalledTimes(1)
|
|
1634
1634
|
|
|
1635
|
-
|
|
1635
|
+
vi.setSystemTime(1001)
|
|
1636
1636
|
logs.captureLog({ body: 'window-2-kept' })
|
|
1637
1637
|
logs.captureLog({ body: 'window-2-dropped' })
|
|
1638
1638
|
expect(readQueue(mockInstance)).toHaveLength(2)
|
|
@@ -1648,7 +1648,7 @@ describe('PostHogLogs', () => {
|
|
|
1648
1648
|
immediateOnReady
|
|
1649
1649
|
)
|
|
1650
1650
|
// Seed the window at t=5000, fill the budget.
|
|
1651
|
-
|
|
1651
|
+
vi.setSystemTime(5000)
|
|
1652
1652
|
logs.captureLog({ body: 'a' })
|
|
1653
1653
|
logs.captureLog({ body: 'b' })
|
|
1654
1654
|
logs.captureLog({ body: 'dropped-pre-jump' })
|
|
@@ -1658,7 +1658,7 @@ describe('PostHogLogs', () => {
|
|
|
1658
1658
|
// Without the `elapsed < 0` guard, the rate cap would stay "stuck"
|
|
1659
1659
|
// until `now` exceeds the old window-start again — potentially
|
|
1660
1660
|
// dropping every log for the duration of the backward jump.
|
|
1661
|
-
|
|
1661
|
+
vi.setSystemTime(5000 - 60 * 60 * 1000)
|
|
1662
1662
|
logs.captureLog({ body: 'accepted-post-jump' })
|
|
1663
1663
|
|
|
1664
1664
|
expect(readQueue(mockInstance)).toHaveLength(3)
|
|
@@ -1669,7 +1669,7 @@ describe('PostHogLogs', () => {
|
|
|
1669
1669
|
// beforeSend drops the first record; rate cap is 1 per window. The
|
|
1670
1670
|
// SECOND capture should still succeed — if beforeSend consumed the
|
|
1671
1671
|
// budget, it'd be dropped.
|
|
1672
|
-
const beforeSend =
|
|
1672
|
+
const beforeSend = vi
|
|
1673
1673
|
.fn()
|
|
1674
1674
|
.mockReturnValueOnce(null)
|
|
1675
1675
|
.mockImplementation((r: any) => r)
|
|
@@ -1693,7 +1693,7 @@ describe('PostHogLogs', () => {
|
|
|
1693
1693
|
let resolveSend: (v: any) => void = () => {}
|
|
1694
1694
|
let captureDuringSend: (() => void) | null = null
|
|
1695
1695
|
|
|
1696
|
-
mockInstance._sendLogsBatch =
|
|
1696
|
+
mockInstance._sendLogsBatch = vi.fn(
|
|
1697
1697
|
() =>
|
|
1698
1698
|
new Promise((r) => {
|
|
1699
1699
|
if (captureDuringSend) {
|
|
@@ -1747,7 +1747,7 @@ describe('PostHogLogs', () => {
|
|
|
1747
1747
|
const sendGate = new Promise((r) => {
|
|
1748
1748
|
resolveSend = r
|
|
1749
1749
|
})
|
|
1750
|
-
mockInstance._sendLogsBatch =
|
|
1750
|
+
mockInstance._sendLogsBatch = vi.fn(() => sendGate)
|
|
1751
1751
|
|
|
1752
1752
|
const logs = new PostHogLogs(
|
|
1753
1753
|
mockInstance,
|
|
@@ -1781,11 +1781,11 @@ describe('PostHogLogs', () => {
|
|
|
1781
1781
|
// batch's advance — under-dropping and re-sending an already-sent record.
|
|
1782
1782
|
const entry = (body: string): any => ({ record: { body: { stringValue: body } } })
|
|
1783
1783
|
mockInstance._store[PostHogPersistedProperty.LogsQueue] = [entry('a'), entry('b'), entry('c'), entry('d')]
|
|
1784
|
-
mockInstance._sendLogsBatch =
|
|
1784
|
+
mockInstance._sendLogsBatch = vi.fn(() => Promise.resolve({ kind: 'ok' }))
|
|
1785
1785
|
|
|
1786
1786
|
let persistCalls = 0
|
|
1787
|
+
// oxlint-disable-next-line prefer-const
|
|
1787
1788
|
let logs: PostHogLogs
|
|
1788
|
-
// eslint-disable-next-line prefer-const
|
|
1789
1789
|
logs = new PostHogLogs(
|
|
1790
1790
|
mockInstance,
|
|
1791
1791
|
resolveForTest({ maxBufferSize: 4, maxQueueSize: 4, maxBatchRecordsPerPost: 2 }),
|