@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,241 @@
|
|
|
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
|
+
/** Which subject an export source belongs to. */
|
|
18
|
+
export type ExportSubject = 'user' | 'org';
|
|
19
|
+
/** How a source is located — the axis a path cascade is blind to. */
|
|
20
|
+
export type ExportKeying =
|
|
21
|
+
/** Top-level collection carrying the subject id in a FIELD. */
|
|
22
|
+
'field'
|
|
23
|
+
/** Top-level collection whose DOCUMENT ID is the subject id. */
|
|
24
|
+
| 'doc-id'
|
|
25
|
+
/** Under the subject's own document path. */
|
|
26
|
+
| 'path'
|
|
27
|
+
/** Reached through another collection's rows (a collection group). */
|
|
28
|
+
| 'collection-group'
|
|
29
|
+
/** Outside Firestore entirely. */
|
|
30
|
+
| 'external';
|
|
31
|
+
export interface ExportSourceSpec {
|
|
32
|
+
/** Firestore collection name, or an `external:` pseudo-name. */
|
|
33
|
+
collection: string;
|
|
34
|
+
keyedBy: ExportKeying;
|
|
35
|
+
subjects: readonly ExportSubject[];
|
|
36
|
+
/**
|
|
37
|
+
* `true` when the export discloses it. `false` requires `reason` — and the
|
|
38
|
+
* reason is the whole value of the field: it is a decision recorded at the
|
|
39
|
+
* moment it was made, not an omission discovered later.
|
|
40
|
+
*/
|
|
41
|
+
exported: boolean;
|
|
42
|
+
/** Why it is withheld, or how it is disclosed. Always present. */
|
|
43
|
+
note: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Every collection `erase.ts` touches, and what the export does with it.
|
|
47
|
+
*
|
|
48
|
+
* Kept in the SAME order as the erasure's steps so a reader comparing the two
|
|
49
|
+
* files reads them in step. `personal-data-export-coverage.spec.ts` proves the
|
|
50
|
+
* set matches; this list carries the decision for each one.
|
|
51
|
+
*/
|
|
52
|
+
export declare const PERSONAL_DATA_SOURCES: readonly ExportSourceSpec[];
|
|
53
|
+
/** Sources this export deliberately withholds, with the reason. */
|
|
54
|
+
export declare const EXPORT_WITHHELD: ExportSourceSpec[];
|
|
55
|
+
/** Collection names the export claims to cover, for the coverage guard. */
|
|
56
|
+
export declare const EXPORT_COVERED_COLLECTIONS: readonly string[];
|
|
57
|
+
/**
|
|
58
|
+
* ## WHY THIS IS SHAPE-DRIVEN AND NOT A LIST OF NAMES
|
|
59
|
+
*
|
|
60
|
+
* It used to be a list of names, anchored on separators:
|
|
61
|
+
*
|
|
62
|
+
* /(^|[._-])(secret|token|password|apikey|…)($|[._-])/i
|
|
63
|
+
*
|
|
64
|
+
* That pattern requires a `.`, `_`, `-`, or a string boundary on both sides
|
|
65
|
+
* of the word, so it reads `password_hash` and `webhooks.secret` and misses
|
|
66
|
+
* `supplierToken` and `passwordScrypt` — the exact two fields the AGL-1881
|
|
67
|
+
* review found leaving the platform in a customer's own export file. One is
|
|
68
|
+
* a live bearer credential a supplier authenticates with; the other is a
|
|
69
|
+
* shopper's scrypt password hash. **A denylist of names is always one naming
|
|
70
|
+
* convention behind, and camelCase is the proof.**
|
|
71
|
+
*
|
|
72
|
+
* So the name half is now tokenized rather than separator-anchored, and it is
|
|
73
|
+
* no longer the only gate. Three run, in order, and any of them redacts:
|
|
74
|
+
*
|
|
75
|
+
* * **(A) The name, tokenized.** `supplierToken` splits to
|
|
76
|
+
* `['supplier','token']` the same way `supplier_token` and
|
|
77
|
+
* `SUPPLIER-TOKEN` do, so the convention stops mattering. A name matches
|
|
78
|
+
* on a single secret word or on an adjacent pair (`client secret`).
|
|
79
|
+
* * **(B) The VALUE's shape, whatever the key is called.** This is the half
|
|
80
|
+
* that does not need to know the schema: a PEM block, a JWT, a vendor
|
|
81
|
+
* prefix (`sk_live_`, `whsec_`, `ghp_`, `AKIA`…), a `$2b$`/`$argon2` hash,
|
|
82
|
+
* this repo's own `salt:hash` scrypt form, or an opaque high-entropy
|
|
83
|
+
* string is a credential whether the field is called `supplierToken`,
|
|
84
|
+
* `t`, or `notes`. **Gate B is the "redact unless known safe" default**:
|
|
85
|
+
* a credential-shaped string is withheld unless its key names it as a
|
|
86
|
+
* content identifier (see {@link SAFE_VALUE_WORDS}).
|
|
87
|
+
* * **(C) Credentials carried inside a URL.** `?token=`, `?sig=`,
|
|
88
|
+
* `?key=`, and `https://user:pass@host` are stripped from the URL rather
|
|
89
|
+
* than the URL being blanked, because a media object's `url` field really
|
|
90
|
+
* does carry a live Firebase download token in a query parameter, and the
|
|
91
|
+
* location of the customer's own file is exactly what an access request
|
|
92
|
+
* asks for. Precision beats blanking here.
|
|
93
|
+
*
|
|
94
|
+
* ### Why the KEY half is still deny-based, when the value half is not
|
|
95
|
+
*
|
|
96
|
+
* A true allowlist of field names is not available on this data. The export
|
|
97
|
+
* walks documents whose field names our customers author — canvas nodes,
|
|
98
|
+
* dataset records, custom metadata, form submissions — so an allowlist of
|
|
99
|
+
* names would blank most of the file and turn an access request into a
|
|
100
|
+
* non-answer, which is the under-disclosure this feature exists to stop. The
|
|
101
|
+
* allowlist therefore lives where the vocabulary IS ours: value shapes. An
|
|
102
|
+
* unrecognized VALUE shape is passed through (it is prose, a number, a date,
|
|
103
|
+
* a customer's own content); an unrecognized value shape that looks like a
|
|
104
|
+
* credential is withheld. That is the inversion the review asked for, put
|
|
105
|
+
* where it can hold.
|
|
106
|
+
*
|
|
107
|
+
* ### The one deliberate carve-out
|
|
108
|
+
*
|
|
109
|
+
* `token`/`tokens` is also a metering word — `tokensUsed: 14203` on an
|
|
110
|
+
* assist exchange is a usage count, and blanking it would blank a real
|
|
111
|
+
* disclosure. A credential is a STRING; a count is a number. So a numeric or
|
|
112
|
+
* boolean value under a name that matched only on a metering word passes
|
|
113
|
+
* through. Nothing else in the vocabulary gets that treatment.
|
|
114
|
+
*
|
|
115
|
+
* A false positive costs a redacted field in an export. A false negative
|
|
116
|
+
* costs a credential. Everything below is tuned in that direction.
|
|
117
|
+
*/
|
|
118
|
+
/**
|
|
119
|
+
* Split a field name into lowercase word tokens, convention-independently.
|
|
120
|
+
*
|
|
121
|
+
* `supplierToken`, `supplier_token`, `SUPPLIER-TOKEN` and `Supplier.Token`
|
|
122
|
+
* all become `['supplier','token']`. Acronym runs split at the last capital
|
|
123
|
+
* (`SSOTokenId` → `['sso','token','id']`) and digits break a word
|
|
124
|
+
* (`apiKey2` → `['api','key','2']`), so a numbered field cannot hide.
|
|
125
|
+
*/
|
|
126
|
+
export declare function fieldNameTokens(key: unknown): string[];
|
|
127
|
+
/**
|
|
128
|
+
* Does this STRING look like a credential, ignoring what it is called?
|
|
129
|
+
*
|
|
130
|
+
* Exported because the guard spec asserts each limb independently — a shape
|
|
131
|
+
* detector tested only through the redactor is a detector whose gaps are
|
|
132
|
+
* invisible.
|
|
133
|
+
*/
|
|
134
|
+
export declare function looksLikeCredential(value: string): boolean;
|
|
135
|
+
/** What a stripped URL parameter reads as, so the removal is visible. */
|
|
136
|
+
export declare const REDACTED_URL_PARAM = "REDACTED";
|
|
137
|
+
/**
|
|
138
|
+
* Strip the credential out of a URL, keeping the URL.
|
|
139
|
+
*
|
|
140
|
+
* A media object's `url` is `…/o/{path}?alt=media&token={uuid}` — a live,
|
|
141
|
+
* unauthenticated download credential, in a field an access request has a
|
|
142
|
+
* real interest in. Blanking the whole value would tell the customer nothing
|
|
143
|
+
* about where their own file is; keeping it whole hands out the credential.
|
|
144
|
+
* So the parameter is replaced and the rest survives. `user:pass@` userinfo
|
|
145
|
+
* goes the same way.
|
|
146
|
+
*
|
|
147
|
+
* Returns the input unchanged when it is not a URL — every non-URL string
|
|
148
|
+
* has already been decided by the shape gate.
|
|
149
|
+
*/
|
|
150
|
+
export declare function scrubUrlCredentials(value: string): string;
|
|
151
|
+
/**
|
|
152
|
+
* Gate (A): does the NAME say credential?
|
|
153
|
+
*
|
|
154
|
+
* `value` is consulted only for the metering carve-out described in the
|
|
155
|
+
* header — a `tokensUsed: 14203` is a count, not a credential.
|
|
156
|
+
*/
|
|
157
|
+
export declare function secretByName(key: unknown, value?: unknown): boolean;
|
|
158
|
+
/** What a redacted value is replaced with — presence, never content. */
|
|
159
|
+
export interface RedactedValue {
|
|
160
|
+
redacted: true;
|
|
161
|
+
/** Whether a value was actually there, so absence is distinguishable. */
|
|
162
|
+
present: boolean;
|
|
163
|
+
reason: 'secret';
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Deep-copy a document, replacing every credential-shaped value with a
|
|
167
|
+
* presence marker.
|
|
168
|
+
*
|
|
169
|
+
* Presence rather than deletion, because "we hold a webhook secret for you"
|
|
170
|
+
* is itself a true and disclosable fact, and a silently-absent key would make
|
|
171
|
+
* the export look like it holds less than it does — the under-disclosure this
|
|
172
|
+
* feature exists to stop, reintroduced by the safety measure.
|
|
173
|
+
*
|
|
174
|
+
* Firestore values that are not plain JSON (Timestamp, GeoPoint, DocumentRef,
|
|
175
|
+
* Buffer) are stringified rather than walked: they carry no nested keys to
|
|
176
|
+
* redact, and `JSON.stringify` on a Timestamp yields `{_seconds,_nanoseconds}`,
|
|
177
|
+
* which is not a date to a human reading the file.
|
|
178
|
+
*
|
|
179
|
+
* Three gates, any of which redacts — the name (A), the value's shape (B),
|
|
180
|
+
* and a credential embedded in a URL (C). See the header above
|
|
181
|
+
* {@link fieldNameTokens} for why the value half is the one that carries the
|
|
182
|
+
* "withhold unless known safe" default.
|
|
183
|
+
*/
|
|
184
|
+
export declare function redactSecrets(value: unknown, key?: string): unknown;
|
|
185
|
+
export interface ExportedDocument {
|
|
186
|
+
/** Document id — omitted where the id is itself a secret (see `apiKeys`). */
|
|
187
|
+
id?: string;
|
|
188
|
+
path?: string;
|
|
189
|
+
data: unknown;
|
|
190
|
+
}
|
|
191
|
+
export interface PersonalDataExport {
|
|
192
|
+
subject: {
|
|
193
|
+
type: ExportSubject;
|
|
194
|
+
id: string;
|
|
195
|
+
};
|
|
196
|
+
generatedAt: string;
|
|
197
|
+
/**
|
|
198
|
+
* The disclosure decision for every source, copied into the file the
|
|
199
|
+
* customer receives. An export that silently omits a collection is
|
|
200
|
+
* indistinguishable from one that has nothing to report; this makes the two
|
|
201
|
+
* different, and it is what a supervisory authority would ask to see.
|
|
202
|
+
*/
|
|
203
|
+
coverage: readonly ExportSourceSpec[];
|
|
204
|
+
/** Collection name → the documents disclosed for it. */
|
|
205
|
+
data: Record<string, ExportedDocument[]>;
|
|
206
|
+
/** Collection name → row count, for sources disclosed as a count only. */
|
|
207
|
+
counts: Record<string, number>;
|
|
208
|
+
/** Places we hold data that is not in Firestore. */
|
|
209
|
+
elsewhere: readonly string[];
|
|
210
|
+
}
|
|
211
|
+
export interface ExportOptions {
|
|
212
|
+
/** Injectable for tests; defaults to the admin app's Firestore. */
|
|
213
|
+
firestore?: any;
|
|
214
|
+
/** Stops a pathological workspace from building an unbounded file. */
|
|
215
|
+
maxDepth?: number;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Everything we hold about a PERSON, as the person themselves may ask for it
|
|
219
|
+
* (GDPR Art. 15 and Art. 20).
|
|
220
|
+
*
|
|
221
|
+
* Scoped to them, never to the workspaces they belong to. Their membership row
|
|
222
|
+
* in each org is theirs; the roster around it is their colleagues'. An org
|
|
223
|
+
* export is a separate call with a separate authorization, which is the whole
|
|
224
|
+
* reason the two are different functions rather than one with a flag.
|
|
225
|
+
*/
|
|
226
|
+
export declare function exportUserData(uid: string, options?: ExportOptions): Promise<PersonalDataExport>;
|
|
227
|
+
/**
|
|
228
|
+
* Everything we hold about a WORKSPACE, for its owner (Art. 15 for the
|
|
229
|
+
* personal data in it, and the "export before you delete" the Delete tab,
|
|
230
|
+
* DPA §11 and Terms §13.3 have been promising).
|
|
231
|
+
*
|
|
232
|
+
* Every top-level collection the erasure sweeps by `orgId` is read here by the
|
|
233
|
+
* same bound, so the two see the same rows. Where a source is withheld, its
|
|
234
|
+
* COUNT is still reported: a collection that appears in neither the data nor
|
|
235
|
+
* the counts is indistinguishable from one that does not exist, and that
|
|
236
|
+
* ambiguity is what makes an incomplete export undetectable.
|
|
237
|
+
*/
|
|
238
|
+
export declare function exportOrgData(orgId: string, options?: ExportOptions): Promise<PersonalDataExport>;
|
|
239
|
+
/** A filename a human can file: subject, id and the date it was produced. */
|
|
240
|
+
export declare function exportFilename(exported: PersonalDataExport): string;
|
|
241
|
+
export default exportUserData;
|