@odla-ai/chapter 0.50.0 → 0.52.0

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.
@@ -25,7 +25,7 @@ type TextFields$1<Key extends string> = {
25
25
  [Field in Key]: string;
26
26
  };
27
27
  /** User-visible language for sharing, delivery state, and leader rollups. */
28
- type AdminNetworkCopy = TextFields$1<"title" | "allowlistDescription" | "sharing" | "shareWith" | "shared" | "shareFailed" | "deliveryFailed" | "loadingRollup" | "loadRollupFailed" | "overview" | "configuredFollowers" | "reachableFollowers" | "recordsAcrossFollowers" | "noFollowers" | "followers" | "available" | "unavailable" | "transportReachable" | "transportUnavailable" | "transportNotChecked" | "bindingTransport" | "urlTransport" | "activeConfiguration" | "noActiveConfiguration" | "publicSiteAvailable" | "publicSiteUnavailable" | "publicSiteNotChecked" | "recordTotals" | "noRecordTotals">;
28
+ type AdminNetworkCopy = TextFields$1<"title" | "allowlistDescription" | "sharing" | "shareWith" | "shared" | "shareFailed" | "deliveryFailed" | "loadingRollup" | "loadRollupFailed" | "overview" | "configuredFollowers" | "reachableFollowers" | "recordsAcrossFollowers" | "noFollowers" | "followers" | "available" | "unavailable" | "transportReachable" | "transportUnavailable" | "transportNotChecked" | "edgeUnpaired" | "edgeUnpairedHint" | "bindingTransport" | "urlTransport" | "activeConfiguration" | "noActiveConfiguration" | "publicSiteAvailable" | "publicSiteUnavailable" | "publicSiteNotChecked" | "recordTotals" | "noRecordTotals">;
29
29
 
30
30
  /** Copy for the person record panels: lifecycle actions, comms, scheduling, billing and meetings. */
31
31
  type AdminRecordsCopy = {
@@ -78,7 +78,7 @@ interface ChapterCopy {
78
78
  availability: TextFields<"loading" | "loadFailed" | "saved" | "title" | "days" | "startHour" | "endHour" | "slotMinutes" | "minNoticeHours" | "windowDays" | "timezone" | "summaryTemplate" | "save"> & {
79
79
  dayLabels: readonly string[];
80
80
  };
81
- email: TextFields<"loading" | "loadFailed" | "saved" | "sent" | "testFailed" | "delivery" | "notificationAddress" | "replyTo" | "debugInbox" | "debugInboxHint" | "sendTest" | "enabled" | "subject" | "body" | "save" | "sendLog" | "sentColumn" | "templateColumn" | "statusColumn" | "toColumn" | "failed" | "redirected" | "delivered">;
81
+ email: TextFields<"loading" | "loadFailed" | "saved" | "sent" | "testFailed" | "delivery" | "notificationAddress" | "replyTo" | "fromName" | "fromNameHint" | "debugInbox" | "debugInboxHint" | "sendTest" | "enabled" | "subject" | "body" | "save" | "sendLog" | "sentColumn" | "templateColumn" | "statusColumn" | "toColumn" | "failed" | "redirected" | "delivered">;
82
82
  meetings: TextFields<"loading" | "loadFailed" | "cancelConfirm" | "newStartPrompt" | "parseFailed" | "agenda" | "empty" | "unknown" | "drift" | "meet" | "reschedule" | "cancel">;
83
83
  admission: TextFields<"title" | "description" | "email" | "decision" | "expires" | "note" | "waive" | "require" | "add" | "ledger" | "loading" | "consumed" | "revoked" | "expired" | "active" | "local" | "parent" | "revoke">;
84
84
  network: AdminNetworkCopy;
@@ -214,7 +214,10 @@ type DbRules = Record<string, Rule>;
214
214
 
215
215
  /** One follower site a leader can push CRM records to. The secret VALUE never
216
216
  * lives in config: `secretName` names the leader tenant's vaulted copy of the
217
- * follower's `network_share_secret`. */
217
+ * follower's `network_share_secret`. Both slots are declared by
218
+ * `createChapterIntegration` and filled together by
219
+ * `odla-ai chapter edge pair --leader <leader> --follower <id>`; until then
220
+ * every leader-side surface reports the edge as `edge_unpaired`. */
218
221
  interface ChapterNetworkTarget {
219
222
  /** Stable lowercase slug used by the UI, audit tags, and default secret name. */
220
223
  id: string;
@@ -516,9 +519,12 @@ interface EmailTemplate {
516
519
  interface ChapterEmails {
517
520
  notificationEmail: string;
518
521
  replyTo?: string;
522
+ /** Display name on outbound lifecycle mail (`Tori Horton <from@…>`); the
523
+ * address itself stays the Worker's `EMAIL_FROM`. Absent ⇒ bare address. */
524
+ fromName?: string;
519
525
  debugEmail?: string;
520
- /** Operational lifecycle templates: adminNotification / paymentConfirmation /
521
- * prepEmail / onboardingInvite, each `{ subject, text, enabled? }`. */
526
+ /** Operational lifecycle templates: adminNotification / submitConfirmation /
527
+ * paymentConfirmation / prepEmail / onboardingInvite, each `{ subject, text, enabled? }`. */
522
528
  templates?: Record<string, EmailTemplate>;
523
529
  }
524
530
  /** Booking rules for the intro-call scheduler (stored as schedulingJson). */
@@ -842,7 +848,9 @@ interface MembershipOfferingVersion {
842
848
  autoRenew: true;
843
849
  paymentGraceDays: number;
844
850
  seatPriceCents: number;
845
- seatPurchaseWindowCalendarMonths: number;
851
+ /** Calendar months after the initial payment during which a seat may be bought. Absent: no window; a seat
852
+ * may be bought whenever the primary membership is paid and active, renewals included. */
853
+ seatPurchaseWindowCalendarMonths?: number;
846
854
  requiredDisclosures: string[];
847
855
  }
848
856
  /** Cohort qualification survives the expiration of its monetary benefit. */
@@ -1010,6 +1018,8 @@ interface NamedSeatOffer {
1010
1018
  autoRenew: boolean;
1011
1019
  eligible: boolean;
1012
1020
  digest: string;
1021
+ /** False when the frozen offering sets no purchase window: seats may be bought for as long as the membership is paid. */
1022
+ purchaseWindowed?: boolean;
1013
1023
  seat?: {
1014
1024
  seatId: string;
1015
1025
  status: string;
@@ -1130,9 +1140,31 @@ type NamedSeatEvidenceRequest = MembershipQuoteTarget & {
1130
1140
  eventId: string;
1131
1141
  };
1132
1142
 
1143
+ /** Content-free operator alert attached to an error report. Its shape is a subset of
1144
+ * the `ErrorReport` that `recordError` from `@odla-ai/o11y` accepts, so a host passes
1145
+ * that function straight through as `ChapterWorkerOptions.recordError`. */
1146
+ interface ChapterErrorReport {
1147
+ /** Stable, low-cardinality alert code, for example `stripe_webhook_quarantined`. */
1148
+ code: string;
1149
+ /** Route or step the alert belongs to. */
1150
+ route?: string;
1151
+ /** Low-cardinality index attributes: counts and dispositions, never ids. */
1152
+ attributes?: Record<string, string | number | boolean>;
1153
+ /** Bounded triage context kept out of the index: provider event ids, never PII. */
1154
+ artifacts?: Record<string, unknown>;
1155
+ /** Optional dedup key; the collector falls back to type + code + route. */
1156
+ fingerprint?: string;
1157
+ }
1158
+ /** Records one structured error. `recordError` from `@odla-ai/o11y` satisfies it. */
1159
+ type ChapterErrorRecorder = (error: Error, report: ChapterErrorReport) => unknown;
1160
+
1133
1161
  /** The Cloudflare SEND_EMAIL binding payload. */
1134
1162
  interface EmailPayload {
1135
- from: string;
1163
+ /** A bare address, or `{ name, email }` when the group sets a From display name. */
1164
+ from: string | {
1165
+ name: string;
1166
+ email: string;
1167
+ };
1136
1168
  to: string[];
1137
1169
  subject: string;
1138
1170
  text?: string;
@@ -1228,6 +1260,12 @@ interface ChapterWorkerOptions {
1228
1260
  };
1229
1261
  /** CRM mount point. Default "/api/crm". */
1230
1262
  crmBasePath?: string;
1263
+ /** Structured error recorder for operator alerts: a quarantined Stripe webhook, a
1264
+ * network commercial exception becoming active. Pass `recordError` from
1265
+ * `@odla-ai/o11y` when the Worker is wrapped in `withObservability`; the default
1266
+ * writes one JSON line to `console.error`, which Workers Logs retains. Reports carry
1267
+ * counts and provider event ids only, never payloads or PII. */
1268
+ recordError?: ChapterErrorRecorder;
1231
1269
  /** Host routes, tried BEFORE the built-ins — so a wrapping site can add its own
1232
1270
  * routes (or override/alias a built-in path) and reuse chapter's auth via the
1233
1271
  * shared {@link WorkerContext}, instead of re-verifying JWTs itself. */
@@ -1304,6 +1342,7 @@ declare function createWorkerContext(options: ChapterWorkerOptions): {
1304
1342
  makeDb: (env: ChapterEnv) => ChapterDb;
1305
1343
  stripeSecretName?: string;
1306
1344
  } | undefined;
1345
+ recordError: ChapterErrorRecorder;
1307
1346
  getPublicConfig: (env: ChapterEnv) => Promise<PublicConfig>;
1308
1347
  verifyUser: (req: Request, env: ChapterEnv) => Promise<Verified | null>;
1309
1348
  makeDb: (env: ChapterEnv) => Db;
@@ -1989,11 +2028,14 @@ declare function withActiveSignupControlTheme(response: Response, options: Activ
1989
2028
  *
1990
2029
  * Observability is a host concern, not a chapter dependency. To trace, wrap the
1991
2030
  * result in your worker entry — `export default withObservability(chapterWorker(
1992
- * { chapter }))` — with `withObservability` from `@odla-ai/o11y`. Sites that
1993
- * don't run o11y bundle `@odla-ai/chapter/worker` without installing it.
2031
+ * { chapter, recordError }))` — with `withObservability` and `recordError` from
2032
+ * `@odla-ai/o11y`; `recordError` turns the Worker's operator alerts (quarantined
2033
+ * webhooks, commercial exceptions) into error-level o11y reports. Sites that
2034
+ * don't run o11y bundle `@odla-ai/chapter/worker` without installing it and
2035
+ * keep those alerts as structured `console.error` lines.
1994
2036
  */
1995
2037
  declare function chapterWorker(options: ChapterWorkerOptions): {
1996
2038
  fetch(req: Request, env: ChapterEnv): Promise<Response>;
1997
2039
  };
1998
2040
 
1999
- export { type ActiveSignupControlHtml, type ActiveSignupControlThemeOptions, AdmissionGrantDeliveryError, type AdmissionGrantDeliveryOptions, type BuilderLibraryDeliveryOptions, type ChapterEnv, type ChapterWorkerOptions, type LeaderAdmissionAssignment, type LeaderAdmissionDelivery, type LeaderAdmissionDeliveryStatus, MEMBERSHIP_AUTHORITY_PATH, type MemberContentDeliveryOptions, type MembershipAuthorityHandlerOptions, type MembershipAuthorityPeer, type MembershipChapterEffect, type MembershipEffectScope, type MembershipWorkerAdapter, type MembershipWorkerAdapterOptions, type NamedSeatOperatorRefundInput, type NamedSeatRefundReason, type NetworkTargetTransport, NetworkTargetTransportError, type Route, type SignupControlDeliveryOptions, type WorkerContext, chapterMembershipAccess, chapterWorker, createMembershipAuthorityHandler, createMembershipAuthorityStorage, createMembershipChapterEffectRoute, createMembershipWorkerAdapter, createWorkerContext, deliverAdmissionGrants, deliverBuilderLibrary, deliverMemberContent, deliverMembershipChapterEffect, deliverSignupControl, drainMembershipEffects, refundNamedSeatByOperator, renderActiveSignupControlHtml, resolveNetworkTargetTransport, retryChapterApprovalEffects, retryLeaderAdmissionDeliveries, withActiveSignupControlTheme };
2041
+ export { type ActiveSignupControlHtml, type ActiveSignupControlThemeOptions, AdmissionGrantDeliveryError, type AdmissionGrantDeliveryOptions, type BuilderLibraryDeliveryOptions, type ChapterEnv, type ChapterErrorRecorder, type ChapterErrorReport, type ChapterWorkerOptions, type LeaderAdmissionAssignment, type LeaderAdmissionDelivery, type LeaderAdmissionDeliveryStatus, MEMBERSHIP_AUTHORITY_PATH, type MemberContentDeliveryOptions, type MembershipAuthorityHandlerOptions, type MembershipAuthorityPeer, type MembershipChapterEffect, type MembershipEffectScope, type MembershipWorkerAdapter, type MembershipWorkerAdapterOptions, type NamedSeatOperatorRefundInput, type NamedSeatRefundReason, type NetworkTargetTransport, NetworkTargetTransportError, type Route, type SignupControlDeliveryOptions, type WorkerContext, chapterMembershipAccess, chapterWorker, createMembershipAuthorityHandler, createMembershipAuthorityStorage, createMembershipChapterEffectRoute, createMembershipWorkerAdapter, createWorkerContext, deliverAdmissionGrants, deliverBuilderLibrary, deliverMemberContent, deliverMembershipChapterEffect, deliverSignupControl, drainMembershipEffects, refundNamedSeatByOperator, renderActiveSignupControlHtml, resolveNetworkTargetTransport, retryChapterApprovalEffects, retryLeaderAdmissionDeliveries, withActiveSignupControlTheme };
@@ -25,7 +25,7 @@ type TextFields$1<Key extends string> = {
25
25
  [Field in Key]: string;
26
26
  };
27
27
  /** User-visible language for sharing, delivery state, and leader rollups. */
28
- type AdminNetworkCopy = TextFields$1<"title" | "allowlistDescription" | "sharing" | "shareWith" | "shared" | "shareFailed" | "deliveryFailed" | "loadingRollup" | "loadRollupFailed" | "overview" | "configuredFollowers" | "reachableFollowers" | "recordsAcrossFollowers" | "noFollowers" | "followers" | "available" | "unavailable" | "transportReachable" | "transportUnavailable" | "transportNotChecked" | "bindingTransport" | "urlTransport" | "activeConfiguration" | "noActiveConfiguration" | "publicSiteAvailable" | "publicSiteUnavailable" | "publicSiteNotChecked" | "recordTotals" | "noRecordTotals">;
28
+ type AdminNetworkCopy = TextFields$1<"title" | "allowlistDescription" | "sharing" | "shareWith" | "shared" | "shareFailed" | "deliveryFailed" | "loadingRollup" | "loadRollupFailed" | "overview" | "configuredFollowers" | "reachableFollowers" | "recordsAcrossFollowers" | "noFollowers" | "followers" | "available" | "unavailable" | "transportReachable" | "transportUnavailable" | "transportNotChecked" | "edgeUnpaired" | "edgeUnpairedHint" | "bindingTransport" | "urlTransport" | "activeConfiguration" | "noActiveConfiguration" | "publicSiteAvailable" | "publicSiteUnavailable" | "publicSiteNotChecked" | "recordTotals" | "noRecordTotals">;
29
29
 
30
30
  /** Copy for the person record panels: lifecycle actions, comms, scheduling, billing and meetings. */
31
31
  type AdminRecordsCopy = {
@@ -78,7 +78,7 @@ interface ChapterCopy {
78
78
  availability: TextFields<"loading" | "loadFailed" | "saved" | "title" | "days" | "startHour" | "endHour" | "slotMinutes" | "minNoticeHours" | "windowDays" | "timezone" | "summaryTemplate" | "save"> & {
79
79
  dayLabels: readonly string[];
80
80
  };
81
- email: TextFields<"loading" | "loadFailed" | "saved" | "sent" | "testFailed" | "delivery" | "notificationAddress" | "replyTo" | "debugInbox" | "debugInboxHint" | "sendTest" | "enabled" | "subject" | "body" | "save" | "sendLog" | "sentColumn" | "templateColumn" | "statusColumn" | "toColumn" | "failed" | "redirected" | "delivered">;
81
+ email: TextFields<"loading" | "loadFailed" | "saved" | "sent" | "testFailed" | "delivery" | "notificationAddress" | "replyTo" | "fromName" | "fromNameHint" | "debugInbox" | "debugInboxHint" | "sendTest" | "enabled" | "subject" | "body" | "save" | "sendLog" | "sentColumn" | "templateColumn" | "statusColumn" | "toColumn" | "failed" | "redirected" | "delivered">;
82
82
  meetings: TextFields<"loading" | "loadFailed" | "cancelConfirm" | "newStartPrompt" | "parseFailed" | "agenda" | "empty" | "unknown" | "drift" | "meet" | "reschedule" | "cancel">;
83
83
  admission: TextFields<"title" | "description" | "email" | "decision" | "expires" | "note" | "waive" | "require" | "add" | "ledger" | "loading" | "consumed" | "revoked" | "expired" | "active" | "local" | "parent" | "revoke">;
84
84
  network: AdminNetworkCopy;
@@ -214,7 +214,10 @@ type DbRules = Record<string, Rule>;
214
214
 
215
215
  /** One follower site a leader can push CRM records to. The secret VALUE never
216
216
  * lives in config: `secretName` names the leader tenant's vaulted copy of the
217
- * follower's `network_share_secret`. */
217
+ * follower's `network_share_secret`. Both slots are declared by
218
+ * `createChapterIntegration` and filled together by
219
+ * `odla-ai chapter edge pair --leader <leader> --follower <id>`; until then
220
+ * every leader-side surface reports the edge as `edge_unpaired`. */
218
221
  interface ChapterNetworkTarget {
219
222
  /** Stable lowercase slug used by the UI, audit tags, and default secret name. */
220
223
  id: string;
@@ -516,9 +519,12 @@ interface EmailTemplate {
516
519
  interface ChapterEmails {
517
520
  notificationEmail: string;
518
521
  replyTo?: string;
522
+ /** Display name on outbound lifecycle mail (`Tori Horton <from@…>`); the
523
+ * address itself stays the Worker's `EMAIL_FROM`. Absent ⇒ bare address. */
524
+ fromName?: string;
519
525
  debugEmail?: string;
520
- /** Operational lifecycle templates: adminNotification / paymentConfirmation /
521
- * prepEmail / onboardingInvite, each `{ subject, text, enabled? }`. */
526
+ /** Operational lifecycle templates: adminNotification / submitConfirmation /
527
+ * paymentConfirmation / prepEmail / onboardingInvite, each `{ subject, text, enabled? }`. */
522
528
  templates?: Record<string, EmailTemplate>;
523
529
  }
524
530
  /** Booking rules for the intro-call scheduler (stored as schedulingJson). */
@@ -842,7 +848,9 @@ interface MembershipOfferingVersion {
842
848
  autoRenew: true;
843
849
  paymentGraceDays: number;
844
850
  seatPriceCents: number;
845
- seatPurchaseWindowCalendarMonths: number;
851
+ /** Calendar months after the initial payment during which a seat may be bought. Absent: no window; a seat
852
+ * may be bought whenever the primary membership is paid and active, renewals included. */
853
+ seatPurchaseWindowCalendarMonths?: number;
846
854
  requiredDisclosures: string[];
847
855
  }
848
856
  /** Cohort qualification survives the expiration of its monetary benefit. */
@@ -1010,6 +1018,8 @@ interface NamedSeatOffer {
1010
1018
  autoRenew: boolean;
1011
1019
  eligible: boolean;
1012
1020
  digest: string;
1021
+ /** False when the frozen offering sets no purchase window: seats may be bought for as long as the membership is paid. */
1022
+ purchaseWindowed?: boolean;
1013
1023
  seat?: {
1014
1024
  seatId: string;
1015
1025
  status: string;
@@ -1130,9 +1140,31 @@ type NamedSeatEvidenceRequest = MembershipQuoteTarget & {
1130
1140
  eventId: string;
1131
1141
  };
1132
1142
 
1143
+ /** Content-free operator alert attached to an error report. Its shape is a subset of
1144
+ * the `ErrorReport` that `recordError` from `@odla-ai/o11y` accepts, so a host passes
1145
+ * that function straight through as `ChapterWorkerOptions.recordError`. */
1146
+ interface ChapterErrorReport {
1147
+ /** Stable, low-cardinality alert code, for example `stripe_webhook_quarantined`. */
1148
+ code: string;
1149
+ /** Route or step the alert belongs to. */
1150
+ route?: string;
1151
+ /** Low-cardinality index attributes: counts and dispositions, never ids. */
1152
+ attributes?: Record<string, string | number | boolean>;
1153
+ /** Bounded triage context kept out of the index: provider event ids, never PII. */
1154
+ artifacts?: Record<string, unknown>;
1155
+ /** Optional dedup key; the collector falls back to type + code + route. */
1156
+ fingerprint?: string;
1157
+ }
1158
+ /** Records one structured error. `recordError` from `@odla-ai/o11y` satisfies it. */
1159
+ type ChapterErrorRecorder = (error: Error, report: ChapterErrorReport) => unknown;
1160
+
1133
1161
  /** The Cloudflare SEND_EMAIL binding payload. */
1134
1162
  interface EmailPayload {
1135
- from: string;
1163
+ /** A bare address, or `{ name, email }` when the group sets a From display name. */
1164
+ from: string | {
1165
+ name: string;
1166
+ email: string;
1167
+ };
1136
1168
  to: string[];
1137
1169
  subject: string;
1138
1170
  text?: string;
@@ -1228,6 +1260,12 @@ interface ChapterWorkerOptions {
1228
1260
  };
1229
1261
  /** CRM mount point. Default "/api/crm". */
1230
1262
  crmBasePath?: string;
1263
+ /** Structured error recorder for operator alerts: a quarantined Stripe webhook, a
1264
+ * network commercial exception becoming active. Pass `recordError` from
1265
+ * `@odla-ai/o11y` when the Worker is wrapped in `withObservability`; the default
1266
+ * writes one JSON line to `console.error`, which Workers Logs retains. Reports carry
1267
+ * counts and provider event ids only, never payloads or PII. */
1268
+ recordError?: ChapterErrorRecorder;
1231
1269
  /** Host routes, tried BEFORE the built-ins — so a wrapping site can add its own
1232
1270
  * routes (or override/alias a built-in path) and reuse chapter's auth via the
1233
1271
  * shared {@link WorkerContext}, instead of re-verifying JWTs itself. */
@@ -1304,6 +1342,7 @@ declare function createWorkerContext(options: ChapterWorkerOptions): {
1304
1342
  makeDb: (env: ChapterEnv) => ChapterDb;
1305
1343
  stripeSecretName?: string;
1306
1344
  } | undefined;
1345
+ recordError: ChapterErrorRecorder;
1307
1346
  getPublicConfig: (env: ChapterEnv) => Promise<PublicConfig>;
1308
1347
  verifyUser: (req: Request, env: ChapterEnv) => Promise<Verified | null>;
1309
1348
  makeDb: (env: ChapterEnv) => Db;
@@ -1989,11 +2028,14 @@ declare function withActiveSignupControlTheme(response: Response, options: Activ
1989
2028
  *
1990
2029
  * Observability is a host concern, not a chapter dependency. To trace, wrap the
1991
2030
  * result in your worker entry — `export default withObservability(chapterWorker(
1992
- * { chapter }))` — with `withObservability` from `@odla-ai/o11y`. Sites that
1993
- * don't run o11y bundle `@odla-ai/chapter/worker` without installing it.
2031
+ * { chapter, recordError }))` — with `withObservability` and `recordError` from
2032
+ * `@odla-ai/o11y`; `recordError` turns the Worker's operator alerts (quarantined
2033
+ * webhooks, commercial exceptions) into error-level o11y reports. Sites that
2034
+ * don't run o11y bundle `@odla-ai/chapter/worker` without installing it and
2035
+ * keep those alerts as structured `console.error` lines.
1994
2036
  */
1995
2037
  declare function chapterWorker(options: ChapterWorkerOptions): {
1996
2038
  fetch(req: Request, env: ChapterEnv): Promise<Response>;
1997
2039
  };
1998
2040
 
1999
- export { type ActiveSignupControlHtml, type ActiveSignupControlThemeOptions, AdmissionGrantDeliveryError, type AdmissionGrantDeliveryOptions, type BuilderLibraryDeliveryOptions, type ChapterEnv, type ChapterWorkerOptions, type LeaderAdmissionAssignment, type LeaderAdmissionDelivery, type LeaderAdmissionDeliveryStatus, MEMBERSHIP_AUTHORITY_PATH, type MemberContentDeliveryOptions, type MembershipAuthorityHandlerOptions, type MembershipAuthorityPeer, type MembershipChapterEffect, type MembershipEffectScope, type MembershipWorkerAdapter, type MembershipWorkerAdapterOptions, type NamedSeatOperatorRefundInput, type NamedSeatRefundReason, type NetworkTargetTransport, NetworkTargetTransportError, type Route, type SignupControlDeliveryOptions, type WorkerContext, chapterMembershipAccess, chapterWorker, createMembershipAuthorityHandler, createMembershipAuthorityStorage, createMembershipChapterEffectRoute, createMembershipWorkerAdapter, createWorkerContext, deliverAdmissionGrants, deliverBuilderLibrary, deliverMemberContent, deliverMembershipChapterEffect, deliverSignupControl, drainMembershipEffects, refundNamedSeatByOperator, renderActiveSignupControlHtml, resolveNetworkTargetTransport, retryChapterApprovalEffects, retryLeaderAdmissionDeliveries, withActiveSignupControlTheme };
2041
+ export { type ActiveSignupControlHtml, type ActiveSignupControlThemeOptions, AdmissionGrantDeliveryError, type AdmissionGrantDeliveryOptions, type BuilderLibraryDeliveryOptions, type ChapterEnv, type ChapterErrorRecorder, type ChapterErrorReport, type ChapterWorkerOptions, type LeaderAdmissionAssignment, type LeaderAdmissionDelivery, type LeaderAdmissionDeliveryStatus, MEMBERSHIP_AUTHORITY_PATH, type MemberContentDeliveryOptions, type MembershipAuthorityHandlerOptions, type MembershipAuthorityPeer, type MembershipChapterEffect, type MembershipEffectScope, type MembershipWorkerAdapter, type MembershipWorkerAdapterOptions, type NamedSeatOperatorRefundInput, type NamedSeatRefundReason, type NetworkTargetTransport, NetworkTargetTransportError, type Route, type SignupControlDeliveryOptions, type WorkerContext, chapterMembershipAccess, chapterWorker, createMembershipAuthorityHandler, createMembershipAuthorityStorage, createMembershipChapterEffectRoute, createMembershipWorkerAdapter, createWorkerContext, deliverAdmissionGrants, deliverBuilderLibrary, deliverMemberContent, deliverMembershipChapterEffect, deliverSignupControl, drainMembershipEffects, refundNamedSeatByOperator, renderActiveSignupControlHtml, resolveNetworkTargetTransport, retryChapterApprovalEffects, retryLeaderAdmissionDeliveries, withActiveSignupControlTheme };