@aglyn/tenant-data-admin 1.0.0-beta.199 → 1.0.0-beta.201

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.
Files changed (96) hide show
  1. package/package.json +8 -7
  2. package/src/lib/server/admin-audit-write.d.ts +28 -0
  3. package/src/lib/server/admin-audit-write.js +46 -0
  4. package/src/lib/server/admin-audit-write.js.map +1 -0
  5. package/src/lib/server/admin-audit.d.ts +4 -9
  6. package/src/lib/server/admin-audit.js +12 -31
  7. package/src/lib/server/admin-audit.js.map +1 -1
  8. package/src/lib/server/consent-group-carry.js +2 -0
  9. package/src/lib/server/consent-group-carry.js.map +1 -1
  10. package/src/lib/server/contact-company-link.js +3 -0
  11. package/src/lib/server/contact-company-link.js.map +1 -1
  12. package/src/lib/server/contact-lifecycle-floor.js +3 -0
  13. package/src/lib/server/contact-lifecycle-floor.js.map +1 -1
  14. package/src/lib/server/contact-merge.js +4 -0
  15. package/src/lib/server/contact-merge.js.map +1 -1
  16. package/src/lib/server/crm-booking-activity.js +3 -2
  17. package/src/lib/server/crm-booking-activity.js.map +1 -1
  18. package/src/lib/server/crm-records.d.ts +15 -0
  19. package/src/lib/server/crm-records.js +52 -0
  20. package/src/lib/server/crm-records.js.map +1 -1
  21. package/src/lib/server/csp-aggregate.d.ts +16 -0
  22. package/src/lib/server/csp-aggregate.js +36 -0
  23. package/src/lib/server/csp-aggregate.js.map +1 -1
  24. package/src/lib/server/dns-probe.d.ts +7 -0
  25. package/src/lib/server/dns-probe.js +52 -0
  26. package/src/lib/server/dns-probe.js.map +1 -1
  27. package/src/lib/server/duplicate-resource.js +12 -5
  28. package/src/lib/server/duplicate-resource.js.map +1 -1
  29. package/src/lib/server/email-deliverability.d.ts +150 -0
  30. package/src/lib/server/email-deliverability.js +538 -0
  31. package/src/lib/server/email-deliverability.js.map +1 -0
  32. package/src/lib/server/email-delivery-log.d.ts +33 -0
  33. package/src/lib/server/email-delivery-log.js +43 -2
  34. package/src/lib/server/email-delivery-log.js.map +1 -1
  35. package/src/lib/server/email-sender-reputation.d.ts +2 -11
  36. package/src/lib/server/email-sender-reputation.js +8 -25
  37. package/src/lib/server/email-sender-reputation.js.map +1 -1
  38. package/src/lib/server/email-suppression.d.ts +21 -15
  39. package/src/lib/server/email-suppression.js +18 -34
  40. package/src/lib/server/email-suppression.js.map +1 -1
  41. package/src/lib/server/erase-person.js +53 -6
  42. package/src/lib/server/erase-person.js.map +1 -1
  43. package/src/lib/server/erase.js +4 -3
  44. package/src/lib/server/erase.js.map +1 -1
  45. package/src/lib/server/host-memberships.d.ts +34 -0
  46. package/src/lib/server/host-memberships.js +89 -1
  47. package/src/lib/server/host-memberships.js.map +1 -1
  48. package/src/lib/server/host-visitor-records.d.ts +16 -2
  49. package/src/lib/server/host-visitor-records.js +52 -7
  50. package/src/lib/server/host-visitor-records.js.map +1 -1
  51. package/src/lib/server/hosted-page-review.d.ts +92 -0
  52. package/src/lib/server/hosted-page-review.js +342 -0
  53. package/src/lib/server/hosted-page-review.js.map +1 -0
  54. package/src/lib/server/list-members.d.ts +11 -0
  55. package/src/lib/server/list-members.js +28 -1
  56. package/src/lib/server/list-members.js.map +1 -1
  57. package/src/lib/server/list-query.d.ts +36 -0
  58. package/src/lib/server/list-query.js +49 -0
  59. package/src/lib/server/list-query.js.map +1 -0
  60. package/src/lib/server/media-tombstone.js +8 -2
  61. package/src/lib/server/media-tombstone.js.map +1 -1
  62. package/src/lib/server/org-age.d.ts +27 -0
  63. package/src/lib/server/org-age.js +44 -0
  64. package/src/lib/server/org-age.js.map +1 -0
  65. package/src/lib/server/org-member-list-fields.d.ts +31 -0
  66. package/src/lib/server/org-member-list-fields.js +38 -0
  67. package/src/lib/server/org-member-list-fields.js.map +1 -0
  68. package/src/lib/server/organizations.js +37 -7
  69. package/src/lib/server/organizations.js.map +1 -1
  70. package/src/lib/server/outbound-send-review.d.ts +222 -0
  71. package/src/lib/server/outbound-send-review.js +479 -0
  72. package/src/lib/server/outbound-send-review.js.map +1 -0
  73. package/src/lib/server/payment-fraud-signal.d.ts +156 -0
  74. package/src/lib/server/payment-fraud-signal.js +368 -0
  75. package/src/lib/server/payment-fraud-signal.js.map +1 -0
  76. package/src/lib/server/payment-risk-record.d.ts +59 -0
  77. package/src/lib/server/payment-risk-record.js +76 -0
  78. package/src/lib/server/payment-risk-record.js.map +1 -0
  79. package/src/lib/server/replay-erasures.js +2 -1
  80. package/src/lib/server/replay-erasures.js.map +1 -1
  81. package/src/lib/server/sending-domains.d.ts +6 -0
  82. package/src/lib/server/sending-domains.js +98 -6
  83. package/src/lib/server/sending-domains.js.map +1 -1
  84. package/src/lib/server/sso-enforcement.js +2 -1
  85. package/src/lib/server/sso-enforcement.js.map +1 -1
  86. package/src/lib/server/stripe-card-authentication.d.ts +35 -0
  87. package/src/lib/server/stripe-card-authentication.js +63 -0
  88. package/src/lib/server/stripe-card-authentication.js.map +1 -0
  89. package/src/lib/server/tenant-write-lockdown.d.ts +32 -2
  90. package/src/lib/server/tenant-write-lockdown.js +33 -3
  91. package/src/lib/server/tenant-write-lockdown.js.map +1 -1
  92. package/src/lib/server/upsert-contact.js +8 -4
  93. package/src/lib/server/upsert-contact.js.map +1 -1
  94. package/src/tenancy.d.ts +3 -0
  95. package/src/tenancy.js +8 -0
  96. package/src/tenancy.js.map +1 -1
@@ -21,6 +21,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
21
21
  * client-writable (docs/MULTI_TENANT_FIRESTORE.md §8).
22
22
  */ import { consentGroupForHost, checkHostCollaboratorQuota, checkSeatQuota, countCollaboratorSeats, countManagerSeatsExcluding, createResourceUid, generateOrgSlug, projectMemberResolvedPermissions, resolveOrgPermissions, isOrgWideMember, isValidOrgSlug, hostPermissionKeys, orgPermissionLabel, pluginOrgPermissionKeys, projectHostMemberPermissions, projectHostMemberRoles, projectMemberScopeTokens, resolveCollaboratorHostPermissions, scopeTokensForHost } from "@aglyn/aglyn/server";
23
23
  import { ACCOUNT_ACQUISITION_FIELD, organizationAcquisition } from "@aglyn/aglyn/app-utils/account-acquisition";
24
+ import { activitySearchTokens } from "@aglyn/aglyn/app-utils/activity-search";
24
25
  import { nameSearchKey, nameSearchReversed, nameSearchTokens } from "@aglyn/aglyn/app-utils/name-search";
25
26
  // LEAF MODULE, NOT THE BARREL (AGL-1289). This file is itself reachable
26
27
  // through `@aglyn/aglyn/server`, and the verdict route proved this week that a
@@ -34,6 +35,7 @@ import { findUserByUidAcrossPools } from "./auth-pools.js";
34
35
  import firebaseAdmin from "./firebase-admin.js";
35
36
  import { enforceFreeWorkspaceCapInTransaction, readFreeWorkspaceCapConfig } from "./free-workspace-cap.js";
36
37
  import { deleteMemberHostProjections, syncHostProjectionForMembers, syncMemberHostProjections } from "./host-memberships.js";
38
+ import { ORG_MEMBER_LIST_FIELD_NAMES, orgMemberListFields, orgMemberSearchTokens } from "./org-member-list-fields.js";
37
39
  import { updateExisting } from "./update-existing.js";
38
40
  import { attachWorkspaceDomain } from "./workspace-domains.js";
39
41
  const firestore = ()=>firebaseAdmin.app().firestore();
@@ -252,7 +254,7 @@ reservation, now = Date.now()) {
252
254
  createdAt: FieldValue.serverTimestamp(),
253
255
  updatedAt: FieldValue.serverTimestamp()
254
256
  });
255
- tx.set(db.collection('orgs').doc(orgId).collection('members').doc(ownerUid), {
257
+ tx.set(db.collection('orgs').doc(orgId).collection('members').doc(ownerUid), _extends({
256
258
  role: 'owner',
257
259
  allHosts: true,
258
260
  email: ownerEmail != null ? ownerEmail : null,
@@ -273,7 +275,13 @@ reservation, now = Date.now()) {
273
275
  */ scopeTokens: projectMemberScopeTokens({
274
276
  role: 'owner',
275
277
  allHosts: true
276
- }),
278
+ })
279
+ }, orgMemberListFields({
280
+ role: 'owner',
281
+ allHosts: true,
282
+ email: ownerEmail != null ? ownerEmail : undefined,
283
+ displayName: ownerDisplayName != null ? ownerDisplayName : undefined
284
+ }), {
277
285
  /*
278
286
  * The permission projection, stamped here for the same reason and
279
287
  * with the same consequence if it is missed.
@@ -288,7 +296,7 @@ reservation, now = Date.now()) {
288
296
  role: 'owner',
289
297
  allHosts: true
290
298
  }, null)
291
- });
299
+ }));
292
300
  tx.set(db.collection('users').doc(ownerUid).collection('orgs').doc(orgId), // The owner reaches every site by definition (AGL-1032).
293
301
  {
294
302
  role: 'owner',
@@ -778,7 +786,8 @@ export async function listOrgMembers(orgId) {
778
786
  const MEMBER_PROJECTION_WRITE = {
779
787
  mergeFields: [
780
788
  'scopeTokens',
781
- 'resolvedPermissions'
789
+ 'resolvedPermissions',
790
+ ...ORG_MEMBER_LIST_FIELD_NAMES
782
791
  ]
783
792
  };
784
793
  /**
@@ -847,7 +856,7 @@ const MEMBER_PROJECTION_WRITE = {
847
856
  var _customRoles_get;
848
857
  return [
849
858
  orgRef.collection('members').doc(member.$id),
850
- {
859
+ _extends({
851
860
  scopeTokens: projectMemberScopeTokens(member),
852
861
  resolvedPermissions: projectMemberResolvedPermissions(member, // `?? null`, never `?? undefined`: a member whose `roleId`
853
862
  // points at a DELETED role must resolve to their role
@@ -856,7 +865,7 @@ const MEMBER_PROJECTION_WRITE = {
856
865
  // dangling id. Leaving it undefined would be the same value,
857
866
  // but the null says the lookup happened and missed.
858
867
  member.roleId ? (_customRoles_get = customRoles.get(member.roleId)) != null ? _customRoles_get : null : null)
859
- },
868
+ }, orgMemberListFields(member)),
860
869
  MEMBER_PROJECTION_WRITE
861
870
  ];
862
871
  })
@@ -904,6 +913,11 @@ const MEMBER_PROJECTION_WRITE = {
904
913
  } : {}, target.versionId ? {
905
914
  versionId: target.versionId
906
915
  } : {}),
916
+ // What the log's search box finds the entry by (AGL-3321).
917
+ searchTokens: activitySearchTokens({
918
+ actorEmail: actor.email,
919
+ target
920
+ }),
907
921
  createdAt: FieldValue.serverTimestamp()
908
922
  }).catch(()=>undefined);
909
923
  }
@@ -945,6 +959,13 @@ const MEMBER_PROJECTION_WRITE = {
945
959
  } : {}, target.versionId ? {
946
960
  versionId: target.versionId
947
961
  } : {}),
962
+ // What the log's search box finds the entry by (AGL-3321): the key's
963
+ // name stands in for an address an integration does not have.
964
+ searchTokens: activitySearchTokens({
965
+ actorEmail: actor.email,
966
+ apiKeyName: actor.apiKeyName,
967
+ target
968
+ }),
948
969
  createdAt: FieldValue.serverTimestamp()
949
970
  })).catch(()=>undefined);
950
971
  }
@@ -1472,7 +1493,16 @@ const MEMBER_PROJECTION_WRITE = {
1472
1493
  patch['photoURL'] = photoURL;
1473
1494
  }
1474
1495
  if (!Object.keys(patch).length) return [];
1475
- await ref.set(patch, {
1496
+ // A filled name is a name the roster's search finds (AGL-3321); a photo
1497
+ // alone changes nothing the search reads.
1498
+ const searchTokens = patch['displayName'] ? {
1499
+ searchTokens: orgMemberSearchTokens({
1500
+ displayName: patch['displayName'],
1501
+ email: snapshot.get('email'),
1502
+ title: snapshot.get('title')
1503
+ })
1504
+ } : {};
1505
+ await ref.set(_extends({}, patch, searchTokens), {
1476
1506
  merge: true
1477
1507
  });
1478
1508
  return Object.keys(patch);