@blamejs/blamejs-shop 0.0.44
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/CHANGELOG.md +87 -0
- package/LICENSE +17 -0
- package/README.md +117 -0
- package/SECURITY.md +139 -0
- package/lib/admin.js +952 -0
- package/lib/analytics.js +267 -0
- package/lib/cart.js +279 -0
- package/lib/catalog-import.js +344 -0
- package/lib/catalog.js +769 -0
- package/lib/checkout.js +320 -0
- package/lib/config.js +151 -0
- package/lib/customers.js +322 -0
- package/lib/email.js +242 -0
- package/lib/externaldb-d1.js +283 -0
- package/lib/index.js +57 -0
- package/lib/inventory-alerts.js +198 -0
- package/lib/newsletter.js +142 -0
- package/lib/order.js +380 -0
- package/lib/payment.js +318 -0
- package/lib/pricing.js +185 -0
- package/lib/r2-bridge.js +169 -0
- package/lib/shipping.js +185 -0
- package/lib/storefront.js +2160 -0
- package/lib/subscriptions.js +410 -0
- package/lib/tax.js +161 -0
- package/lib/theme.js +194 -0
- package/lib/vendor/MANIFEST.json +19 -0
- package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +23 -0
- package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +34 -0
- package/lib/vendor/blamejs/.clusterfuzzlite/project.yaml +16 -0
- package/lib/vendor/blamejs/.dockerignore +45 -0
- package/lib/vendor/blamejs/.gitattributes +42 -0
- package/lib/vendor/blamejs/.github/CODEOWNERS +4 -0
- package/lib/vendor/blamejs/.github/FUNDING.yml +2 -0
- package/lib/vendor/blamejs/.github/ISSUE_TEMPLATE/bug_report.md +58 -0
- package/lib/vendor/blamejs/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/lib/vendor/blamejs/.github/ISSUE_TEMPLATE/feature_request.md +99 -0
- package/lib/vendor/blamejs/.github/PULL_REQUEST_TEMPLATE.md +77 -0
- package/lib/vendor/blamejs/.github/dependabot.yml +37 -0
- package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +148 -0
- package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +107 -0
- package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +122 -0
- package/lib/vendor/blamejs/.github/workflows/ci.yml +511 -0
- package/lib/vendor/blamejs/.github/workflows/codeql.yml +50 -0
- package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +655 -0
- package/lib/vendor/blamejs/.github/workflows/release-container.yml +406 -0
- package/lib/vendor/blamejs/.github/workflows/scorecard.yml +101 -0
- package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +134 -0
- package/lib/vendor/blamejs/.gitignore +102 -0
- package/lib/vendor/blamejs/.gitleaks.toml +166 -0
- package/lib/vendor/blamejs/.hadolint.yaml +18 -0
- package/lib/vendor/blamejs/.npmrc +5 -0
- package/lib/vendor/blamejs/.pinact.yaml +17 -0
- package/lib/vendor/blamejs/ARCHITECTURE.md +158 -0
- package/lib/vendor/blamejs/CHANGELOG.md +1351 -0
- package/lib/vendor/blamejs/CODE_OF_CONDUCT.md +86 -0
- package/lib/vendor/blamejs/CONTRIBUTING.md +156 -0
- package/lib/vendor/blamejs/GOVERNANCE.md +201 -0
- package/lib/vendor/blamejs/LICENSE +201 -0
- package/lib/vendor/blamejs/LTS-CALENDAR.md +29 -0
- package/lib/vendor/blamejs/MIGRATING.md +29 -0
- package/lib/vendor/blamejs/NOTICE +81 -0
- package/lib/vendor/blamejs/README.md +304 -0
- package/lib/vendor/blamejs/SECURITY.md +432 -0
- package/lib/vendor/blamejs/api-snapshot.json +48709 -0
- package/lib/vendor/blamejs/assets/BlameJS_Logo.png +0 -0
- package/lib/vendor/blamejs/assets/BlameJS_Logo.svg +129 -0
- package/lib/vendor/blamejs/bench/README.md +77 -0
- package/lib/vendor/blamejs/bench/_helpers.js +70 -0
- package/lib/vendor/blamejs/bench/baseline.json +183 -0
- package/lib/vendor/blamejs/bench/crypto-hash.bench.js +19 -0
- package/lib/vendor/blamejs/bench/crypto-symmetric.bench.js +28 -0
- package/lib/vendor/blamejs/bench/run.js +140 -0
- package/lib/vendor/blamejs/bench/safe-json.bench.js +31 -0
- package/lib/vendor/blamejs/bin/blamejs.js +13 -0
- package/lib/vendor/blamejs/docker/caddy/Caddyfile +46 -0
- package/lib/vendor/blamejs/docker/coredns/Corefile +37 -0
- package/lib/vendor/blamejs/docker/haproxy/haproxy.cfg +52 -0
- package/lib/vendor/blamejs/docker/init/generate-certs.sh +118 -0
- package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +87 -0
- package/lib/vendor/blamejs/docker/mitmproxy/config.yaml +16 -0
- package/lib/vendor/blamejs/docker/mongo/init-tls.sh +17 -0
- package/lib/vendor/blamejs/docker/mysql/my.cnf +12 -0
- package/lib/vendor/blamejs/docker/nats/nats.conf +33 -0
- package/lib/vendor/blamejs/docker/postgres/init-tls.sh +17 -0
- package/lib/vendor/blamejs/docker/postgres/postgresql.conf +18 -0
- package/lib/vendor/blamejs/docker/rabbitmq/rabbitmq.conf +18 -0
- package/lib/vendor/blamejs/docker/redis/redis.conf +15 -0
- package/lib/vendor/blamejs/docker/squid/squid.conf +24 -0
- package/lib/vendor/blamejs/docker/syslog/syslog-ng.conf +34 -0
- package/lib/vendor/blamejs/docker-compose.test.yml +545 -0
- package/lib/vendor/blamejs/docs/cis-postgres-crosswalk.md +102 -0
- package/lib/vendor/blamejs/docs/cis-sqlite-equivalent.md +92 -0
- package/lib/vendor/blamejs/eslint.config.mjs +204 -0
- package/lib/vendor/blamejs/examples/wiki/Caddyfile +40 -0
- package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +218 -0
- package/lib/vendor/blamejs/examples/wiki/Dockerfile +120 -0
- package/lib/vendor/blamejs/examples/wiki/README.md +157 -0
- package/lib/vendor/blamejs/examples/wiki/cli-snapshot.json +250 -0
- package/lib/vendor/blamejs/examples/wiki/docker-compose.prod.yml +231 -0
- package/lib/vendor/blamejs/examples/wiki/docker-compose.yml +166 -0
- package/lib/vendor/blamejs/examples/wiki/env-snapshot.json +217 -0
- package/lib/vendor/blamejs/examples/wiki/lib/auto-site-entries.js +139 -0
- package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +555 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-cli.js +507 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-env-vars.js +435 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-errors.js +282 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-vendored-deps.js +321 -0
- package/lib/vendor/blamejs/examples/wiki/lib/nav.js +15 -0
- package/lib/vendor/blamejs/examples/wiki/lib/opts-resolver.js +75 -0
- package/lib/vendor/blamejs/examples/wiki/lib/page-generator.js +508 -0
- package/lib/vendor/blamejs/examples/wiki/lib/section.js +276 -0
- package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +587 -0
- package/lib/vendor/blamejs/examples/wiki/lib/source-doc-parser.js +318 -0
- package/lib/vendor/blamejs/examples/wiki/lib/symbol-index.js +122 -0
- package/lib/vendor/blamejs/examples/wiki/migrations/0001-pages-schema.js +74 -0
- package/lib/vendor/blamejs/examples/wiki/package.json +18 -0
- package/lib/vendor/blamejs/examples/wiki/public/img/blamejs-logo.png +0 -0
- package/lib/vendor/blamejs/examples/wiki/public/img/blamejs-logo.svg +129 -0
- package/lib/vendor/blamejs/examples/wiki/public/robots.txt +5 -0
- package/lib/vendor/blamejs/examples/wiki/public/vendor/MANIFEST.json +30 -0
- package/lib/vendor/blamejs/examples/wiki/public/vendor/prism.css +1 -0
- package/lib/vendor/blamejs/examples/wiki/public/vendor/prism.js +15 -0
- package/lib/vendor/blamejs/examples/wiki/public/wiki.css +1250 -0
- package/lib/vendor/blamejs/examples/wiki/routes/admin.js +366 -0
- package/lib/vendor/blamejs/examples/wiki/routes/integration.js +230 -0
- package/lib/vendor/blamejs/examples/wiki/routes/pages.js +266 -0
- package/lib/vendor/blamejs/examples/wiki/scripts/backfill-module-metadata.js +214 -0
- package/lib/vendor/blamejs/examples/wiki/seeders/prod/0001-default-pages.js +35 -0
- package/lib/vendor/blamejs/examples/wiki/seeders/prod/pages/_index.js +34 -0
- package/lib/vendor/blamejs/examples/wiki/seeders/prod/pages/api.js +76 -0
- package/lib/vendor/blamejs/examples/wiki/server.js +129 -0
- package/lib/vendor/blamejs/examples/wiki/site.config.js +197 -0
- package/lib/vendor/blamejs/examples/wiki/snippets/README.md +38 -0
- package/lib/vendor/blamejs/examples/wiki/snippets/auth/password-hash.example.js +15 -0
- package/lib/vendor/blamejs/examples/wiki/src/editor.js +103 -0
- package/lib/vendor/blamejs/examples/wiki/src/wiki.js +349 -0
- package/lib/vendor/blamejs/examples/wiki/test/AUDIT.md +155 -0
- package/lib/vendor/blamejs/examples/wiki/test/codebase-patterns.test.js +594 -0
- package/lib/vendor/blamejs/examples/wiki/test/e2e.js +741 -0
- package/lib/vendor/blamejs/examples/wiki/test/find-missing-pages.js +254 -0
- package/lib/vendor/blamejs/examples/wiki/test/integration.js +391 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-cli-snapshot.js +379 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-env-snapshot.js +346 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-nav-coverage.js +212 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-site-coverage.js +252 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-source-comment-blocks.js +107 -0
- package/lib/vendor/blamejs/examples/wiki/views/_layout.html +115 -0
- package/lib/vendor/blamejs/examples/wiki/views/admin/api-keys.html +51 -0
- package/lib/vendor/blamejs/examples/wiki/views/admin/dashboard.html +22 -0
- package/lib/vendor/blamejs/examples/wiki/views/admin/edit.html +17 -0
- package/lib/vendor/blamejs/examples/wiki/views/home.html +85 -0
- package/lib/vendor/blamejs/examples/wiki/views/login.html +18 -0
- package/lib/vendor/blamejs/examples/wiki/views/page.html +5 -0
- package/lib/vendor/blamejs/examples/wiki/views/partials/nav.html +13 -0
- package/lib/vendor/blamejs/examples/wiki/views/search.html +19 -0
- package/lib/vendor/blamejs/examples/wiki/wiki.config.js +15 -0
- package/lib/vendor/blamejs/fuzz/README.md +137 -0
- package/lib/vendor/blamejs/fuzz/_expected.js +35 -0
- package/lib/vendor/blamejs/fuzz/guard-agent-registry.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-csv.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-csv_seed_corpus/01-basic.csv +3 -0
- package/lib/vendor/blamejs/fuzz/guard-csv_seed_corpus/02-formula.csv +1 -0
- package/lib/vendor/blamejs/fuzz/guard-csv_seed_corpus/03-hyperlink.csv +1 -0
- package/lib/vendor/blamejs/fuzz/guard-dsn.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-email.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-email_seed_corpus/01-basic.eml +5 -0
- package/lib/vendor/blamejs/fuzz/guard-envelope.fuzz.js +24 -0
- package/lib/vendor/blamejs/fuzz/guard-event-bus-payload.fuzz.js +24 -0
- package/lib/vendor/blamejs/fuzz/guard-event-bus-topic.fuzz.js +20 -0
- package/lib/vendor/blamejs/fuzz/guard-html.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/01-basic.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/02-script.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/03-event.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/04-jsurl.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-idempotency-key.fuzz.js +20 -0
- package/lib/vendor/blamejs/fuzz/guard-imap-command.fuzz.js +35 -0
- package/lib/vendor/blamejs/fuzz/guard-jmap.fuzz.js +41 -0
- package/lib/vendor/blamejs/fuzz/guard-json.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/01-basic.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/02-proto.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/03-dupkey.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/04-nan.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/05-bom.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-list-id.fuzz.js +21 -0
- package/lib/vendor/blamejs/fuzz/guard-list-unsubscribe.fuzz.js +25 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-compose.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-move.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-query.fuzz.js +27 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-reply.fuzz.js +23 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-sieve.fuzz.js +36 -0
- package/lib/vendor/blamejs/fuzz/guard-managesieve-command.fuzz.js +26 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown_seed_corpus/01-basic.md +2 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown_seed_corpus/02-jsurl.md +1 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown_seed_corpus/03-jsimg.md +1 -0
- package/lib/vendor/blamejs/fuzz/guard-message-id.fuzz.js +26 -0
- package/lib/vendor/blamejs/fuzz/guard-pop3-command.fuzz.js +23 -0
- package/lib/vendor/blamejs/fuzz/guard-posture-chain.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-saga-config.fuzz.js +32 -0
- package/lib/vendor/blamejs/fuzz/guard-smtp-command.fuzz.js +27 -0
- package/lib/vendor/blamejs/fuzz/guard-snapshot-envelope.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-stream-args.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-svg.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-svg_seed_corpus/01-basic.svg +1 -0
- package/lib/vendor/blamejs/fuzz/guard-svg_seed_corpus/02-script.svg +1 -0
- package/lib/vendor/blamejs/fuzz/guard-tenant-id.fuzz.js +20 -0
- package/lib/vendor/blamejs/fuzz/guard-trace-context.fuzz.js +30 -0
- package/lib/vendor/blamejs/fuzz/guard-xml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-xml_seed_corpus/01-basic.xml +1 -0
- package/lib/vendor/blamejs/fuzz/guard-xml_seed_corpus/02-xxe.xml +1 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/01-basic.yaml +2 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/02-anchor.yaml +2 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/03-norway.yaml +1 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/04-multidoc.yaml +4 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-ini.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-ini_seed_corpus/01-basic.ini +2 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-toml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-toml_seed_corpus/01-basic.toml +4 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-xml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-xml_seed_corpus/01-basic.xml +1 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-yaml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-yaml_seed_corpus/01-basic.yaml +4 -0
- package/lib/vendor/blamejs/fuzz/safe-decompress.fuzz.js +49 -0
- package/lib/vendor/blamejs/fuzz/safe-dns.fuzz.js +29 -0
- package/lib/vendor/blamejs/fuzz/safe-ical.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/safe-icap.fuzz.js +42 -0
- package/lib/vendor/blamejs/fuzz/safe-json.fuzz.js +25 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/01-object.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/02-array.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/03-string.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/04-proto.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/05-deep.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/01-basic.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/02-filter.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/03-deepscan.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/04-slice.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-mime.fuzz.js +27 -0
- package/lib/vendor/blamejs/fuzz/safe-mount-info.fuzz.js +33 -0
- package/lib/vendor/blamejs/fuzz/safe-sieve.fuzz.js +28 -0
- package/lib/vendor/blamejs/fuzz/safe-smtp.fuzz.js +64 -0
- package/lib/vendor/blamejs/fuzz/safe-url.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/01-basic.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/02-userinfo.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/03-dangerous.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/04-data.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/05-ipv6.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/06-idn.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-vcard.fuzz.js +16 -0
- package/lib/vendor/blamejs/index.js +678 -0
- package/lib/vendor/blamejs/keys/release-pqc-pub.json +7 -0
- package/lib/vendor/blamejs/lib/_test/crypto-fixtures.js +67 -0
- package/lib/vendor/blamejs/lib/a2a-tasks.js +598 -0
- package/lib/vendor/blamejs/lib/a2a.js +407 -0
- package/lib/vendor/blamejs/lib/acme.js +1448 -0
- package/lib/vendor/blamejs/lib/agent-audit.js +45 -0
- package/lib/vendor/blamejs/lib/agent-event-bus.js +382 -0
- package/lib/vendor/blamejs/lib/agent-idempotency.js +497 -0
- package/lib/vendor/blamejs/lib/agent-orchestrator.js +717 -0
- package/lib/vendor/blamejs/lib/agent-posture-chain.js +366 -0
- package/lib/vendor/blamejs/lib/agent-saga.js +321 -0
- package/lib/vendor/blamejs/lib/agent-snapshot.js +676 -0
- package/lib/vendor/blamejs/lib/agent-stream.js +269 -0
- package/lib/vendor/blamejs/lib/agent-tenant.js +632 -0
- package/lib/vendor/blamejs/lib/agent-trace.js +281 -0
- package/lib/vendor/blamejs/lib/ai-adverse-decision.js +184 -0
- package/lib/vendor/blamejs/lib/ai-content-detect.js +268 -0
- package/lib/vendor/blamejs/lib/ai-input.js +201 -0
- package/lib/vendor/blamejs/lib/ai-model-manifest.js +363 -0
- package/lib/vendor/blamejs/lib/ai-pref.js +340 -0
- package/lib/vendor/blamejs/lib/api-key.js +721 -0
- package/lib/vendor/blamejs/lib/api-snapshot.js +458 -0
- package/lib/vendor/blamejs/lib/app-shutdown.js +557 -0
- package/lib/vendor/blamejs/lib/app.js +365 -0
- package/lib/vendor/blamejs/lib/archive.js +547 -0
- package/lib/vendor/blamejs/lib/arg-parser.js +697 -0
- package/lib/vendor/blamejs/lib/argon2-builtin.js +173 -0
- package/lib/vendor/blamejs/lib/asn1-der.js +424 -0
- package/lib/vendor/blamejs/lib/asyncapi-bindings.js +160 -0
- package/lib/vendor/blamejs/lib/asyncapi-traits.js +143 -0
- package/lib/vendor/blamejs/lib/asyncapi.js +575 -0
- package/lib/vendor/blamejs/lib/atomic-file.js +1023 -0
- package/lib/vendor/blamejs/lib/audit-chain.js +266 -0
- package/lib/vendor/blamejs/lib/audit-daily-review.js +389 -0
- package/lib/vendor/blamejs/lib/audit-sign.js +751 -0
- package/lib/vendor/blamejs/lib/audit-tools.js +1113 -0
- package/lib/vendor/blamejs/lib/audit.js +1671 -0
- package/lib/vendor/blamejs/lib/auth/aal.js +169 -0
- package/lib/vendor/blamejs/lib/auth/access-lock.js +220 -0
- package/lib/vendor/blamejs/lib/auth/acr-vocabulary.js +265 -0
- package/lib/vendor/blamejs/lib/auth/ato-kill-switch.js +112 -0
- package/lib/vendor/blamejs/lib/auth/auth-time-tracker.js +111 -0
- package/lib/vendor/blamejs/lib/auth/bot-challenge.js +573 -0
- package/lib/vendor/blamejs/lib/auth/ciba.js +637 -0
- package/lib/vendor/blamejs/lib/auth/dpop.js +516 -0
- package/lib/vendor/blamejs/lib/auth/elevation-grant.js +306 -0
- package/lib/vendor/blamejs/lib/auth/fal.js +229 -0
- package/lib/vendor/blamejs/lib/auth/fido-mds3.js +681 -0
- package/lib/vendor/blamejs/lib/auth/jwt-external.js +519 -0
- package/lib/vendor/blamejs/lib/auth/jwt.js +430 -0
- package/lib/vendor/blamejs/lib/auth/lockout.js +449 -0
- package/lib/vendor/blamejs/lib/auth/oauth.js +2141 -0
- package/lib/vendor/blamejs/lib/auth/oid4vci.js +657 -0
- package/lib/vendor/blamejs/lib/auth/oid4vp.js +531 -0
- package/lib/vendor/blamejs/lib/auth/openid-federation.js +600 -0
- package/lib/vendor/blamejs/lib/auth/passkey.js +676 -0
- package/lib/vendor/blamejs/lib/auth/password.js +693 -0
- package/lib/vendor/blamejs/lib/auth/saml.js +2109 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc-disclosure.js +95 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc-holder.js +225 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc-issuer.js +197 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +728 -0
- package/lib/vendor/blamejs/lib/auth/status-list.js +272 -0
- package/lib/vendor/blamejs/lib/auth/step-up-policy.js +335 -0
- package/lib/vendor/blamejs/lib/auth/step-up.js +454 -0
- package/lib/vendor/blamejs/lib/auth-bot-challenge.js +505 -0
- package/lib/vendor/blamejs/lib/auth-header.js +148 -0
- package/lib/vendor/blamejs/lib/backup/bundle.js +265 -0
- package/lib/vendor/blamejs/lib/backup/crypto.js +176 -0
- package/lib/vendor/blamejs/lib/backup/index.js +1001 -0
- package/lib/vendor/blamejs/lib/backup/manifest.js +443 -0
- package/lib/vendor/blamejs/lib/boot-gates.js +174 -0
- package/lib/vendor/blamejs/lib/breach-deadline.js +272 -0
- package/lib/vendor/blamejs/lib/break-glass.js +1753 -0
- package/lib/vendor/blamejs/lib/budr.js +205 -0
- package/lib/vendor/blamejs/lib/bundler.js +461 -0
- package/lib/vendor/blamejs/lib/cache-redis.js +256 -0
- package/lib/vendor/blamejs/lib/cache-status.js +288 -0
- package/lib/vendor/blamejs/lib/cache.js +1331 -0
- package/lib/vendor/blamejs/lib/calendar.js +1240 -0
- package/lib/vendor/blamejs/lib/canonical-json.js +143 -0
- package/lib/vendor/blamejs/lib/cdn-cache-control.js +473 -0
- package/lib/vendor/blamejs/lib/cert.js +763 -0
- package/lib/vendor/blamejs/lib/chain-writer.js +259 -0
- package/lib/vendor/blamejs/lib/circuit-breaker.js +101 -0
- package/lib/vendor/blamejs/lib/cli-helpers.js +237 -0
- package/lib/vendor/blamejs/lib/cli.js +2328 -0
- package/lib/vendor/blamejs/lib/client-hints.js +318 -0
- package/lib/vendor/blamejs/lib/cloud-events.js +277 -0
- package/lib/vendor/blamejs/lib/cluster-provider-db.js +317 -0
- package/lib/vendor/blamejs/lib/cluster-storage.js +351 -0
- package/lib/vendor/blamejs/lib/cluster.js +1017 -0
- package/lib/vendor/blamejs/lib/cms-codec.js +826 -0
- package/lib/vendor/blamejs/lib/codepoint-class.js +262 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-logging.js +190 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +205 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-risk.js +189 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +200 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act.js +821 -0
- package/lib/vendor/blamejs/lib/compliance-eaa.js +204 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions-aliases.js +167 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions-fetcher.js +206 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions-fuzzy.js +297 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions.js +569 -0
- package/lib/vendor/blamejs/lib/compliance.js +1558 -0
- package/lib/vendor/blamejs/lib/config-drift.js +426 -0
- package/lib/vendor/blamejs/lib/config.js +446 -0
- package/lib/vendor/blamejs/lib/consent.js +369 -0
- package/lib/vendor/blamejs/lib/constants.js +209 -0
- package/lib/vendor/blamejs/lib/content-credentials.js +704 -0
- package/lib/vendor/blamejs/lib/cookies.js +560 -0
- package/lib/vendor/blamejs/lib/cra-report.js +299 -0
- package/lib/vendor/blamejs/lib/credential-hash.js +394 -0
- package/lib/vendor/blamejs/lib/crypto-field.js +1017 -0
- package/lib/vendor/blamejs/lib/crypto-hpke-pq.js +187 -0
- package/lib/vendor/blamejs/lib/crypto-hpke.js +256 -0
- package/lib/vendor/blamejs/lib/crypto.js +1908 -0
- package/lib/vendor/blamejs/lib/csp.js +271 -0
- package/lib/vendor/blamejs/lib/csv.js +418 -0
- package/lib/vendor/blamejs/lib/daemon.js +481 -0
- package/lib/vendor/blamejs/lib/dark-patterns.js +488 -0
- package/lib/vendor/blamejs/lib/data-act.js +328 -0
- package/lib/vendor/blamejs/lib/db-collection.js +587 -0
- package/lib/vendor/blamejs/lib/db-declare-row-policy.js +267 -0
- package/lib/vendor/blamejs/lib/db-declare-view.js +420 -0
- package/lib/vendor/blamejs/lib/db-file-lifecycle.js +333 -0
- package/lib/vendor/blamejs/lib/db-query.js +802 -0
- package/lib/vendor/blamejs/lib/db-role-context.js +50 -0
- package/lib/vendor/blamejs/lib/db-schema.js +322 -0
- package/lib/vendor/blamejs/lib/db.js +3111 -0
- package/lib/vendor/blamejs/lib/dbsc.js +299 -0
- package/lib/vendor/blamejs/lib/ddl-change-control.js +523 -0
- package/lib/vendor/blamejs/lib/deprecate.js +377 -0
- package/lib/vendor/blamejs/lib/dev.js +405 -0
- package/lib/vendor/blamejs/lib/dora.js +402 -0
- package/lib/vendor/blamejs/lib/dr-runbook.js +368 -0
- package/lib/vendor/blamejs/lib/dsr.js +1188 -0
- package/lib/vendor/blamejs/lib/dual-control.js +526 -0
- package/lib/vendor/blamejs/lib/early-hints.js +212 -0
- package/lib/vendor/blamejs/lib/error-page.js +420 -0
- package/lib/vendor/blamejs/lib/events.js +214 -0
- package/lib/vendor/blamejs/lib/external-db-migrate.js +659 -0
- package/lib/vendor/blamejs/lib/external-db.js +1877 -0
- package/lib/vendor/blamejs/lib/fapi2.js +394 -0
- package/lib/vendor/blamejs/lib/fda-21cfr11.js +395 -0
- package/lib/vendor/blamejs/lib/fdx.js +370 -0
- package/lib/vendor/blamejs/lib/fedcm.js +264 -0
- package/lib/vendor/blamejs/lib/file-type.js +360 -0
- package/lib/vendor/blamejs/lib/file-upload.js +1256 -0
- package/lib/vendor/blamejs/lib/flag-cache.js +136 -0
- package/lib/vendor/blamejs/lib/flag-evaluation-context.js +135 -0
- package/lib/vendor/blamejs/lib/flag-providers.js +279 -0
- package/lib/vendor/blamejs/lib/flag-targeting.js +210 -0
- package/lib/vendor/blamejs/lib/flag.js +346 -0
- package/lib/vendor/blamejs/lib/forms.js +525 -0
- package/lib/vendor/blamejs/lib/framework-error.js +724 -0
- package/lib/vendor/blamejs/lib/framework-schema.js +845 -0
- package/lib/vendor/blamejs/lib/framework-sha1-hibp.js +34 -0
- package/lib/vendor/blamejs/lib/fsm.js +469 -0
- package/lib/vendor/blamejs/lib/gate-contract.js +1661 -0
- package/lib/vendor/blamejs/lib/gdpr-ropa.js +261 -0
- package/lib/vendor/blamejs/lib/graphql-federation.js +234 -0
- package/lib/vendor/blamejs/lib/guard-agent-registry.js +179 -0
- package/lib/vendor/blamejs/lib/guard-all.js +555 -0
- package/lib/vendor/blamejs/lib/guard-archive.js +901 -0
- package/lib/vendor/blamejs/lib/guard-auth.js +451 -0
- package/lib/vendor/blamejs/lib/guard-cidr.js +676 -0
- package/lib/vendor/blamejs/lib/guard-csv.js +1176 -0
- package/lib/vendor/blamejs/lib/guard-domain.js +814 -0
- package/lib/vendor/blamejs/lib/guard-dsn.js +382 -0
- package/lib/vendor/blamejs/lib/guard-email.js +951 -0
- package/lib/vendor/blamejs/lib/guard-envelope.js +294 -0
- package/lib/vendor/blamejs/lib/guard-event-bus-payload.js +217 -0
- package/lib/vendor/blamejs/lib/guard-event-bus-topic.js +150 -0
- package/lib/vendor/blamejs/lib/guard-filename.js +956 -0
- package/lib/vendor/blamejs/lib/guard-graphql.js +731 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-aria.js +164 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-forms.js +144 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-tables.js +154 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-tagwalk.js +44 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag.js +470 -0
- package/lib/vendor/blamejs/lib/guard-html.js +1209 -0
- package/lib/vendor/blamejs/lib/guard-idempotency-key.js +151 -0
- package/lib/vendor/blamejs/lib/guard-image.js +584 -0
- package/lib/vendor/blamejs/lib/guard-imap-command.js +337 -0
- package/lib/vendor/blamejs/lib/guard-jmap.js +321 -0
- package/lib/vendor/blamejs/lib/guard-json.js +935 -0
- package/lib/vendor/blamejs/lib/guard-jsonpath.js +512 -0
- package/lib/vendor/blamejs/lib/guard-jwt.js +772 -0
- package/lib/vendor/blamejs/lib/guard-list-id.js +318 -0
- package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +412 -0
- package/lib/vendor/blamejs/lib/guard-mail-compose.js +282 -0
- package/lib/vendor/blamejs/lib/guard-mail-move.js +202 -0
- package/lib/vendor/blamejs/lib/guard-mail-query.js +310 -0
- package/lib/vendor/blamejs/lib/guard-mail-reply.js +172 -0
- package/lib/vendor/blamejs/lib/guard-mail-sieve.js +207 -0
- package/lib/vendor/blamejs/lib/guard-managesieve-command.js +566 -0
- package/lib/vendor/blamejs/lib/guard-markdown.js +768 -0
- package/lib/vendor/blamejs/lib/guard-message-id.js +267 -0
- package/lib/vendor/blamejs/lib/guard-mime.js +609 -0
- package/lib/vendor/blamejs/lib/guard-oauth.js +650 -0
- package/lib/vendor/blamejs/lib/guard-pdf.js +569 -0
- package/lib/vendor/blamejs/lib/guard-pop3-command.js +317 -0
- package/lib/vendor/blamejs/lib/guard-posture-chain.js +201 -0
- package/lib/vendor/blamejs/lib/guard-regex.js +632 -0
- package/lib/vendor/blamejs/lib/guard-saga-config.js +157 -0
- package/lib/vendor/blamejs/lib/guard-shell.js +522 -0
- package/lib/vendor/blamejs/lib/guard-smtp-command.js +594 -0
- package/lib/vendor/blamejs/lib/guard-snapshot-envelope.js +168 -0
- package/lib/vendor/blamejs/lib/guard-stream-args.js +166 -0
- package/lib/vendor/blamejs/lib/guard-svg.js +1163 -0
- package/lib/vendor/blamejs/lib/guard-template.js +490 -0
- package/lib/vendor/blamejs/lib/guard-tenant-id.js +138 -0
- package/lib/vendor/blamejs/lib/guard-time.js +586 -0
- package/lib/vendor/blamejs/lib/guard-trace-context.js +172 -0
- package/lib/vendor/blamejs/lib/guard-uuid.js +548 -0
- package/lib/vendor/blamejs/lib/guard-xml.js +666 -0
- package/lib/vendor/blamejs/lib/guard-yaml.js +726 -0
- package/lib/vendor/blamejs/lib/hal.js +125 -0
- package/lib/vendor/blamejs/lib/handlers.js +350 -0
- package/lib/vendor/blamejs/lib/honeytoken.js +168 -0
- package/lib/vendor/blamejs/lib/html-balance.js +347 -0
- package/lib/vendor/blamejs/lib/http-client-cache.js +923 -0
- package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +519 -0
- package/lib/vendor/blamejs/lib/http-client.js +2152 -0
- package/lib/vendor/blamejs/lib/http-message-signature.js +589 -0
- package/lib/vendor/blamejs/lib/http2-teardown.js +34 -0
- package/lib/vendor/blamejs/lib/i18n-messageformat.js +398 -0
- package/lib/vendor/blamejs/lib/i18n.js +931 -0
- package/lib/vendor/blamejs/lib/iab-mspa.js +257 -0
- package/lib/vendor/blamejs/lib/iab-tcf.js +461 -0
- package/lib/vendor/blamejs/lib/importmap-integrity.js +90 -0
- package/lib/vendor/blamejs/lib/inbox.js +435 -0
- package/lib/vendor/blamejs/lib/incident-report.js +314 -0
- package/lib/vendor/blamejs/lib/ip-utils.js +102 -0
- package/lib/vendor/blamejs/lib/jobs.js +185 -0
- package/lib/vendor/blamejs/lib/jose-jwe-experimental.js +228 -0
- package/lib/vendor/blamejs/lib/jsonapi.js +230 -0
- package/lib/vendor/blamejs/lib/keychain.js +865 -0
- package/lib/vendor/blamejs/lib/lazy-require.js +48 -0
- package/lib/vendor/blamejs/lib/legal-hold.js +374 -0
- package/lib/vendor/blamejs/lib/local-db-thin.js +321 -0
- package/lib/vendor/blamejs/lib/log-stream-cloudwatch.js +369 -0
- package/lib/vendor/blamejs/lib/log-stream-local.js +146 -0
- package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +410 -0
- package/lib/vendor/blamejs/lib/log-stream-otlp.js +286 -0
- package/lib/vendor/blamejs/lib/log-stream-syslog.js +310 -0
- package/lib/vendor/blamejs/lib/log-stream-webhook.js +199 -0
- package/lib/vendor/blamejs/lib/log-stream.js +584 -0
- package/lib/vendor/blamejs/lib/log.js +625 -0
- package/lib/vendor/blamejs/lib/lro.js +200 -0
- package/lib/vendor/blamejs/lib/mail-agent.js +786 -0
- package/lib/vendor/blamejs/lib/mail-arc-sign.js +417 -0
- package/lib/vendor/blamejs/lib/mail-arf.js +343 -0
- package/lib/vendor/blamejs/lib/mail-auth.js +2144 -0
- package/lib/vendor/blamejs/lib/mail-bimi.js +1047 -0
- package/lib/vendor/blamejs/lib/mail-bounce.js +955 -0
- package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +1286 -0
- package/lib/vendor/blamejs/lib/mail-crypto-smime.js +789 -0
- package/lib/vendor/blamejs/lib/mail-crypto.js +108 -0
- package/lib/vendor/blamejs/lib/mail-dav.js +1224 -0
- package/lib/vendor/blamejs/lib/mail-deploy.js +1119 -0
- package/lib/vendor/blamejs/lib/mail-dkim.js +1250 -0
- package/lib/vendor/blamejs/lib/mail-greylist.js +448 -0
- package/lib/vendor/blamejs/lib/mail-helo.js +473 -0
- package/lib/vendor/blamejs/lib/mail-journal.js +435 -0
- package/lib/vendor/blamejs/lib/mail-mdn.js +424 -0
- package/lib/vendor/blamejs/lib/mail-rbl.js +392 -0
- package/lib/vendor/blamejs/lib/mail-require-tls.js +198 -0
- package/lib/vendor/blamejs/lib/mail-scan.js +502 -0
- package/lib/vendor/blamejs/lib/mail-send-deliver.js +629 -0
- package/lib/vendor/blamejs/lib/mail-server-imap.js +1858 -0
- package/lib/vendor/blamejs/lib/mail-server-jmap.js +1565 -0
- package/lib/vendor/blamejs/lib/mail-server-managesieve.js +908 -0
- package/lib/vendor/blamejs/lib/mail-server-mx.js +969 -0
- package/lib/vendor/blamejs/lib/mail-server-pop3.js +915 -0
- package/lib/vendor/blamejs/lib/mail-server-rate-limit.js +315 -0
- package/lib/vendor/blamejs/lib/mail-server-registry.js +378 -0
- package/lib/vendor/blamejs/lib/mail-server-submission.js +1396 -0
- package/lib/vendor/blamejs/lib/mail-server-tls.js +445 -0
- package/lib/vendor/blamejs/lib/mail-sieve.js +557 -0
- package/lib/vendor/blamejs/lib/mail-spam-score.js +284 -0
- package/lib/vendor/blamejs/lib/mail-srs.js +248 -0
- package/lib/vendor/blamejs/lib/mail-store-fts.js +394 -0
- package/lib/vendor/blamejs/lib/mail-store.js +929 -0
- package/lib/vendor/blamejs/lib/mail-unsubscribe.js +400 -0
- package/lib/vendor/blamejs/lib/mail.js +1971 -0
- package/lib/vendor/blamejs/lib/mcp-tool-registry.js +473 -0
- package/lib/vendor/blamejs/lib/mcp.js +950 -0
- package/lib/vendor/blamejs/lib/metrics.js +1503 -0
- package/lib/vendor/blamejs/lib/middleware/age-gate.js +177 -0
- package/lib/vendor/blamejs/lib/middleware/ai-act-disclosure.js +203 -0
- package/lib/vendor/blamejs/lib/middleware/api-encrypt.js +981 -0
- package/lib/vendor/blamejs/lib/middleware/assetlinks.js +137 -0
- package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +171 -0
- package/lib/vendor/blamejs/lib/middleware/attach-user.js +220 -0
- package/lib/vendor/blamejs/lib/middleware/bearer-auth.js +293 -0
- package/lib/vendor/blamejs/lib/middleware/body-parser.js +1519 -0
- package/lib/vendor/blamejs/lib/middleware/bot-disclose.js +183 -0
- package/lib/vendor/blamejs/lib/middleware/bot-guard.js +217 -0
- package/lib/vendor/blamejs/lib/middleware/clear-site-data.js +122 -0
- package/lib/vendor/blamejs/lib/middleware/compose-pipeline.js +355 -0
- package/lib/vendor/blamejs/lib/middleware/compression.js +489 -0
- package/lib/vendor/blamejs/lib/middleware/cookies.js +130 -0
- package/lib/vendor/blamejs/lib/middleware/cors.js +386 -0
- package/lib/vendor/blamejs/lib/middleware/csp-nonce.js +388 -0
- package/lib/vendor/blamejs/lib/middleware/csp-report.js +167 -0
- package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +499 -0
- package/lib/vendor/blamejs/lib/middleware/daily-byte-quota.js +243 -0
- package/lib/vendor/blamejs/lib/middleware/db-role-for.js +304 -0
- package/lib/vendor/blamejs/lib/middleware/dpop.js +402 -0
- package/lib/vendor/blamejs/lib/middleware/error-handler.js +69 -0
- package/lib/vendor/blamejs/lib/middleware/fetch-metadata.js +168 -0
- package/lib/vendor/blamejs/lib/middleware/flag-context.js +110 -0
- package/lib/vendor/blamejs/lib/middleware/gpc.js +153 -0
- package/lib/vendor/blamejs/lib/middleware/headers.js +242 -0
- package/lib/vendor/blamejs/lib/middleware/health.js +438 -0
- package/lib/vendor/blamejs/lib/middleware/host-allowlist.js +189 -0
- package/lib/vendor/blamejs/lib/middleware/idempotency-key.js +964 -0
- package/lib/vendor/blamejs/lib/middleware/index.js +183 -0
- package/lib/vendor/blamejs/lib/middleware/nel.js +214 -0
- package/lib/vendor/blamejs/lib/middleware/network-allowlist.js +237 -0
- package/lib/vendor/blamejs/lib/middleware/no-cache.js +106 -0
- package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +177 -0
- package/lib/vendor/blamejs/lib/middleware/protected-resource-metadata.js +277 -0
- package/lib/vendor/blamejs/lib/middleware/rate-limit.js +556 -0
- package/lib/vendor/blamejs/lib/middleware/request-id.js +79 -0
- package/lib/vendor/blamejs/lib/middleware/request-log.js +205 -0
- package/lib/vendor/blamejs/lib/middleware/require-aal.js +138 -0
- package/lib/vendor/blamejs/lib/middleware/require-auth.js +144 -0
- package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +290 -0
- package/lib/vendor/blamejs/lib/middleware/require-content-type.js +113 -0
- package/lib/vendor/blamejs/lib/middleware/require-methods.js +97 -0
- package/lib/vendor/blamejs/lib/middleware/require-mtls.js +212 -0
- package/lib/vendor/blamejs/lib/middleware/require-step-up.js +226 -0
- package/lib/vendor/blamejs/lib/middleware/scim-server.js +375 -0
- package/lib/vendor/blamejs/lib/middleware/security-headers.js +285 -0
- package/lib/vendor/blamejs/lib/middleware/security-txt.js +170 -0
- package/lib/vendor/blamejs/lib/middleware/span-http-server.js +280 -0
- package/lib/vendor/blamejs/lib/middleware/speculation-rules.js +323 -0
- package/lib/vendor/blamejs/lib/middleware/sse.js +200 -0
- package/lib/vendor/blamejs/lib/middleware/trace-log-correlation.js +167 -0
- package/lib/vendor/blamejs/lib/middleware/trace-propagate.js +148 -0
- package/lib/vendor/blamejs/lib/middleware/tus-upload.js +749 -0
- package/lib/vendor/blamejs/lib/middleware/web-app-manifest.js +164 -0
- package/lib/vendor/blamejs/lib/migration-files.js +37 -0
- package/lib/vendor/blamejs/lib/migrations.js +385 -0
- package/lib/vendor/blamejs/lib/mime-parse.js +198 -0
- package/lib/vendor/blamejs/lib/money.js +699 -0
- package/lib/vendor/blamejs/lib/mtls-ca.js +572 -0
- package/lib/vendor/blamejs/lib/mtls-engine-default.js +501 -0
- package/lib/vendor/blamejs/lib/network-byte-quota.js +308 -0
- package/lib/vendor/blamejs/lib/network-dns-resolver.js +533 -0
- package/lib/vendor/blamejs/lib/network-dns.js +1930 -0
- package/lib/vendor/blamejs/lib/network-heartbeat.js +425 -0
- package/lib/vendor/blamejs/lib/network-nts.js +574 -0
- package/lib/vendor/blamejs/lib/network-proxy.js +265 -0
- package/lib/vendor/blamejs/lib/network-smtp-policy.js +836 -0
- package/lib/vendor/blamejs/lib/network-tls.js +3126 -0
- package/lib/vendor/blamejs/lib/network.js +346 -0
- package/lib/vendor/blamejs/lib/nis2-report.js +181 -0
- package/lib/vendor/blamejs/lib/nist-crosswalk.js +293 -0
- package/lib/vendor/blamejs/lib/nonce-store.js +177 -0
- package/lib/vendor/blamejs/lib/notify.js +683 -0
- package/lib/vendor/blamejs/lib/ntp-check.js +458 -0
- package/lib/vendor/blamejs/lib/numeric-bounds.js +111 -0
- package/lib/vendor/blamejs/lib/numeric-checks.js +40 -0
- package/lib/vendor/blamejs/lib/object-store/azure-blob-bucket-ops.js +349 -0
- package/lib/vendor/blamejs/lib/object-store/azure-blob.js +488 -0
- package/lib/vendor/blamejs/lib/object-store/gcs-bucket-ops.js +351 -0
- package/lib/vendor/blamejs/lib/object-store/gcs.js +515 -0
- package/lib/vendor/blamejs/lib/object-store/http-put.js +153 -0
- package/lib/vendor/blamejs/lib/object-store/http-request.js +38 -0
- package/lib/vendor/blamejs/lib/object-store/index.js +197 -0
- package/lib/vendor/blamejs/lib/object-store/local.js +163 -0
- package/lib/vendor/blamejs/lib/object-store/sigv4-bucket-ops.js +1133 -0
- package/lib/vendor/blamejs/lib/object-store/sigv4.js +957 -0
- package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +420 -0
- package/lib/vendor/blamejs/lib/observability-tracer.js +395 -0
- package/lib/vendor/blamejs/lib/observability.js +720 -0
- package/lib/vendor/blamejs/lib/openapi-paths-builder.js +248 -0
- package/lib/vendor/blamejs/lib/openapi-schema-walk.js +192 -0
- package/lib/vendor/blamejs/lib/openapi-security.js +169 -0
- package/lib/vendor/blamejs/lib/openapi-yaml.js +154 -0
- package/lib/vendor/blamejs/lib/openapi.js +489 -0
- package/lib/vendor/blamejs/lib/otel-export.js +278 -0
- package/lib/vendor/blamejs/lib/outbox.js +547 -0
- package/lib/vendor/blamejs/lib/pagination.js +542 -0
- package/lib/vendor/blamejs/lib/parsers/index.js +91 -0
- package/lib/vendor/blamejs/lib/parsers/safe-env.js +642 -0
- package/lib/vendor/blamejs/lib/parsers/safe-ini.js +293 -0
- package/lib/vendor/blamejs/lib/parsers/safe-toml.js +784 -0
- package/lib/vendor/blamejs/lib/parsers/safe-xml.js +390 -0
- package/lib/vendor/blamejs/lib/parsers/safe-yaml.js +1015 -0
- package/lib/vendor/blamejs/lib/permissions.js +793 -0
- package/lib/vendor/blamejs/lib/pick.js +105 -0
- package/lib/vendor/blamejs/lib/pqc-agent.js +351 -0
- package/lib/vendor/blamejs/lib/pqc-gate.js +279 -0
- package/lib/vendor/blamejs/lib/pqc-software.js +271 -0
- package/lib/vendor/blamejs/lib/problem-details.js +482 -0
- package/lib/vendor/blamejs/lib/process-spawn.js +196 -0
- package/lib/vendor/blamejs/lib/promise-pool.js +162 -0
- package/lib/vendor/blamejs/lib/protobuf-encoder.js +190 -0
- package/lib/vendor/blamejs/lib/protocol-dispatcher.js +161 -0
- package/lib/vendor/blamejs/lib/public-suffix.js +403 -0
- package/lib/vendor/blamejs/lib/pubsub-cluster.js +154 -0
- package/lib/vendor/blamejs/lib/pubsub-redis.js +167 -0
- package/lib/vendor/blamejs/lib/pubsub.js +463 -0
- package/lib/vendor/blamejs/lib/queue-local.js +476 -0
- package/lib/vendor/blamejs/lib/queue-redis.js +745 -0
- package/lib/vendor/blamejs/lib/queue-sqs.js +319 -0
- package/lib/vendor/blamejs/lib/queue.js +1016 -0
- package/lib/vendor/blamejs/lib/redact.js +1007 -0
- package/lib/vendor/blamejs/lib/redis-client.js +520 -0
- package/lib/vendor/blamejs/lib/render.js +285 -0
- package/lib/vendor/blamejs/lib/request-helpers.js +767 -0
- package/lib/vendor/blamejs/lib/resource-access-lock.js +116 -0
- package/lib/vendor/blamejs/lib/restore-bundle.js +340 -0
- package/lib/vendor/blamejs/lib/restore-rollback.js +365 -0
- package/lib/vendor/blamejs/lib/restore.js +409 -0
- package/lib/vendor/blamejs/lib/retention.js +640 -0
- package/lib/vendor/blamejs/lib/retry.js +523 -0
- package/lib/vendor/blamejs/lib/router.js +1289 -0
- package/lib/vendor/blamejs/lib/safe-async.js +1184 -0
- package/lib/vendor/blamejs/lib/safe-buffer.js +562 -0
- package/lib/vendor/blamejs/lib/safe-decompress.js +297 -0
- package/lib/vendor/blamejs/lib/safe-dns.js +665 -0
- package/lib/vendor/blamejs/lib/safe-ical.js +634 -0
- package/lib/vendor/blamejs/lib/safe-icap.js +502 -0
- package/lib/vendor/blamejs/lib/safe-json.js +946 -0
- package/lib/vendor/blamejs/lib/safe-jsonpath.js +285 -0
- package/lib/vendor/blamejs/lib/safe-mime.js +831 -0
- package/lib/vendor/blamejs/lib/safe-mount-info.js +306 -0
- package/lib/vendor/blamejs/lib/safe-path.js +254 -0
- package/lib/vendor/blamejs/lib/safe-redirect.js +106 -0
- package/lib/vendor/blamejs/lib/safe-schema.js +1810 -0
- package/lib/vendor/blamejs/lib/safe-sieve.js +684 -0
- package/lib/vendor/blamejs/lib/safe-smtp.js +185 -0
- package/lib/vendor/blamejs/lib/safe-sql.js +363 -0
- package/lib/vendor/blamejs/lib/safe-url.js +428 -0
- package/lib/vendor/blamejs/lib/safe-vcard.js +473 -0
- package/lib/vendor/blamejs/lib/sandbox-worker.js +135 -0
- package/lib/vendor/blamejs/lib/sandbox.js +358 -0
- package/lib/vendor/blamejs/lib/scheduler.js +827 -0
- package/lib/vendor/blamejs/lib/sd-notify.js +269 -0
- package/lib/vendor/blamejs/lib/sec-cyber.js +214 -0
- package/lib/vendor/blamejs/lib/security-assert.js +395 -0
- package/lib/vendor/blamejs/lib/seeders.js +620 -0
- package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +309 -0
- package/lib/vendor/blamejs/lib/self-update.js +804 -0
- package/lib/vendor/blamejs/lib/server-timing.js +174 -0
- package/lib/vendor/blamejs/lib/session-device-binding.js +431 -0
- package/lib/vendor/blamejs/lib/session-stores.js +138 -0
- package/lib/vendor/blamejs/lib/session.js +1162 -0
- package/lib/vendor/blamejs/lib/slug.js +381 -0
- package/lib/vendor/blamejs/lib/sse.js +349 -0
- package/lib/vendor/blamejs/lib/ssrf-guard.js +792 -0
- package/lib/vendor/blamejs/lib/standard-webhooks.js +183 -0
- package/lib/vendor/blamejs/lib/static.js +1249 -0
- package/lib/vendor/blamejs/lib/storage.js +1272 -0
- package/lib/vendor/blamejs/lib/stream-throttle.js +235 -0
- package/lib/vendor/blamejs/lib/structured-fields.js +244 -0
- package/lib/vendor/blamejs/lib/subject.js +667 -0
- package/lib/vendor/blamejs/lib/tcpa-10dlc.js +175 -0
- package/lib/vendor/blamejs/lib/template.js +931 -0
- package/lib/vendor/blamejs/lib/tenant-quota.js +545 -0
- package/lib/vendor/blamejs/lib/test-harness.js +275 -0
- package/lib/vendor/blamejs/lib/testing.js +1185 -0
- package/lib/vendor/blamejs/lib/time.js +578 -0
- package/lib/vendor/blamejs/lib/tls-exporter.js +239 -0
- package/lib/vendor/blamejs/lib/totp.js +318 -0
- package/lib/vendor/blamejs/lib/tracing.js +546 -0
- package/lib/vendor/blamejs/lib/uuid.js +207 -0
- package/lib/vendor/blamejs/lib/validate-opts.js +381 -0
- package/lib/vendor/blamejs/lib/vault/index.js +638 -0
- package/lib/vendor/blamejs/lib/vault/passphrase-ops.js +311 -0
- package/lib/vendor/blamejs/lib/vault/passphrase-source.js +198 -0
- package/lib/vendor/blamejs/lib/vault/rotate.js +803 -0
- package/lib/vendor/blamejs/lib/vault/seal-pem-file.js +471 -0
- package/lib/vendor/blamejs/lib/vault/wrap.js +296 -0
- package/lib/vendor/blamejs/lib/vault-aad.js +259 -0
- package/lib/vendor/blamejs/lib/vendor/.vendor-data-pubkey +4 -0
- package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +161 -0
- package/lib/vendor/blamejs/lib/vendor/bimi-trust-anchors.data.js +68 -0
- package/lib/vendor/blamejs/lib/vendor/bimi-trust-anchors.pem +33 -0
- package/lib/vendor/blamejs/lib/vendor/common-passwords-top-10000.data.js +1325 -0
- package/lib/vendor/blamejs/lib/vendor/common-passwords-top-10000.txt +10002 -0
- package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +9 -0
- package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +18 -0
- package/lib/vendor/blamejs/lib/vendor/pki.cjs +181 -0
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +16382 -0
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5881 -0
- package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +328 -0
- package/lib/vendor/blamejs/lib/vendor/vendor-data-pubkey.js +16 -0
- package/lib/vendor/blamejs/lib/vendor-data.js +520 -0
- package/lib/vendor/blamejs/lib/vex.js +630 -0
- package/lib/vendor/blamejs/lib/watcher.js +608 -0
- package/lib/vendor/blamejs/lib/web-push-vapid.js +322 -0
- package/lib/vendor/blamejs/lib/webhook.js +977 -0
- package/lib/vendor/blamejs/lib/websocket-channels.js +327 -0
- package/lib/vendor/blamejs/lib/websocket.js +1561 -0
- package/lib/vendor/blamejs/lib/wiki-concepts.js +338 -0
- package/lib/vendor/blamejs/lib/worker-pool.js +464 -0
- package/lib/vendor/blamejs/lib/ws-client.js +978 -0
- package/lib/vendor/blamejs/lib/xml-c14n.js +506 -0
- package/lib/vendor/blamejs/memory/specs/node-26-map-getorinsert-migration.md +164 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +19 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/README.md +88 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/build.sh +26 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/project.yaml +28 -0
- package/lib/vendor/blamejs/package.json +81 -0
- package/lib/vendor/blamejs/release-notes/v0.0.x.json +310 -0
- package/lib/vendor/blamejs/release-notes/v0.1.x.json +1798 -0
- package/lib/vendor/blamejs/release-notes/v0.10.x.json +1288 -0
- package/lib/vendor/blamejs/release-notes/v0.11.x.json +2551 -0
- package/lib/vendor/blamejs/release-notes/v0.12.0.json +64 -0
- package/lib/vendor/blamejs/release-notes/v0.12.1.json +32 -0
- package/lib/vendor/blamejs/release-notes/v0.12.2.json +45 -0
- package/lib/vendor/blamejs/release-notes/v0.2.x.json +706 -0
- package/lib/vendor/blamejs/release-notes/v0.3.x.json +786 -0
- package/lib/vendor/blamejs/release-notes/v0.4.x.json +588 -0
- package/lib/vendor/blamejs/release-notes/v0.5.x.json +390 -0
- package/lib/vendor/blamejs/release-notes/v0.6.x.json +1947 -0
- package/lib/vendor/blamejs/release-notes/v0.7.x.json +3811 -0
- package/lib/vendor/blamejs/release-notes/v0.8.x.json +3318 -0
- package/lib/vendor/blamejs/release-notes/v0.9.x.json +2257 -0
- package/lib/vendor/blamejs/scripts/build-vendored-sbom.js +325 -0
- package/lib/vendor/blamejs/scripts/check-api-snapshot.js +62 -0
- package/lib/vendor/blamejs/scripts/check-changelog-extract.js +108 -0
- package/lib/vendor/blamejs/scripts/check-pack-against-gitignore.js +83 -0
- package/lib/vendor/blamejs/scripts/check-services.js +483 -0
- package/lib/vendor/blamejs/scripts/check-vendor-currency.js +349 -0
- package/lib/vendor/blamejs/scripts/consolidate-release-notes.js +216 -0
- package/lib/vendor/blamejs/scripts/gen-migrating.js +275 -0
- package/lib/vendor/blamejs/scripts/generate-changelog-entry.js +577 -0
- package/lib/vendor/blamejs/scripts/generate-release-signing-key.js +79 -0
- package/lib/vendor/blamejs/scripts/publish-dep-confusion-placeholder.sh +101 -0
- package/lib/vendor/blamejs/scripts/refresh-api-snapshot.js +31 -0
- package/lib/vendor/blamejs/scripts/refresh-vendor-manifest.js +132 -0
- package/lib/vendor/blamejs/scripts/release.js +652 -0
- package/lib/vendor/blamejs/scripts/sha3-digest.js +62 -0
- package/lib/vendor/blamejs/scripts/sign-release-artifact.js +92 -0
- package/lib/vendor/blamejs/scripts/test-integration.js +181 -0
- package/lib/vendor/blamejs/scripts/test-wiki-integration.js +126 -0
- package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +77 -0
- package/lib/vendor/blamejs/scripts/vendor-data-gen.js +186 -0
- package/lib/vendor/blamejs/scripts/vendor-data-keygen.js +101 -0
- package/lib/vendor/blamejs/scripts/vendor-update.sh +278 -0
- package/lib/vendor/blamejs/test/00-primitives.js +19075 -0
- package/lib/vendor/blamejs/test/10-state.js +622 -0
- package/lib/vendor/blamejs/test/20-db.js +561 -0
- package/lib/vendor/blamejs/test/30-chain.js +2110 -0
- package/lib/vendor/blamejs/test/40-consumers.js +2453 -0
- package/lib/vendor/blamejs/test/50-integration.js +486 -0
- package/lib/vendor/blamejs/test/_helpers.js +10 -0
- package/lib/vendor/blamejs/test/_smoke-worker.js +69 -0
- package/lib/vendor/blamejs/test/fixtures/exploit-corpus/corpus.json +368 -0
- package/lib/vendor/blamejs/test/fixtures/http-client-stream-payload.txt +2 -0
- package/lib/vendor/blamejs/test/fixtures/worker-pool/echo.js +52 -0
- package/lib/vendor/blamejs/test/helpers/_codebase-shingle-worker.js +24 -0
- package/lib/vendor/blamejs/test/helpers/_codebase-shingle.js +203 -0
- package/lib/vendor/blamejs/test/helpers/_shape-match.js +513 -0
- package/lib/vendor/blamejs/test/helpers/check.js +36 -0
- package/lib/vendor/blamejs/test/helpers/cluster.js +70 -0
- package/lib/vendor/blamejs/test/helpers/db.js +143 -0
- package/lib/vendor/blamejs/test/helpers/drivers.js +207 -0
- package/lib/vendor/blamejs/test/helpers/fs-watch.js +101 -0
- package/lib/vendor/blamejs/test/helpers/http.js +14 -0
- package/lib/vendor/blamejs/test/helpers/index.js +93 -0
- package/lib/vendor/blamejs/test/helpers/json-round-trip.js +120 -0
- package/lib/vendor/blamejs/test/helpers/mocks.js +20 -0
- package/lib/vendor/blamejs/test/helpers/otel.js +13 -0
- package/lib/vendor/blamejs/test/helpers/services.js +380 -0
- package/lib/vendor/blamejs/test/helpers/wait.js +206 -0
- package/lib/vendor/blamejs/test/integration/cache.test.js +235 -0
- package/lib/vendor/blamejs/test/integration/cluster-provider-mysql.test.js +174 -0
- package/lib/vendor/blamejs/test/integration/federation-auth.test.js +611 -0
- package/lib/vendor/blamejs/test/integration/http-client.test.js +129 -0
- package/lib/vendor/blamejs/test/integration/log-stream.test.js +219 -0
- package/lib/vendor/blamejs/test/integration/mail-crypto-smime.test.js +181 -0
- package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +152 -0
- package/lib/vendor/blamejs/test/integration/mail-smtp.test.js +161 -0
- package/lib/vendor/blamejs/test/integration/mtls-ca.test.js +289 -0
- package/lib/vendor/blamejs/test/integration/network-dns.test.js +123 -0
- package/lib/vendor/blamejs/test/integration/network-heartbeat.test.js +101 -0
- package/lib/vendor/blamejs/test/integration/ntp-check.test.js +89 -0
- package/lib/vendor/blamejs/test/integration/object-store-sigv4.test.js +403 -0
- package/lib/vendor/blamejs/test/integration/pqc-pkcs8-forward-compat.test.js +271 -0
- package/lib/vendor/blamejs/test/integration/pubsub.test.js +137 -0
- package/lib/vendor/blamejs/test/integration/queue-redis.test.js +352 -0
- package/lib/vendor/blamejs/test/integration/redis-client-tls.test.js +96 -0
- package/lib/vendor/blamejs/test/integration/ssrf-guard.test.js +98 -0
- package/lib/vendor/blamejs/test/integration/websocket-permessage-deflate.test.js +261 -0
- package/lib/vendor/blamejs/test/integration/ws-client-roundtrip.test.js +230 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +211 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/a2a.test.js +59 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/access-lock.test.js +136 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +219 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +69 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-event-bus.test.js +266 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +262 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-orchestrator.test.js +390 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-posture-chain.test.js +174 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +279 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +322 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-stream.test.js +227 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-tenant.test.js +302 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-trace.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-adverse-decision.test.js +44 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-content-detect.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-input.test.js +50 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-model-manifest.test.js +96 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-pref.test.js +76 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +1080 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +311 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-zip-stream.test.js +291 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive.test.js +140 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +267 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +108 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/asyncapi.test.js +929 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file-conflict-path.test.js +80 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-cve-defensive.test.js +176 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-daily-review.test.js +132 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-export-cadf.test.js +97 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-framework-namespaces.test.js +141 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-segregation.test.js +115 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-ml-dsa-65.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-use-store.test.js +246 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-bot-challenge-verifier.test.js +485 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-bot-challenge.test.js +331 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +352 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-lockout.test.js +572 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-password-audit.test.js +61 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/azure-blob-bucket-ops.test.js +258 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-worker.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/bearer-auth.test.js +107 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/body-parser-chunked-malformed.test.js +131 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/body-parser-smuggling.test.js +118 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/boot-gates.test.js +85 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/breach-deadline.test.js +38 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +861 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/budr.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/bundler-engine.test.js +209 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cache-status.test.js +129 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +871 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +891 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/canonical-json-jcs.test.js +43 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cdn-cache-control.test.js +243 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +550 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +107 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-api-key.test.js +147 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-audit-verify-chain.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-backup.test.js +135 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-config-drift.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +75 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-file-type.test.js +98 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-helpers.test.js +145 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-mtls.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-password.test.js +97 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-restore.test.js +160 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-retention.test.js +84 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-security.test.js +69 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-vault.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/client-hints.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +237 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +9600 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +575 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-cascade.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-eaa.test.js +36 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +712 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance.test.js +278 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/config-drift.test.js +97 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/config.test.js +424 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cors.test.js +357 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cra-report.test.js +31 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/credential-hash.test.js +226 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-base64url.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-envelope.test.js +85 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +193 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +98 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hpke-pq.test.js +132 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hpke.test.js +155 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-mlkem768-x25519.test.js +129 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-namespace-hash.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-random-int.test.js +72 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-builder.test.js +96 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-nonce.test.js +401 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +180 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +210 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/daily-byte-quota.test.js +153 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +66 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/data-act.test.js +74 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-collection-extensions.test.js +226 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-collection.test.js +136 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-init-extensions.test.js +165 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query-cross-schema.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query-extensions.test.js +191 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-role-for.test.js +228 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-vacuum.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-worm.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +184 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/declare-row-policy.test.js +203 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/declare-view.test.js +303 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dns-dnssec-algorithm.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dns-null-mx.test.js +39 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dora.test.js +165 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dr-runbook.test.js +59 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dsr-state-rules.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +786 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/early-hints.test.js +147 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/events.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/exploit-replay.test.js +243 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-hardening.test.js +181 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-routing.test.js +531 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +118 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fapi2.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fda-21cfr11.test.js +156 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fdx.test.js +79 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +216 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +434 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +432 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/file-type.test.js +81 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +887 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/forensic-snapshot.test.js +51 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fsm.test.js +375 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gcs-bucket-ops.test.js +321 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +41 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/graphql-federation.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-agent-registry.test.js +87 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-all.test.js +328 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +339 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-csv.test.js +694 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-dsn.test.js +296 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-email.test.js +234 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-envelope.test.js +192 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-event-bus-payload.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-event-bus-topic.test.js +71 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +386 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-html-wcag.test.js +859 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +357 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +174 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-json.test.js +317 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-list-id.test.js +199 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-list-unsubscribe.test.js +214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-compose.test.js +111 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-move.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-query.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-reply.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-sieve.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +301 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +265 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-message-id.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +161 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-posture-chain.test.js +100 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-saga-config.test.js +79 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-smtp-command.test.js +269 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-snapshot-envelope.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-stream-args.test.js +78 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +288 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-tenant-id.test.js +69 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-trace-context.test.js +102 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-xml.test.js +202 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-yaml.test.js +203 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/hal.test.js +51 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/honeytoken.test.js +50 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +37 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +692 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-stream.test.js +280 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +225 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +203 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +991 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/iab-mspa.test.js +63 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/iab-tcf.test.js +73 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +612 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/importmap-integrity.test.js +56 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/inbox.test.js +166 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/incident-report.test.js +29 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jose-jwe-experimental.test.js +121 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-api.test.js +58 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-round-trip-helper.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +159 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/legal-hold.test.js +118 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/local-db-thin.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream-cloudwatch.test.js +489 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream-otlp-grpc.test.js +207 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream-otlp.test.js +283 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/lro.test.js +65 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +417 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-arf.test.js +208 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +910 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +502 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +680 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-canspam.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +149 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +323 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +297 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +514 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy-tlsrpt.test.js +369 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +199 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +627 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-feedback-id.test.js +56 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-greylist.test.js +217 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +283 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-journal.test.js +217 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-mdn.test.js +334 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-rbl.test.js +271 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-require-tls.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +215 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +336 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +732 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +840 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +130 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +285 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +74 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +229 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +394 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-tls.test.js +147 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +151 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-spam-score.test.js +204 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-srs.test.js +152 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +279 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +323 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-unsubscribe.test.js +165 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +439 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp-tool-registry.test.js +202 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +155 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-shadow-registry.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +224 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-compose-pipeline.test.js +278 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/money.test.js +376 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-paths.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nel.test.js +200 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-allowlist.test.js +106 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-byte-quota.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +372 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +635 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-heartbeat-passive.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls-build-options.test.js +130 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls-ct-inclusion.test.js +179 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +447 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +369 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nis2-report.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nist-crosswalk.test.js +42 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/no-cache.test.js +98 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/notify.test.js +707 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/numeric-bounds.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/oauth-callback.test.js +72 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +597 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/openapi.test.js +877 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/otel-export.test.js +257 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pagination.test.js +522 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +216 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +324 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +546 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +153 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pqc-software.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/problem-details.test.js +195 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/process-spawn.test.js +62 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/promise-pool.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/protected-resource-metadata.test.js +68 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/protobuf-encoder.test.js +138 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/protocol-dispatcher.test.js +174 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/public-suffix.test.js +197 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +232 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-dlq-extend-lease.test.js +178 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +322 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-priority-rate-progress.test.js +266 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-sqs.test.js +300 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-cluster.test.js +338 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-registry.test.js +75 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redact-dlp.test.js +246 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redis-client.test.js +130 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +335 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/request-log.test.js +170 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/require-auth-cache-control.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/require-mtls.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/resource-access-lock.test.js +52 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retention-floor.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retry.test.js +535 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-cross-origin-redirect.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-async-loops.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-async-parallel.test.js +170 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +248 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +451 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +289 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-icap.test.js +206 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-jsonpath.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +339 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-mount-info.test.js +180 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +78 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-sieve.test.js +123 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-smtp.test.js +95 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-url-idn-homograph.test.js +77 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +257 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/saml-slo.test.js +249 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sandbox.test.js +228 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scheduler-exactly-once.test.js +238 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +700 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-notify.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sec-cyber.test.js +85 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +107 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/security-headers.test.js +175 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/seeders.test.js +816 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/self-update-standalone-verifier.test.js +168 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +302 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/server-timing.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +247 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-extensions.test.js +295 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/shape-match.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +952 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-multipart-sse.test.js +441 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/slug.test.js +330 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/smtp-policy.test.js +233 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/source-comment-blocks.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/speculation-rules.test.js +319 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sse.test.js +148 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +283 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/standard-webhooks.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +266 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/step-up.test.js +487 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage-chunk-scratch.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +773 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/stream-throttle.test.js +173 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/structured-fields.test.js +180 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tcpa-10dlc.test.js +66 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +571 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/test-harness.test.js +190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/testing-request.test.js +119 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/testing.test.js +522 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +151 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-exporter.test.js +168 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-ocsp-ct.test.js +275 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-ocsp-verify.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-pinset-drift.test.js +35 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-preferred-groups.test.js +81 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tracing.test.js +280 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/uuid.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault-aad.test.js +277 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault-seal-pem-file.test.js +252 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vendor-data.test.js +149 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vendor-manifest.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vex.test.js +661 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +308 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/web-push-vapid.test.js +144 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +674 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/websocket-channels.test.js +360 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/worker-pool.test.js +302 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +349 -0
- package/lib/vendor/blamejs/test/layer-1-state/api-key.test.js +717 -0
- package/lib/vendor/blamejs/test/layer-5-integration/bundler-output.test.js +444 -0
- package/lib/vendor/blamejs/test/layer-5-integration/guard-host-integration.test.js +597 -0
- package/lib/vendor/blamejs/test/layer-5-integration/security-chaos.test.js +308 -0
- package/lib/vendor/blamejs/test/smoke.js +431 -0
- package/lib/webhooks.js +305 -0
- package/package.json +43 -0
|
@@ -0,0 +1,1184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module b.safeAsync
|
|
4
|
+
* @nav Validation
|
|
5
|
+
* @title Safe Async
|
|
6
|
+
*
|
|
7
|
+
* @intro
|
|
8
|
+
* Timeout-bounded promises, AbortSignal-aware coordination,
|
|
9
|
+
* Promise.race-shaped helpers, and settled-state queries for the
|
|
10
|
+
* framework's async surfaces (external-db queries, cluster
|
|
11
|
+
* coordination, queue operations, audit chain writes).
|
|
12
|
+
*
|
|
13
|
+
* Hazards this module addresses: races between interleaved awaits,
|
|
14
|
+
* unbounded retries masking real failures, hangs from unresponsive
|
|
15
|
+
* backends, and partial results from operator-supplied drivers.
|
|
16
|
+
*
|
|
17
|
+
* Surface:
|
|
18
|
+
* - Async coordination: withTimeout, withSignal, withTimeoutSignal,
|
|
19
|
+
* sleep, repeating, flushLoop, safeAwait, parallel, asyncRetry
|
|
20
|
+
* - Async state objects: Mutex, Semaphore, Once, CircuitBreaker
|
|
21
|
+
* - Sync helpers used by async pipelines: safeInvoke (callback
|
|
22
|
+
* wrapper with optional onError), makeDropCallback (factory for
|
|
23
|
+
* log-stream-style onDrop callbacks), makeScheduledFlush
|
|
24
|
+
* (idempotent setTimeout coalesce-and-flush helper)
|
|
25
|
+
*
|
|
26
|
+
* Design posture:
|
|
27
|
+
* - AbortSignal everywhere. Every time-bounded primitive accepts
|
|
28
|
+
* an AbortSignal and aborts cleanly when it fires.
|
|
29
|
+
* - Error.cause preserved. Wrapper errors set `.cause` to the
|
|
30
|
+
* original failure so debugging traces back to the root.
|
|
31
|
+
* - No leaked Promises. Mutex / Semaphore release on path-out
|
|
32
|
+
* in finally blocks — even on cancellation.
|
|
33
|
+
* - Bounded by default. Semaphore / parallel have explicit limits
|
|
34
|
+
* and reject over-the-limit acquisitions rather than growing
|
|
35
|
+
* unboundedly.
|
|
36
|
+
* - Fail loud. Errors propagate; primitives never silently
|
|
37
|
+
* swallow. safeAwait is the opt-in `{error, value}` tuple form
|
|
38
|
+
* for callers that want to log-and-continue.
|
|
39
|
+
*
|
|
40
|
+
* Best-practice notes for callers:
|
|
41
|
+
* - Pair `withTimeout` with external-db / network calls where
|
|
42
|
+
* operator-supplied drivers might hang. Puts a ceiling on each
|
|
43
|
+
* individual attempt.
|
|
44
|
+
* - Wrap chain-writes with `Mutex.runExclusive`. Audit chain
|
|
45
|
+
* hashing reads the previous tip and writes a successor; without
|
|
46
|
+
* serialization, concurrent record() calls can hash against the
|
|
47
|
+
* same prev-tip and fork the chain.
|
|
48
|
+
* - Use `Once` for boot-time lazy init (counter primer, schema
|
|
49
|
+
* check). Multiple concurrent first-callers correctly wait on
|
|
50
|
+
* the same in-flight init Promise.
|
|
51
|
+
* - Use `safeAwait` for fire-and-forget paths (audit hooks in
|
|
52
|
+
* middleware) — preserves "log + continue" without unhandled-
|
|
53
|
+
* rejection warnings.
|
|
54
|
+
* - Prefer Promise.allSettled over Promise.all when partial
|
|
55
|
+
* failure is acceptable (multiple log sinks; one down shouldn't
|
|
56
|
+
* block the others).
|
|
57
|
+
*
|
|
58
|
+
* @card
|
|
59
|
+
* Timeout-bounded promises, AbortSignal-aware coordination, Promise.race-shaped helpers, and settled-state queries for the framework's async surfaces (external-db queries, cluster coordination, queue operations, audit chain writes).
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
var { FrameworkError } = require("./framework-error");
|
|
63
|
+
|
|
64
|
+
class SafeAsyncError extends FrameworkError {
|
|
65
|
+
constructor(message, code, cause) {
|
|
66
|
+
super(message);
|
|
67
|
+
this.name = "SafeAsyncError";
|
|
68
|
+
this.code = code || "async/invalid";
|
|
69
|
+
if (cause !== undefined) this.cause = cause;
|
|
70
|
+
this.isSafeAsyncError = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ---- withTimeout ----
|
|
75
|
+
//
|
|
76
|
+
// Race the promise against a timer. On timeout, the wrapper rejects with
|
|
77
|
+
// SafeAsyncError(code=async/timeout). The original promise continues
|
|
78
|
+
// running in the background — the framework cannot cancel an arbitrary
|
|
79
|
+
// async operation; only signal-aware ones can be aborted (see withSignal).
|
|
80
|
+
//
|
|
81
|
+
// opts.signal: AbortSignal — aborting the signal also rejects the wrapper
|
|
82
|
+
// with code=async/aborted.
|
|
83
|
+
// opts.name: diagnostic label included in the timeout message.
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @primitive b.safeAsync.withTimeout
|
|
87
|
+
* @signature b.safeAsync.withTimeout(promise, ms, opts?)
|
|
88
|
+
* @since 0.1.0
|
|
89
|
+
* @status stable
|
|
90
|
+
* @related b.safeAsync.withSignal, b.safeAsync.withTimeoutSignal, b.safeAsync.sleep
|
|
91
|
+
*
|
|
92
|
+
* Race a Promise against a wall-clock deadline. On timeout the
|
|
93
|
+
* wrapper rejects with `SafeAsyncError` (`.code = "async/timeout"`);
|
|
94
|
+
* the underlying Promise keeps running in the background since the
|
|
95
|
+
* framework cannot cancel an arbitrary async operation. Pair with
|
|
96
|
+
* AbortSignal-aware I/O when the caller also wants the work itself
|
|
97
|
+
* to stop. `opts.signal` aborts the wrapper with
|
|
98
|
+
* `.code = "async/aborted"`; `opts.name` is included in the timeout
|
|
99
|
+
* message for diagnostics.
|
|
100
|
+
*
|
|
101
|
+
* @opts
|
|
102
|
+
* signal: AbortSignal, // aborts the wrapper with async/aborted
|
|
103
|
+
* name: string, // diagnostic label baked into error messages
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* var b = require("blamejs");
|
|
107
|
+
*
|
|
108
|
+
* // Bound an HTTP call to 5s.
|
|
109
|
+
* var fetchUser = Promise.resolve({ id: 42, name: "alice" });
|
|
110
|
+
* var user = await b.safeAsync.withTimeout(fetchUser, 5000, { name: "fetchUser" });
|
|
111
|
+
* user.id;
|
|
112
|
+
* // → 42
|
|
113
|
+
*
|
|
114
|
+
* // Timeout surfaces as SafeAsyncError(async/timeout).
|
|
115
|
+
* var hang = new Promise(function () {});
|
|
116
|
+
* try { await b.safeAsync.withTimeout(hang, 10, { name: "stuck" }); }
|
|
117
|
+
* catch (e) { e.code; }
|
|
118
|
+
* // → "async/timeout"
|
|
119
|
+
*/
|
|
120
|
+
function withTimeout(promise, ms, opts) {
|
|
121
|
+
opts = opts || {};
|
|
122
|
+
if (typeof ms !== "number" || ms <= 0 || !Number.isFinite(ms)) {
|
|
123
|
+
throw new SafeAsyncError("withTimeout: ms must be a positive finite number", "async/bad-arg");
|
|
124
|
+
}
|
|
125
|
+
return new Promise(function (resolve, reject) {
|
|
126
|
+
var settled = false;
|
|
127
|
+
// The timer is ref'd intentionally: while a withTimeout is pending,
|
|
128
|
+
// the process should stay alive until either the underlying promise
|
|
129
|
+
// settles or the timeout fires. unref'ing here would let Node exit
|
|
130
|
+
// mid-await and the awaited Promise would never resolve.
|
|
131
|
+
var timer = setTimeout(function () {
|
|
132
|
+
if (settled) return;
|
|
133
|
+
settled = true;
|
|
134
|
+
reject(new SafeAsyncError(
|
|
135
|
+
"operation timed out after " + ms + "ms" + (opts.name ? " (" + opts.name + ")" : ""),
|
|
136
|
+
"async/timeout"
|
|
137
|
+
));
|
|
138
|
+
}, ms);
|
|
139
|
+
|
|
140
|
+
function _onAbort() {
|
|
141
|
+
if (settled) return;
|
|
142
|
+
settled = true;
|
|
143
|
+
clearTimeout(timer);
|
|
144
|
+
reject(new SafeAsyncError(
|
|
145
|
+
"operation aborted" + (opts.name ? " (" + opts.name + ")" : ""),
|
|
146
|
+
"async/aborted",
|
|
147
|
+
opts.signal && opts.signal.reason
|
|
148
|
+
));
|
|
149
|
+
}
|
|
150
|
+
if (opts.signal) {
|
|
151
|
+
if (opts.signal.aborted) { _onAbort(); return; }
|
|
152
|
+
opts.signal.addEventListener("abort", _onAbort, { once: true });
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
Promise.resolve(promise).then(function (v) {
|
|
156
|
+
if (settled) return;
|
|
157
|
+
settled = true;
|
|
158
|
+
clearTimeout(timer);
|
|
159
|
+
if (opts.signal) opts.signal.removeEventListener("abort", _onAbort);
|
|
160
|
+
resolve(v);
|
|
161
|
+
}, function (e) {
|
|
162
|
+
if (settled) return;
|
|
163
|
+
settled = true;
|
|
164
|
+
clearTimeout(timer);
|
|
165
|
+
if (opts.signal) opts.signal.removeEventListener("abort", _onAbort);
|
|
166
|
+
reject(e);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// ---- withSignal ----
|
|
172
|
+
//
|
|
173
|
+
// Race the promise against an AbortSignal. The original promise continues
|
|
174
|
+
// running in the background; only the wrapper's resolution is short-
|
|
175
|
+
// circuited. Useful for plumbing a single signal through a chain of awaits.
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @primitive b.safeAsync.withSignal
|
|
179
|
+
* @signature b.safeAsync.withSignal(promise, signal)
|
|
180
|
+
* @since 0.1.0
|
|
181
|
+
* @status stable
|
|
182
|
+
* @related b.safeAsync.withTimeout, b.safeAsync.withTimeoutSignal
|
|
183
|
+
*
|
|
184
|
+
* Race a Promise against an AbortSignal. When the signal aborts the
|
|
185
|
+
* wrapper rejects with `SafeAsyncError` (`.code = "async/aborted"`,
|
|
186
|
+
* `.cause = signal.reason`). The underlying Promise continues
|
|
187
|
+
* running in the background — only the wrapper's resolution is
|
|
188
|
+
* short-circuited. Useful for plumbing one signal through a chain
|
|
189
|
+
* of awaits where some intermediates aren't signal-aware.
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* var b = require("blamejs");
|
|
193
|
+
*
|
|
194
|
+
* // Propagate an AbortSignal through a non-signal-aware Promise.
|
|
195
|
+
* var ctrl = new AbortController();
|
|
196
|
+
* var slow = new Promise(function (resolve) { setTimeout(resolve, 50, "done"); });
|
|
197
|
+
* var wrapped = b.safeAsync.withSignal(slow, ctrl.signal);
|
|
198
|
+
* ctrl.abort();
|
|
199
|
+
* try { await wrapped; }
|
|
200
|
+
* catch (e) { e.code; }
|
|
201
|
+
* // → "async/aborted"
|
|
202
|
+
*/
|
|
203
|
+
function withSignal(promise, signal) {
|
|
204
|
+
if (!signal) return Promise.resolve(promise);
|
|
205
|
+
return new Promise(function (resolve, reject) {
|
|
206
|
+
var settled = false;
|
|
207
|
+
function _onAbort() {
|
|
208
|
+
if (settled) return;
|
|
209
|
+
settled = true;
|
|
210
|
+
reject(new SafeAsyncError(
|
|
211
|
+
"operation aborted",
|
|
212
|
+
"async/aborted",
|
|
213
|
+
signal.reason
|
|
214
|
+
));
|
|
215
|
+
}
|
|
216
|
+
if (signal.aborted) { _onAbort(); return; }
|
|
217
|
+
signal.addEventListener("abort", _onAbort, { once: true });
|
|
218
|
+
Promise.resolve(promise).then(function (v) {
|
|
219
|
+
if (settled) return;
|
|
220
|
+
settled = true;
|
|
221
|
+
signal.removeEventListener("abort", _onAbort);
|
|
222
|
+
resolve(v);
|
|
223
|
+
}, function (e) {
|
|
224
|
+
if (settled) return;
|
|
225
|
+
settled = true;
|
|
226
|
+
signal.removeEventListener("abort", _onAbort);
|
|
227
|
+
reject(e);
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// ---- sleep ----
|
|
233
|
+
//
|
|
234
|
+
// Promise that resolves after `ms` milliseconds. opts.signal aborts the
|
|
235
|
+
// sleep cleanly — the wrapper rejects with SafeAsyncError(async/aborted).
|
|
236
|
+
//
|
|
237
|
+
// opts.unref (default false): if true, the timer is unref'd so a pending
|
|
238
|
+
// sleep does NOT keep the process alive. Use for fire-and-forget /
|
|
239
|
+
// heartbeat-style patterns where the program should be free to exit if
|
|
240
|
+
// nothing else is keeping it busy. The default is ref'd to match the
|
|
241
|
+
// natural meaning of `await sleep(ms)` — "I'm waiting, this IS my work,
|
|
242
|
+
// don't exit out from under me." (An unref'd-only event loop in Node
|
|
243
|
+
// exits even with pending awaits — the unref'd timer is not enough to
|
|
244
|
+
// hold the loop alive, so the awaiting promise never resolves.)
|
|
245
|
+
//
|
|
246
|
+
// ms <= 0 resolves immediately (matches setTimeout's clamp-to-1ms but
|
|
247
|
+
// without the wasted tick). Non-finite ms rejects.
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* @primitive b.safeAsync.sleep
|
|
251
|
+
* @signature b.safeAsync.sleep(ms, opts?)
|
|
252
|
+
* @since 0.1.0
|
|
253
|
+
* @status stable
|
|
254
|
+
* @related b.safeAsync.withTimeout, b.safeAsync.repeating
|
|
255
|
+
*
|
|
256
|
+
* Promise that resolves after `ms` milliseconds. `opts.signal`
|
|
257
|
+
* aborts the sleep cleanly — the wrapper rejects with
|
|
258
|
+
* `SafeAsyncError` (`.code = "async/aborted"`). `opts.unref` flips
|
|
259
|
+
* the timer to non-process-holding (default `false`, so
|
|
260
|
+
* `await sleep(ms)` reads naturally as "I'm waiting, this IS my
|
|
261
|
+
* work"). `ms <= 0` resolves immediately; non-finite `ms` rejects.
|
|
262
|
+
*
|
|
263
|
+
* @opts
|
|
264
|
+
* signal: AbortSignal, // aborts mid-sleep with async/aborted
|
|
265
|
+
* unref: boolean, // default false; true to not keep the process alive
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* var b = require("blamejs");
|
|
269
|
+
*
|
|
270
|
+
* // Backoff between retries.
|
|
271
|
+
* var t0 = Date.now();
|
|
272
|
+
* await b.safeAsync.sleep(20);
|
|
273
|
+
* (Date.now() - t0) >= 18;
|
|
274
|
+
* // → true
|
|
275
|
+
*
|
|
276
|
+
* // Abort mid-sleep — propagates as SafeAsyncError(async/aborted).
|
|
277
|
+
* var ctrl = new AbortController();
|
|
278
|
+
* setTimeout(function () { ctrl.abort(); }, 5);
|
|
279
|
+
* try { await b.safeAsync.sleep(1000, { signal: ctrl.signal }); }
|
|
280
|
+
* catch (e) { e.code; }
|
|
281
|
+
* // → "async/aborted"
|
|
282
|
+
*/
|
|
283
|
+
function sleep(ms, opts) {
|
|
284
|
+
if (typeof ms !== "number" || !Number.isFinite(ms)) {
|
|
285
|
+
return Promise.reject(new SafeAsyncError(
|
|
286
|
+
"sleep: ms must be a finite number", "async/bad-arg"
|
|
287
|
+
));
|
|
288
|
+
}
|
|
289
|
+
if (ms <= 0) return Promise.resolve();
|
|
290
|
+
|
|
291
|
+
var signal = opts && opts.signal;
|
|
292
|
+
if (signal && signal.aborted) {
|
|
293
|
+
return Promise.reject(new SafeAsyncError(
|
|
294
|
+
"sleep aborted before start", "async/aborted", signal.reason
|
|
295
|
+
));
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return new Promise(function (resolve, reject) {
|
|
299
|
+
var settled = false;
|
|
300
|
+
var timer = setTimeout(function () {
|
|
301
|
+
if (settled) return;
|
|
302
|
+
settled = true;
|
|
303
|
+
if (signal) signal.removeEventListener("abort", _onAbort);
|
|
304
|
+
resolve();
|
|
305
|
+
}, ms);
|
|
306
|
+
if (opts && opts.unref) timer.unref();
|
|
307
|
+
|
|
308
|
+
function _onAbort() {
|
|
309
|
+
if (settled) return;
|
|
310
|
+
settled = true;
|
|
311
|
+
clearTimeout(timer);
|
|
312
|
+
reject(new SafeAsyncError(
|
|
313
|
+
"sleep aborted", "async/aborted", signal.reason
|
|
314
|
+
));
|
|
315
|
+
}
|
|
316
|
+
if (signal) signal.addEventListener("abort", _onAbort, { once: true });
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// ---- withTimeoutSignal ----
|
|
321
|
+
//
|
|
322
|
+
// Returns an AbortSignal that fires when EITHER the input signal aborts
|
|
323
|
+
// OR `ms` milliseconds elapse. Wraps the I/O-primitive composition that
|
|
324
|
+
// http-client was doing inline twice (h1 + h2 paths).
|
|
325
|
+
//
|
|
326
|
+
// var sig = withTimeoutSignal(userSignal, 5000);
|
|
327
|
+
// await fetch(url, { signal: sig });
|
|
328
|
+
//
|
|
329
|
+
// Edge cases:
|
|
330
|
+
// - userSignal == null and ms not positive → returns null
|
|
331
|
+
// (caller's "no signal needed" path)
|
|
332
|
+
// - userSignal == null → returns AbortSignal.timeout(ms)
|
|
333
|
+
// - ms not positive (0/undefined) → returns userSignal unchanged
|
|
334
|
+
// - both → AbortSignal.any([user, timeout])
|
|
335
|
+
//
|
|
336
|
+
// Returning null when neither is requested means the caller can pass
|
|
337
|
+
// the result straight to APIs that treat null as "no abort" (the http
|
|
338
|
+
// `signal` option does), with no special-case branching needed.
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* @primitive b.safeAsync.withTimeoutSignal
|
|
342
|
+
* @signature b.safeAsync.withTimeoutSignal(signal, ms)
|
|
343
|
+
* @since 0.7.4
|
|
344
|
+
* @status stable
|
|
345
|
+
* @related b.safeAsync.withTimeout, b.safeAsync.withSignal
|
|
346
|
+
*
|
|
347
|
+
* Compose an existing AbortSignal with a fresh wall-clock timeout.
|
|
348
|
+
* Returns an AbortSignal that fires when EITHER the input signal
|
|
349
|
+
* aborts OR `ms` milliseconds elapse — exactly the shape I/O
|
|
350
|
+
* primitives like `fetch({ signal })` already accept. Edge cases:
|
|
351
|
+
* neither argument supplied returns `null` (a naturally falsy "no
|
|
352
|
+
* signal needed" value most signal-accepting APIs treat as no-op);
|
|
353
|
+
* only `signal` returns it unchanged; only `ms` returns
|
|
354
|
+
* `AbortSignal.timeout(ms)`.
|
|
355
|
+
*
|
|
356
|
+
* @example
|
|
357
|
+
* var b = require("blamejs");
|
|
358
|
+
*
|
|
359
|
+
* // Add a 5s deadline on top of the user's existing AbortSignal.
|
|
360
|
+
* var userCtrl = new AbortController();
|
|
361
|
+
* var sig = b.safeAsync.withTimeoutSignal(userCtrl.signal, 5000);
|
|
362
|
+
* sig instanceof AbortSignal;
|
|
363
|
+
* // → true
|
|
364
|
+
*
|
|
365
|
+
* // No user signal + no timeout returns null (no-abort sentinel).
|
|
366
|
+
* b.safeAsync.withTimeoutSignal(null, 0);
|
|
367
|
+
* // → null
|
|
368
|
+
*/
|
|
369
|
+
function withTimeoutSignal(signal, ms) {
|
|
370
|
+
var hasTimeout = typeof ms === "number" && ms > 0 && Number.isFinite(ms);
|
|
371
|
+
if (!signal && !hasTimeout) return null;
|
|
372
|
+
if (!signal) return AbortSignal.timeout(ms);
|
|
373
|
+
if (!hasTimeout) return signal;
|
|
374
|
+
return AbortSignal.any([signal, AbortSignal.timeout(ms)]);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// ---- safeAwait ----
|
|
378
|
+
//
|
|
379
|
+
// Go-style [error, value] tuple. Never throws. Lets callers handle the
|
|
380
|
+
// "expected may fail; log and continue" pattern without try/catch
|
|
381
|
+
// scaffolding.
|
|
382
|
+
//
|
|
383
|
+
// var [err, value] = await safeAwait(somePromise);
|
|
384
|
+
// if (err) { /* log + continue */ }
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* @primitive b.safeAsync.safeAwait
|
|
388
|
+
* @signature b.safeAsync.safeAwait(promise)
|
|
389
|
+
* @since 0.1.0
|
|
390
|
+
* @status stable
|
|
391
|
+
* @related b.safeAsync.withTimeout, b.safeAsync.parallel
|
|
392
|
+
*
|
|
393
|
+
* Go-style `[error, value]` tuple wrapper. Never throws — a rejected
|
|
394
|
+
* Promise becomes `[error, null]`, a resolved Promise becomes
|
|
395
|
+
* `[null, value]`. Replaces try/catch scaffolding around
|
|
396
|
+
* fire-and-forget paths (audit hooks in middleware, optional
|
|
397
|
+
* lookups) where the caller wants to log-and-continue without
|
|
398
|
+
* unhandled-rejection warnings. For settled-state inspection of
|
|
399
|
+
* many concurrent Promises the standard `Promise.allSettled` pairs
|
|
400
|
+
* naturally with this idiom.
|
|
401
|
+
*
|
|
402
|
+
* @example
|
|
403
|
+
* var b = require("blamejs");
|
|
404
|
+
*
|
|
405
|
+
* // Resolved Promise → [null, value].
|
|
406
|
+
* var ok = await b.safeAsync.safeAwait(Promise.resolve(42));
|
|
407
|
+
* ok[0];
|
|
408
|
+
* // → null
|
|
409
|
+
* ok[1];
|
|
410
|
+
* // → 42
|
|
411
|
+
*
|
|
412
|
+
* // Rejected Promise → [error, null].
|
|
413
|
+
* var bad = await b.safeAsync.safeAwait(Promise.reject(new Error("nope")));
|
|
414
|
+
* bad[0].message;
|
|
415
|
+
* // → "nope"
|
|
416
|
+
*
|
|
417
|
+
* // Pair with Promise.allSettled for bulk settled-state inspection.
|
|
418
|
+
* var results = await Promise.all([
|
|
419
|
+
* b.safeAsync.safeAwait(Promise.resolve("a")),
|
|
420
|
+
* b.safeAsync.safeAwait(Promise.reject(new Error("b-failed"))),
|
|
421
|
+
* b.safeAsync.safeAwait(Promise.resolve("c")),
|
|
422
|
+
* ]);
|
|
423
|
+
* results.filter(function (r) { return r[0] === null; }).length;
|
|
424
|
+
* // → 2
|
|
425
|
+
*/
|
|
426
|
+
async function safeAwait(promise) {
|
|
427
|
+
try {
|
|
428
|
+
var v = await promise;
|
|
429
|
+
return [null, v];
|
|
430
|
+
} catch (e) {
|
|
431
|
+
return [e, null];
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// safeInvoke — call an operator-supplied callback with one payload arg.
|
|
436
|
+
// Drops silent if the callback is missing; routes throws to onError if
|
|
437
|
+
// supplied (also drop-silent if onError throws). The callback / onError
|
|
438
|
+
// pair is the shape every drop-callback / completion-callback /
|
|
439
|
+
// failure-callback site re-derives from scratch. Centralizing here so
|
|
440
|
+
// the contract is one definition.
|
|
441
|
+
//
|
|
442
|
+
// safeInvoke(opts.onDrop, { reason: "buffer-full", batch: rows },
|
|
443
|
+
// function (e) { log.warn("onDrop threw: " + e.message); });
|
|
444
|
+
/**
|
|
445
|
+
* @primitive b.safeAsync.safeInvoke
|
|
446
|
+
* @signature b.safeAsync.safeInvoke(callback, payload, onError)
|
|
447
|
+
* @since 0.6.0
|
|
448
|
+
* @status stable
|
|
449
|
+
* @related b.safeAsync.makeDropCallback
|
|
450
|
+
*
|
|
451
|
+
* Drop-silent operator-callback invoker. Calls `callback(payload)`
|
|
452
|
+
* if `callback` is a function, routes any throw to `onError(e)` if
|
|
453
|
+
* supplied, and silently swallows nested throws from `onError`
|
|
454
|
+
* itself. Used by every drop-callback / completion-callback /
|
|
455
|
+
* failure-callback site in the framework so a buggy operator
|
|
456
|
+
* callback can never crash the request that triggered the audit
|
|
457
|
+
* hook. Hot-path observability sink — drop-silent by design.
|
|
458
|
+
*
|
|
459
|
+
* @example
|
|
460
|
+
* var b = require("blamejs");
|
|
461
|
+
*
|
|
462
|
+
* // Happy path: callback runs with the payload.
|
|
463
|
+
* var seen = null;
|
|
464
|
+
* b.safeAsync.safeInvoke(function (p) { seen = p; }, { reason: "buffer-full", batch: [1, 2] });
|
|
465
|
+
* seen.reason;
|
|
466
|
+
* // → "buffer-full"
|
|
467
|
+
*
|
|
468
|
+
* // Throw routed to onError; original caller never sees it.
|
|
469
|
+
* var caught = null;
|
|
470
|
+
* b.safeAsync.safeInvoke(
|
|
471
|
+
* function () { throw new Error("boom"); },
|
|
472
|
+
* { batch: [] },
|
|
473
|
+
* function (e) { caught = e.message; }
|
|
474
|
+
* );
|
|
475
|
+
* caught;
|
|
476
|
+
* // → "boom"
|
|
477
|
+
*/
|
|
478
|
+
function safeInvoke(callback, payload, onError) {
|
|
479
|
+
if (typeof callback !== "function") return;
|
|
480
|
+
try { callback(payload); }
|
|
481
|
+
catch (e) {
|
|
482
|
+
if (typeof onError === "function") {
|
|
483
|
+
try { onError(e); } catch (_e2) { /* nested error handler must not bubble */ }
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// makeDropCallback — every log-stream sink (cloudwatch / otlp-grpc /
|
|
489
|
+
// otlp-http / syslog / webhook) previously defined its own
|
|
490
|
+
// `_emitDrop(reason, batch, err)` 3-line wrapper. The shape is
|
|
491
|
+
// identical across sinks; the only differences are the operator's
|
|
492
|
+
// onDrop callback and the per-sink error logger. Returns a closure with
|
|
493
|
+
// the canonical payload shape `{ reason, batch, error: err || null }`.
|
|
494
|
+
//
|
|
495
|
+
// var _emitDrop = safeAsync.makeDropCallback(onDrop,
|
|
496
|
+
// function (e) { log.warn("onDrop-callback-failed: " + e.message); });
|
|
497
|
+
// _emitDrop("buffer-full", batch, err);
|
|
498
|
+
/**
|
|
499
|
+
* @primitive b.safeAsync.makeDropCallback
|
|
500
|
+
* @signature b.safeAsync.makeDropCallback(onDrop, onError)
|
|
501
|
+
* @since 0.6.0
|
|
502
|
+
* @status stable
|
|
503
|
+
* @related b.safeAsync.safeInvoke, b.safeAsync.makeScheduledFlush
|
|
504
|
+
*
|
|
505
|
+
* Factory for the canonical log-stream-sink onDrop wrapper. Returns
|
|
506
|
+
* a closure `(reason, batch, err) => void` that calls `onDrop` with
|
|
507
|
+
* the framework-canonical payload shape `{ reason, batch, error }`,
|
|
508
|
+
* routing any throw from the operator callback to `onError`. Every
|
|
509
|
+
* sink (cloudwatch / otlp-grpc / otlp-http / syslog / webhook)
|
|
510
|
+
* previously rolled its own three-line `_emitDrop` wrapper — this
|
|
511
|
+
* factory removes that duplication.
|
|
512
|
+
*
|
|
513
|
+
* @example
|
|
514
|
+
* var b = require("blamejs");
|
|
515
|
+
*
|
|
516
|
+
* var dropped = [];
|
|
517
|
+
* var emit = b.safeAsync.makeDropCallback(
|
|
518
|
+
* function (info) { dropped.push(info); },
|
|
519
|
+
* function (e) { console.warn("onDrop threw: " + e.message); }
|
|
520
|
+
* );
|
|
521
|
+
* emit("buffer-full", [{ id: 1 }], new Error("queue overflow"));
|
|
522
|
+
* dropped[0].reason;
|
|
523
|
+
* // → "buffer-full"
|
|
524
|
+
* dropped[0].error.message;
|
|
525
|
+
* // → "queue overflow"
|
|
526
|
+
*/
|
|
527
|
+
function makeDropCallback(onDrop, onError) {
|
|
528
|
+
return function (reason, batch, err) {
|
|
529
|
+
safeInvoke(onDrop, { reason: reason, batch: batch, error: err || null }, onError);
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// makeScheduledFlush — idempotent setTimeout scheduler used by every
|
|
534
|
+
// log-stream sink (cloudwatch / otlp-grpc / otlp-http / syslog /
|
|
535
|
+
// webhook) to coalesce buffered writes. Each sink previously rolled
|
|
536
|
+
// its own:
|
|
537
|
+
//
|
|
538
|
+
// var flushTimer = null;
|
|
539
|
+
// function _scheduleFlush() {
|
|
540
|
+
// if (flushTimer) return;
|
|
541
|
+
// flushTimer = setTimeout(function () { flushTimer = null; _flush(); }, delayMs);
|
|
542
|
+
// flushTimer.unref();
|
|
543
|
+
// }
|
|
544
|
+
//
|
|
545
|
+
// Returns { schedule, cancel, isPending }. flushFn may be sync or
|
|
546
|
+
// async — async rejections are swallowed (best-effort sink — operators
|
|
547
|
+
// see drops via onDrop, not via a sea of unhandled promise rejections).
|
|
548
|
+
/**
|
|
549
|
+
* @primitive b.safeAsync.makeScheduledFlush
|
|
550
|
+
* @signature b.safeAsync.makeScheduledFlush(delayMs, flushFn)
|
|
551
|
+
* @since 0.6.0
|
|
552
|
+
* @status stable
|
|
553
|
+
* @related b.safeAsync.flushLoop, b.safeAsync.makeDropCallback
|
|
554
|
+
*
|
|
555
|
+
* Idempotent setTimeout coalesce-and-flush scheduler used by every
|
|
556
|
+
* log-stream sink to batch buffered writes. Returns
|
|
557
|
+
* `{ schedule, cancel, isPending }` — calling `schedule()` repeatedly
|
|
558
|
+
* within `delayMs` collapses to a single deferred `flushFn()` call.
|
|
559
|
+
* The timer is unref'd so a pending flush never keeps the process
|
|
560
|
+
* alive; async rejections from `flushFn` are swallowed (best-effort
|
|
561
|
+
* sink — operators see drops via the sink's own onDrop). Throws
|
|
562
|
+
* `TypeError` on bad arguments at construction time.
|
|
563
|
+
*
|
|
564
|
+
* @example
|
|
565
|
+
* var b = require("blamejs");
|
|
566
|
+
*
|
|
567
|
+
* // Coalesce many schedule() calls into one flush after delayMs.
|
|
568
|
+
* var flushed = 0;
|
|
569
|
+
* var sched = b.safeAsync.makeScheduledFlush(20, function () { flushed += 1; });
|
|
570
|
+
* sched.schedule();
|
|
571
|
+
* sched.schedule();
|
|
572
|
+
* sched.schedule();
|
|
573
|
+
* sched.isPending();
|
|
574
|
+
* // → true
|
|
575
|
+
* await b.safeAsync.sleep(40);
|
|
576
|
+
* flushed;
|
|
577
|
+
* // → 1
|
|
578
|
+
*/
|
|
579
|
+
function makeScheduledFlush(delayMs, flushFn) {
|
|
580
|
+
if (typeof delayMs !== "number" || !isFinite(delayMs) || delayMs < 0) {
|
|
581
|
+
throw new TypeError("safeAsync.makeScheduledFlush: delayMs must be a non-negative finite number");
|
|
582
|
+
}
|
|
583
|
+
if (typeof flushFn !== "function") {
|
|
584
|
+
throw new TypeError("safeAsync.makeScheduledFlush: flushFn must be a function");
|
|
585
|
+
}
|
|
586
|
+
var timer = null;
|
|
587
|
+
return {
|
|
588
|
+
schedule: function () {
|
|
589
|
+
if (timer) return;
|
|
590
|
+
timer = setTimeout(function () {
|
|
591
|
+
timer = null;
|
|
592
|
+
var p;
|
|
593
|
+
try { p = flushFn(); }
|
|
594
|
+
catch (_e) { return; }
|
|
595
|
+
if (p && typeof p.catch === "function") {
|
|
596
|
+
p.catch(function () { /* sink-specific drains errors via onDrop */ });
|
|
597
|
+
}
|
|
598
|
+
}, delayMs);
|
|
599
|
+
if (timer && typeof timer.unref === "function") timer.unref();
|
|
600
|
+
},
|
|
601
|
+
cancel: function () {
|
|
602
|
+
if (timer) { clearTimeout(timer); timer = null; }
|
|
603
|
+
},
|
|
604
|
+
isPending: function () { return timer !== null; },
|
|
605
|
+
};
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// ---- parallel ----
|
|
609
|
+
//
|
|
610
|
+
// Bounded-concurrency mapAsync. Runs `fn(item, index)` over `items`
|
|
611
|
+
// with at most opts.concurrency in-flight at once; resolves with
|
|
612
|
+
// results in input order (NOT completion order). The first rejection
|
|
613
|
+
// from any `fn` invocation is propagated (other in-flight calls finish
|
|
614
|
+
// in the background; the wrapper does not cancel them — operator-
|
|
615
|
+
// supplied promises may not be signal-aware).
|
|
616
|
+
//
|
|
617
|
+
// var results = await b.safeAsync.parallel(urls, fetchOne, {
|
|
618
|
+
// concurrency: 16,
|
|
619
|
+
// signal: controller.signal,
|
|
620
|
+
// });
|
|
621
|
+
//
|
|
622
|
+
// Worker-loop pattern: a fixed pool of `concurrency` workers each pull
|
|
623
|
+
// the next available index from a shared cursor. Avoids the
|
|
624
|
+
// Promise.all-batched-chunks pitfall where the next batch can't start
|
|
625
|
+
// until the slowest item in the current batch finishes (long-pole
|
|
626
|
+
// stragglers leave workers idle). See feedback_lpt_scheduling_for_
|
|
627
|
+
// parallel_tests.md — same shape applied to operator workloads.
|
|
628
|
+
//
|
|
629
|
+
// opts.concurrency: 1..256 (default 8). Throws at config time on
|
|
630
|
+
// out-of-range so operator typos surface immediately.
|
|
631
|
+
// opts.signal: AbortSignal — cancels by refusing to dispatch
|
|
632
|
+
// further items; in-flight promises run to settle.
|
|
633
|
+
|
|
634
|
+
var PARALLEL_DEFAULT_CONCURRENCY = 8; // allow:raw-byte-literal — worker pool count, not bytes
|
|
635
|
+
var PARALLEL_MAX_CONCURRENCY = 256; // allow:raw-byte-literal — worker pool ceiling, not bytes
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* @primitive b.safeAsync.parallel
|
|
639
|
+
* @signature b.safeAsync.parallel(items, fn, opts?)
|
|
640
|
+
* @since 0.7.0
|
|
641
|
+
* @status stable
|
|
642
|
+
* @related b.safeAsync.safeAwait, b.safeAsync.withTimeout
|
|
643
|
+
*
|
|
644
|
+
* Bounded-concurrency `mapAsync`. Runs `fn(item, index)` over `items`
|
|
645
|
+
* with at most `opts.concurrency` in-flight at a time and resolves
|
|
646
|
+
* with results in INPUT order (not completion order). Worker-loop
|
|
647
|
+
* scheduling: a fixed pool of workers each pull the next index from
|
|
648
|
+
* a shared cursor as soon as their previous task settles — avoids
|
|
649
|
+
* the Promise.all-batched-chunks pitfall where a long-pole straggler
|
|
650
|
+
* leaves workers idle. The first rejection is propagated;
|
|
651
|
+
* still-in-flight calls finish in the background (operator-supplied
|
|
652
|
+
* promises may not be signal-aware). `opts.concurrency` validates at
|
|
653
|
+
* config time (1..256, default 8) and throws on out-of-range so
|
|
654
|
+
* typos surface immediately.
|
|
655
|
+
*
|
|
656
|
+
* @opts
|
|
657
|
+
* concurrency: number, // 1..256; default 8
|
|
658
|
+
* signal: AbortSignal, // refuses to dispatch further items; in-flight run to settle
|
|
659
|
+
*
|
|
660
|
+
* @example
|
|
661
|
+
* var b = require("blamejs");
|
|
662
|
+
*
|
|
663
|
+
* var urls = ["a", "b", "c", "d"];
|
|
664
|
+
* var fetchOne = function (u) { return Promise.resolve("loaded:" + u); };
|
|
665
|
+
* var results = await b.safeAsync.parallel(urls, fetchOne, { concurrency: 2 });
|
|
666
|
+
* results;
|
|
667
|
+
* // → ["loaded:a", "loaded:b", "loaded:c", "loaded:d"]
|
|
668
|
+
*
|
|
669
|
+
* // First rejection wins; remaining workers drain.
|
|
670
|
+
* try {
|
|
671
|
+
* await b.safeAsync.parallel([1, 2, 3], function (n) {
|
|
672
|
+
* if (n === 2) return Promise.reject(new Error("bad-2"));
|
|
673
|
+
* return Promise.resolve(n);
|
|
674
|
+
* }, { concurrency: 1 });
|
|
675
|
+
* } catch (e) {
|
|
676
|
+
* e.message;
|
|
677
|
+
* // → "bad-2"
|
|
678
|
+
* }
|
|
679
|
+
*/
|
|
680
|
+
function parallel(items, fn, opts) {
|
|
681
|
+
if (!Array.isArray(items)) {
|
|
682
|
+
throw new SafeAsyncError("parallel: items must be an array", "async/bad-arg");
|
|
683
|
+
}
|
|
684
|
+
if (typeof fn !== "function") {
|
|
685
|
+
throw new SafeAsyncError("parallel: fn must be a function", "async/bad-arg");
|
|
686
|
+
}
|
|
687
|
+
opts = opts || {};
|
|
688
|
+
var concurrency = opts.concurrency != null ? opts.concurrency : PARALLEL_DEFAULT_CONCURRENCY;
|
|
689
|
+
if (typeof concurrency !== "number" || !Number.isInteger(concurrency) ||
|
|
690
|
+
concurrency < 1 || concurrency > PARALLEL_MAX_CONCURRENCY) {
|
|
691
|
+
throw new SafeAsyncError(
|
|
692
|
+
"parallel: concurrency must be an integer in [1.." +
|
|
693
|
+
PARALLEL_MAX_CONCURRENCY + "], got " + concurrency,
|
|
694
|
+
"async/bad-arg"
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
var signal = opts.signal;
|
|
698
|
+
if (signal && signal.aborted) {
|
|
699
|
+
return Promise.reject(new SafeAsyncError(
|
|
700
|
+
"parallel aborted before start", "async/aborted", signal.reason
|
|
701
|
+
));
|
|
702
|
+
}
|
|
703
|
+
if (items.length === 0) return Promise.resolve([]);
|
|
704
|
+
|
|
705
|
+
return new Promise(function (resolve, reject) {
|
|
706
|
+
var results = new Array(items.length);
|
|
707
|
+
var cursor = 0;
|
|
708
|
+
var settled = false;
|
|
709
|
+
var firstError = null;
|
|
710
|
+
var activeWorkers = 0;
|
|
711
|
+
var workerCount = Math.min(concurrency, items.length);
|
|
712
|
+
var onAbort = null;
|
|
713
|
+
|
|
714
|
+
function _finish(err) {
|
|
715
|
+
if (settled) return;
|
|
716
|
+
settled = true;
|
|
717
|
+
if (signal && onAbort) signal.removeEventListener("abort", onAbort);
|
|
718
|
+
if (err) reject(err); else resolve(results);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
if (signal) {
|
|
722
|
+
onAbort = function () {
|
|
723
|
+
if (firstError) return;
|
|
724
|
+
firstError = new SafeAsyncError(
|
|
725
|
+
"parallel aborted", "async/aborted", signal.reason
|
|
726
|
+
);
|
|
727
|
+
// In-flight workers finish their current item; new pulls
|
|
728
|
+
// observe firstError and exit. _finish fires when the last
|
|
729
|
+
// worker drains.
|
|
730
|
+
};
|
|
731
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
function _workerLoop() {
|
|
735
|
+
// Continuous worker queue — each worker pulls the next index
|
|
736
|
+
// from the shared cursor as soon as its previous task settles.
|
|
737
|
+
// No batched chunks: a slow item never blocks unrelated items
|
|
738
|
+
// from entering the pool.
|
|
739
|
+
if (firstError || cursor >= items.length) {
|
|
740
|
+
activeWorkers -= 1;
|
|
741
|
+
if (activeWorkers === 0) _finish(firstError);
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
var idx = cursor++;
|
|
745
|
+
var item = items[idx];
|
|
746
|
+
var p;
|
|
747
|
+
try { p = Promise.resolve(fn(item, idx)); }
|
|
748
|
+
catch (e) { p = Promise.reject(e); }
|
|
749
|
+
p.then(function (value) {
|
|
750
|
+
results[idx] = value;
|
|
751
|
+
_workerLoop();
|
|
752
|
+
}, function (e) {
|
|
753
|
+
if (!firstError) firstError = e;
|
|
754
|
+
_workerLoop();
|
|
755
|
+
});
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
for (var i = 0; i < workerCount; i++) {
|
|
759
|
+
activeWorkers += 1;
|
|
760
|
+
_workerLoop();
|
|
761
|
+
}
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
// ---- Mutex ----
|
|
766
|
+
//
|
|
767
|
+
// Async mutex — only one async region holds the lock at a time. Acquirers
|
|
768
|
+
// queue in arrival order. .runExclusive(fn) is the recommended call form
|
|
769
|
+
// (lock release is automatic via finally even if fn throws); .acquire()
|
|
770
|
+
// + .release() are exposed for callers needing finer control.
|
|
771
|
+
//
|
|
772
|
+
// Implementation note: a queued acquirer that's never released (operator
|
|
773
|
+
// bug) blocks the entire mutex. We don't add a hard-coded timeout because
|
|
774
|
+
// timeouts mask bugs and the real fix is releasing properly. If a caller
|
|
775
|
+
// wants a deadline, wrap the runExclusive call with withTimeout.
|
|
776
|
+
|
|
777
|
+
class Mutex {
|
|
778
|
+
constructor() {
|
|
779
|
+
this._waiters = []; // [{ resolve, reject, signal, onAbort }]
|
|
780
|
+
this._held = false;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
// acquire(opts?) — opts.signal aborts a waiting acquirer cleanly.
|
|
784
|
+
// When the signal fires, the waiter is removed from the queue and
|
|
785
|
+
// its Promise rejects with async/aborted. The slot it WOULD have
|
|
786
|
+
// taken stays free for the next waiter. If the mutex isn't held,
|
|
787
|
+
// acquire returns immediately regardless of signal state.
|
|
788
|
+
acquire(opts) {
|
|
789
|
+
var self = this;
|
|
790
|
+
var signal = opts && opts.signal;
|
|
791
|
+
if (!self._held) {
|
|
792
|
+
self._held = true;
|
|
793
|
+
return Promise.resolve();
|
|
794
|
+
}
|
|
795
|
+
if (signal && signal.aborted) {
|
|
796
|
+
return Promise.reject(new SafeAsyncError(
|
|
797
|
+
"Mutex.acquire aborted", "async/aborted", signal.reason
|
|
798
|
+
));
|
|
799
|
+
}
|
|
800
|
+
return new Promise(function (resolve, reject) {
|
|
801
|
+
var entry = { resolve: resolve, reject: reject, signal: signal, onAbort: null };
|
|
802
|
+
if (signal) {
|
|
803
|
+
entry.onAbort = function () {
|
|
804
|
+
var idx = self._waiters.indexOf(entry);
|
|
805
|
+
if (idx === -1) return; // already taken or already aborted
|
|
806
|
+
self._waiters.splice(idx, 1);
|
|
807
|
+
reject(new SafeAsyncError(
|
|
808
|
+
"Mutex.acquire aborted while waiting", "async/aborted", signal.reason
|
|
809
|
+
));
|
|
810
|
+
};
|
|
811
|
+
signal.addEventListener("abort", entry.onAbort, { once: true });
|
|
812
|
+
}
|
|
813
|
+
self._waiters.push(entry);
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
release() {
|
|
818
|
+
if (!this._held) {
|
|
819
|
+
throw new SafeAsyncError("release on unheld Mutex", "async/bad-release");
|
|
820
|
+
}
|
|
821
|
+
if (this._waiters.length > 0) {
|
|
822
|
+
var next = this._waiters.shift();
|
|
823
|
+
if (next.signal && next.onAbort) {
|
|
824
|
+
next.signal.removeEventListener("abort", next.onAbort);
|
|
825
|
+
}
|
|
826
|
+
next.resolve();
|
|
827
|
+
} else {
|
|
828
|
+
this._held = false;
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
async runExclusive(fn, opts) {
|
|
833
|
+
await this.acquire(opts);
|
|
834
|
+
try {
|
|
835
|
+
return await fn();
|
|
836
|
+
} finally {
|
|
837
|
+
this.release();
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
isHeld() { return this._held; }
|
|
842
|
+
pendingCount() { return this._waiters.length; }
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
// ---- Semaphore ----
|
|
846
|
+
//
|
|
847
|
+
// Bounded concurrency: at most `limit` simultaneous holders. Acquirers
|
|
848
|
+
// over the limit wait their turn. Use cases: limit external-db query
|
|
849
|
+
// concurrency, throttle outbound webhook fan-out, cap parallel file I/O.
|
|
850
|
+
//
|
|
851
|
+
// .runWith(fn) is the recommended form (release on finally); .acquire/
|
|
852
|
+
// .release are exposed for finer control.
|
|
853
|
+
|
|
854
|
+
class Semaphore {
|
|
855
|
+
constructor(limit) {
|
|
856
|
+
if (typeof limit !== "number" || limit < 1 || !Number.isInteger(limit)) {
|
|
857
|
+
throw new SafeAsyncError("Semaphore limit must be a positive integer", "async/bad-arg");
|
|
858
|
+
}
|
|
859
|
+
this._limit = limit;
|
|
860
|
+
this._inFlight = 0;
|
|
861
|
+
this._waiters = []; // [{ resolve, reject, signal, onAbort }]
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
// acquire(opts?) — opts.signal aborts a waiting acquirer cleanly.
|
|
865
|
+
acquire(opts) {
|
|
866
|
+
var self = this;
|
|
867
|
+
var signal = opts && opts.signal;
|
|
868
|
+
if (self._inFlight < self._limit) {
|
|
869
|
+
self._inFlight += 1;
|
|
870
|
+
return Promise.resolve();
|
|
871
|
+
}
|
|
872
|
+
if (signal && signal.aborted) {
|
|
873
|
+
return Promise.reject(new SafeAsyncError(
|
|
874
|
+
"Semaphore.acquire aborted", "async/aborted", signal.reason
|
|
875
|
+
));
|
|
876
|
+
}
|
|
877
|
+
return new Promise(function (resolve, reject) {
|
|
878
|
+
var entry = { resolve: resolve, reject: reject, signal: signal, onAbort: null };
|
|
879
|
+
if (signal) {
|
|
880
|
+
entry.onAbort = function () {
|
|
881
|
+
var idx = self._waiters.indexOf(entry);
|
|
882
|
+
if (idx === -1) return;
|
|
883
|
+
self._waiters.splice(idx, 1);
|
|
884
|
+
reject(new SafeAsyncError(
|
|
885
|
+
"Semaphore.acquire aborted while waiting", "async/aborted", signal.reason
|
|
886
|
+
));
|
|
887
|
+
};
|
|
888
|
+
signal.addEventListener("abort", entry.onAbort, { once: true });
|
|
889
|
+
}
|
|
890
|
+
self._waiters.push(entry);
|
|
891
|
+
});
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
release() {
|
|
895
|
+
if (this._inFlight === 0) {
|
|
896
|
+
throw new SafeAsyncError("release on idle Semaphore", "async/bad-release");
|
|
897
|
+
}
|
|
898
|
+
if (this._waiters.length > 0) {
|
|
899
|
+
var next = this._waiters.shift();
|
|
900
|
+
if (next.signal && next.onAbort) {
|
|
901
|
+
next.signal.removeEventListener("abort", next.onAbort);
|
|
902
|
+
}
|
|
903
|
+
next.resolve();
|
|
904
|
+
} else {
|
|
905
|
+
this._inFlight -= 1;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
async runWith(fn, opts) {
|
|
910
|
+
await this.acquire(opts);
|
|
911
|
+
try {
|
|
912
|
+
return await fn();
|
|
913
|
+
} finally {
|
|
914
|
+
this.release();
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
inFlight() { return this._inFlight; }
|
|
919
|
+
pendingCount() { return this._waiters.length; }
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// ---- Once ----
|
|
923
|
+
//
|
|
924
|
+
// Single-flight memoization. The first .invoke() call runs the function;
|
|
925
|
+
// subsequent calls (concurrent or later) await the same in-flight Promise
|
|
926
|
+
// and receive the same result. If the first invocation throws, the cached
|
|
927
|
+
// result is the rejected Promise — re-invocation will NOT retry.
|
|
928
|
+
//
|
|
929
|
+
// Use case: lazy boot-time init where multiple call sites might first-
|
|
930
|
+
// touch concurrently (counter primer, schema-check, key load). Without
|
|
931
|
+
// Once, the second concurrent caller would start its own init and produce
|
|
932
|
+
// double-initialization.
|
|
933
|
+
//
|
|
934
|
+
// .reset() clears the cached Promise so the next .invoke() runs fresh.
|
|
935
|
+
// Useful for tests, hot-reload, and operator-driven re-init after a
|
|
936
|
+
// transient init failure. To make resets explicit (avoid silent stale
|
|
937
|
+
// state), reset() does NOT cancel an in-flight first invocation —
|
|
938
|
+
// callers awaiting the prior invoke continue to see its result.
|
|
939
|
+
|
|
940
|
+
class Once {
|
|
941
|
+
constructor(fn) {
|
|
942
|
+
if (typeof fn !== "function") {
|
|
943
|
+
throw new SafeAsyncError("Once: argument must be a function", "async/bad-arg");
|
|
944
|
+
}
|
|
945
|
+
this._fn = fn;
|
|
946
|
+
this._promise = null;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
invoke() {
|
|
950
|
+
if (this._promise === null) {
|
|
951
|
+
this._promise = Promise.resolve().then(this._fn);
|
|
952
|
+
}
|
|
953
|
+
return this._promise;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
reset() {
|
|
957
|
+
this._promise = null;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
hasInvoked() { return this._promise !== null; }
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
// ---- repeating ----
|
|
964
|
+
//
|
|
965
|
+
// Bounded-cadence interval timer with consistent unref + cancel semantics.
|
|
966
|
+
// Replaces the scattered setInterval ceremony where each caller hand-rolled
|
|
967
|
+
// `var t = setInterval(...); t.unref();` and a corresponding clearInterval
|
|
968
|
+
// in shutdown — easy to forget the unref and silently block process exit.
|
|
969
|
+
//
|
|
970
|
+
// var sweep = b.safeAsync.repeating(function () {
|
|
971
|
+
// return cleanup();
|
|
972
|
+
// }, b.constants.TIME.seconds(30), { name: "cache-sweep" });
|
|
973
|
+
// ...
|
|
974
|
+
// sweep.stop();
|
|
975
|
+
//
|
|
976
|
+
// fn may be sync or async. If fn returns a Promise, the next tick fires
|
|
977
|
+
// `intervalMs` after the prior fn() *started* (matching setInterval's
|
|
978
|
+
// fixed-rate semantics, not after-completion). Promise rejections are
|
|
979
|
+
// captured by the optional onError callback; if none provided, they're
|
|
980
|
+
// silently dropped — a repeating timer is by definition fire-and-forget,
|
|
981
|
+
// and an unhandled rejection here would crash the process.
|
|
982
|
+
//
|
|
983
|
+
// opts.unref defaults true: most repeating timers are background sweepers
|
|
984
|
+
// that should NOT keep the process alive. Cluster heartbeat etc. set
|
|
985
|
+
// `unref: false` so the lease keeps the leader from exiting silently.
|
|
986
|
+
|
|
987
|
+
/**
|
|
988
|
+
* @primitive b.safeAsync.repeating
|
|
989
|
+
* @signature b.safeAsync.repeating(fn, intervalMs, opts?)
|
|
990
|
+
* @since 0.6.0
|
|
991
|
+
* @status stable
|
|
992
|
+
* @related b.safeAsync.flushLoop, b.safeAsync.sleep
|
|
993
|
+
*
|
|
994
|
+
* Bounded-cadence interval timer with consistent unref + cancel
|
|
995
|
+
* semantics. Replaces the scattered `setInterval` ceremony where
|
|
996
|
+
* each caller hand-rolled `t.unref()` and a corresponding
|
|
997
|
+
* `clearInterval` in shutdown. `fn` may be sync or async; if async,
|
|
998
|
+
* the next tick fires `intervalMs` after the prior fn() STARTED
|
|
999
|
+
* (fixed-rate, matching `setInterval`). Promise rejections are
|
|
1000
|
+
* captured by `opts.onError` if provided, otherwise silently
|
|
1001
|
+
* dropped — a repeating timer is fire-and-forget by definition and
|
|
1002
|
+
* an unhandled rejection here would crash the process. `opts.unref`
|
|
1003
|
+
* defaults `true`; set `false` for cluster heartbeat-style timers
|
|
1004
|
+
* that must hold the loop open. Returns `{ stop }`.
|
|
1005
|
+
*
|
|
1006
|
+
* @opts
|
|
1007
|
+
* unref: boolean, // default true
|
|
1008
|
+
* onError: function(error), // captures sync throws + Promise rejections
|
|
1009
|
+
* name: string, // diagnostic label
|
|
1010
|
+
*
|
|
1011
|
+
* @example
|
|
1012
|
+
* var b = require("blamejs");
|
|
1013
|
+
*
|
|
1014
|
+
* var ticks = 0;
|
|
1015
|
+
* var sweep = b.safeAsync.repeating(function () { ticks += 1; }, 10, {
|
|
1016
|
+
* unref: true,
|
|
1017
|
+
* name: "tick-counter",
|
|
1018
|
+
* });
|
|
1019
|
+
* await b.safeAsync.sleep(35);
|
|
1020
|
+
* sweep.stop();
|
|
1021
|
+
* ticks >= 2;
|
|
1022
|
+
* // → true
|
|
1023
|
+
*/
|
|
1024
|
+
function repeating(fn, intervalMs, opts) {
|
|
1025
|
+
if (typeof fn !== "function") {
|
|
1026
|
+
throw new SafeAsyncError("repeating: fn must be a function", "async/bad-arg");
|
|
1027
|
+
}
|
|
1028
|
+
if (typeof intervalMs !== "number" || !Number.isFinite(intervalMs) || intervalMs <= 0) {
|
|
1029
|
+
throw new SafeAsyncError("repeating: intervalMs must be a positive finite number, got " + intervalMs,
|
|
1030
|
+
"async/bad-arg");
|
|
1031
|
+
}
|
|
1032
|
+
opts = opts || {};
|
|
1033
|
+
var unref = opts.unref !== false; // default true
|
|
1034
|
+
var onError = typeof opts.onError === "function" ? opts.onError : null;
|
|
1035
|
+
|
|
1036
|
+
var stopped = false;
|
|
1037
|
+
function _tick() {
|
|
1038
|
+
if (stopped) return;
|
|
1039
|
+
var result;
|
|
1040
|
+
try { result = fn(); } catch (e) {
|
|
1041
|
+
if (onError) { try { onError(e); } catch (_e) { /* swallow */ } } return;
|
|
1042
|
+
}
|
|
1043
|
+
if (result && typeof result.then === "function") {
|
|
1044
|
+
result.then(null, function (e) {
|
|
1045
|
+
if (onError) { try { onError(e); } catch (_e) { /* swallow */ } }
|
|
1046
|
+
});
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
var timer = setInterval(_tick, intervalMs);
|
|
1050
|
+
if (unref && typeof timer.unref === "function") timer.unref();
|
|
1051
|
+
|
|
1052
|
+
return {
|
|
1053
|
+
stop: function () {
|
|
1054
|
+
if (stopped) return;
|
|
1055
|
+
stopped = true;
|
|
1056
|
+
clearInterval(timer);
|
|
1057
|
+
},
|
|
1058
|
+
};
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
// ---- flushLoop ----
|
|
1062
|
+
//
|
|
1063
|
+
// Schedule fn(), wait for it to settle (resolve or reject), then schedule
|
|
1064
|
+
// the next fn() `intervalMs` later. Differs from `repeating` (fixed-rate,
|
|
1065
|
+
// fire-and-forget) — flushLoop is the after-completion pattern most
|
|
1066
|
+
// background flushers want: never overlap two flushes, and don't accumulate
|
|
1067
|
+
// backlog if a flush is slow.
|
|
1068
|
+
//
|
|
1069
|
+
// var loop = b.safeAsync.flushLoop(function () {
|
|
1070
|
+
// return otelExporter.flush();
|
|
1071
|
+
// }, b.constants.TIME.seconds(15), { name: "otel-flush" });
|
|
1072
|
+
// ...
|
|
1073
|
+
// loop.stop();
|
|
1074
|
+
//
|
|
1075
|
+
// Always unref'd — a pending flush should never keep the process alive
|
|
1076
|
+
// (the operator's b.appShutdown drives the final drain explicitly).
|
|
1077
|
+
// onError catches rejections; without one, they're silently dropped.
|
|
1078
|
+
|
|
1079
|
+
/**
|
|
1080
|
+
* @primitive b.safeAsync.flushLoop
|
|
1081
|
+
* @signature b.safeAsync.flushLoop(fn, intervalMs, opts?)
|
|
1082
|
+
* @since 0.6.0
|
|
1083
|
+
* @status stable
|
|
1084
|
+
* @related b.safeAsync.repeating, b.safeAsync.makeScheduledFlush
|
|
1085
|
+
*
|
|
1086
|
+
* After-completion background flusher. Schedules `fn()`, awaits its
|
|
1087
|
+
* settle (resolve OR reject), then schedules the next call
|
|
1088
|
+
* `intervalMs` later. Differs from `repeating` (fixed-rate, no
|
|
1089
|
+
* overlap protection) — `flushLoop` is the right shape for
|
|
1090
|
+
* background flushers that must never overlap two flushes and
|
|
1091
|
+
* shouldn't accumulate backlog when one flush is slow. Always
|
|
1092
|
+
* unref'd; `opts.onError` catches rejections, otherwise they're
|
|
1093
|
+
* silently dropped. Returns `{ stop }`.
|
|
1094
|
+
*
|
|
1095
|
+
* @opts
|
|
1096
|
+
* onError: function(error), // captures sync throws + Promise rejections
|
|
1097
|
+
* name: string, // diagnostic label
|
|
1098
|
+
*
|
|
1099
|
+
* @example
|
|
1100
|
+
* var b = require("blamejs");
|
|
1101
|
+
*
|
|
1102
|
+
* var flushes = 0;
|
|
1103
|
+
* var loop = b.safeAsync.flushLoop(function () {
|
|
1104
|
+
* flushes += 1;
|
|
1105
|
+
* return Promise.resolve();
|
|
1106
|
+
* }, 10, { name: "telemetry-flush" });
|
|
1107
|
+
* await b.safeAsync.sleep(35);
|
|
1108
|
+
* loop.stop();
|
|
1109
|
+
* flushes >= 1;
|
|
1110
|
+
* // → true
|
|
1111
|
+
*/
|
|
1112
|
+
function flushLoop(fn, intervalMs, opts) {
|
|
1113
|
+
if (typeof fn !== "function") {
|
|
1114
|
+
throw new SafeAsyncError("flushLoop: fn must be a function", "async/bad-arg");
|
|
1115
|
+
}
|
|
1116
|
+
if (typeof intervalMs !== "number" || !Number.isFinite(intervalMs) || intervalMs <= 0) {
|
|
1117
|
+
throw new SafeAsyncError("flushLoop: intervalMs must be a positive finite number, got " + intervalMs,
|
|
1118
|
+
"async/bad-arg");
|
|
1119
|
+
}
|
|
1120
|
+
opts = opts || {};
|
|
1121
|
+
var onError = typeof opts.onError === "function" ? opts.onError : null;
|
|
1122
|
+
|
|
1123
|
+
var stopped = false;
|
|
1124
|
+
var timer = null;
|
|
1125
|
+
|
|
1126
|
+
function _schedule() {
|
|
1127
|
+
if (stopped) return;
|
|
1128
|
+
timer = setTimeout(function () {
|
|
1129
|
+
timer = null;
|
|
1130
|
+
if (stopped) return;
|
|
1131
|
+
var settled;
|
|
1132
|
+
try { settled = Promise.resolve(fn()); }
|
|
1133
|
+
catch (e) {
|
|
1134
|
+
if (onError) { try { onError(e); } catch (_e) { /* swallow */ } }
|
|
1135
|
+
_schedule();
|
|
1136
|
+
return;
|
|
1137
|
+
}
|
|
1138
|
+
settled.then(null, function (e) {
|
|
1139
|
+
if (onError) { try { onError(e); } catch (_e) { /* swallow */ } }
|
|
1140
|
+
}).then(_schedule);
|
|
1141
|
+
}, intervalMs);
|
|
1142
|
+
if (typeof timer.unref === "function") timer.unref();
|
|
1143
|
+
}
|
|
1144
|
+
_schedule();
|
|
1145
|
+
|
|
1146
|
+
return {
|
|
1147
|
+
stop: function () {
|
|
1148
|
+
if (stopped) return;
|
|
1149
|
+
stopped = true;
|
|
1150
|
+
if (timer) { clearTimeout(timer); timer = null; }
|
|
1151
|
+
},
|
|
1152
|
+
};
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
// ---- Re-exports of resilience primitives from lib/retry.js ----
|
|
1156
|
+
//
|
|
1157
|
+
// withRetry + CircuitBreaker live in lib/retry.js (the canonical home).
|
|
1158
|
+
// We re-export them here under safe-async-shaped names so call sites
|
|
1159
|
+
// reaching for async safety primitives find them in one place.
|
|
1160
|
+
|
|
1161
|
+
var retryHelper = require("./retry");
|
|
1162
|
+
|
|
1163
|
+
var asyncRetry = retryHelper.withRetry;
|
|
1164
|
+
var CircuitBreaker = retryHelper.CircuitBreaker;
|
|
1165
|
+
|
|
1166
|
+
module.exports = {
|
|
1167
|
+
withTimeout: withTimeout,
|
|
1168
|
+
withSignal: withSignal,
|
|
1169
|
+
withTimeoutSignal: withTimeoutSignal,
|
|
1170
|
+
sleep: sleep,
|
|
1171
|
+
repeating: repeating,
|
|
1172
|
+
flushLoop: flushLoop,
|
|
1173
|
+
safeAwait: safeAwait,
|
|
1174
|
+
safeInvoke: safeInvoke,
|
|
1175
|
+
makeDropCallback: makeDropCallback,
|
|
1176
|
+
makeScheduledFlush: makeScheduledFlush,
|
|
1177
|
+
parallel: parallel,
|
|
1178
|
+
Mutex: Mutex,
|
|
1179
|
+
Semaphore: Semaphore,
|
|
1180
|
+
Once: Once,
|
|
1181
|
+
asyncRetry: asyncRetry,
|
|
1182
|
+
CircuitBreaker: CircuitBreaker,
|
|
1183
|
+
SafeAsyncError: SafeAsyncError,
|
|
1184
|
+
};
|