@odla-ai/chapter 0.52.0 → 0.53.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.
@@ -56,7 +56,7 @@ interface ChapterCopy {
56
56
  * agree rather than merely restating the policy. Set it to an empty string
57
57
  * to render the checkbox with the policy as its only label.
58
58
  */
59
- payment: TextFields<"setupFailed" | "preparing" | "pending" | "processing" | "payAndContinue" | "incomplete" | "consent" | "foundingMember" | "foundingDiscount">;
59
+ payment: TextFields<"setupFailed" | "preparing" | "pending" | "processing" | "payAndContinue" | "incomplete" | "consent" | "foundingMember" | "foundingDiscount" | "standardRate" | "yourRate">;
60
60
  done: TextFields<"label" | "calendarInvite" | "memberArea">;
61
61
  accepted: TextFields<"label" | "body">;
62
62
  gift: TextFields<"chooseSelf" | "optionsLabel" | "label" | "body" | "save" | "rotate" | "rotateFailed" | "claimTitle" | "claimBody" | "code" | "redeem" | "redeemed" | "redeemFailed">;
@@ -1414,6 +1414,38 @@ type NamedSeatOperatorRefundInput = MembershipQuoteTarget & {
1414
1414
  */
1415
1415
  declare function refundNamedSeatByOperator(db: ChapterDb, input: NamedSeatOperatorRefundInput, stripeSecretKey: string, now: number): Promise<NamedSeatRefundReceipt>;
1416
1416
 
1417
+ /** Why one membership was left as it was. `would_not_widen` is the only-widens rule: the version would raise the renewal. */
1418
+ type MembershipRetermSkipReason = "not_found" | "scope_mismatch" | "status" | "not_founding" | "cohort_mismatch" | "sku_not_discounted" | "would_not_widen" | "provider_mismatch";
1419
+ /** What a re-term run did, member by member. Everything a super admin needs to read back is here; nothing is inferred later. */
1420
+ interface MembershipRetermReceipt {
1421
+ policyVersionId: string;
1422
+ retermed: {
1423
+ membershipId: string;
1424
+ previousPolicyVersionId?: string;
1425
+ previousRenewalAmountCents: number;
1426
+ renewalAmountCents: number;
1427
+ providerUpdated: boolean;
1428
+ }[];
1429
+ /** Already frozen on this version; nothing was read from or written to the provider. */
1430
+ unchanged: string[];
1431
+ skipped: {
1432
+ membershipId: string;
1433
+ reason: MembershipRetermSkipReason;
1434
+ }[];
1435
+ more: boolean;
1436
+ }
1437
+ /** Which memberships to move: every member in scope (bounded), or the named ones. */
1438
+ interface MembershipRetermInput {
1439
+ policyVersionId: string;
1440
+ membershipIds?: string[];
1441
+ limit?: number;
1442
+ }
1443
+ /** Move already-paid memberships onto a later discount policy version of the same cohort, so their next renewal carries
1444
+ * its while-active benefit. Only ever widens: a version that would raise a member's renewal is skipped, and a lapsed,
1445
+ * refunded, canceled, declined or restarting purchase is never revived. The provider is written first and the frozen row
1446
+ * second, under the row's revision, so a run that dies between the two is completed by running it again. Bounded. */
1447
+ declare function retermMembershipDiscount(db: ChapterDb, stripeSecretKey: string, scope: MembershipEffectScope, input: MembershipRetermInput, now: number): Promise<MembershipRetermReceipt>;
1448
+
1417
1449
  /** Reasons a purchased seat may be refunded. No reason is time-driven: an unaccepted seat waits for a person. */
1418
1450
  type NamedSeatRefundReason = "declined" | "operator" | "primary_closed" | "provider_refund";
1419
1451
 
@@ -2038,4 +2070,4 @@ declare function chapterWorker(options: ChapterWorkerOptions): {
2038
2070
  fetch(req: Request, env: ChapterEnv): Promise<Response>;
2039
2071
  };
2040
2072
 
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 };
2073
+ 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 MembershipRetermInput, type MembershipRetermReceipt, type MembershipRetermSkipReason, 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, retermMembershipDiscount, retryChapterApprovalEffects, retryLeaderAdmissionDeliveries, withActiveSignupControlTheme };
@@ -56,7 +56,7 @@ interface ChapterCopy {
56
56
  * agree rather than merely restating the policy. Set it to an empty string
57
57
  * to render the checkbox with the policy as its only label.
58
58
  */
59
- payment: TextFields<"setupFailed" | "preparing" | "pending" | "processing" | "payAndContinue" | "incomplete" | "consent" | "foundingMember" | "foundingDiscount">;
59
+ payment: TextFields<"setupFailed" | "preparing" | "pending" | "processing" | "payAndContinue" | "incomplete" | "consent" | "foundingMember" | "foundingDiscount" | "standardRate" | "yourRate">;
60
60
  done: TextFields<"label" | "calendarInvite" | "memberArea">;
61
61
  accepted: TextFields<"label" | "body">;
62
62
  gift: TextFields<"chooseSelf" | "optionsLabel" | "label" | "body" | "save" | "rotate" | "rotateFailed" | "claimTitle" | "claimBody" | "code" | "redeem" | "redeemed" | "redeemFailed">;
@@ -1414,6 +1414,38 @@ type NamedSeatOperatorRefundInput = MembershipQuoteTarget & {
1414
1414
  */
1415
1415
  declare function refundNamedSeatByOperator(db: ChapterDb, input: NamedSeatOperatorRefundInput, stripeSecretKey: string, now: number): Promise<NamedSeatRefundReceipt>;
1416
1416
 
1417
+ /** Why one membership was left as it was. `would_not_widen` is the only-widens rule: the version would raise the renewal. */
1418
+ type MembershipRetermSkipReason = "not_found" | "scope_mismatch" | "status" | "not_founding" | "cohort_mismatch" | "sku_not_discounted" | "would_not_widen" | "provider_mismatch";
1419
+ /** What a re-term run did, member by member. Everything a super admin needs to read back is here; nothing is inferred later. */
1420
+ interface MembershipRetermReceipt {
1421
+ policyVersionId: string;
1422
+ retermed: {
1423
+ membershipId: string;
1424
+ previousPolicyVersionId?: string;
1425
+ previousRenewalAmountCents: number;
1426
+ renewalAmountCents: number;
1427
+ providerUpdated: boolean;
1428
+ }[];
1429
+ /** Already frozen on this version; nothing was read from or written to the provider. */
1430
+ unchanged: string[];
1431
+ skipped: {
1432
+ membershipId: string;
1433
+ reason: MembershipRetermSkipReason;
1434
+ }[];
1435
+ more: boolean;
1436
+ }
1437
+ /** Which memberships to move: every member in scope (bounded), or the named ones. */
1438
+ interface MembershipRetermInput {
1439
+ policyVersionId: string;
1440
+ membershipIds?: string[];
1441
+ limit?: number;
1442
+ }
1443
+ /** Move already-paid memberships onto a later discount policy version of the same cohort, so their next renewal carries
1444
+ * its while-active benefit. Only ever widens: a version that would raise a member's renewal is skipped, and a lapsed,
1445
+ * refunded, canceled, declined or restarting purchase is never revived. The provider is written first and the frozen row
1446
+ * second, under the row's revision, so a run that dies between the two is completed by running it again. Bounded. */
1447
+ declare function retermMembershipDiscount(db: ChapterDb, stripeSecretKey: string, scope: MembershipEffectScope, input: MembershipRetermInput, now: number): Promise<MembershipRetermReceipt>;
1448
+
1417
1449
  /** Reasons a purchased seat may be refunded. No reason is time-driven: an unaccepted seat waits for a person. */
1418
1450
  type NamedSeatRefundReason = "declined" | "operator" | "primary_closed" | "provider_refund";
1419
1451
 
@@ -2038,4 +2070,4 @@ declare function chapterWorker(options: ChapterWorkerOptions): {
2038
2070
  fetch(req: Request, env: ChapterEnv): Promise<Response>;
2039
2071
  };
2040
2072
 
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 };
2073
+ 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 MembershipRetermInput, type MembershipRetermReceipt, type MembershipRetermSkipReason, 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, retermMembershipDiscount, retryChapterApprovalEffects, retryLeaderAdmissionDeliveries, withActiveSignupControlTheme };