@odla-ai/chapter 0.54.1 → 0.55.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.
@@ -21,6 +21,18 @@ interface ChapterTierConfig {
21
21
  active?: boolean;
22
22
  }
23
23
 
24
+ /** A code-declared mail event. Copy stays in settings; this describes who receives it and the values the event supplies. */
25
+ interface ChapterEmailEvent {
26
+ label: string;
27
+ trigger: string;
28
+ audience: string;
29
+ variables: readonly string[];
30
+ /** Values deliberately allowed to render empty, such as a free tier's amount suffix. */
31
+ optionalVariables?: readonly string[];
32
+ /** Require a resolved tier display name even when the copy does not mention it. */
33
+ requiresTier?: boolean;
34
+ }
35
+
24
36
  type TextFields$1<Key extends string> = {
25
37
  [Field in Key]: string;
26
38
  };
@@ -509,7 +521,7 @@ interface ChapterBrand {
509
521
  logos?: string;
510
522
  }
511
523
 
512
- /** One owner-editable transactional email template. */
524
+ /** One owner-editable transactional email template. Automatic sends require explicit `enabled: true`. */
513
525
  interface EmailTemplate {
514
526
  subject: string;
515
527
  text: string;
@@ -524,8 +536,11 @@ interface ChapterEmails {
524
536
  fromName?: string;
525
537
  debugEmail?: string;
526
538
  /** Operational lifecycle templates: adminNotification / submitConfirmation /
527
- * paymentConfirmation / prepEmail / onboardingInvite, each `{ subject, text, enabled? }`. */
539
+ * paymentConfirmation / prepEmail / onboardingInvite / namedSeatInvitation / seatAccepted,
540
+ * plus declared host events. Missing enabled flags block sending. */
528
541
  templates?: Record<string, EmailTemplate>;
542
+ /** Additional host-owned email events shown and validated in the email editor. Declaring an event never sends it. */
543
+ events?: Record<string, ChapterEmailEvent>;
529
544
  }
530
545
  /** Booking rules for the intro-call scheduler (stored as schedulingJson). */
531
546
  interface ChapterScheduling {
@@ -820,6 +835,21 @@ interface SubscriptionBillingTerms {
820
835
  initialTermEndsAt?: number;
821
836
  }
822
837
 
838
+ /** The optional recipient selected before the applicant consents to payment. */
839
+ interface CheckoutNamedSeatSelection {
840
+ recipientName: string;
841
+ recipientEmail: string;
842
+ }
843
+ /** Authority-owned provider allocation for the seat on the initial subscription. */
844
+ interface CheckoutNamedSeat extends CheckoutNamedSeatSelection {
845
+ purchaserEmail: string;
846
+ seatId: string;
847
+ membershipId: string;
848
+ recipientClaimId: string;
849
+ priceId: string;
850
+ amountCents: number;
851
+ }
852
+
823
853
  /** Per-tier policy overrides prevent a chapter-wide price claim leaking into another SKU. */
824
854
  interface TierPaymentPolicy {
825
855
  refundPolicyText: string;
@@ -951,11 +981,15 @@ interface MembershipCheckoutBindingInput extends MembershipQuoteTarget {
951
981
  offerDigest: string;
952
982
  quoteDigest: string;
953
983
  priceId: string;
984
+ namedSeat?: CheckoutNamedSeatSelection & {
985
+ purchaserEmail: string;
986
+ };
954
987
  }
955
- /** Content-free authority receipt. It does not mean paid, approved, or entitled. */
988
+ /** Frozen authority receipt, including any named recipient. It does not mean paid, approved, or entitled. */
956
989
  interface MembershipCheckoutBinding extends MembershipCheckoutBindingInput {
957
990
  id: string;
958
991
  boundAt: number;
992
+ namedSeat?: CheckoutNamedSeat;
959
993
  }
960
994
 
961
995
  /** References only. Money facts must already exist in the verified network Stripe event log. */
@@ -21,6 +21,18 @@ interface ChapterTierConfig {
21
21
  active?: boolean;
22
22
  }
23
23
 
24
+ /** A code-declared mail event. Copy stays in settings; this describes who receives it and the values the event supplies. */
25
+ interface ChapterEmailEvent {
26
+ label: string;
27
+ trigger: string;
28
+ audience: string;
29
+ variables: readonly string[];
30
+ /** Values deliberately allowed to render empty, such as a free tier's amount suffix. */
31
+ optionalVariables?: readonly string[];
32
+ /** Require a resolved tier display name even when the copy does not mention it. */
33
+ requiresTier?: boolean;
34
+ }
35
+
24
36
  type TextFields$1<Key extends string> = {
25
37
  [Field in Key]: string;
26
38
  };
@@ -509,7 +521,7 @@ interface ChapterBrand {
509
521
  logos?: string;
510
522
  }
511
523
 
512
- /** One owner-editable transactional email template. */
524
+ /** One owner-editable transactional email template. Automatic sends require explicit `enabled: true`. */
513
525
  interface EmailTemplate {
514
526
  subject: string;
515
527
  text: string;
@@ -524,8 +536,11 @@ interface ChapterEmails {
524
536
  fromName?: string;
525
537
  debugEmail?: string;
526
538
  /** Operational lifecycle templates: adminNotification / submitConfirmation /
527
- * paymentConfirmation / prepEmail / onboardingInvite, each `{ subject, text, enabled? }`. */
539
+ * paymentConfirmation / prepEmail / onboardingInvite / namedSeatInvitation / seatAccepted,
540
+ * plus declared host events. Missing enabled flags block sending. */
528
541
  templates?: Record<string, EmailTemplate>;
542
+ /** Additional host-owned email events shown and validated in the email editor. Declaring an event never sends it. */
543
+ events?: Record<string, ChapterEmailEvent>;
529
544
  }
530
545
  /** Booking rules for the intro-call scheduler (stored as schedulingJson). */
531
546
  interface ChapterScheduling {
@@ -820,6 +835,21 @@ interface SubscriptionBillingTerms {
820
835
  initialTermEndsAt?: number;
821
836
  }
822
837
 
838
+ /** The optional recipient selected before the applicant consents to payment. */
839
+ interface CheckoutNamedSeatSelection {
840
+ recipientName: string;
841
+ recipientEmail: string;
842
+ }
843
+ /** Authority-owned provider allocation for the seat on the initial subscription. */
844
+ interface CheckoutNamedSeat extends CheckoutNamedSeatSelection {
845
+ purchaserEmail: string;
846
+ seatId: string;
847
+ membershipId: string;
848
+ recipientClaimId: string;
849
+ priceId: string;
850
+ amountCents: number;
851
+ }
852
+
823
853
  /** Per-tier policy overrides prevent a chapter-wide price claim leaking into another SKU. */
824
854
  interface TierPaymentPolicy {
825
855
  refundPolicyText: string;
@@ -951,11 +981,15 @@ interface MembershipCheckoutBindingInput extends MembershipQuoteTarget {
951
981
  offerDigest: string;
952
982
  quoteDigest: string;
953
983
  priceId: string;
984
+ namedSeat?: CheckoutNamedSeatSelection & {
985
+ purchaserEmail: string;
986
+ };
954
987
  }
955
- /** Content-free authority receipt. It does not mean paid, approved, or entitled. */
988
+ /** Frozen authority receipt, including any named recipient. It does not mean paid, approved, or entitled. */
956
989
  interface MembershipCheckoutBinding extends MembershipCheckoutBindingInput {
957
990
  id: string;
958
991
  boundAt: number;
992
+ namedSeat?: CheckoutNamedSeat;
959
993
  }
960
994
 
961
995
  /** References only. Money facts must already exist in the verified network Stripe event log. */