@odla-ai/chapter 0.42.0 → 0.42.2
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/README.md +32 -4
- package/dist/{chunk-MMDWXTJU.js → chunk-HWUTCXBV.js} +44 -1
- package/dist/chunk-HWUTCXBV.js.map +1 -0
- package/dist/{copy-context-DuJkH4U9.d.ts → copy-context-BBPsYe24.d.ts} +27 -1
- package/dist/index.cjs +144 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +75 -3
- package/dist/index.d.ts +75 -3
- package/dist/index.js +144 -16
- package/dist/index.js.map +1 -1
- package/dist/ui/admin/index.d.ts +14 -3
- package/dist/ui/admin/index.js +3 -1
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.js +3 -1
- package/dist/ui/member/index.d.ts +2 -2
- package/dist/worker/index.cjs +745 -163
- package/dist/worker/index.cjs.map +1 -1
- package/dist/worker/index.d.cts +73 -2
- package/dist/worker/index.d.ts +73 -2
- package/dist/worker/index.js +730 -148
- package/dist/worker/index.js.map +1 -1
- package/package.json +2 -2
- package/runbooks/greenfield.md +3 -0
- package/dist/chunk-MMDWXTJU.js.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -275,6 +275,16 @@ interface ChapterNetworkTarget {
|
|
|
275
275
|
* this follower. Omitted by default: a target never gains write permission
|
|
276
276
|
* merely because its records are browsable. */
|
|
277
277
|
sharedNotes?: readonly string[];
|
|
278
|
+
/** Per-record-type upper bound on profile fields this leader permits its
|
|
279
|
+
* admins to edit remotely. The follower must independently delegate the
|
|
280
|
+
* same field; readable fields never become writable implicitly. */
|
|
281
|
+
editableFields?: Record<string, readonly string[]>;
|
|
282
|
+
/** Record types on which this leader permits remote lifecycle transitions.
|
|
283
|
+
* The follower must independently opt in and remains pipeline authority. */
|
|
284
|
+
stageTransitions?: readonly string[];
|
|
285
|
+
/** Allow package-owned desired admission decisions for existing leader CRM
|
|
286
|
+
* people to be delivered to this target. Omitted means default deny. */
|
|
287
|
+
admissionGrants?: boolean;
|
|
278
288
|
}
|
|
279
289
|
/** One signed peer allowed to browse a privacy-bounded projection of this
|
|
280
290
|
* site's CRM. The follower owns this allowlist; a leader target declaration
|
|
@@ -284,11 +294,21 @@ interface ChapterNetworkReader {
|
|
|
284
294
|
id: string;
|
|
285
295
|
/** Per-record-type field allowlist. Omitted types and fields never leave
|
|
286
296
|
* this site. Record id, name, stage, and timestamps are bounded metadata. */
|
|
287
|
-
fields
|
|
297
|
+
fields?: Record<string, readonly string[]>;
|
|
288
298
|
/** Record types on which this reader may append an explicitly shared note.
|
|
289
299
|
* Omitted by default: browse permission never silently grants write access.
|
|
290
300
|
* Shared notes land in the follower CRM activity feed. */
|
|
291
301
|
sharedNotes?: readonly string[];
|
|
302
|
+
/** Exact local CRM fields this reader may edit remotely, by record type.
|
|
303
|
+
* Every field must also be readable so the peer can perform an optimistic
|
|
304
|
+
* edit against the value and revision it actually reviewed. */
|
|
305
|
+
editableFields?: Record<string, readonly string[]>;
|
|
306
|
+
/** Local CRM record types on which this reader may request a lifecycle
|
|
307
|
+
* transition. Chapter still enforces the local pipeline and gates. */
|
|
308
|
+
stageTransitions?: readonly string[];
|
|
309
|
+
/** Accept signed desired admission decisions from this reader. Independent
|
|
310
|
+
* of record browsing; an admission-only reader may omit `fields`. */
|
|
311
|
+
admissionGrants?: boolean;
|
|
292
312
|
}
|
|
293
313
|
/** Leader/follower network configuration. A follower needs no code config to
|
|
294
314
|
* receive pushed records. It must explicitly declare `readers` before any peer
|
|
@@ -331,12 +351,18 @@ interface ResolvedNetworkTarget {
|
|
|
331
351
|
secretName: string;
|
|
332
352
|
fields?: Record<string, readonly string[]>;
|
|
333
353
|
sharedNotes: readonly string[];
|
|
354
|
+
editableFields: Record<string, readonly string[]>;
|
|
355
|
+
stageTransitions: readonly string[];
|
|
356
|
+
admissionGrants?: boolean;
|
|
334
357
|
}
|
|
335
358
|
/** A validated follower-owned record projection for one signed reader. */
|
|
336
359
|
interface ResolvedNetworkReader {
|
|
337
360
|
id: string;
|
|
338
361
|
fields: Record<string, readonly string[]>;
|
|
339
362
|
sharedNotes: readonly string[];
|
|
363
|
+
editableFields: Record<string, readonly string[]>;
|
|
364
|
+
stageTransitions: readonly string[];
|
|
365
|
+
admissionGrants?: boolean;
|
|
340
366
|
}
|
|
341
367
|
/** Fully-resolved leader network configuration. */
|
|
342
368
|
interface ResolvedNetwork {
|
|
@@ -938,7 +964,7 @@ declare function createChapterIntegration(chapter: Chapter, options?: ChapterInt
|
|
|
938
964
|
* read-only super-admin tier (default on for the `"claim"` ladder). A `"claim"`
|
|
939
965
|
* chapter therefore emits the reference namespace set — `applications`,
|
|
940
966
|
* `groups`, `meetings`, `emailLog`, `superAdmins` — with no `admins` table. */
|
|
941
|
-
declare function chapterDb(mode: ChapterMode, auth: ResolvedAuth, includeNetworkNotes?: boolean, application?: ResolvedApplication, includeSignupControl?: boolean, includeMemberContent?: boolean, includeBuilderLibrary?: boolean): {
|
|
967
|
+
declare function chapterDb(mode: ChapterMode, auth: ResolvedAuth, includeNetworkNotes?: boolean, application?: ResolvedApplication, includeSignupControl?: boolean, includeMemberContent?: boolean, includeBuilderLibrary?: boolean, includeLeaderAdmissions?: boolean): {
|
|
942
968
|
schema: DbSchema;
|
|
943
969
|
rules: DbRules;
|
|
944
970
|
};
|
|
@@ -1932,6 +1958,52 @@ interface NetworkRecord {
|
|
|
1932
1958
|
fields: Record<string, unknown>;
|
|
1933
1959
|
createdAt: number;
|
|
1934
1960
|
updatedAt: number;
|
|
1961
|
+
/** Optimistic concurrency token authored by the follower. */
|
|
1962
|
+
revision: number;
|
|
1963
|
+
/** Follower-authored edit contract. Omitted when this edge is read-only. */
|
|
1964
|
+
edit?: NetworkRecordEdit;
|
|
1965
|
+
}
|
|
1966
|
+
/** One follower CRM field a leader may patch. */
|
|
1967
|
+
interface NetworkEditableField {
|
|
1968
|
+
id: string;
|
|
1969
|
+
label: string;
|
|
1970
|
+
type: FieldType;
|
|
1971
|
+
required: boolean;
|
|
1972
|
+
options?: readonly string[];
|
|
1973
|
+
}
|
|
1974
|
+
/** One follower-authoritative lifecycle destination currently allowed. */
|
|
1975
|
+
interface NetworkStageTransition {
|
|
1976
|
+
id: string;
|
|
1977
|
+
label: string;
|
|
1978
|
+
}
|
|
1979
|
+
/** Edit metadata computed from the follower schema, pipeline, and record. */
|
|
1980
|
+
interface NetworkRecordEdit {
|
|
1981
|
+
fields: NetworkEditableField[];
|
|
1982
|
+
allowedStages: NetworkStageTransition[];
|
|
1983
|
+
}
|
|
1984
|
+
/** Signed follower mutation dispatched by a leader admin. Exactly one of
|
|
1985
|
+
* `fields` or `stage` is present. */
|
|
1986
|
+
interface NetworkRecordMutation {
|
|
1987
|
+
type: string;
|
|
1988
|
+
expectedRevision: number;
|
|
1989
|
+
expectedStage?: string | null;
|
|
1990
|
+
mutationId: string;
|
|
1991
|
+
fields?: Record<string, unknown>;
|
|
1992
|
+
stage?: string;
|
|
1993
|
+
actor: {
|
|
1994
|
+
id: string;
|
|
1995
|
+
email?: string;
|
|
1996
|
+
};
|
|
1997
|
+
}
|
|
1998
|
+
/** Successful follower mutation response. */
|
|
1999
|
+
interface NetworkRecordMutationResult {
|
|
2000
|
+
version: 1;
|
|
2001
|
+
site: {
|
|
2002
|
+
id: string;
|
|
2003
|
+
name: string;
|
|
2004
|
+
};
|
|
2005
|
+
record: NetworkRecord;
|
|
2006
|
+
duplicate: boolean;
|
|
1935
2007
|
}
|
|
1936
2008
|
/** One bounded, offset-paged follower record window. */
|
|
1937
2009
|
interface NetworkRecordPage {
|
|
@@ -2825,4 +2897,4 @@ interface ChapterPromotionInput {
|
|
|
2825
2897
|
/** Export the provider-independent pieces of one exact active signup revision. */
|
|
2826
2898
|
declare function exportChapterPromotion(input: ChapterPromotionInput): Promise<PromotionAdapterResult>;
|
|
2827
2899
|
|
|
2828
|
-
export { ADMISSION_GRANTS_PATH, ADMISSION_GRANTS_SCHEMA_VERSION, type AccountModel, type AdminNotificationTrigger, type AdmissionDecision, type AdmissionGrantDocument, type AdmissionGrantEnvelope, type AdmissionGrantInput, type AdmissionGrantReceipt, type AdmissionGrantRejection, type AdmissionGrantRevisionRow, type AdmissionGrantRow, type AdmissionGrantValidation, type Applicant, type ApplicationBookingPatch, type ApplicationRecord, type ApplicationSummary, type Attr, type AttrType, BUILDER_LIBRARY_ADMIN_PATH, BUILDER_LIBRARY_CONTROL_PATH, BUILDER_LIBRARY_MANIFEST_PATH, BUILDER_LIBRARY_PROMOTE_PATH, BUILDER_LIBRARY_SCHEMA_VERSION, type BuilderLibraryBrandAssetRef, type BuilderLibraryDocument, type BuilderLibraryEnvelope, type BuilderLibraryManifest, type BuilderLibraryPromotionProvenance, type BuilderLibraryReceipt, type BuilderLibraryResource, type BuilderLibraryResourceKind, type BuilderLibraryResourceProvenance, type BuilderLibraryResourceStatus, type BuilderLibraryScope, type BuilderLibrarySource, type BuilderLibrarySourceType, type BuilderLibraryTarget, type BuilderLibraryValidationOptions, type BuilderLibraryValidationResult, type BuilderLibraryViewer, type BuyerGiftClaim, CHAPTER_FLOW_FIELDS_SCHEMA_VERSION, CHAPTER_PROMOTION_ADAPTER, type Chapter, type ChapterApplication, type ChapterAuth, type ChapterBrand, type ChapterBuilderLibrary, type ChapterConfig, type ChapterCopy, type ChapterCopyInput, type ChapterDb, type ChapterEmailIdentity, type ChapterEmails, type ChapterFieldFlow, type ChapterFlowField, type ChapterFlowFieldContract, type ChapterIntegrationDescriptor, type ChapterIntegrationOptions, type ChapterMemberContent, type ChapterMode, type ChapterNetwork, type ChapterNetworkReader, type ChapterNetworkTarget, type ChapterOperations, type ChapterPipeline, type ChapterPolicy, type ChapterPrices, type ChapterPromotionInput, type ChapterRunbookHints, type ChapterScheduling, type ChapterSends, type ChapterSignupControl, type ChapterTier, type ChapterTierConfig, type ClerkInviteInput, type ClerkMetadataInput, type ClerkResult, type ClerkUserInput, type ClerkUserRecord, type CompiledChapterBrandTokens, DEFAULT_CHAPTER_COPY, DEFAULT_SHARE_FIELDS, type DashboardMetricData, type DashboardMetricSeries, type DbOp, type DbRules, type DbSchema, type DeliveryDecision, type EffectiveMemberContent, type EffectiveMemberContentPage, type EmailGroup, type EmailTemplate, type EmailTemplateRow, type Entity, type ExistingMeeting, GIFT_OFFER_CATALOG_VERSION, type GiftOffer, type GiftOfferCatalog, type GiftOfferTarget, type GiftOfferValidation, type GuardResult, type IntegrationDescriptor, type IntegrationProvision, type IntegrationSecret, type IntegrationSetting, type IntegrationSync, type JoinConfigGroup, type JoinConfigTier, type JoinContinuation, type LeaderCrmOptions, type LeaderFormationConfig, type LiveEvent, MAX_GIFT_OFFERS, MEMBERSHIP_PAGE_RENDERER, MEMBER_CONTENT_CONTROL_PATH, MEMBER_CONTENT_PATH, MEMBER_CONTENT_SCHEMA_VERSION, type MailSender, type MeetingForReconcile, type MeetingRecord, type MeetingReschedulePatch, type MemberApplication, type MemberContentDocument, type MemberContentEnvelope, type MemberContentPage, type MemberContentPageProjection, type MemberContentProjection, type MemberContentReceipt, type MemberContentRejection, type MemberContentSource, type MemberContentSourceType, type MemberContentTarget, type MemberContentTierAuthority, type MemberContentValidationOptions, type MemberContentValidationResult, type MemberContentViewer, type MemberPageAudience, type MemberPageNavigation, type MemberPageUpsell, type MemberPageUpsellOffer, type MemberPageUpsellOverride, type MemberSession, type MembershipPageDocument, type MembershipPageValidationOptions, type MembershipPageValidationResult, type MembershipTierAuthority, type MembershipTierCallout, type MembershipTierCapacity, type MembershipTierMarkdownResult, type MembershipTierPresentation, type MembershipTierVariant, type NetworkRecord, type NetworkRecordNote, type NetworkRecordPage, type NetworkRollup, type NetworkRollupTarget, type NetworkSharedNote, type NetworkSnapshot, type NewMeetingRow, type NotifyDeps, type NotifyInput, type NotifyResult, type PaymentsGroup, type ProjectionDeps, type PublicGiftOffer, type ReconcileDecision, type ResolvedApplication, type ResolvedAuth, type ResolvedBuilderLibrary, type ResolvedLeaderFormation, type ResolvedMemberContent, type ResolvedMemberPageUpsell, type ResolvedNetwork, type ResolvedNetworkReader, type ResolvedNetworkTarget, type ResolvedOperations, type ResolvedPipeline, type ResolvedScheduling, type ResolvedSends, type ResolvedSignupControl, type RoleChangeContext, type Rule, SCHEDULING_DEFAULTS, SIGNUP_CONTROL_PATH, SIGNUP_CONTROL_SCHEMA_VERSION, SIGNUP_CONTROL_THEME_MARKER, SIGNUP_CONTROL_THEME_STYLE_ID, type SchedulingErrors, type SecretMode, type SecretStore, type SessionUser, type SharedBusiness, type SharedPerson, type SharedRecord, type SharedRecordV1, type SharedRecordV2, type SignupControlApplication, type SignupControlDocument, type SignupControlEnvelope, type SignupControlPolicy, type SignupControlReceipt, type SignupControlRejection, type SignupControlTheme, type SignupControlThemeHead, type SignupControlThemeMetadata, type SignupControlThemeOptions, type SignupControlThemeRevision, type SignupControlThemeStyleTarget, type SignupControlTier, type SignupControlValidation, type StripeEvent, type StripeResult, type SubmitResult, type TierGroup, type TierGroupRow, type WebhookEvent, applicantProfile, applicationBookingUpdate, applicationFlowFields, applicationSummary, applyMembershipTierMarkdown, backfillCrm, bookingDecision, brandTokens, bucketSeries, buildBuilderLibraryManifest, buildGroupSeed, buildTierSeeds, builderLibraryDigest, canApprove, canBook, canChangeRole, canTransition, canViewBuilderLibraryResource, canceledPatch, canonicalBuilderLibrary, canonicalMemberContent, canonicalSignupControl, chapterBrandFromTokens, chapterDb, chapterFlowFieldContract, clampArray, clerkGetUser, clerkGetUserByEmail, clerkIntegration, clerkInviteRequest, clerkListUsers, clerkSetRole, clerkUserRequest, composeMemberContent, createAdmissionGrantEnvelope, createBuilderLibraryEnvelope, createChapterIntegration, createClerkInvitation, createClerkUser, createMemberContentEnvelope, createSignupControlEnvelope, dashboardMetricData, defaultCrm, defineChapter, emailGroupFrom, endForSlot, exportChapterPromotion, findAdmissionGrant, findApplicationRef, findGiftOffer, findTier, firstPaymentPatch, formatChapterCopy, formationFields, formationFlowFields, getVaultSecret, giftOfferActive, hasDisclaimerAck, hydrateSignupControlTheme, injectSignupControlThemeHead, introIdempotencyKey, isAdminRole, isAlreadySent, isReconcilable, isSlotAvailable, isValidEmail, joinConfig, joinConfigTiers, leaderCrmConfig, loadLatestAdmissionRevision, loadOfferableTiers, loadTiers, materializeAdmissionGrants, meetingCreateRow, meetingRescheduleUpdate, memberApplication, memberContentDigest, memberContentDocument, memberSession, membershipPageDocument, membershipTierPresentationFromMarkdown, networkSourceTag, normalizeAdmissionEmail, normalizeChapterEmail, normalizeSharedRecord, normalizeWebhookEvent, offerableTiers, paymentsReady, personInputFromApp, planDelivery, projectApplicant, projectBuilderLibraryDelivery, projectMemberContent, projectSharedRecord, promoteBuilderLibraryResource, publicGiftOffers, reconcileMeetings, refundedPatch, render, renderSignupControlThemeHead, renderSummary, renderTemplateBody, renewalPatch, resolveApplication, resolveAuth, resolveBuilderLibrary, resolveChapterCopy, resolveJoinContinuation, resolveLeaderFormation, resolveMemberContent, resolvePipeline, resolveScheduling, resolveSignupControl, resolveTiers, roleFromClaim, sendTemplated, sharedPersonInput, sharedRecordFromCrm, signupControlDigest, slotWindow, stageIndex, stripeCall, subAnnualCents, submitApplication, subscriptionIdempotencyKey, syncApplicationToCrm, tierIsFree, tierPayable, updateClerkUserMetadata, updateClerkUserMetadataByEmail, validateAdmissionGrantDocument, validateBuilderLibraryDocument, validateGiftOfferCatalog, validateMemberContentDocument, validateMembershipPageDocument, validateScheduling, validateSignupControlDocument, webhookMutationId };
|
|
2900
|
+
export { ADMISSION_GRANTS_PATH, ADMISSION_GRANTS_SCHEMA_VERSION, type AccountModel, type AdminNotificationTrigger, type AdmissionDecision, type AdmissionGrantDocument, type AdmissionGrantEnvelope, type AdmissionGrantInput, type AdmissionGrantReceipt, type AdmissionGrantRejection, type AdmissionGrantRevisionRow, type AdmissionGrantRow, type AdmissionGrantValidation, type Applicant, type ApplicationBookingPatch, type ApplicationRecord, type ApplicationSummary, type Attr, type AttrType, BUILDER_LIBRARY_ADMIN_PATH, BUILDER_LIBRARY_CONTROL_PATH, BUILDER_LIBRARY_MANIFEST_PATH, BUILDER_LIBRARY_PROMOTE_PATH, BUILDER_LIBRARY_SCHEMA_VERSION, type BuilderLibraryBrandAssetRef, type BuilderLibraryDocument, type BuilderLibraryEnvelope, type BuilderLibraryManifest, type BuilderLibraryPromotionProvenance, type BuilderLibraryReceipt, type BuilderLibraryResource, type BuilderLibraryResourceKind, type BuilderLibraryResourceProvenance, type BuilderLibraryResourceStatus, type BuilderLibraryScope, type BuilderLibrarySource, type BuilderLibrarySourceType, type BuilderLibraryTarget, type BuilderLibraryValidationOptions, type BuilderLibraryValidationResult, type BuilderLibraryViewer, type BuyerGiftClaim, CHAPTER_FLOW_FIELDS_SCHEMA_VERSION, CHAPTER_PROMOTION_ADAPTER, type Chapter, type ChapterApplication, type ChapterAuth, type ChapterBrand, type ChapterBuilderLibrary, type ChapterConfig, type ChapterCopy, type ChapterCopyInput, type ChapterDb, type ChapterEmailIdentity, type ChapterEmails, type ChapterFieldFlow, type ChapterFlowField, type ChapterFlowFieldContract, type ChapterIntegrationDescriptor, type ChapterIntegrationOptions, type ChapterMemberContent, type ChapterMode, type ChapterNetwork, type ChapterNetworkReader, type ChapterNetworkTarget, type ChapterOperations, type ChapterPipeline, type ChapterPolicy, type ChapterPrices, type ChapterPromotionInput, type ChapterRunbookHints, type ChapterScheduling, type ChapterSends, type ChapterSignupControl, type ChapterTier, type ChapterTierConfig, type ClerkInviteInput, type ClerkMetadataInput, type ClerkResult, type ClerkUserInput, type ClerkUserRecord, type CompiledChapterBrandTokens, DEFAULT_CHAPTER_COPY, DEFAULT_SHARE_FIELDS, type DashboardMetricData, type DashboardMetricSeries, type DbOp, type DbRules, type DbSchema, type DeliveryDecision, type EffectiveMemberContent, type EffectiveMemberContentPage, type EmailGroup, type EmailTemplate, type EmailTemplateRow, type Entity, type ExistingMeeting, GIFT_OFFER_CATALOG_VERSION, type GiftOffer, type GiftOfferCatalog, type GiftOfferTarget, type GiftOfferValidation, type GuardResult, type IntegrationDescriptor, type IntegrationProvision, type IntegrationSecret, type IntegrationSetting, type IntegrationSync, type JoinConfigGroup, type JoinConfigTier, type JoinContinuation, type LeaderCrmOptions, type LeaderFormationConfig, type LiveEvent, MAX_GIFT_OFFERS, MEMBERSHIP_PAGE_RENDERER, MEMBER_CONTENT_CONTROL_PATH, MEMBER_CONTENT_PATH, MEMBER_CONTENT_SCHEMA_VERSION, type MailSender, type MeetingForReconcile, type MeetingRecord, type MeetingReschedulePatch, type MemberApplication, type MemberContentDocument, type MemberContentEnvelope, type MemberContentPage, type MemberContentPageProjection, type MemberContentProjection, type MemberContentReceipt, type MemberContentRejection, type MemberContentSource, type MemberContentSourceType, type MemberContentTarget, type MemberContentTierAuthority, type MemberContentValidationOptions, type MemberContentValidationResult, type MemberContentViewer, type MemberPageAudience, type MemberPageNavigation, type MemberPageUpsell, type MemberPageUpsellOffer, type MemberPageUpsellOverride, type MemberSession, type MembershipPageDocument, type MembershipPageValidationOptions, type MembershipPageValidationResult, type MembershipTierAuthority, type MembershipTierCallout, type MembershipTierCapacity, type MembershipTierMarkdownResult, type MembershipTierPresentation, type MembershipTierVariant, type NetworkEditableField, type NetworkRecord, type NetworkRecordEdit, type NetworkRecordMutation, type NetworkRecordMutationResult, type NetworkRecordNote, type NetworkRecordPage, type NetworkRollup, type NetworkRollupTarget, type NetworkSharedNote, type NetworkSnapshot, type NetworkStageTransition, type NewMeetingRow, type NotifyDeps, type NotifyInput, type NotifyResult, type PaymentsGroup, type ProjectionDeps, type PublicGiftOffer, type ReconcileDecision, type ResolvedApplication, type ResolvedAuth, type ResolvedBuilderLibrary, type ResolvedLeaderFormation, type ResolvedMemberContent, type ResolvedMemberPageUpsell, type ResolvedNetwork, type ResolvedNetworkReader, type ResolvedNetworkTarget, type ResolvedOperations, type ResolvedPipeline, type ResolvedScheduling, type ResolvedSends, type ResolvedSignupControl, type RoleChangeContext, type Rule, SCHEDULING_DEFAULTS, SIGNUP_CONTROL_PATH, SIGNUP_CONTROL_SCHEMA_VERSION, SIGNUP_CONTROL_THEME_MARKER, SIGNUP_CONTROL_THEME_STYLE_ID, type SchedulingErrors, type SecretMode, type SecretStore, type SessionUser, type SharedBusiness, type SharedPerson, type SharedRecord, type SharedRecordV1, type SharedRecordV2, type SignupControlApplication, type SignupControlDocument, type SignupControlEnvelope, type SignupControlPolicy, type SignupControlReceipt, type SignupControlRejection, type SignupControlTheme, type SignupControlThemeHead, type SignupControlThemeMetadata, type SignupControlThemeOptions, type SignupControlThemeRevision, type SignupControlThemeStyleTarget, type SignupControlTier, type SignupControlValidation, type StripeEvent, type StripeResult, type SubmitResult, type TierGroup, type TierGroupRow, type WebhookEvent, applicantProfile, applicationBookingUpdate, applicationFlowFields, applicationSummary, applyMembershipTierMarkdown, backfillCrm, bookingDecision, brandTokens, bucketSeries, buildBuilderLibraryManifest, buildGroupSeed, buildTierSeeds, builderLibraryDigest, canApprove, canBook, canChangeRole, canTransition, canViewBuilderLibraryResource, canceledPatch, canonicalBuilderLibrary, canonicalMemberContent, canonicalSignupControl, chapterBrandFromTokens, chapterDb, chapterFlowFieldContract, clampArray, clerkGetUser, clerkGetUserByEmail, clerkIntegration, clerkInviteRequest, clerkListUsers, clerkSetRole, clerkUserRequest, composeMemberContent, createAdmissionGrantEnvelope, createBuilderLibraryEnvelope, createChapterIntegration, createClerkInvitation, createClerkUser, createMemberContentEnvelope, createSignupControlEnvelope, dashboardMetricData, defaultCrm, defineChapter, emailGroupFrom, endForSlot, exportChapterPromotion, findAdmissionGrant, findApplicationRef, findGiftOffer, findTier, firstPaymentPatch, formatChapterCopy, formationFields, formationFlowFields, getVaultSecret, giftOfferActive, hasDisclaimerAck, hydrateSignupControlTheme, injectSignupControlThemeHead, introIdempotencyKey, isAdminRole, isAlreadySent, isReconcilable, isSlotAvailable, isValidEmail, joinConfig, joinConfigTiers, leaderCrmConfig, loadLatestAdmissionRevision, loadOfferableTiers, loadTiers, materializeAdmissionGrants, meetingCreateRow, meetingRescheduleUpdate, memberApplication, memberContentDigest, memberContentDocument, memberSession, membershipPageDocument, membershipTierPresentationFromMarkdown, networkSourceTag, normalizeAdmissionEmail, normalizeChapterEmail, normalizeSharedRecord, normalizeWebhookEvent, offerableTiers, paymentsReady, personInputFromApp, planDelivery, projectApplicant, projectBuilderLibraryDelivery, projectMemberContent, projectSharedRecord, promoteBuilderLibraryResource, publicGiftOffers, reconcileMeetings, refundedPatch, render, renderSignupControlThemeHead, renderSummary, renderTemplateBody, renewalPatch, resolveApplication, resolveAuth, resolveBuilderLibrary, resolveChapterCopy, resolveJoinContinuation, resolveLeaderFormation, resolveMemberContent, resolvePipeline, resolveScheduling, resolveSignupControl, resolveTiers, roleFromClaim, sendTemplated, sharedPersonInput, sharedRecordFromCrm, signupControlDigest, slotWindow, stageIndex, stripeCall, subAnnualCents, submitApplication, subscriptionIdempotencyKey, syncApplicationToCrm, tierIsFree, tierPayable, updateClerkUserMetadata, updateClerkUserMetadataByEmail, validateAdmissionGrantDocument, validateBuilderLibraryDocument, validateGiftOfferCatalog, validateMemberContentDocument, validateMembershipPageDocument, validateScheduling, validateSignupControlDocument, webhookMutationId };
|
package/dist/index.d.ts
CHANGED
|
@@ -275,6 +275,16 @@ interface ChapterNetworkTarget {
|
|
|
275
275
|
* this follower. Omitted by default: a target never gains write permission
|
|
276
276
|
* merely because its records are browsable. */
|
|
277
277
|
sharedNotes?: readonly string[];
|
|
278
|
+
/** Per-record-type upper bound on profile fields this leader permits its
|
|
279
|
+
* admins to edit remotely. The follower must independently delegate the
|
|
280
|
+
* same field; readable fields never become writable implicitly. */
|
|
281
|
+
editableFields?: Record<string, readonly string[]>;
|
|
282
|
+
/** Record types on which this leader permits remote lifecycle transitions.
|
|
283
|
+
* The follower must independently opt in and remains pipeline authority. */
|
|
284
|
+
stageTransitions?: readonly string[];
|
|
285
|
+
/** Allow package-owned desired admission decisions for existing leader CRM
|
|
286
|
+
* people to be delivered to this target. Omitted means default deny. */
|
|
287
|
+
admissionGrants?: boolean;
|
|
278
288
|
}
|
|
279
289
|
/** One signed peer allowed to browse a privacy-bounded projection of this
|
|
280
290
|
* site's CRM. The follower owns this allowlist; a leader target declaration
|
|
@@ -284,11 +294,21 @@ interface ChapterNetworkReader {
|
|
|
284
294
|
id: string;
|
|
285
295
|
/** Per-record-type field allowlist. Omitted types and fields never leave
|
|
286
296
|
* this site. Record id, name, stage, and timestamps are bounded metadata. */
|
|
287
|
-
fields
|
|
297
|
+
fields?: Record<string, readonly string[]>;
|
|
288
298
|
/** Record types on which this reader may append an explicitly shared note.
|
|
289
299
|
* Omitted by default: browse permission never silently grants write access.
|
|
290
300
|
* Shared notes land in the follower CRM activity feed. */
|
|
291
301
|
sharedNotes?: readonly string[];
|
|
302
|
+
/** Exact local CRM fields this reader may edit remotely, by record type.
|
|
303
|
+
* Every field must also be readable so the peer can perform an optimistic
|
|
304
|
+
* edit against the value and revision it actually reviewed. */
|
|
305
|
+
editableFields?: Record<string, readonly string[]>;
|
|
306
|
+
/** Local CRM record types on which this reader may request a lifecycle
|
|
307
|
+
* transition. Chapter still enforces the local pipeline and gates. */
|
|
308
|
+
stageTransitions?: readonly string[];
|
|
309
|
+
/** Accept signed desired admission decisions from this reader. Independent
|
|
310
|
+
* of record browsing; an admission-only reader may omit `fields`. */
|
|
311
|
+
admissionGrants?: boolean;
|
|
292
312
|
}
|
|
293
313
|
/** Leader/follower network configuration. A follower needs no code config to
|
|
294
314
|
* receive pushed records. It must explicitly declare `readers` before any peer
|
|
@@ -331,12 +351,18 @@ interface ResolvedNetworkTarget {
|
|
|
331
351
|
secretName: string;
|
|
332
352
|
fields?: Record<string, readonly string[]>;
|
|
333
353
|
sharedNotes: readonly string[];
|
|
354
|
+
editableFields: Record<string, readonly string[]>;
|
|
355
|
+
stageTransitions: readonly string[];
|
|
356
|
+
admissionGrants?: boolean;
|
|
334
357
|
}
|
|
335
358
|
/** A validated follower-owned record projection for one signed reader. */
|
|
336
359
|
interface ResolvedNetworkReader {
|
|
337
360
|
id: string;
|
|
338
361
|
fields: Record<string, readonly string[]>;
|
|
339
362
|
sharedNotes: readonly string[];
|
|
363
|
+
editableFields: Record<string, readonly string[]>;
|
|
364
|
+
stageTransitions: readonly string[];
|
|
365
|
+
admissionGrants?: boolean;
|
|
340
366
|
}
|
|
341
367
|
/** Fully-resolved leader network configuration. */
|
|
342
368
|
interface ResolvedNetwork {
|
|
@@ -938,7 +964,7 @@ declare function createChapterIntegration(chapter: Chapter, options?: ChapterInt
|
|
|
938
964
|
* read-only super-admin tier (default on for the `"claim"` ladder). A `"claim"`
|
|
939
965
|
* chapter therefore emits the reference namespace set — `applications`,
|
|
940
966
|
* `groups`, `meetings`, `emailLog`, `superAdmins` — with no `admins` table. */
|
|
941
|
-
declare function chapterDb(mode: ChapterMode, auth: ResolvedAuth, includeNetworkNotes?: boolean, application?: ResolvedApplication, includeSignupControl?: boolean, includeMemberContent?: boolean, includeBuilderLibrary?: boolean): {
|
|
967
|
+
declare function chapterDb(mode: ChapterMode, auth: ResolvedAuth, includeNetworkNotes?: boolean, application?: ResolvedApplication, includeSignupControl?: boolean, includeMemberContent?: boolean, includeBuilderLibrary?: boolean, includeLeaderAdmissions?: boolean): {
|
|
942
968
|
schema: DbSchema;
|
|
943
969
|
rules: DbRules;
|
|
944
970
|
};
|
|
@@ -1932,6 +1958,52 @@ interface NetworkRecord {
|
|
|
1932
1958
|
fields: Record<string, unknown>;
|
|
1933
1959
|
createdAt: number;
|
|
1934
1960
|
updatedAt: number;
|
|
1961
|
+
/** Optimistic concurrency token authored by the follower. */
|
|
1962
|
+
revision: number;
|
|
1963
|
+
/** Follower-authored edit contract. Omitted when this edge is read-only. */
|
|
1964
|
+
edit?: NetworkRecordEdit;
|
|
1965
|
+
}
|
|
1966
|
+
/** One follower CRM field a leader may patch. */
|
|
1967
|
+
interface NetworkEditableField {
|
|
1968
|
+
id: string;
|
|
1969
|
+
label: string;
|
|
1970
|
+
type: FieldType;
|
|
1971
|
+
required: boolean;
|
|
1972
|
+
options?: readonly string[];
|
|
1973
|
+
}
|
|
1974
|
+
/** One follower-authoritative lifecycle destination currently allowed. */
|
|
1975
|
+
interface NetworkStageTransition {
|
|
1976
|
+
id: string;
|
|
1977
|
+
label: string;
|
|
1978
|
+
}
|
|
1979
|
+
/** Edit metadata computed from the follower schema, pipeline, and record. */
|
|
1980
|
+
interface NetworkRecordEdit {
|
|
1981
|
+
fields: NetworkEditableField[];
|
|
1982
|
+
allowedStages: NetworkStageTransition[];
|
|
1983
|
+
}
|
|
1984
|
+
/** Signed follower mutation dispatched by a leader admin. Exactly one of
|
|
1985
|
+
* `fields` or `stage` is present. */
|
|
1986
|
+
interface NetworkRecordMutation {
|
|
1987
|
+
type: string;
|
|
1988
|
+
expectedRevision: number;
|
|
1989
|
+
expectedStage?: string | null;
|
|
1990
|
+
mutationId: string;
|
|
1991
|
+
fields?: Record<string, unknown>;
|
|
1992
|
+
stage?: string;
|
|
1993
|
+
actor: {
|
|
1994
|
+
id: string;
|
|
1995
|
+
email?: string;
|
|
1996
|
+
};
|
|
1997
|
+
}
|
|
1998
|
+
/** Successful follower mutation response. */
|
|
1999
|
+
interface NetworkRecordMutationResult {
|
|
2000
|
+
version: 1;
|
|
2001
|
+
site: {
|
|
2002
|
+
id: string;
|
|
2003
|
+
name: string;
|
|
2004
|
+
};
|
|
2005
|
+
record: NetworkRecord;
|
|
2006
|
+
duplicate: boolean;
|
|
1935
2007
|
}
|
|
1936
2008
|
/** One bounded, offset-paged follower record window. */
|
|
1937
2009
|
interface NetworkRecordPage {
|
|
@@ -2825,4 +2897,4 @@ interface ChapterPromotionInput {
|
|
|
2825
2897
|
/** Export the provider-independent pieces of one exact active signup revision. */
|
|
2826
2898
|
declare function exportChapterPromotion(input: ChapterPromotionInput): Promise<PromotionAdapterResult>;
|
|
2827
2899
|
|
|
2828
|
-
export { ADMISSION_GRANTS_PATH, ADMISSION_GRANTS_SCHEMA_VERSION, type AccountModel, type AdminNotificationTrigger, type AdmissionDecision, type AdmissionGrantDocument, type AdmissionGrantEnvelope, type AdmissionGrantInput, type AdmissionGrantReceipt, type AdmissionGrantRejection, type AdmissionGrantRevisionRow, type AdmissionGrantRow, type AdmissionGrantValidation, type Applicant, type ApplicationBookingPatch, type ApplicationRecord, type ApplicationSummary, type Attr, type AttrType, BUILDER_LIBRARY_ADMIN_PATH, BUILDER_LIBRARY_CONTROL_PATH, BUILDER_LIBRARY_MANIFEST_PATH, BUILDER_LIBRARY_PROMOTE_PATH, BUILDER_LIBRARY_SCHEMA_VERSION, type BuilderLibraryBrandAssetRef, type BuilderLibraryDocument, type BuilderLibraryEnvelope, type BuilderLibraryManifest, type BuilderLibraryPromotionProvenance, type BuilderLibraryReceipt, type BuilderLibraryResource, type BuilderLibraryResourceKind, type BuilderLibraryResourceProvenance, type BuilderLibraryResourceStatus, type BuilderLibraryScope, type BuilderLibrarySource, type BuilderLibrarySourceType, type BuilderLibraryTarget, type BuilderLibraryValidationOptions, type BuilderLibraryValidationResult, type BuilderLibraryViewer, type BuyerGiftClaim, CHAPTER_FLOW_FIELDS_SCHEMA_VERSION, CHAPTER_PROMOTION_ADAPTER, type Chapter, type ChapterApplication, type ChapterAuth, type ChapterBrand, type ChapterBuilderLibrary, type ChapterConfig, type ChapterCopy, type ChapterCopyInput, type ChapterDb, type ChapterEmailIdentity, type ChapterEmails, type ChapterFieldFlow, type ChapterFlowField, type ChapterFlowFieldContract, type ChapterIntegrationDescriptor, type ChapterIntegrationOptions, type ChapterMemberContent, type ChapterMode, type ChapterNetwork, type ChapterNetworkReader, type ChapterNetworkTarget, type ChapterOperations, type ChapterPipeline, type ChapterPolicy, type ChapterPrices, type ChapterPromotionInput, type ChapterRunbookHints, type ChapterScheduling, type ChapterSends, type ChapterSignupControl, type ChapterTier, type ChapterTierConfig, type ClerkInviteInput, type ClerkMetadataInput, type ClerkResult, type ClerkUserInput, type ClerkUserRecord, type CompiledChapterBrandTokens, DEFAULT_CHAPTER_COPY, DEFAULT_SHARE_FIELDS, type DashboardMetricData, type DashboardMetricSeries, type DbOp, type DbRules, type DbSchema, type DeliveryDecision, type EffectiveMemberContent, type EffectiveMemberContentPage, type EmailGroup, type EmailTemplate, type EmailTemplateRow, type Entity, type ExistingMeeting, GIFT_OFFER_CATALOG_VERSION, type GiftOffer, type GiftOfferCatalog, type GiftOfferTarget, type GiftOfferValidation, type GuardResult, type IntegrationDescriptor, type IntegrationProvision, type IntegrationSecret, type IntegrationSetting, type IntegrationSync, type JoinConfigGroup, type JoinConfigTier, type JoinContinuation, type LeaderCrmOptions, type LeaderFormationConfig, type LiveEvent, MAX_GIFT_OFFERS, MEMBERSHIP_PAGE_RENDERER, MEMBER_CONTENT_CONTROL_PATH, MEMBER_CONTENT_PATH, MEMBER_CONTENT_SCHEMA_VERSION, type MailSender, type MeetingForReconcile, type MeetingRecord, type MeetingReschedulePatch, type MemberApplication, type MemberContentDocument, type MemberContentEnvelope, type MemberContentPage, type MemberContentPageProjection, type MemberContentProjection, type MemberContentReceipt, type MemberContentRejection, type MemberContentSource, type MemberContentSourceType, type MemberContentTarget, type MemberContentTierAuthority, type MemberContentValidationOptions, type MemberContentValidationResult, type MemberContentViewer, type MemberPageAudience, type MemberPageNavigation, type MemberPageUpsell, type MemberPageUpsellOffer, type MemberPageUpsellOverride, type MemberSession, type MembershipPageDocument, type MembershipPageValidationOptions, type MembershipPageValidationResult, type MembershipTierAuthority, type MembershipTierCallout, type MembershipTierCapacity, type MembershipTierMarkdownResult, type MembershipTierPresentation, type MembershipTierVariant, type NetworkRecord, type NetworkRecordNote, type NetworkRecordPage, type NetworkRollup, type NetworkRollupTarget, type NetworkSharedNote, type NetworkSnapshot, type NewMeetingRow, type NotifyDeps, type NotifyInput, type NotifyResult, type PaymentsGroup, type ProjectionDeps, type PublicGiftOffer, type ReconcileDecision, type ResolvedApplication, type ResolvedAuth, type ResolvedBuilderLibrary, type ResolvedLeaderFormation, type ResolvedMemberContent, type ResolvedMemberPageUpsell, type ResolvedNetwork, type ResolvedNetworkReader, type ResolvedNetworkTarget, type ResolvedOperations, type ResolvedPipeline, type ResolvedScheduling, type ResolvedSends, type ResolvedSignupControl, type RoleChangeContext, type Rule, SCHEDULING_DEFAULTS, SIGNUP_CONTROL_PATH, SIGNUP_CONTROL_SCHEMA_VERSION, SIGNUP_CONTROL_THEME_MARKER, SIGNUP_CONTROL_THEME_STYLE_ID, type SchedulingErrors, type SecretMode, type SecretStore, type SessionUser, type SharedBusiness, type SharedPerson, type SharedRecord, type SharedRecordV1, type SharedRecordV2, type SignupControlApplication, type SignupControlDocument, type SignupControlEnvelope, type SignupControlPolicy, type SignupControlReceipt, type SignupControlRejection, type SignupControlTheme, type SignupControlThemeHead, type SignupControlThemeMetadata, type SignupControlThemeOptions, type SignupControlThemeRevision, type SignupControlThemeStyleTarget, type SignupControlTier, type SignupControlValidation, type StripeEvent, type StripeResult, type SubmitResult, type TierGroup, type TierGroupRow, type WebhookEvent, applicantProfile, applicationBookingUpdate, applicationFlowFields, applicationSummary, applyMembershipTierMarkdown, backfillCrm, bookingDecision, brandTokens, bucketSeries, buildBuilderLibraryManifest, buildGroupSeed, buildTierSeeds, builderLibraryDigest, canApprove, canBook, canChangeRole, canTransition, canViewBuilderLibraryResource, canceledPatch, canonicalBuilderLibrary, canonicalMemberContent, canonicalSignupControl, chapterBrandFromTokens, chapterDb, chapterFlowFieldContract, clampArray, clerkGetUser, clerkGetUserByEmail, clerkIntegration, clerkInviteRequest, clerkListUsers, clerkSetRole, clerkUserRequest, composeMemberContent, createAdmissionGrantEnvelope, createBuilderLibraryEnvelope, createChapterIntegration, createClerkInvitation, createClerkUser, createMemberContentEnvelope, createSignupControlEnvelope, dashboardMetricData, defaultCrm, defineChapter, emailGroupFrom, endForSlot, exportChapterPromotion, findAdmissionGrant, findApplicationRef, findGiftOffer, findTier, firstPaymentPatch, formatChapterCopy, formationFields, formationFlowFields, getVaultSecret, giftOfferActive, hasDisclaimerAck, hydrateSignupControlTheme, injectSignupControlThemeHead, introIdempotencyKey, isAdminRole, isAlreadySent, isReconcilable, isSlotAvailable, isValidEmail, joinConfig, joinConfigTiers, leaderCrmConfig, loadLatestAdmissionRevision, loadOfferableTiers, loadTiers, materializeAdmissionGrants, meetingCreateRow, meetingRescheduleUpdate, memberApplication, memberContentDigest, memberContentDocument, memberSession, membershipPageDocument, membershipTierPresentationFromMarkdown, networkSourceTag, normalizeAdmissionEmail, normalizeChapterEmail, normalizeSharedRecord, normalizeWebhookEvent, offerableTiers, paymentsReady, personInputFromApp, planDelivery, projectApplicant, projectBuilderLibraryDelivery, projectMemberContent, projectSharedRecord, promoteBuilderLibraryResource, publicGiftOffers, reconcileMeetings, refundedPatch, render, renderSignupControlThemeHead, renderSummary, renderTemplateBody, renewalPatch, resolveApplication, resolveAuth, resolveBuilderLibrary, resolveChapterCopy, resolveJoinContinuation, resolveLeaderFormation, resolveMemberContent, resolvePipeline, resolveScheduling, resolveSignupControl, resolveTiers, roleFromClaim, sendTemplated, sharedPersonInput, sharedRecordFromCrm, signupControlDigest, slotWindow, stageIndex, stripeCall, subAnnualCents, submitApplication, subscriptionIdempotencyKey, syncApplicationToCrm, tierIsFree, tierPayable, updateClerkUserMetadata, updateClerkUserMetadataByEmail, validateAdmissionGrantDocument, validateBuilderLibraryDocument, validateGiftOfferCatalog, validateMemberContentDocument, validateMembershipPageDocument, validateScheduling, validateSignupControlDocument, webhookMutationId };
|
|
2900
|
+
export { ADMISSION_GRANTS_PATH, ADMISSION_GRANTS_SCHEMA_VERSION, type AccountModel, type AdminNotificationTrigger, type AdmissionDecision, type AdmissionGrantDocument, type AdmissionGrantEnvelope, type AdmissionGrantInput, type AdmissionGrantReceipt, type AdmissionGrantRejection, type AdmissionGrantRevisionRow, type AdmissionGrantRow, type AdmissionGrantValidation, type Applicant, type ApplicationBookingPatch, type ApplicationRecord, type ApplicationSummary, type Attr, type AttrType, BUILDER_LIBRARY_ADMIN_PATH, BUILDER_LIBRARY_CONTROL_PATH, BUILDER_LIBRARY_MANIFEST_PATH, BUILDER_LIBRARY_PROMOTE_PATH, BUILDER_LIBRARY_SCHEMA_VERSION, type BuilderLibraryBrandAssetRef, type BuilderLibraryDocument, type BuilderLibraryEnvelope, type BuilderLibraryManifest, type BuilderLibraryPromotionProvenance, type BuilderLibraryReceipt, type BuilderLibraryResource, type BuilderLibraryResourceKind, type BuilderLibraryResourceProvenance, type BuilderLibraryResourceStatus, type BuilderLibraryScope, type BuilderLibrarySource, type BuilderLibrarySourceType, type BuilderLibraryTarget, type BuilderLibraryValidationOptions, type BuilderLibraryValidationResult, type BuilderLibraryViewer, type BuyerGiftClaim, CHAPTER_FLOW_FIELDS_SCHEMA_VERSION, CHAPTER_PROMOTION_ADAPTER, type Chapter, type ChapterApplication, type ChapterAuth, type ChapterBrand, type ChapterBuilderLibrary, type ChapterConfig, type ChapterCopy, type ChapterCopyInput, type ChapterDb, type ChapterEmailIdentity, type ChapterEmails, type ChapterFieldFlow, type ChapterFlowField, type ChapterFlowFieldContract, type ChapterIntegrationDescriptor, type ChapterIntegrationOptions, type ChapterMemberContent, type ChapterMode, type ChapterNetwork, type ChapterNetworkReader, type ChapterNetworkTarget, type ChapterOperations, type ChapterPipeline, type ChapterPolicy, type ChapterPrices, type ChapterPromotionInput, type ChapterRunbookHints, type ChapterScheduling, type ChapterSends, type ChapterSignupControl, type ChapterTier, type ChapterTierConfig, type ClerkInviteInput, type ClerkMetadataInput, type ClerkResult, type ClerkUserInput, type ClerkUserRecord, type CompiledChapterBrandTokens, DEFAULT_CHAPTER_COPY, DEFAULT_SHARE_FIELDS, type DashboardMetricData, type DashboardMetricSeries, type DbOp, type DbRules, type DbSchema, type DeliveryDecision, type EffectiveMemberContent, type EffectiveMemberContentPage, type EmailGroup, type EmailTemplate, type EmailTemplateRow, type Entity, type ExistingMeeting, GIFT_OFFER_CATALOG_VERSION, type GiftOffer, type GiftOfferCatalog, type GiftOfferTarget, type GiftOfferValidation, type GuardResult, type IntegrationDescriptor, type IntegrationProvision, type IntegrationSecret, type IntegrationSetting, type IntegrationSync, type JoinConfigGroup, type JoinConfigTier, type JoinContinuation, type LeaderCrmOptions, type LeaderFormationConfig, type LiveEvent, MAX_GIFT_OFFERS, MEMBERSHIP_PAGE_RENDERER, MEMBER_CONTENT_CONTROL_PATH, MEMBER_CONTENT_PATH, MEMBER_CONTENT_SCHEMA_VERSION, type MailSender, type MeetingForReconcile, type MeetingRecord, type MeetingReschedulePatch, type MemberApplication, type MemberContentDocument, type MemberContentEnvelope, type MemberContentPage, type MemberContentPageProjection, type MemberContentProjection, type MemberContentReceipt, type MemberContentRejection, type MemberContentSource, type MemberContentSourceType, type MemberContentTarget, type MemberContentTierAuthority, type MemberContentValidationOptions, type MemberContentValidationResult, type MemberContentViewer, type MemberPageAudience, type MemberPageNavigation, type MemberPageUpsell, type MemberPageUpsellOffer, type MemberPageUpsellOverride, type MemberSession, type MembershipPageDocument, type MembershipPageValidationOptions, type MembershipPageValidationResult, type MembershipTierAuthority, type MembershipTierCallout, type MembershipTierCapacity, type MembershipTierMarkdownResult, type MembershipTierPresentation, type MembershipTierVariant, type NetworkEditableField, type NetworkRecord, type NetworkRecordEdit, type NetworkRecordMutation, type NetworkRecordMutationResult, type NetworkRecordNote, type NetworkRecordPage, type NetworkRollup, type NetworkRollupTarget, type NetworkSharedNote, type NetworkSnapshot, type NetworkStageTransition, type NewMeetingRow, type NotifyDeps, type NotifyInput, type NotifyResult, type PaymentsGroup, type ProjectionDeps, type PublicGiftOffer, type ReconcileDecision, type ResolvedApplication, type ResolvedAuth, type ResolvedBuilderLibrary, type ResolvedLeaderFormation, type ResolvedMemberContent, type ResolvedMemberPageUpsell, type ResolvedNetwork, type ResolvedNetworkReader, type ResolvedNetworkTarget, type ResolvedOperations, type ResolvedPipeline, type ResolvedScheduling, type ResolvedSends, type ResolvedSignupControl, type RoleChangeContext, type Rule, SCHEDULING_DEFAULTS, SIGNUP_CONTROL_PATH, SIGNUP_CONTROL_SCHEMA_VERSION, SIGNUP_CONTROL_THEME_MARKER, SIGNUP_CONTROL_THEME_STYLE_ID, type SchedulingErrors, type SecretMode, type SecretStore, type SessionUser, type SharedBusiness, type SharedPerson, type SharedRecord, type SharedRecordV1, type SharedRecordV2, type SignupControlApplication, type SignupControlDocument, type SignupControlEnvelope, type SignupControlPolicy, type SignupControlReceipt, type SignupControlRejection, type SignupControlTheme, type SignupControlThemeHead, type SignupControlThemeMetadata, type SignupControlThemeOptions, type SignupControlThemeRevision, type SignupControlThemeStyleTarget, type SignupControlTier, type SignupControlValidation, type StripeEvent, type StripeResult, type SubmitResult, type TierGroup, type TierGroupRow, type WebhookEvent, applicantProfile, applicationBookingUpdate, applicationFlowFields, applicationSummary, applyMembershipTierMarkdown, backfillCrm, bookingDecision, brandTokens, bucketSeries, buildBuilderLibraryManifest, buildGroupSeed, buildTierSeeds, builderLibraryDigest, canApprove, canBook, canChangeRole, canTransition, canViewBuilderLibraryResource, canceledPatch, canonicalBuilderLibrary, canonicalMemberContent, canonicalSignupControl, chapterBrandFromTokens, chapterDb, chapterFlowFieldContract, clampArray, clerkGetUser, clerkGetUserByEmail, clerkIntegration, clerkInviteRequest, clerkListUsers, clerkSetRole, clerkUserRequest, composeMemberContent, createAdmissionGrantEnvelope, createBuilderLibraryEnvelope, createChapterIntegration, createClerkInvitation, createClerkUser, createMemberContentEnvelope, createSignupControlEnvelope, dashboardMetricData, defaultCrm, defineChapter, emailGroupFrom, endForSlot, exportChapterPromotion, findAdmissionGrant, findApplicationRef, findGiftOffer, findTier, firstPaymentPatch, formatChapterCopy, formationFields, formationFlowFields, getVaultSecret, giftOfferActive, hasDisclaimerAck, hydrateSignupControlTheme, injectSignupControlThemeHead, introIdempotencyKey, isAdminRole, isAlreadySent, isReconcilable, isSlotAvailable, isValidEmail, joinConfig, joinConfigTiers, leaderCrmConfig, loadLatestAdmissionRevision, loadOfferableTiers, loadTiers, materializeAdmissionGrants, meetingCreateRow, meetingRescheduleUpdate, memberApplication, memberContentDigest, memberContentDocument, memberSession, membershipPageDocument, membershipTierPresentationFromMarkdown, networkSourceTag, normalizeAdmissionEmail, normalizeChapterEmail, normalizeSharedRecord, normalizeWebhookEvent, offerableTiers, paymentsReady, personInputFromApp, planDelivery, projectApplicant, projectBuilderLibraryDelivery, projectMemberContent, projectSharedRecord, promoteBuilderLibraryResource, publicGiftOffers, reconcileMeetings, refundedPatch, render, renderSignupControlThemeHead, renderSummary, renderTemplateBody, renewalPatch, resolveApplication, resolveAuth, resolveBuilderLibrary, resolveChapterCopy, resolveJoinContinuation, resolveLeaderFormation, resolveMemberContent, resolvePipeline, resolveScheduling, resolveSignupControl, resolveTiers, roleFromClaim, sendTemplated, sharedPersonInput, sharedRecordFromCrm, signupControlDigest, slotWindow, stageIndex, stripeCall, subAnnualCents, submitApplication, subscriptionIdempotencyKey, syncApplicationToCrm, tierIsFree, tierPayable, updateClerkUserMetadata, updateClerkUserMetadataByEmail, validateAdmissionGrantDocument, validateBuilderLibraryDocument, validateGiftOfferCatalog, validateMemberContentDocument, validateMembershipPageDocument, validateScheduling, validateSignupControlDocument, webhookMutationId };
|
package/dist/index.js
CHANGED
|
@@ -299,6 +299,50 @@ var admissionGrantRevisionsEntity = {
|
|
|
299
299
|
receivedAt: attr2("number", { indexed: true })
|
|
300
300
|
}
|
|
301
301
|
};
|
|
302
|
+
var leaderAdmissionAssignmentsEntity = {
|
|
303
|
+
attrs: {
|
|
304
|
+
id: id(),
|
|
305
|
+
targetId: attr2("string", { indexed: true }),
|
|
306
|
+
personId: attr2("string", { indexed: true }),
|
|
307
|
+
grantId: attr2("string", { indexed: true }),
|
|
308
|
+
decision: attr2("string", { indexed: true }),
|
|
309
|
+
note: attr2("string", { optional: true }),
|
|
310
|
+
expiresAt: attr2("number", { optional: true, indexed: true }),
|
|
311
|
+
active: attr2("boolean", { indexed: true }),
|
|
312
|
+
lastMutationId: attr2("string", { indexed: true }),
|
|
313
|
+
lastRequestDigest: attr2("string"),
|
|
314
|
+
createdAt: attr2("number", { indexed: true }),
|
|
315
|
+
createdBy: attr2("string", { indexed: true }),
|
|
316
|
+
updatedAt: attr2("number", { indexed: true }),
|
|
317
|
+
updatedBy: attr2("string", { indexed: true })
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
var leaderAdmissionDeliveriesEntity = {
|
|
321
|
+
attrs: {
|
|
322
|
+
id: id(),
|
|
323
|
+
targetId: attr2("string", { indexed: true }),
|
|
324
|
+
environment: attr2("string", { indexed: true }),
|
|
325
|
+
revision: attr2("number", { indexed: true }),
|
|
326
|
+
digest: attr2("string", { indexed: true }),
|
|
327
|
+
envelope: attr2("json"),
|
|
328
|
+
status: attr2("string", { indexed: true }),
|
|
329
|
+
attempts: attr2("number", { indexed: true }),
|
|
330
|
+
lastAttemptAt: attr2("number", { optional: true, indexed: true }),
|
|
331
|
+
lastError: attr2("string", { optional: true }),
|
|
332
|
+
acknowledgedAt: attr2("number", { optional: true, indexed: true }),
|
|
333
|
+
updatedAt: attr2("number", { indexed: true })
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
var leaderAdmissionMutationsEntity = {
|
|
337
|
+
attrs: {
|
|
338
|
+
id: id(),
|
|
339
|
+
targetId: attr2("string", { indexed: true }),
|
|
340
|
+
personId: attr2("string", { indexed: true }),
|
|
341
|
+
requestDigest: attr2("string", { indexed: true }),
|
|
342
|
+
revision: attr2("number", { indexed: true }),
|
|
343
|
+
createdAt: attr2("number", { indexed: true })
|
|
344
|
+
}
|
|
345
|
+
};
|
|
302
346
|
|
|
303
347
|
// src/schema-gifts.ts
|
|
304
348
|
var attr3 = (type, flags = {}) => ({
|
|
@@ -570,7 +614,7 @@ var emailLog = {
|
|
|
570
614
|
sentAt: attr4("number", { indexed: true })
|
|
571
615
|
}
|
|
572
616
|
};
|
|
573
|
-
function chapterDb(mode, auth, includeNetworkNotes = false, application = resolveApplication(void 0), includeSignupControl = false, includeMemberContent = false, includeBuilderLibrary = false) {
|
|
617
|
+
function chapterDb(mode, auth, includeNetworkNotes = false, application = resolveApplication(void 0), includeSignupControl = false, includeMemberContent = false, includeBuilderLibrary = false, includeLeaderAdmissions = false) {
|
|
574
618
|
const entities = {};
|
|
575
619
|
if (mode === "chapter") {
|
|
576
620
|
entities.applications = applicationsFor(application);
|
|
@@ -598,6 +642,11 @@ function chapterDb(mode, auth, includeNetworkNotes = false, application = resolv
|
|
|
598
642
|
entities.builderLibraryControls = builderLibraryControls;
|
|
599
643
|
entities.builderLibraryLocal = builderLibraryLocal;
|
|
600
644
|
}
|
|
645
|
+
if (includeLeaderAdmissions) {
|
|
646
|
+
entities.leaderAdmissionAssignments = leaderAdmissionAssignmentsEntity;
|
|
647
|
+
entities.leaderAdmissionDeliveries = leaderAdmissionDeliveriesEntity;
|
|
648
|
+
entities.leaderAdmissionMutations = leaderAdmissionMutationsEntity;
|
|
649
|
+
}
|
|
601
650
|
const schema = { entities, links: {} };
|
|
602
651
|
const rules = {};
|
|
603
652
|
for (const ns of Object.keys(entities)) {
|
|
@@ -1366,6 +1415,12 @@ function formationFields(crm, formation) {
|
|
|
1366
1415
|
return resolveFormationFlowFields(crm, formation);
|
|
1367
1416
|
}
|
|
1368
1417
|
|
|
1418
|
+
// src/network-contract.ts
|
|
1419
|
+
var DEFAULT_SHARE_FIELDS = {
|
|
1420
|
+
person: ["name", "email", "firstName", "lastName", "phone", "linkedin"],
|
|
1421
|
+
company: ["name", "domain", "industry", "location", "linkedin", "notes"]
|
|
1422
|
+
};
|
|
1423
|
+
|
|
1369
1424
|
// src/config-network.ts
|
|
1370
1425
|
var SLUG = /^[a-z0-9][a-z0-9-]{1,62}$/;
|
|
1371
1426
|
var FIELD = /^[a-z][a-zA-Z0-9_]*$/;
|
|
@@ -1377,6 +1432,34 @@ function validateSharedNotes(opts) {
|
|
|
1377
1432
|
throw new Error(`${opts.path}: must contain unique CRM types allowed by fields`);
|
|
1378
1433
|
}
|
|
1379
1434
|
}
|
|
1435
|
+
function validateEditableFields(opts) {
|
|
1436
|
+
for (const [type, names] of Object.entries(opts.values)) {
|
|
1437
|
+
const readable = opts.readable?.[type];
|
|
1438
|
+
const def = opts.crm.config.types[type];
|
|
1439
|
+
const duplicate = names.some((name, index) => names.indexOf(name) !== index);
|
|
1440
|
+
const unknown = names.some((name) => !FIELD.test(name) || !def?.fields[name]);
|
|
1441
|
+
const hidden = opts.readable ? !readable || names.some((name) => !readable.includes(name)) : false;
|
|
1442
|
+
if (!FIELD.test(type) || names.length === 0 || duplicate || !def || unknown || hidden) {
|
|
1443
|
+
throw new Error(
|
|
1444
|
+
`${opts.path}.${type}: must contain unique, readable fields declared on CRM type "${type}"`
|
|
1445
|
+
);
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
function validateStageTransitions(opts) {
|
|
1450
|
+
const duplicate = opts.values.some((type, index) => opts.values.indexOf(type) !== index);
|
|
1451
|
+
const invalid = opts.values.some((type) => !FIELD.test(type) || !opts.crm.config.types[type]?.pipeline || (opts.readable ? !opts.readable[type] : false));
|
|
1452
|
+
if (duplicate || invalid) {
|
|
1453
|
+
throw new Error(`${opts.path}: must contain unique, readable CRM types with pipelines`);
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
function validateAdmissionCapability(path, enabled, crm) {
|
|
1457
|
+
if (!enabled) return;
|
|
1458
|
+
const person = crm.config.types.person;
|
|
1459
|
+
if (!person?.emailField || person.fields[person.emailField]?.type !== "email") {
|
|
1460
|
+
throw new Error(`${path}: requires a CRM person type with an emailField`);
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1380
1463
|
function resolveNetwork(config, crm) {
|
|
1381
1464
|
const seen = /* @__PURE__ */ new Set();
|
|
1382
1465
|
const targets = [];
|
|
@@ -1435,6 +1518,26 @@ function resolveNetwork(config, crm) {
|
|
|
1435
1518
|
crm,
|
|
1436
1519
|
fields
|
|
1437
1520
|
});
|
|
1521
|
+
const readableFields = fields ?? DEFAULT_SHARE_FIELDS;
|
|
1522
|
+
const editableFields = target.editableFields ?? {};
|
|
1523
|
+
validateEditableFields({
|
|
1524
|
+
path: `defineChapter.network.targets.${target.id}.editableFields`,
|
|
1525
|
+
values: editableFields,
|
|
1526
|
+
crm,
|
|
1527
|
+
readable: readableFields
|
|
1528
|
+
});
|
|
1529
|
+
const stageTransitions = target.stageTransitions ?? [];
|
|
1530
|
+
validateStageTransitions({
|
|
1531
|
+
path: `defineChapter.network.targets.${target.id}.stageTransitions`,
|
|
1532
|
+
values: stageTransitions,
|
|
1533
|
+
crm,
|
|
1534
|
+
readable: readableFields
|
|
1535
|
+
});
|
|
1536
|
+
validateAdmissionCapability(
|
|
1537
|
+
`defineChapter.network.targets.${target.id}.admissionGrants`,
|
|
1538
|
+
target.admissionGrants,
|
|
1539
|
+
crm
|
|
1540
|
+
);
|
|
1438
1541
|
targets.push({
|
|
1439
1542
|
id: target.id,
|
|
1440
1543
|
name: target.name?.trim() || target.id,
|
|
@@ -1442,7 +1545,10 @@ function resolveNetwork(config, crm) {
|
|
|
1442
1545
|
...binding ? { binding } : {},
|
|
1443
1546
|
secretName,
|
|
1444
1547
|
...fields ? { fields } : {},
|
|
1445
|
-
sharedNotes
|
|
1548
|
+
sharedNotes,
|
|
1549
|
+
editableFields,
|
|
1550
|
+
stageTransitions,
|
|
1551
|
+
...target.admissionGrants === true ? { admissionGrants: true } : {}
|
|
1446
1552
|
});
|
|
1447
1553
|
}
|
|
1448
1554
|
const readerIds = /* @__PURE__ */ new Set();
|
|
@@ -1455,9 +1561,12 @@ function resolveNetwork(config, crm) {
|
|
|
1455
1561
|
throw new Error(`defineChapter.network.readers: duplicate reader "${reader.id}"`);
|
|
1456
1562
|
}
|
|
1457
1563
|
readerIds.add(reader.id);
|
|
1458
|
-
const
|
|
1459
|
-
|
|
1460
|
-
|
|
1564
|
+
const readerFields = reader.fields ?? {};
|
|
1565
|
+
const entries = Object.entries(readerFields);
|
|
1566
|
+
if (entries.length === 0 && !reader.admissionGrants) {
|
|
1567
|
+
throw new Error(
|
|
1568
|
+
`defineChapter.network.readers.${reader.id}.fields: at least one CRM type is required unless this is an admission-only reader`
|
|
1569
|
+
);
|
|
1461
1570
|
}
|
|
1462
1571
|
for (const [type, names] of entries) {
|
|
1463
1572
|
if (!FIELD.test(type) || names.length === 0 || names.some((name) => !FIELD.test(name))) {
|
|
@@ -1487,9 +1596,35 @@ function resolveNetwork(config, crm) {
|
|
|
1487
1596
|
path: `defineChapter.network.readers.${reader.id}.sharedNotes`,
|
|
1488
1597
|
values: sharedNotes,
|
|
1489
1598
|
crm,
|
|
1490
|
-
fields:
|
|
1599
|
+
fields: readerFields
|
|
1600
|
+
});
|
|
1601
|
+
const editableFields = reader.editableFields ?? {};
|
|
1602
|
+
validateEditableFields({
|
|
1603
|
+
path: `defineChapter.network.readers.${reader.id}.editableFields`,
|
|
1604
|
+
values: editableFields,
|
|
1605
|
+
crm,
|
|
1606
|
+
readable: readerFields
|
|
1607
|
+
});
|
|
1608
|
+
const stageTransitions = reader.stageTransitions ?? [];
|
|
1609
|
+
validateStageTransitions({
|
|
1610
|
+
path: `defineChapter.network.readers.${reader.id}.stageTransitions`,
|
|
1611
|
+
values: stageTransitions,
|
|
1612
|
+
crm,
|
|
1613
|
+
readable: readerFields
|
|
1614
|
+
});
|
|
1615
|
+
validateAdmissionCapability(
|
|
1616
|
+
`defineChapter.network.readers.${reader.id}.admissionGrants`,
|
|
1617
|
+
reader.admissionGrants,
|
|
1618
|
+
crm
|
|
1619
|
+
);
|
|
1620
|
+
readers.push({
|
|
1621
|
+
id: reader.id,
|
|
1622
|
+
fields: readerFields,
|
|
1623
|
+
sharedNotes,
|
|
1624
|
+
editableFields,
|
|
1625
|
+
stageTransitions,
|
|
1626
|
+
...reader.admissionGrants === true ? { admissionGrants: true } : {}
|
|
1491
1627
|
});
|
|
1492
|
-
readers.push({ id: reader.id, fields: reader.fields, sharedNotes });
|
|
1493
1628
|
}
|
|
1494
1629
|
return { targets, readers };
|
|
1495
1630
|
}
|
|
@@ -1620,7 +1755,8 @@ function defineChapter(config) {
|
|
|
1620
1755
|
application,
|
|
1621
1756
|
Boolean(signupControl),
|
|
1622
1757
|
Boolean(memberContent),
|
|
1623
|
-
Boolean(builderLibrary)
|
|
1758
|
+
Boolean(builderLibrary),
|
|
1759
|
+
network.targets.some((target) => target.admissionGrants)
|
|
1624
1760
|
);
|
|
1625
1761
|
const services = config.services ?? ["db", "calendar", "o11y"];
|
|
1626
1762
|
const account = config.account ?? "none";
|
|
@@ -3072,14 +3208,6 @@ import {
|
|
|
3072
3208
|
updateRecord,
|
|
3073
3209
|
upsertRecordOrigin
|
|
3074
3210
|
} from "@odla-ai/crm";
|
|
3075
|
-
|
|
3076
|
-
// src/network-contract.ts
|
|
3077
|
-
var DEFAULT_SHARE_FIELDS = {
|
|
3078
|
-
person: ["name", "email", "firstName", "lastName", "phone", "linkedin"],
|
|
3079
|
-
company: ["name", "domain", "industry", "location", "linkedin", "notes"]
|
|
3080
|
-
};
|
|
3081
|
-
|
|
3082
|
-
// src/network.ts
|
|
3083
3211
|
function sharedPersonInput(person) {
|
|
3084
3212
|
const email = person.email.toLowerCase();
|
|
3085
3213
|
const fullName = [person.firstName, person.lastName].filter(Boolean).join(" ").trim();
|