@aglyn/tenant-data-admin 1.0.0-beta.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +7 -0
- package/jest.integration.config.d.ts +39 -0
- package/jest.integration.setup.d.ts +17 -0
- package/package.json +51 -0
- package/src/index.d.ts +17 -0
- package/src/index.js +18 -0
- package/src/index.js.map +1 -0
- package/src/lib/render-cache.d.ts +184 -0
- package/src/lib/render-cache.js +198 -0
- package/src/lib/render-cache.js.map +1 -0
- package/src/lib/server/account-addresses.d.ts +160 -0
- package/src/lib/server/account-addresses.js +311 -0
- package/src/lib/server/account-addresses.js.map +1 -0
- package/src/lib/server/account-emails.d.ts +219 -0
- package/src/lib/server/account-emails.js +640 -0
- package/src/lib/server/account-emails.js.map +1 -0
- package/src/lib/server/admin-audit.d.ts +180 -0
- package/src/lib/server/admin-audit.js +233 -0
- package/src/lib/server/admin-audit.js.map +1 -0
- package/src/lib/server/analytics-retention.d.ts +63 -0
- package/src/lib/server/analytics-retention.js +66 -0
- package/src/lib/server/analytics-retention.js.map +1 -0
- package/src/lib/server/api-http.d.ts +159 -0
- package/src/lib/server/api-http.js +230 -0
- package/src/lib/server/api-http.js.map +1 -0
- package/src/lib/server/api-keys.d.ts +117 -0
- package/src/lib/server/api-keys.js +298 -0
- package/src/lib/server/api-keys.js.map +1 -0
- package/src/lib/server/auth-handoff.d.ts +165 -0
- package/src/lib/server/auth-handoff.js +482 -0
- package/src/lib/server/auth-handoff.js.map +1 -0
- package/src/lib/server/auth-pools.d.ts +246 -0
- package/src/lib/server/auth-pools.js +551 -0
- package/src/lib/server/auth-pools.js.map +1 -0
- package/src/lib/server/billing-addons.d.ts +171 -0
- package/src/lib/server/billing-addons.js +277 -0
- package/src/lib/server/billing-addons.js.map +1 -0
- package/src/lib/server/campaign-attribution-store.d.ts +55 -0
- package/src/lib/server/campaign-attribution-store.js +95 -0
- package/src/lib/server/campaign-attribution-store.js.map +1 -0
- package/src/lib/server/campaign-conversion-attribution.d.ts +205 -0
- package/src/lib/server/campaign-conversion-attribution.js +279 -0
- package/src/lib/server/campaign-conversion-attribution.js.map +1 -0
- package/src/lib/server/client-error-report.d.ts +301 -0
- package/src/lib/server/client-error-report.js +755 -0
- package/src/lib/server/client-error-report.js.map +1 -0
- package/src/lib/server/connect-account-status.d.ts +74 -0
- package/src/lib/server/connect-account-status.js +94 -0
- package/src/lib/server/connect-account-status.js.map +1 -0
- package/src/lib/server/connect-payout-failure.d.ts +103 -0
- package/src/lib/server/connect-payout-failure.js +127 -0
- package/src/lib/server/connect-payout-failure.js.map +1 -0
- package/src/lib/server/console-api-rate-limit.d.ts +81 -0
- package/src/lib/server/console-api-rate-limit.js +111 -0
- package/src/lib/server/console-api-rate-limit.js.map +1 -0
- package/src/lib/server/console-domains.d.ts +326 -0
- package/src/lib/server/console-domains.js +779 -0
- package/src/lib/server/console-domains.js.map +1 -0
- package/src/lib/server/consume-once.d.ts +91 -0
- package/src/lib/server/consume-once.js +96 -0
- package/src/lib/server/consume-once.js.map +1 -0
- package/src/lib/server/contact-company-link.d.ts +85 -0
- package/src/lib/server/contact-company-link.js +105 -0
- package/src/lib/server/contact-company-link.js.map +1 -0
- package/src/lib/server/contact-email-engagement.d.ts +32 -0
- package/src/lib/server/contact-email-engagement.js +145 -0
- package/src/lib/server/contact-email-engagement.js.map +1 -0
- package/src/lib/server/contact-email-index.d.ts +56 -0
- package/src/lib/server/contact-email-index.js +158 -0
- package/src/lib/server/contact-email-index.js.map +1 -0
- package/src/lib/server/contact-lifecycle-floor.d.ts +89 -0
- package/src/lib/server/contact-lifecycle-floor.js +88 -0
- package/src/lib/server/contact-lifecycle-floor.js.map +1 -0
- package/src/lib/server/contact-merge.d.ts +55 -0
- package/src/lib/server/contact-merge.js +279 -0
- package/src/lib/server/contact-merge.js.map +1 -0
- package/src/lib/server/contact-suppression.d.ts +153 -0
- package/src/lib/server/contact-suppression.js +259 -0
- package/src/lib/server/contact-suppression.js.map +1 -0
- package/src/lib/server/crm-booking-activity.d.ts +86 -0
- package/src/lib/server/crm-booking-activity.js +251 -0
- package/src/lib/server/crm-booking-activity.js.map +1 -0
- package/src/lib/server/crm-email-activity.d.ts +112 -0
- package/src/lib/server/crm-email-activity.js +143 -0
- package/src/lib/server/crm-email-activity.js.map +1 -0
- package/src/lib/server/crm-inbound-email.d.ts +145 -0
- package/src/lib/server/crm-inbound-email.js +287 -0
- package/src/lib/server/crm-inbound-email.js.map +1 -0
- package/src/lib/server/crm-next-activity.d.ts +74 -0
- package/src/lib/server/crm-next-activity.js +194 -0
- package/src/lib/server/crm-next-activity.js.map +1 -0
- package/src/lib/server/crm-records.d.ts +144 -0
- package/src/lib/server/crm-records.js +218 -0
- package/src/lib/server/crm-records.js.map +1 -0
- package/src/lib/server/csp-aggregate.d.ts +62 -0
- package/src/lib/server/csp-aggregate.js +276 -0
- package/src/lib/server/csp-aggregate.js.map +1 -0
- package/src/lib/server/data-storage-gate.d.ts +66 -0
- package/src/lib/server/data-storage-gate.js +48 -0
- package/src/lib/server/data-storage-gate.js.map +1 -0
- package/src/lib/server/dataset-live-pages.d.ts +179 -0
- package/src/lib/server/dataset-live-pages.js +421 -0
- package/src/lib/server/dataset-live-pages.js.map +1 -0
- package/src/lib/server/dns-probe.d.ts +53 -0
- package/src/lib/server/dns-probe.js +184 -0
- package/src/lib/server/dns-probe.js.map +1 -0
- package/src/lib/server/document-id.d.ts +29 -0
- package/src/lib/server/document-id.js +100 -0
- package/src/lib/server/document-id.js.map +1 -0
- package/src/lib/server/domain-provider-vercel.d.ts +33 -0
- package/src/lib/server/domain-provider-vercel.js +298 -0
- package/src/lib/server/domain-provider-vercel.js.map +1 -0
- package/src/lib/server/domain-provider-webhook.d.ts +73 -0
- package/src/lib/server/domain-provider-webhook.js +223 -0
- package/src/lib/server/domain-provider-webhook.js.map +1 -0
- package/src/lib/server/domain-provider-wildcard.d.ts +54 -0
- package/src/lib/server/domain-provider-wildcard.js +163 -0
- package/src/lib/server/domain-provider-wildcard.js.map +1 -0
- package/src/lib/server/domain-provider.d.ts +197 -0
- package/src/lib/server/domain-provider.js +221 -0
- package/src/lib/server/domain-provider.js.map +1 -0
- package/src/lib/server/duplicate-activity.d.ts +54 -0
- package/src/lib/server/duplicate-activity.js +67 -0
- package/src/lib/server/duplicate-activity.js.map +1 -0
- package/src/lib/server/duplicate-resource.d.ts +55 -0
- package/src/lib/server/duplicate-resource.js +474 -0
- package/src/lib/server/duplicate-resource.js.map +1 -0
- package/src/lib/server/dynamic-list-materialize.d.ts +153 -0
- package/src/lib/server/dynamic-list-materialize.js +581 -0
- package/src/lib/server/dynamic-list-materialize.js.map +1 -0
- package/src/lib/server/edit-access-authz.d.ts +56 -0
- package/src/lib/server/edit-access-authz.js +107 -0
- package/src/lib/server/edit-access-authz.js.map +1 -0
- package/src/lib/server/edit-access-token.d.ts +72 -0
- package/src/lib/server/edit-access-token.js +116 -0
- package/src/lib/server/edit-access-token.js.map +1 -0
- package/src/lib/server/edit-hint-token.d.ts +83 -0
- package/src/lib/server/edit-hint-token.js +119 -0
- package/src/lib/server/edit-hint-token.js.map +1 -0
- package/src/lib/server/email-delivery-log.d.ts +509 -0
- package/src/lib/server/email-delivery-log.js +1043 -0
- package/src/lib/server/email-delivery-log.js.map +1 -0
- package/src/lib/server/email-flow-gate.d.ts +80 -0
- package/src/lib/server/email-flow-gate.js +153 -0
- package/src/lib/server/email-flow-gate.js.map +1 -0
- package/src/lib/server/email-marketing-gate.d.ts +333 -0
- package/src/lib/server/email-marketing-gate.js +639 -0
- package/src/lib/server/email-marketing-gate.js.map +1 -0
- package/src/lib/server/email-metering.d.ts +293 -0
- package/src/lib/server/email-metering.js +359 -0
- package/src/lib/server/email-metering.js.map +1 -0
- package/src/lib/server/email-revenue-attribution.d.ts +185 -0
- package/src/lib/server/email-revenue-attribution.js +300 -0
- package/src/lib/server/email-revenue-attribution.js.map +1 -0
- package/src/lib/server/email-send-rate.d.ts +232 -0
- package/src/lib/server/email-send-rate.js +417 -0
- package/src/lib/server/email-send-rate.js.map +1 -0
- package/src/lib/server/email-sender-reputation.d.ts +317 -0
- package/src/lib/server/email-sender-reputation.js +464 -0
- package/src/lib/server/email-sender-reputation.js.map +1 -0
- package/src/lib/server/email-suppression.d.ts +490 -0
- package/src/lib/server/email-suppression.js +648 -0
- package/src/lib/server/email-suppression.js.map +1 -0
- package/src/lib/server/email-topic-confirmation.d.ts +150 -0
- package/src/lib/server/email-topic-confirmation.js +272 -0
- package/src/lib/server/email-topic-confirmation.js.map +1 -0
- package/src/lib/server/email-unsubscribe-link.d.ts +174 -0
- package/src/lib/server/email-unsubscribe-link.js +236 -0
- package/src/lib/server/email-unsubscribe-link.js.map +1 -0
- package/src/lib/server/erase-person.d.ts +116 -0
- package/src/lib/server/erase-person.js +272 -0
- package/src/lib/server/erase-person.js.map +1 -0
- package/src/lib/server/erase.d.ts +458 -0
- package/src/lib/server/erase.js +1506 -0
- package/src/lib/server/erase.js.map +1 -0
- package/src/lib/server/firebase-admin.d.ts +71 -0
- package/src/lib/server/firebase-admin.js +343 -0
- package/src/lib/server/firebase-admin.js.map +1 -0
- package/src/lib/server/form-dataset-binding-token.d.ts +35 -0
- package/src/lib/server/form-dataset-binding-token.js +107 -0
- package/src/lib/server/form-dataset-binding-token.js.map +1 -0
- package/src/lib/server/free-workspace-cap.d.ts +201 -0
- package/src/lib/server/free-workspace-cap.js +404 -0
- package/src/lib/server/free-workspace-cap.js.map +1 -0
- package/src/lib/server/ga4-measurement-protocol.d.ts +256 -0
- package/src/lib/server/ga4-measurement-protocol.js +558 -0
- package/src/lib/server/ga4-measurement-protocol.js.map +1 -0
- package/src/lib/server/host-email-tokens.d.ts +47 -0
- package/src/lib/server/host-email-tokens.js +72 -0
- package/src/lib/server/host-email-tokens.js.map +1 -0
- package/src/lib/server/host-memberships.d.ts +54 -0
- package/src/lib/server/host-memberships.js +194 -0
- package/src/lib/server/host-memberships.js.map +1 -0
- package/src/lib/server/host-sending-domain.d.ts +292 -0
- package/src/lib/server/host-sending-domain.js +451 -0
- package/src/lib/server/host-sending-domain.js.map +1 -0
- package/src/lib/server/host-visitor-records.d.ts +150 -0
- package/src/lib/server/host-visitor-records.js +262 -0
- package/src/lib/server/host-visitor-records.js.map +1 -0
- package/src/lib/server/id-token-refusal.d.ts +28 -0
- package/src/lib/server/id-token-refusal.js +111 -0
- package/src/lib/server/id-token-refusal.js.map +1 -0
- package/src/lib/server/legal-acceptance.d.ts +214 -0
- package/src/lib/server/legal-acceptance.js +305 -0
- package/src/lib/server/legal-acceptance.js.map +1 -0
- package/src/lib/server/list-members.d.ts +211 -0
- package/src/lib/server/list-members.js +176 -0
- package/src/lib/server/list-members.js.map +1 -0
- package/src/lib/server/live-page-usage.d.ts +202 -0
- package/src/lib/server/live-page-usage.js +300 -0
- package/src/lib/server/live-page-usage.js.map +1 -0
- package/src/lib/server/lockdown.d.ts +313 -0
- package/src/lib/server/lockdown.js +643 -0
- package/src/lib/server/lockdown.js.map +1 -0
- package/src/lib/server/media-cdn-rate-limit.d.ts +188 -0
- package/src/lib/server/media-cdn-rate-limit.js +204 -0
- package/src/lib/server/media-cdn-rate-limit.js.map +1 -0
- package/src/lib/server/media-delivery.d.ts +267 -0
- package/src/lib/server/media-delivery.js +485 -0
- package/src/lib/server/media-delivery.js.map +1 -0
- package/src/lib/server/media-download-tokens.d.ts +161 -0
- package/src/lib/server/media-download-tokens.js +386 -0
- package/src/lib/server/media-download-tokens.js.map +1 -0
- package/src/lib/server/media-quarantine.d.ts +127 -0
- package/src/lib/server/media-quarantine.js +170 -0
- package/src/lib/server/media-quarantine.js.map +1 -0
- package/src/lib/server/media-signing.d.ts +126 -0
- package/src/lib/server/media-signing.js +159 -0
- package/src/lib/server/media-signing.js.map +1 -0
- package/src/lib/server/media-storage-path.d.ts +96 -0
- package/src/lib/server/media-storage-path.js +111 -0
- package/src/lib/server/media-storage-path.js.map +1 -0
- package/src/lib/server/media-strong-digest.d.ts +85 -0
- package/src/lib/server/media-strong-digest.js +190 -0
- package/src/lib/server/media-strong-digest.js.map +1 -0
- package/src/lib/server/media-tombstone.d.ts +276 -0
- package/src/lib/server/media-tombstone.js +421 -0
- package/src/lib/server/media-tombstone.js.map +1 -0
- package/src/lib/server/media-variants.d.ts +309 -0
- package/src/lib/server/media-variants.js +428 -0
- package/src/lib/server/media-variants.js.map +1 -0
- package/src/lib/server/member-email-aliases.d.ts +180 -0
- package/src/lib/server/member-email-aliases.js +420 -0
- package/src/lib/server/member-email-aliases.js.map +1 -0
- package/src/lib/server/member-photo.d.ts +88 -0
- package/src/lib/server/member-photo.js +185 -0
- package/src/lib/server/member-photo.js.map +1 -0
- package/src/lib/server/membership-recover-throttle.d.ts +211 -0
- package/src/lib/server/membership-recover-throttle.js +231 -0
- package/src/lib/server/membership-recover-throttle.js.map +1 -0
- package/src/lib/server/notifications.d.ts +55 -0
- package/src/lib/server/notifications.js +134 -0
- package/src/lib/server/notifications.js.map +1 -0
- package/src/lib/server/org-billing.d.ts +97 -0
- package/src/lib/server/org-billing.js +236 -0
- package/src/lib/server/org-billing.js.map +1 -0
- package/src/lib/server/organizations.d.ts +837 -0
- package/src/lib/server/organizations.js +1814 -0
- package/src/lib/server/organizations.js.map +1 -0
- package/src/lib/server/password-reset-throttle.d.ts +84 -0
- package/src/lib/server/password-reset-throttle.js +102 -0
- package/src/lib/server/password-reset-throttle.js.map +1 -0
- package/src/lib/server/personal-data-export.d.ts +241 -0
- package/src/lib/server/personal-data-export.js +858 -0
- package/src/lib/server/personal-data-export.js.map +1 -0
- package/src/lib/server/platform-domain-names.d.ts +62 -0
- package/src/lib/server/platform-domain-names.js +197 -0
- package/src/lib/server/platform-domain-names.js.map +1 -0
- package/src/lib/server/platform-marketing-consent.d.ts +133 -0
- package/src/lib/server/platform-marketing-consent.js +209 -0
- package/src/lib/server/platform-marketing-consent.js.map +1 -0
- package/src/lib/server/rate-limit-store.d.ts +702 -0
- package/src/lib/server/rate-limit-store.js +1220 -0
- package/src/lib/server/rate-limit-store.js.map +1 -0
- package/src/lib/server/realm-plugins.d.ts +67 -0
- package/src/lib/server/realm-plugins.js +250 -0
- package/src/lib/server/realm-plugins.js.map +1 -0
- package/src/lib/server/recaptcha-allowlist.d.ts +90 -0
- package/src/lib/server/recaptcha-allowlist.js +409 -0
- package/src/lib/server/recaptcha-allowlist.js.map +1 -0
- package/src/lib/server/release-flags.d.ts +105 -0
- package/src/lib/server/release-flags.js +183 -0
- package/src/lib/server/release-flags.js.map +1 -0
- package/src/lib/server/replay-erasures.d.ts +126 -0
- package/src/lib/server/replay-erasures.js +217 -0
- package/src/lib/server/replay-erasures.js.map +1 -0
- package/src/lib/server/resolve-people.d.ts +66 -0
- package/src/lib/server/resolve-people.js +112 -0
- package/src/lib/server/resolve-people.js.map +1 -0
- package/src/lib/server/safe-equal.d.ts +45 -0
- package/src/lib/server/safe-equal.js +58 -0
- package/src/lib/server/safe-equal.js.map +1 -0
- package/src/lib/server/sending-domain-debt.d.ts +127 -0
- package/src/lib/server/sending-domain-debt.js +268 -0
- package/src/lib/server/sending-domain-debt.js.map +1 -0
- package/src/lib/server/sending-domain-recheck.d.ts +151 -0
- package/src/lib/server/sending-domain-recheck.js +253 -0
- package/src/lib/server/sending-domain-recheck.js.map +1 -0
- package/src/lib/server/sending-domains.d.ts +364 -0
- package/src/lib/server/sending-domains.js +683 -0
- package/src/lib/server/sending-domains.js.map +1 -0
- package/src/lib/server/serve-media-cdn.d.ts +433 -0
- package/src/lib/server/serve-media-cdn.js +1370 -0
- package/src/lib/server/serve-media-cdn.js.map +1 -0
- package/src/lib/server/serve-plugin-fetch.d.ts +61 -0
- package/src/lib/server/serve-plugin-fetch.js +294 -0
- package/src/lib/server/serve-plugin-fetch.js.map +1 -0
- package/src/lib/server/sms-keywords.d.ts +63 -0
- package/src/lib/server/sms-keywords.js +146 -0
- package/src/lib/server/sms-keywords.js.map +1 -0
- package/src/lib/server/sso-break-glass-owners.d.ts +91 -0
- package/src/lib/server/sso-break-glass-owners.js +227 -0
- package/src/lib/server/sso-break-glass-owners.js.map +1 -0
- package/src/lib/server/sso-domain-policy.d.ts +140 -0
- package/src/lib/server/sso-domain-policy.js +239 -0
- package/src/lib/server/sso-domain-policy.js.map +1 -0
- package/src/lib/server/sso-drift-logic.d.ts +106 -0
- package/src/lib/server/sso-drift-logic.js +95 -0
- package/src/lib/server/sso-drift-logic.js.map +1 -0
- package/src/lib/server/sso-enforcement.d.ts +204 -0
- package/src/lib/server/sso-enforcement.js +309 -0
- package/src/lib/server/sso-enforcement.js.map +1 -0
- package/src/lib/server/sso-provisioning.d.ts +320 -0
- package/src/lib/server/sso-provisioning.js +715 -0
- package/src/lib/server/sso-provisioning.js.map +1 -0
- package/src/lib/server/staff-alert-email.d.ts +41 -0
- package/src/lib/server/staff-alert-email.js +63 -0
- package/src/lib/server/staff-alert-email.js.map +1 -0
- package/src/lib/server/stripe-account-mode.d.ts +156 -0
- package/src/lib/server/stripe-account-mode.js +162 -0
- package/src/lib/server/stripe-account-mode.js.map +1 -0
- package/src/lib/server/tenant-write-lockdown.d.ts +131 -0
- package/src/lib/server/tenant-write-lockdown.js +176 -0
- package/src/lib/server/tenant-write-lockdown.js.map +1 -0
- package/src/lib/server/test-firestore.d.ts +45 -0
- package/src/lib/server/test-firestore.js +124 -0
- package/src/lib/server/test-firestore.js.map +1 -0
- package/src/lib/server/token-revocation.d.ts +140 -0
- package/src/lib/server/token-revocation.js +255 -0
- package/src/lib/server/token-revocation.js.map +1 -0
- package/src/lib/server/update-existing.d.ts +32 -0
- package/src/lib/server/update-existing.js +73 -0
- package/src/lib/server/update-existing.js.map +1 -0
- package/src/lib/server/upload-cors-reconcile.d.ts +118 -0
- package/src/lib/server/upload-cors-reconcile.js +234 -0
- package/src/lib/server/upload-cors-reconcile.js.map +1 -0
- package/src/lib/server/upsert-contact.d.ts +262 -0
- package/src/lib/server/upsert-contact.js +546 -0
- package/src/lib/server/upsert-contact.js.map +1 -0
- package/src/lib/server/usage-invoice.d.ts +203 -0
- package/src/lib/server/usage-invoice.js +397 -0
- package/src/lib/server/usage-invoice.js.map +1 -0
- package/src/lib/server/user-profiles.d.ts +151 -0
- package/src/lib/server/user-profiles.js +364 -0
- package/src/lib/server/user-profiles.js.map +1 -0
- package/src/lib/server/vercel-drain-signature.d.ts +30 -0
- package/src/lib/server/vercel-drain-signature.js +61 -0
- package/src/lib/server/vercel-drain-signature.js.map +1 -0
- package/src/lib/server/vercel-log-drain.d.ts +259 -0
- package/src/lib/server/vercel-log-drain.js +479 -0
- package/src/lib/server/vercel-log-drain.js.map +1 -0
- package/src/lib/server/verify-email-cooldown.d.ts +102 -0
- package/src/lib/server/verify-email-cooldown.js +114 -0
- package/src/lib/server/verify-email-cooldown.js.map +1 -0
- package/src/lib/server/visitor-write-rate-limit.d.ts +87 -0
- package/src/lib/server/visitor-write-rate-limit.js +117 -0
- package/src/lib/server/visitor-write-rate-limit.js.map +1 -0
- package/src/lib/server/workspace-domains.d.ts +156 -0
- package/src/lib/server/workspace-domains.js +271 -0
- package/src/lib/server/workspace-domains.js.map +1 -0
- package/src/tenancy.d.ts +115 -0
- package/src/tenancy.js +142 -0
- package/src/tenancy.js.map +1 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The log id the drain writes to. Contains "vercel" on purpose: the alert
|
|
19
|
+
* policy `projects/aglyn-main/alertPolicies/14031689508473384486` matches
|
|
20
|
+
* `logName=~"vercel"`, so the name is load-bearing. Renaming this log without
|
|
21
|
+
* repointing that policy silences the platform-5xx arm.
|
|
22
|
+
*/
|
|
23
|
+
export declare const VERCEL_RUNTIME_LOG_ID = "vercel-runtime";
|
|
24
|
+
/** The env var holding the drain's signature secret. Fails closed if unset. */
|
|
25
|
+
export declare const DRAIN_SECRET_ENV = "VERCEL_LOG_DRAIN_SECRET";
|
|
26
|
+
/**
|
|
27
|
+
* The receiver's own path — the FEEDBACK-LOOP GUARD (requirement 5).
|
|
28
|
+
*
|
|
29
|
+
* ⚠️ HISTORICAL, AND KEPT AS DEFENCE IN DEPTH (2026-08-26). The receiver USED
|
|
30
|
+
* to run on `aglyn-console`, whose logs the console drain collects, and the
|
|
31
|
+
* two cuts below were the answer to one receiver 500 draining back in.
|
|
32
|
+
*
|
|
33
|
+
* They were not enough, and the reason is worth stating plainly because the
|
|
34
|
+
* docstring that used to live here got it wrong: **both cuts are about the
|
|
35
|
+
* WRITE, and the cost was the DELIVERY.** Nothing inside a receiver can
|
|
36
|
+
* decline to be requested, and every delivery POST is itself a request that
|
|
37
|
+
* produces a log the same drain then delivers. Measured at 695K invocations
|
|
38
|
+
* in nine hours. Vercel's drain `sampling` rules are not a fix either — a
|
|
39
|
+
* single `{rate: 0}` rule with no path prefix moved delivery volume from 31
|
|
40
|
+
* to 32 per five minutes, i.e. the whole `schemas.log` filter block is stored
|
|
41
|
+
* and never applied.
|
|
42
|
+
*
|
|
43
|
+
* The receiver now lives OFF Vercel, at `cloud/log-drain` on Cloud Run, which
|
|
44
|
+
* no drain watches — so the loop is structurally impossible rather than
|
|
45
|
+
* filtered against. These cuts stay because they cost nothing and they are
|
|
46
|
+
* the backstop if anyone ever mounts this gate on a Vercel route again.
|
|
47
|
+
*
|
|
48
|
+
* Two structural cuts, not one:
|
|
49
|
+
*
|
|
50
|
+
* a. Every entry whose path is this route is dropped before the 5xx filter —
|
|
51
|
+
* so even the receiver's OWN 500s can never be forwarded, by anything, at
|
|
52
|
+
* any budget. It is not "we try not to error"; it is that its errors are
|
|
53
|
+
* unforwardable.
|
|
54
|
+
* b. Every line this module logs about itself is `console.warn`, i.e. Vercel
|
|
55
|
+
* `level: "warning"`, and the filter forwards only 5xx and `fatal`. A
|
|
56
|
+
* suppression summary drained back in is therefore dropped a second time,
|
|
57
|
+
* on a different property, by a different rule.
|
|
58
|
+
*
|
|
59
|
+
* Matched as a PREFIX so `/api/log-drain`, a future `/api/log-drain/test` and
|
|
60
|
+
* the query-bearing `proxy.path` form all fall on the same side of it.
|
|
61
|
+
*/
|
|
62
|
+
export declare const RECEIVER_ROUTE_PATH = "/api/log-drain";
|
|
63
|
+
/**
|
|
64
|
+
* The lockdown notice route — a route whose 503 is the FEATURE, not a fault.
|
|
65
|
+
*
|
|
66
|
+
* `apps/tenant/app/api/locked/route.ts` answers every request with a real 503
|
|
67
|
+
* carrying `Retry-After`, and the middleware rewrites every path of a locked
|
|
68
|
+
* or bandwidth-capped host to it. That status is deliberate: a takedown
|
|
69
|
+
* notice answering 200 would tell crawlers and uptime checks the site is
|
|
70
|
+
* fine, which is the whole reason the notice is a route handler rather than a
|
|
71
|
+
* page.
|
|
72
|
+
*
|
|
73
|
+
* Forwarded, it is indistinguishable from an outage. One suspended host being
|
|
74
|
+
* crawled emits a 5xx per request, forever, into the arm whose only consumer
|
|
75
|
+
* is an alert policy — so the policy fires on a working feature and the next
|
|
76
|
+
* real incident arrives in a stream that is already red.
|
|
77
|
+
*
|
|
78
|
+
* Matched EXACTLY, not as a prefix: the notice is one path, and a future
|
|
79
|
+
* `/api/locked/*` would be a different route with no such guarantee about its
|
|
80
|
+
* status.
|
|
81
|
+
*/
|
|
82
|
+
export declare const LOCKDOWN_NOTICE_ROUTE_PATH = "/api/locked";
|
|
83
|
+
/** Reset the budget counters. Test seam only — never called in production. */
|
|
84
|
+
export declare function resetDrainBudgetForTests(): void;
|
|
85
|
+
/**
|
|
86
|
+
* One log entry as a Vercel drain delivers it. Only the fields this receiver
|
|
87
|
+
* reads are named; the wire object carries many more (client IP, user agent,
|
|
88
|
+
* referer, the query-bearing `proxy.path`) which are deliberately NOT in this
|
|
89
|
+
* type, because a field that has no name here cannot be forwarded by accident.
|
|
90
|
+
*/
|
|
91
|
+
export interface VercelDrainEntry {
|
|
92
|
+
id?: string;
|
|
93
|
+
deploymentId?: string;
|
|
94
|
+
projectId?: string;
|
|
95
|
+
projectName?: string;
|
|
96
|
+
source?: string;
|
|
97
|
+
host?: string;
|
|
98
|
+
timestamp?: number;
|
|
99
|
+
level?: string;
|
|
100
|
+
type?: string;
|
|
101
|
+
message?: string;
|
|
102
|
+
path?: string;
|
|
103
|
+
entrypoint?: string;
|
|
104
|
+
requestId?: string;
|
|
105
|
+
statusCode?: number;
|
|
106
|
+
environment?: string;
|
|
107
|
+
executionRegion?: string;
|
|
108
|
+
proxy?: {
|
|
109
|
+
method?: string;
|
|
110
|
+
statusCode?: number;
|
|
111
|
+
path?: string;
|
|
112
|
+
pathType?: string;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The entries in one delivery, in either format Vercel will send.
|
|
117
|
+
*
|
|
118
|
+
* `json` delivers an array (and, per the reference's own example, sometimes a
|
|
119
|
+
* newline-separated sequence of objects); `ndjson` delivers one object per
|
|
120
|
+
* line. Parsing both means the drain's `deliveryFormat` can be changed in the
|
|
121
|
+
* dashboard without a deploy, and a malformed line is skipped rather than
|
|
122
|
+
* failing the whole delivery — Vercel disables a drain that errors too often,
|
|
123
|
+
* so a receiver that 500s on one bad line silences itself.
|
|
124
|
+
*/
|
|
125
|
+
export declare function parseDrainPayload(rawBody: string): VercelDrainEntry[];
|
|
126
|
+
/** Does this entry describe the receiver's own route? See RECEIVER_ROUTE_PATH. */
|
|
127
|
+
export declare function isReceiverEntry(entry: VercelDrainEntry): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Is this the lockdown notice serving its deliberate 503? See
|
|
130
|
+
* {@link LOCKDOWN_NOTICE_ROUTE_PATH}.
|
|
131
|
+
*
|
|
132
|
+
* Narrow on purpose — the route being exempt must not make the route
|
|
133
|
+
* unwatchable. Only a clean 503 is excused: a 500 the handler threw, the
|
|
134
|
+
* `statusCode -1` of a crashed lambda, and a `fatal` line all still forward,
|
|
135
|
+
* because those say the notice itself is broken and a locked host is then
|
|
136
|
+
* serving nothing at all.
|
|
137
|
+
*/
|
|
138
|
+
export declare function isLockdownNoticeEntry(entry: VercelDrainEntry): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* The health contract's routes, whose 503 is a VERDICT and not a fault.
|
|
141
|
+
*
|
|
142
|
+
* Prefix, not an exact path: every endpoint under it speaks the same contract
|
|
143
|
+
* — `healthHttpStatus` answers 200 while a check reports ok and 503 the moment
|
|
144
|
+
* it reports degraded — so `/api/health`, `/api/health/crons` and
|
|
145
|
+
* `/api/health/render/site` are all the same case.
|
|
146
|
+
*/
|
|
147
|
+
export declare const HEALTH_ROUTE_PREFIX = "/api/health";
|
|
148
|
+
/**
|
|
149
|
+
* Is this a health endpoint answering 503 because it is doing its job?
|
|
150
|
+
* (AGL-2709)
|
|
151
|
+
*
|
|
152
|
+
* ⚠️ THE STREAM WAS 91% THIS. Measured over the 48 hours to 2026-09-09, the
|
|
153
|
+
* drain forwarded 251 entries into `vercel-runtime`. **229 were `/api/health/*`
|
|
154
|
+
* answering 503** — `crons` 113, `funnel` 73, `server-errors` 18 — and 22 were
|
|
155
|
+
* the AGL-2708 outage, the only real server errors in the window. The policy
|
|
156
|
+
* on that log (`logName=~"vercel" AND severity>=ERROR`, one notification an
|
|
157
|
+
* hour) therefore mails about a working health check for as long as any
|
|
158
|
+
* subsystem is degraded: `/api/health/crons` was CORRECTLY reporting a broken
|
|
159
|
+
* job for six hours on 2026-09-07, which is six hours of "server errors" mail
|
|
160
|
+
* arriving in the same inbox that then had to notice 04:02 on 2026-09-09.
|
|
161
|
+
*
|
|
162
|
+
* Excusing it removes a DUPLICATE, not a signal, and the reason is structural
|
|
163
|
+
* rather than a judgement call: every `/api/health/*` route both apps ship has
|
|
164
|
+
* a monitor reading it, and `evaluateSubsystemReaders` fails the build if one
|
|
165
|
+
* ever does not. The 503 is already on the uptime probe's board, in an
|
|
166
|
+
* UptimeRobot monitor and on `docs.aglyn.com/status`, said in a body that
|
|
167
|
+
* names WHICH check failed — which the drain entry never could.
|
|
168
|
+
*
|
|
169
|
+
* Narrow in exactly the same three ways as {@link isLockdownNoticeEntry}, and
|
|
170
|
+
* each one is load-bearing:
|
|
171
|
+
*
|
|
172
|
+
* - a clean 503 only. A 500 the handler threw means the health route itself
|
|
173
|
+
* is broken, and a check that cannot answer must never look calm;
|
|
174
|
+
* - never a `fatal` line, which is process death rather than a verdict;
|
|
175
|
+
* - never `statusCode -1`, the crashed-lambda sentinel, which is not 503 and
|
|
176
|
+
* so fails the status test above.
|
|
177
|
+
*/
|
|
178
|
+
export declare function isHealthContractEntry(entry: VercelDrainEntry): boolean;
|
|
179
|
+
/**
|
|
180
|
+
* THE COST GATE (requirement 3). Everything false here is dropped unwritten.
|
|
181
|
+
*
|
|
182
|
+
* What counts as a server error:
|
|
183
|
+
*
|
|
184
|
+
* - `statusCode >= 500` or `proxy.statusCode >= 500` — the platform 5xx this
|
|
185
|
+
* whole arm exists for, including the ones our code never saw.
|
|
186
|
+
* - `statusCode === -1` — documented as "no response returned and the lambda
|
|
187
|
+
* crashed". The OOM/hard-crash case, and the single most important entry
|
|
188
|
+
* shape the `onRequestError` hook is structurally unable to produce.
|
|
189
|
+
* - `level === 'fatal'` or `type === 'fatal'` — the edge-runtime and
|
|
190
|
+
* process-death shape, which may carry no status at all.
|
|
191
|
+
*
|
|
192
|
+
* What deliberately does NOT count:
|
|
193
|
+
*
|
|
194
|
+
* - `level === 'error'`. That is any `console.error`, including the fail-soft
|
|
195
|
+
* warn/error lines the beacons themselves write, and forwarding it would
|
|
196
|
+
* mean paying per line for a stream the `onRequestError` hook already
|
|
197
|
+
* covers properly. If an errored request matters, it has a status.
|
|
198
|
+
* - `proxy.statusCode === -1`. Same sentinel, opposite meaning: on the proxy
|
|
199
|
+
* object it documents a BACKGROUND REVALIDATION, which is a healthy ISR
|
|
200
|
+
* refresh. Reading it as a crash would forward a steady trickle of normal
|
|
201
|
+
* traffic forever — the exact bill this gate exists to prevent.
|
|
202
|
+
*/
|
|
203
|
+
export declare function isServerErrorEntry(entry: VercelDrainEntry): boolean;
|
|
204
|
+
/**
|
|
205
|
+
* Everything above, in the order the cost argument requires.
|
|
206
|
+
* Exported so the tests can assert the gate without a transport.
|
|
207
|
+
*/
|
|
208
|
+
export declare function selectForwardableEntries(entries: readonly VercelDrainEntry[]): VercelDrainEntry[];
|
|
209
|
+
/** What one delivery did, for the response body, the tests and the caller. */
|
|
210
|
+
export interface DrainIngestResult {
|
|
211
|
+
/** Entries in the delivery. */
|
|
212
|
+
received: number;
|
|
213
|
+
/** Entries that passed the receiver-path and 5xx gates. */
|
|
214
|
+
matched: number;
|
|
215
|
+
/** Entries actually written to Cloud Logging. */
|
|
216
|
+
forwarded: number;
|
|
217
|
+
/** Entries dropped by the per-window budget — REPORTED, never silent. */
|
|
218
|
+
suppressed: number;
|
|
219
|
+
/** Set when nothing could be written at all; a stable code, never a message. */
|
|
220
|
+
code?: 'no-credential' | 'transport' | `http-${number}`;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Where the write goes, and under whose credential.
|
|
224
|
+
*
|
|
225
|
+
* Injectable because the receiver has to be able to run somewhere that is NOT
|
|
226
|
+
* a Vercel project this drain watches — a delivery POST is a request to
|
|
227
|
+
* whatever hosts it, and a request produces a log the same drain then
|
|
228
|
+
* delivers, which is the AGL-1921 feedback loop. Vercel's drain `sampling`
|
|
229
|
+
* rules look like the answer and are NOT: measured 2026-08-26, a single
|
|
230
|
+
* `{rate: 0}` rule with no path prefix — literally "drop everything" — changed
|
|
231
|
+
* delivery volume from 31 to 32 per five minutes. The whole `schemas.log`
|
|
232
|
+
* filter block is accepted by the API, echoed back on `GET`, and never
|
|
233
|
+
* applied. Separation is the only control that works.
|
|
234
|
+
*
|
|
235
|
+
* The default keeps every existing caller on the Firebase admin credential.
|
|
236
|
+
* A receiver hosted off Vercel (Cloud Run in `aglyn-main`) passes its own
|
|
237
|
+
* resolver instead and never imports `firebase-admin` at all, which is what
|
|
238
|
+
* lets this module be bundled for it without dragging the SDK along.
|
|
239
|
+
*/
|
|
240
|
+
export interface DrainIngestOptions {
|
|
241
|
+
/**
|
|
242
|
+
* Resolve the Cloud Logging bearer token and project. Returning `null`
|
|
243
|
+
* means "no credential" and the delivery is dropped, reported, and answered
|
|
244
|
+
* 200 — never an error, because Vercel disables a drain whose endpoint
|
|
245
|
+
* fails often enough.
|
|
246
|
+
*/
|
|
247
|
+
target?: () => Promise<{
|
|
248
|
+
token: string;
|
|
249
|
+
projectId: string;
|
|
250
|
+
} | null>;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Ingest ONE verified delivery: filter, budget, then a single batched write.
|
|
254
|
+
*
|
|
255
|
+
* Never throws. Vercel disables a drain whose endpoint fails often enough, so
|
|
256
|
+
* a receiver that propagated a Logging outage would end by turning itself off
|
|
257
|
+
* during the incident it exists to report.
|
|
258
|
+
*/
|
|
259
|
+
export declare function ingestDrainDelivery(entries: readonly VercelDrainEntry[], options?: DrainIngestOptions): Promise<DrainIngestResult>;
|