@aglyn/aglyn 1.0.0-beta.180 → 1.0.0-beta.181

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aglyn/aglyn",
3
- "version": "1.0.0-beta.180",
3
+ "version": "1.0.0-beta.181",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://aglyn.com",
6
6
  "repository": {
@@ -33,16 +33,16 @@
33
33
  "./package.json": "./package.json"
34
34
  },
35
35
  "dependencies": {
36
- "@aglyn/shared-data-enums": "1.0.0-beta.180",
37
- "@aglyn/shared-data-mdi": "1.0.0-beta.180",
38
- "@aglyn/shared-data-types": "1.0.0-beta.180",
39
- "@aglyn/shared-util-email": "1.0.0-beta.180",
40
- "@aglyn/shared-util-first-touch": "1.0.0-beta.180",
41
- "@aglyn/shared-util-http": "1.0.0-beta.180",
42
- "@aglyn/shared-util-logger": "1.0.0-beta.180",
43
- "@aglyn/shared-util-timestamp": "1.0.0-beta.180",
44
- "@aglyn/shared-util-tools": "1.0.0-beta.180",
45
- "@aglyn/shared-util-vendor": "1.0.0-beta.180",
36
+ "@aglyn/shared-data-enums": "1.0.0-beta.181",
37
+ "@aglyn/shared-data-mdi": "1.0.0-beta.181",
38
+ "@aglyn/shared-data-types": "1.0.0-beta.181",
39
+ "@aglyn/shared-util-email": "1.0.0-beta.181",
40
+ "@aglyn/shared-util-first-touch": "1.0.0-beta.181",
41
+ "@aglyn/shared-util-http": "1.0.0-beta.181",
42
+ "@aglyn/shared-util-logger": "1.0.0-beta.181",
43
+ "@aglyn/shared-util-timestamp": "1.0.0-beta.181",
44
+ "@aglyn/shared-util-tools": "1.0.0-beta.181",
45
+ "@aglyn/shared-util-vendor": "1.0.0-beta.181",
46
46
  "@data-driven-forms/react-form-renderer": "^4.2.0",
47
47
  "@msgpack/msgpack": "^3.1.3",
48
48
  "@types/unist": "^3.0.3",
@@ -5695,6 +5695,13 @@ export const ASSIST_DOCS_INDEX = [
5695
5695
  anchor: '#person-erasure--plugin-person-erasure-server',
5696
5696
  text: 'The person erasure removes one person from one workspace: the contact, what the CRM files beside it, and the leads, list memberships and delivery log under the address. A plugin that keeps records about such a person under the organization — keyed by the contact or by the address — registers an eraser from its declarations:\n| API | Semantics |\n| registerPluginPersonEraser(eraser, { pluginId? }) | One eraser per plugin; registering again replaces it in place. |\n| runPluginPersonErasers({ orgId, email, key, contactIds, dryRun }) | What the erasure calls after every site\'s suppression row is written and before the contacts are deleted. Every eraser in registration order; each plugin\'s report by plugin id, or null for an eraser that threw — logged, and never the erasure\'s failure. |\nkey is personKey(email): how every suppression list names the person without the address. A record that the person asked not to be contacted, keyed that way, is kept — the promise outlives the data — with anything that could identify the person removed from it. A dry run counts and writes nothing. Reports land under plugins on the erasure\'s counts and audit row.'
5697
5697
  },
5698
+ {
5699
+ path: '/developers/plugins/reference/plugin-manager-api',
5700
+ title: 'Plugin-manager API reference',
5701
+ heading: 'Email streams — `plugin-email-streams` (`/server`)',
5702
+ anchor: '#email-streams--plugin-email-streams-server',
5703
+ text: 'A slot one plugin holds (core.email-streams, built on the service contracts above): the plugin that keeps a site\'s email preferences — its topic catalog, the per-topic opt-outs and the site\'s unsubscribe list — reopens one stream for a signed-in person who asks for it back. Core calls it when an account\'s answer about product updates turns back to yes in the console, so it is registered from consoleServerDeclarations:\n| API | Semantics |\n| registerPluginEmailStreams(impl, { pluginId? }) | Fills the slot. The same plugin registering again replaces its entry; a second plugin throws naming both. |\n| rejoinEmailStream({ hostId, email, topicId }) | Reopens one stream. Answers rejoined (with releasedSuppression and keptLeft), held with the reason, unavailable when no plugin holds the slot, or failed for one that threw — logged, never thrown, because the caller has already recorded the person\'s answer. |\nrejoin lifts the stream\'s opt-out. For an address that left everything, it first records an opt-out for every other active stream in the catalog and only then lifts the site\'s unsubscribe, so the rest stay left and there is no moment in which the whole catalog is mailable; a catalog it cannot read lifts nothing. A bounce, a complaint, an erasure or a staff hold is held and nothing is written, and a pending double opt-in stays pending. The slot authenticates nobody: core asks only with the verified address of a signed-in account, because reopening a stream undoes something done from the mailbox.'
5704
+ },
5698
5705
  {
5699
5706
  path: '/developers/plugins/reference/plugin-manager-api',
5700
5707
  title: 'Plugin-manager API reference',
@@ -8178,7 +8185,7 @@ export const ASSIST_DOCS_INDEX = [
8178
8185
  title: 'Signing In & Sessions',
8179
8186
  heading: 'Product updates',
8180
8187
  anchor: '#product-updates',
8181
- text: 'Aglyn emails you about product updates only if you said so. There are three places to say it, and one record behind all of them:\n- an optional checkbox on the sign-up form — unticked until you tick it, and never required;\n- the Product updates switch under Manage Account → Email addresses, which turns the emails on or off at any time;\n- a one-time card on your workspace list, for accounts that were never asked. Yes and No thanks are both remembered and never asked again; closing the card without answering asks once more in ninety days.\nEach answer is stored with the exact time and the version of the sentence you agreed to. Leaving the sign-up box unticked records nothing — it is not a refusal, so the card may still ask later. Turning the switch off records a refusal, which is honored everywhere Aglyn sends marketing email. Receipts, invites, security alerts and other account mail are unaffected by this choice.'
8188
+ text: 'Aglyn emails you about product updates only if you said so. There are three places to say it, and one record behind all of them:\n- an optional checkbox on the sign-up form — unticked until you tick it, and never required;\n- the Product updates switch under Manage Account → Email addresses, which turns the emails on or off at any time;\n- a one-time card on your workspace list, for accounts that were never asked. Yes and No thanks are both remembered and never asked again; closing the card without answering asks once more in ninety days.\nEach answer is stored with the exact time and the version of the sentence you agreed to. Leaving the sign-up box unticked records nothing — it is not a refusal, so the card may still ask later. Turning the switch off records a refusal, which is honored everywhere Aglyn sends marketing email. Receipts, invites, security alerts and other account mail are unaffected by this choice.\nThe unsubscribe link in the emails themselves counts too. Unsubscribing from all of Aglyn\'s emails, or unticking Product updates on an email\'s preference page, turns the switch off, and the switch says it was done from an email. Leaving a different list — the newsletter, say — leaves the switch alone.\nTurning the switch back on resumes product updates and nothing else: any other list you left stays left. It needs a verified email address, because it undoes something done from your inbox; until then the switch records your answer and tells you to verify first. If an earlier email to you bounced or was reported as spam, the switch says so instead — that hold protects delivery for everyone and is not a preference you can change here.'
8182
8189
  },
8183
8190
  {
8184
8191
  path: '/workspace-and-billing/signing-in-and-sessions',