@aglyn/tenant-data-admin 1.0.0-beta.220 → 1.0.0-beta.222
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/package.json +7 -7
- package/src/lib/server/api-keys.js +3 -3
- package/src/lib/server/api-keys.js.map +1 -1
- package/src/lib/server/api-v1-resources.d.ts +44 -3
- package/src/lib/server/api-v1-resources.js +82 -5
- package/src/lib/server/api-v1-resources.js.map +1 -1
- package/src/lib/server/collection-live-pages.d.ts +2 -2
- package/src/lib/server/collection-live-pages.js +1 -1
- package/src/lib/server/collection-live-pages.js.map +1 -1
- package/src/lib/server/email-delivery-log.d.ts +17 -73
- package/src/lib/server/email-delivery-log.js +44 -222
- package/src/lib/server/email-delivery-log.js.map +1 -1
- package/src/lib/server/email-flow-gate.js +27 -38
- package/src/lib/server/email-flow-gate.js.map +1 -1
- package/src/lib/server/erase-person.d.ts +34 -54
- package/src/lib/server/erase-person.js +44 -239
- package/src/lib/server/erase-person.js.map +1 -1
- package/src/lib/server/host-visitor-records.d.ts +12 -4
- package/src/lib/server/host-visitor-records.js +20 -10
- package/src/lib/server/host-visitor-records.js.map +1 -1
- package/src/lib/server/hosted-page-review.d.ts +7 -0
- package/src/lib/server/hosted-page-review.js +144 -20
- package/src/lib/server/hosted-page-review.js.map +1 -1
- package/src/lib/server/leaving-notice.d.ts +98 -0
- package/src/lib/server/leaving-notice.js +250 -0
- package/src/lib/server/leaving-notice.js.map +1 -0
- package/src/lib/server/link-reputation-review.d.ts +58 -0
- package/src/lib/server/link-reputation-review.js +185 -0
- package/src/lib/server/link-reputation-review.js.map +1 -0
- package/src/lib/server/live-page-drops.d.ts +67 -0
- package/src/lib/server/live-page-drops.js +57 -0
- package/src/lib/server/live-page-drops.js.map +1 -0
- package/src/lib/server/media-bandwidth-cap.d.ts +78 -0
- package/src/lib/server/media-bandwidth-cap.js +180 -0
- package/src/lib/server/media-bandwidth-cap.js.map +1 -0
- package/src/lib/server/media-cdn-icon.d.ts +77 -0
- package/src/lib/server/media-cdn-icon.js +140 -0
- package/src/lib/server/media-cdn-icon.js.map +1 -0
- package/src/lib/server/media-delivery-regeneration.d.ts +132 -0
- package/src/lib/server/media-delivery-regeneration.js +216 -0
- package/src/lib/server/media-delivery-regeneration.js.map +1 -0
- package/src/lib/server/media-delivery.d.ts +2 -0
- package/src/lib/server/media-delivery.js +2 -1
- package/src/lib/server/media-delivery.js.map +1 -1
- package/src/lib/server/media-serve-count.d.ts +50 -0
- package/src/lib/server/media-serve-count.js +62 -0
- package/src/lib/server/media-serve-count.js.map +1 -0
- package/src/lib/server/media-signing.d.ts +13 -2
- package/src/lib/server/media-signing.js +12 -8
- package/src/lib/server/media-signing.js.map +1 -1
- package/src/lib/server/media-tombstone.js +7 -5
- package/src/lib/server/media-tombstone.js.map +1 -1
- package/src/lib/server/media-variants.d.ts +151 -20
- package/src/lib/server/media-variants.js +204 -27
- package/src/lib/server/media-variants.js.map +1 -1
- package/src/lib/server/org-age.d.ts +15 -6
- package/src/lib/server/org-age.js +20 -8
- package/src/lib/server/org-age.js.map +1 -1
- package/src/lib/server/organizations.d.ts +102 -2
- package/src/lib/server/organizations.js +388 -58
- package/src/lib/server/organizations.js.map +1 -1
- package/src/lib/server/outbound-send-review.js +24 -6
- package/src/lib/server/outbound-send-review.js.map +1 -1
- package/src/lib/server/page-security-hold.d.ts +93 -0
- package/src/lib/server/page-security-hold.js +180 -0
- package/src/lib/server/page-security-hold.js.map +1 -0
- package/src/lib/server/paged-sweeps.d.ts +51 -0
- package/src/lib/server/paged-sweeps.js +79 -0
- package/src/lib/server/paged-sweeps.js.map +1 -0
- package/src/lib/server/platform-marketing-consent.d.ts +0 -49
- package/src/lib/server/platform-marketing-consent.js +27 -11
- package/src/lib/server/platform-marketing-consent.js.map +1 -1
- package/src/lib/server/serve-media-cdn.d.ts +69 -1
- package/src/lib/server/serve-media-cdn.js +424 -70
- package/src/lib/server/serve-media-cdn.js.map +1 -1
- package/src/lib/server/site-icon-render.d.ts +68 -0
- package/src/lib/server/site-icon-render.js +157 -0
- package/src/lib/server/site-icon-render.js.map +1 -0
- package/src/lib/server/staff-seat.d.ts +50 -0
- package/src/lib/server/staff-seat.js +118 -0
- package/src/lib/server/staff-seat.js.map +1 -0
- package/src/lib/server/transfer-export.d.ts +46 -0
- package/src/lib/server/transfer-export.js +221 -0
- package/src/lib/server/transfer-export.js.map +1 -0
- package/src/lib/server/transfer-jobs.d.ts +385 -0
- package/src/lib/server/transfer-jobs.js +2368 -0
- package/src/lib/server/transfer-jobs.js.map +1 -0
- package/src/lib/server/transfer-packages.d.ts +127 -0
- package/src/lib/server/transfer-packages.js +1036 -0
- package/src/lib/server/transfer-packages.js.map +1 -0
- package/src/lib/server/upgrade-proposal.d.ts +97 -0
- package/src/lib/server/upgrade-proposal.js +312 -0
- package/src/lib/server/upgrade-proposal.js.map +1 -0
- package/src/lib/server/upsert-contact.d.ts +17 -8
- package/src/lib/server/upsert-contact.js +82 -16
- package/src/lib/server/upsert-contact.js.map +1 -1
- package/src/lib/server/web-risk.d.ts +139 -0
- package/src/lib/server/web-risk.js +521 -0
- package/src/lib/server/web-risk.js.map +1 -0
- package/src/tenancy.d.ts +3 -1
- package/src/tenancy.js +5 -1
- package/src/tenancy.js.map +1 -1
- package/src/lib/server/campaign-attribution-store.d.ts +0 -55
- package/src/lib/server/campaign-attribution-store.js +0 -95
- package/src/lib/server/campaign-attribution-store.js.map +0 -1
- package/src/lib/server/campaign-conversion-attribution.d.ts +0 -283
- package/src/lib/server/campaign-conversion-attribution.js +0 -450
- package/src/lib/server/campaign-conversion-attribution.js.map +0 -1
- package/src/lib/server/dataset-live-pages.d.ts +0 -179
- package/src/lib/server/dataset-live-pages.js +0 -421
- package/src/lib/server/dataset-live-pages.js.map +0 -1
- package/src/lib/server/email-revenue-attribution.d.ts +0 -185
- package/src/lib/server/email-revenue-attribution.js +0 -321
- package/src/lib/server/email-revenue-attribution.js.map +0 -1
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* and the projections the security rules authorize against are never
|
|
21
21
|
* client-writable (docs/MULTI_TENANT_FIRESTORE.md §8).
|
|
22
22
|
*/
|
|
23
|
-
import { type ConsentGroup, type AglynOrganization, type AglynOrgBilling, type AglynOrgMember, type HostAccessRole, type OrgPermission, type OrgRole } from '@aglyn/aglyn/server';
|
|
23
|
+
import { type ConsentGroup, type AglynOrganization, type AglynOrgBilling, type AglynOrgMember, type HostAccessRole, type OrgPermission, type OrgRole, type OwnerHandoffPreviousOwner } from '@aglyn/aglyn/server';
|
|
24
24
|
import type { PluginActivityTargetType } from '@aglyn/aglyn/plugin-manager/plugin-activity-actions';
|
|
25
25
|
import type { HostActivityActor } from '@aglyn/aglyn/app-utils/activity-presenter';
|
|
26
26
|
export declare class OrgSlugTakenError extends Error {
|
|
@@ -102,6 +102,13 @@ export interface CreateOrganizationOptions {
|
|
|
102
102
|
* nothing else.
|
|
103
103
|
*/
|
|
104
104
|
bypassFreeWorkspaceCap?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Whether the creator holds the `staff` claim, when the caller already
|
|
107
|
+
* knows (AGL-3466). Absent, it is looked up. A staff creator's owner row is
|
|
108
|
+
* stamped `staffSeat: true`, so a workspace staff build for a prospect
|
|
109
|
+
* leaves the prospect's one Free seat free for the prospect.
|
|
110
|
+
*/
|
|
111
|
+
ownerStaffSeat?: boolean;
|
|
105
112
|
}
|
|
106
113
|
/**
|
|
107
114
|
* Creates an org in one transaction: slug reservation (uniqueness), org
|
|
@@ -435,7 +442,7 @@ options?: {
|
|
|
435
442
|
}): Promise<void>;
|
|
436
443
|
/** What a host activity entry points at. Mirrors `HostActivityTarget`. */
|
|
437
444
|
export interface HostActivityTarget {
|
|
438
|
-
type: 'host' | 'screen' | 'layout' | 'theme' | 'media' | 'content' | 'variable' | 'function' | 'workflow' | 'member' | 'component' | 'template' | 'contact' | 'company' | 'deal' | 'lead';
|
|
445
|
+
type: 'host' | 'screen' | 'layout' | 'theme' | 'media' | 'content' | 'variable' | 'function' | 'workflow' | 'member' | 'component' | 'template' | 'contact' | 'company' | 'deal' | 'lead' | PluginActivityTargetType;
|
|
439
446
|
id?: string;
|
|
440
447
|
name?: string;
|
|
441
448
|
versionId?: string;
|
|
@@ -514,9 +521,11 @@ export declare function collaboratorSeatRefusal(options: {
|
|
|
514
521
|
orgId: string;
|
|
515
522
|
org: Partial<AglynOrgBilling>;
|
|
516
523
|
hostIds: string[];
|
|
524
|
+
/** `staffSeat` admits platform staff without a seat (AGL-3466). */
|
|
517
525
|
self?: {
|
|
518
526
|
uid?: string | null;
|
|
519
527
|
email?: string | null;
|
|
528
|
+
staffSeat?: boolean;
|
|
520
529
|
};
|
|
521
530
|
}): Promise<Response | null>;
|
|
522
531
|
/**
|
|
@@ -566,9 +575,11 @@ export declare function managerSeatRefusal(options: {
|
|
|
566
575
|
orgId: string;
|
|
567
576
|
org: Partial<AglynOrgBilling>;
|
|
568
577
|
becomesManager: boolean;
|
|
578
|
+
/** `staffSeat` admits platform staff without a seat (AGL-3466). */
|
|
569
579
|
self?: {
|
|
570
580
|
uid?: string | null;
|
|
571
581
|
email?: string | null;
|
|
582
|
+
staffSeat?: boolean;
|
|
572
583
|
};
|
|
573
584
|
}): Promise<Response | null>;
|
|
574
585
|
export interface UpsertOrgMemberOptions {
|
|
@@ -755,6 +766,95 @@ export declare function backfillMemberIdentityEverywhere(uid: string, identity:
|
|
|
755
766
|
* sequence to keep it that way.
|
|
756
767
|
*/
|
|
757
768
|
export declare function transferOrgOwnership(orgId: string, fromUid: string, toUid: string): Promise<void>;
|
|
769
|
+
/**
|
|
770
|
+
* An owner handoff refused because it would need a team seat the plan does
|
|
771
|
+
* not have (AGL-3466).
|
|
772
|
+
*
|
|
773
|
+
* The loophole guard. A handoff reserves no seat, because the owner seat
|
|
774
|
+
* MOVES — but a `stay` handoff keeps the outgoing owner as an admin, so the
|
|
775
|
+
* workspace ends with one more manager than it started with. On Free that is
|
|
776
|
+
* a second manager on a one-seat plan, and without this check any owner could
|
|
777
|
+
* mint free managers by handing the workspace back and forth. The refusal
|
|
778
|
+
* names the way out: the outgoing owner leaving instead.
|
|
779
|
+
*
|
|
780
|
+
* Separate from {@link ManagerSeatLimitError} because the remedy is
|
|
781
|
+
* different, and a client that branches on `code` must be able to tell.
|
|
782
|
+
*/
|
|
783
|
+
export declare class OwnerHandoffSeatError extends Error {
|
|
784
|
+
readonly limit: number;
|
|
785
|
+
readonly upgradeRequired: boolean;
|
|
786
|
+
readonly previousOwner: OwnerHandoffPreviousOwner;
|
|
787
|
+
constructor(previousOwner: OwnerHandoffPreviousOwner, quota: {
|
|
788
|
+
limit: number;
|
|
789
|
+
upgradeRequired: boolean;
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* An owner handoff that can no longer be accepted as asked (AGL-3466): the
|
|
794
|
+
* invite was answered or withdrawn in the meantime, is not a handoff, is
|
|
795
|
+
* addressed to somebody else, or the accepter already owns the workspace.
|
|
796
|
+
*/
|
|
797
|
+
export declare class OwnerHandoffError extends Error {
|
|
798
|
+
readonly reason: 'not-pending' | 'not-handoff' | 'not-addressed' | 'already-owner';
|
|
799
|
+
constructor(reason: OwnerHandoffError['reason']);
|
|
800
|
+
}
|
|
801
|
+
/**
|
|
802
|
+
* Turn a handoff refusal into the response the invite route returns, or
|
|
803
|
+
* null when the error is something else and must keep propagating.
|
|
804
|
+
*/
|
|
805
|
+
export declare function ownerHandoffRefusalResponse(error: unknown): Response | null;
|
|
806
|
+
/**
|
|
807
|
+
* The handoff seat check, asked when the invitation is SENT (AGL-3466), so
|
|
808
|
+
* nobody is mailed a handoff that will be refused when they click it.
|
|
809
|
+
*
|
|
810
|
+
* Not the enforcement — `acceptOwnerHandoff` asks again inside its
|
|
811
|
+
* transaction, against the account that actually accepts. Here the invitee
|
|
812
|
+
* is only an address, so their current seat is read off the roster row that
|
|
813
|
+
* carries it.
|
|
814
|
+
*
|
|
815
|
+
* @returns the 403 to send, or null to proceed.
|
|
816
|
+
*/
|
|
817
|
+
export declare function ownerHandoffSeatRefusal(options: {
|
|
818
|
+
orgId: string;
|
|
819
|
+
email: string;
|
|
820
|
+
previousOwner: OwnerHandoffPreviousOwner;
|
|
821
|
+
inviteeStaff: boolean;
|
|
822
|
+
}): Promise<Response | null>;
|
|
823
|
+
export interface AcceptOwnerHandoffOptions {
|
|
824
|
+
orgId: string;
|
|
825
|
+
inviteId: string;
|
|
826
|
+
/** The account accepting, which becomes the owner. */
|
|
827
|
+
uid: string;
|
|
828
|
+
/** The accepter's primary address, mirrored onto their roster row. */
|
|
829
|
+
email: string;
|
|
830
|
+
/**
|
|
831
|
+
* Every CONFIRMED address on the accepting account (AGL-2486). The invite
|
|
832
|
+
* must be addressed to one of them, re-checked inside the transaction.
|
|
833
|
+
*/
|
|
834
|
+
emails: readonly string[];
|
|
835
|
+
displayName?: string;
|
|
836
|
+
photoURL?: string;
|
|
837
|
+
}
|
|
838
|
+
export interface AcceptOwnerHandoffResult {
|
|
839
|
+
previousOwnerUid: string;
|
|
840
|
+
previousOwner: OwnerHandoffPreviousOwner;
|
|
841
|
+
}
|
|
842
|
+
/**
|
|
843
|
+
* Accept an owner handoff (AGL-3466): the invitee becomes the owner, the
|
|
844
|
+
* outgoing owner stays on as an admin or leaves, and the invite is marked
|
|
845
|
+
* accepted — all in ONE transaction, with the seat check inside it.
|
|
846
|
+
*
|
|
847
|
+
* The move itself is {@link writeOwnershipMove}, the same writes a transfer
|
|
848
|
+
* makes. What this adds is what an invitation needs that a transfer does not:
|
|
849
|
+
* the incoming owner may not be on the roster yet, so their row is created
|
|
850
|
+
* with the identity a join would give it; and the outgoing owner may leave.
|
|
851
|
+
*
|
|
852
|
+
* The SSO lockout check is the CALLER's, for the reason
|
|
853
|
+
* `assessOwnershipTransferLockout` gives: it cannot live in this library
|
|
854
|
+
* without an import cycle, and `sso-transfer-lockout-wiring.spec.ts` pins
|
|
855
|
+
* that every caller of this asks it first.
|
|
856
|
+
*/
|
|
857
|
+
export declare function acceptOwnerHandoff(options: AcceptOwnerHandoffOptions): Promise<AcceptOwnerHandoffResult>;
|
|
758
858
|
/**
|
|
759
859
|
* Grants (or updates) per-host access for a uid without disturbing an
|
|
760
860
|
* existing membership's org role or allHosts flag (AGL-238: the host user
|