@odla-ai/chapter 0.42.2 → 0.42.4
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/dist/{chunk-JXFYOUDL.js → chunk-4HS2JPE2.js} +11 -1
- package/dist/chunk-4HS2JPE2.js.map +1 -0
- package/dist/{chunk-HWUTCXBV.js → chunk-7MEVZEL2.js} +6 -3
- package/dist/chunk-7MEVZEL2.js.map +1 -0
- package/dist/{chunk-S7CND3R5.js → chunk-VWDEHUNI.js} +2 -2
- package/dist/{copy-context-BBPsYe24.d.ts → copy-context-Bh1EZvCg.d.ts} +1 -1
- package/dist/index.cjs +475 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +219 -2
- package/dist/index.d.ts +219 -2
- package/dist/index.js +475 -6
- package/dist/index.js.map +1 -1
- package/dist/ui/admin/index.d.ts +2 -2
- package/dist/ui/admin/index.js +2 -2
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +3 -3
- package/dist/ui/member/index.d.ts +2 -2
- package/dist/ui/member/index.js +2 -2
- package/dist/worker/index.cjs +80 -18
- package/dist/worker/index.cjs.map +1 -1
- package/dist/worker/index.d.cts +1 -1
- package/dist/worker/index.d.ts +1 -1
- package/dist/worker/index.js +80 -18
- package/dist/worker/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-HWUTCXBV.js.map +0 -1
- package/dist/chunk-JXFYOUDL.js.map +0 -1
- /package/dist/{chunk-S7CND3R5.js.map → chunk-VWDEHUNI.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
formatChapterCopy,
|
|
3
3
|
useChapterCopy
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4HS2JPE2.js";
|
|
5
5
|
import {
|
|
6
6
|
collectFormFields
|
|
7
7
|
} from "./chunk-IVXVECKR.js";
|
|
@@ -1524,4 +1524,4 @@ export {
|
|
|
1524
1524
|
membershipApplicationHref,
|
|
1525
1525
|
MembershipCards
|
|
1526
1526
|
};
|
|
1527
|
-
//# sourceMappingURL=chunk-
|
|
1527
|
+
//# sourceMappingURL=chunk-VWDEHUNI.js.map
|
|
@@ -24,7 +24,7 @@ type TextFields$1<Key extends string> = {
|
|
|
24
24
|
[Field in Key]: string;
|
|
25
25
|
};
|
|
26
26
|
/** User-visible language for sharing, delivery state, and leader rollups. */
|
|
27
|
-
type AdminNetworkCopy = TextFields$1<"title" | "allowlistDescription" | "sharing" | "shareWith" | "shared" | "shareFailed" | "deliveryFailed" | "loadingRollup" | "loadRollupFailed" | "overview" | "configuredFollowers" | "reachableFollowers" | "recordsAcrossFollowers" | "noFollowers" | "followers" | "available" | "unavailable" | "recordTotals" | "noRecordTotals">;
|
|
27
|
+
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
28
|
|
|
29
29
|
type TextFields<Key extends string> = {
|
|
30
30
|
[Field in Key]: string;
|
package/dist/index.cjs
CHANGED
|
@@ -32,16 +32,25 @@ __export(index_exports, {
|
|
|
32
32
|
DEFAULT_CHAPTER_COPY: () => DEFAULT_CHAPTER_COPY,
|
|
33
33
|
DEFAULT_SHARE_FIELDS: () => DEFAULT_SHARE_FIELDS,
|
|
34
34
|
GIFT_OFFER_CATALOG_VERSION: () => GIFT_OFFER_CATALOG_VERSION,
|
|
35
|
+
JOURNEY_ENDINGS: () => JOURNEY_ENDINGS,
|
|
36
|
+
JOURNEY_STAGES: () => JOURNEY_STAGES,
|
|
35
37
|
MAX_GIFT_OFFERS: () => MAX_GIFT_OFFERS,
|
|
36
38
|
MEMBERSHIP_PAGE_RENDERER: () => MEMBERSHIP_PAGE_RENDERER,
|
|
37
39
|
MEMBER_CONTENT_CONTROL_PATH: () => MEMBER_CONTENT_CONTROL_PATH,
|
|
38
40
|
MEMBER_CONTENT_PATH: () => MEMBER_CONTENT_PATH,
|
|
39
41
|
MEMBER_CONTENT_SCHEMA_VERSION: () => MEMBER_CONTENT_SCHEMA_VERSION,
|
|
42
|
+
MEMBER_SELF_EDITABLE_FIELDS: () => MEMBER_SELF_EDITABLE_FIELDS,
|
|
43
|
+
MEMBER_SELF_READABLE_FIELDS: () => MEMBER_SELF_READABLE_FIELDS,
|
|
44
|
+
MEMBER_SYSTEM_AUTHORITY_MATRIX: () => MEMBER_SYSTEM_AUTHORITY_MATRIX,
|
|
45
|
+
MEMBER_SYSTEM_CONTRACT_VERSION: () => MEMBER_SYSTEM_CONTRACT_VERSION,
|
|
46
|
+
MEMBER_SYSTEM_RECOVERY_OBJECTIVES: () => MEMBER_SYSTEM_RECOVERY_OBJECTIVES,
|
|
47
|
+
REQUIRED_NOTICE_KINDS: () => REQUIRED_NOTICE_KINDS,
|
|
40
48
|
SCHEDULING_DEFAULTS: () => SCHEDULING_DEFAULTS,
|
|
41
49
|
SIGNUP_CONTROL_PATH: () => SIGNUP_CONTROL_PATH,
|
|
42
50
|
SIGNUP_CONTROL_SCHEMA_VERSION: () => SIGNUP_CONTROL_SCHEMA_VERSION,
|
|
43
51
|
SIGNUP_CONTROL_THEME_MARKER: () => SIGNUP_CONTROL_THEME_MARKER,
|
|
44
52
|
SIGNUP_CONTROL_THEME_STYLE_ID: () => SIGNUP_CONTROL_THEME_STYLE_ID,
|
|
53
|
+
SILVER_SALT_P0_FIXTURE: () => SILVER_SALT_P0_FIXTURE,
|
|
45
54
|
applicantProfile: () => applicantProfile,
|
|
46
55
|
applicationBookingUpdate: () => applicationBookingUpdate,
|
|
47
56
|
applicationFlowFields: () => applicationFlowFields,
|
|
@@ -68,6 +77,8 @@ __export(index_exports, {
|
|
|
68
77
|
chapterDb: () => chapterDb,
|
|
69
78
|
chapterFlowFieldContract: () => chapterFlowFieldContract,
|
|
70
79
|
clampArray: () => clampArray,
|
|
80
|
+
classifyMemberStripeEvent: () => classifyMemberStripeEvent,
|
|
81
|
+
classifyMemberSystemWrite: () => classifyMemberSystemWrite,
|
|
71
82
|
clerkGetUser: () => clerkGetUser,
|
|
72
83
|
clerkGetUserByEmail: () => clerkGetUserByEmail,
|
|
73
84
|
clerkIntegration: () => clerkIntegration,
|
|
@@ -121,6 +132,8 @@ __export(index_exports, {
|
|
|
121
132
|
memberContentDigest: () => memberContentDigest,
|
|
122
133
|
memberContentDocument: () => memberContentDocument,
|
|
123
134
|
memberSession: () => memberSession,
|
|
135
|
+
memberSystemAvailability: () => memberSystemAvailability,
|
|
136
|
+
memberSystemRollbackPlan: () => memberSystemRollbackPlan,
|
|
124
137
|
membershipPageDocument: () => membershipPageDocument,
|
|
125
138
|
membershipTierPresentationFromMarkdown: () => membershipTierPresentationFromMarkdown,
|
|
126
139
|
networkSourceTag: () => networkSourceTag,
|
|
@@ -132,9 +145,12 @@ __export(index_exports, {
|
|
|
132
145
|
paymentsReady: () => paymentsReady,
|
|
133
146
|
personInputFromApp: () => personInputFromApp,
|
|
134
147
|
planDelivery: () => planDelivery,
|
|
148
|
+
planMemberSystemEventReplay: () => planMemberSystemEventReplay,
|
|
149
|
+
planMemberSystemMigration: () => planMemberSystemMigration,
|
|
135
150
|
projectApplicant: () => projectApplicant,
|
|
136
151
|
projectBuilderLibraryDelivery: () => projectBuilderLibraryDelivery,
|
|
137
152
|
projectMemberContent: () => projectMemberContent,
|
|
153
|
+
projectMemberSelf: () => projectMemberSelf,
|
|
138
154
|
projectSharedRecord: () => projectSharedRecord,
|
|
139
155
|
promoteBuilderLibraryResource: () => promoteBuilderLibraryResource,
|
|
140
156
|
publicGiftOffers: () => publicGiftOffers,
|
|
@@ -177,6 +193,7 @@ __export(index_exports, {
|
|
|
177
193
|
validateBuilderLibraryDocument: () => validateBuilderLibraryDocument,
|
|
178
194
|
validateGiftOfferCatalog: () => validateGiftOfferCatalog,
|
|
179
195
|
validateMemberContentDocument: () => validateMemberContentDocument,
|
|
196
|
+
validateMemberSystemAuthority: () => validateMemberSystemAuthority,
|
|
180
197
|
validateMembershipPageDocument: () => validateMembershipPageDocument,
|
|
181
198
|
validateScheduling: () => validateScheduling,
|
|
182
199
|
validateSignupControlDocument: () => validateSignupControlDocument,
|
|
@@ -1263,6 +1280,16 @@ var DEFAULT_ADMIN_COPY = {
|
|
|
1263
1280
|
followers: "Followers",
|
|
1264
1281
|
available: "available",
|
|
1265
1282
|
unavailable: "unavailable",
|
|
1283
|
+
transportReachable: "transport reachable",
|
|
1284
|
+
transportUnavailable: "transport unavailable",
|
|
1285
|
+
transportNotChecked: "transport not checked",
|
|
1286
|
+
bindingTransport: "service binding {binding}",
|
|
1287
|
+
urlTransport: "public URL transport",
|
|
1288
|
+
activeConfiguration: "active configuration r{revision}",
|
|
1289
|
+
noActiveConfiguration: "no active managed configuration",
|
|
1290
|
+
publicSiteAvailable: "public site reachable",
|
|
1291
|
+
publicSiteUnavailable: "public site unavailable",
|
|
1292
|
+
publicSiteNotChecked: "public site not probed",
|
|
1266
1293
|
recordTotals: "Portfolio records",
|
|
1267
1294
|
noRecordTotals: "No aggregate records are available yet."
|
|
1268
1295
|
},
|
|
@@ -2209,8 +2236,8 @@ function tierPayable(tier, group, hasSecretKey) {
|
|
|
2209
2236
|
function byOrder(a, b) {
|
|
2210
2237
|
return a.sortOrder - b.sortOrder || a.id.localeCompare(b.id);
|
|
2211
2238
|
}
|
|
2212
|
-
function resolveTiers(group,
|
|
2213
|
-
const stored =
|
|
2239
|
+
function resolveTiers(group, rows3 = []) {
|
|
2240
|
+
const stored = rows3.filter((tier) => tier.active);
|
|
2214
2241
|
if (stored.length) return [...stored].sort(byOrder);
|
|
2215
2242
|
return [{
|
|
2216
2243
|
id: "standard",
|
|
@@ -4238,15 +4265,15 @@ function rowToTier(row, groupId) {
|
|
|
4238
4265
|
}
|
|
4239
4266
|
async function loadTiers(db, group) {
|
|
4240
4267
|
const groupId = String(group.id ?? "");
|
|
4241
|
-
let
|
|
4268
|
+
let rows3;
|
|
4242
4269
|
try {
|
|
4243
|
-
|
|
4270
|
+
rows3 = (await db.query({
|
|
4244
4271
|
tiers: { $: { where: { groupId }, order: { sortOrder: "asc" }, limit: 100 } }
|
|
4245
4272
|
})).tiers;
|
|
4246
4273
|
} catch {
|
|
4247
|
-
|
|
4274
|
+
rows3 = void 0;
|
|
4248
4275
|
}
|
|
4249
|
-
const list = Array.isArray(
|
|
4276
|
+
const list = Array.isArray(rows3) ? rows3.map((row) => rowToTier(row, groupId)) : [];
|
|
4250
4277
|
return resolveTiers(group, list);
|
|
4251
4278
|
}
|
|
4252
4279
|
async function loadOfferableTiers(db, group, hasSecretKey) {
|
|
@@ -4944,4 +4971,446 @@ async function exportChapterPromotion(input) {
|
|
|
4944
4971
|
]
|
|
4945
4972
|
};
|
|
4946
4973
|
}
|
|
4974
|
+
|
|
4975
|
+
// src/member-system-authority.ts
|
|
4976
|
+
var rows2 = (group) => group.fields.map((id4) => ({ ...group, id: id4 }));
|
|
4977
|
+
var MEMBER_SYSTEM_AUTHORITY_MATRIX = [
|
|
4978
|
+
...rows2({
|
|
4979
|
+
scope: "network",
|
|
4980
|
+
writer: "network_person",
|
|
4981
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
4982
|
+
sensitivity: "pii",
|
|
4983
|
+
memberAccess: "edit",
|
|
4984
|
+
fields: [
|
|
4985
|
+
"person.legalName",
|
|
4986
|
+
"person.preferredName",
|
|
4987
|
+
"person.namePronunciation",
|
|
4988
|
+
"person.pronouns",
|
|
4989
|
+
"person.displayLegalName",
|
|
4990
|
+
"person.primaryEmail",
|
|
4991
|
+
"person.secondaryEmails",
|
|
4992
|
+
"person.phone",
|
|
4993
|
+
"person.linkedinUrl",
|
|
4994
|
+
"person.photo",
|
|
4995
|
+
"person.homeAddress",
|
|
4996
|
+
"person.fulfillmentFit",
|
|
4997
|
+
"person.fulfillmentSize"
|
|
4998
|
+
]
|
|
4999
|
+
}),
|
|
5000
|
+
...rows2({
|
|
5001
|
+
scope: "network",
|
|
5002
|
+
writer: "network_person",
|
|
5003
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
5004
|
+
sensitivity: "ordinary",
|
|
5005
|
+
memberAccess: "edit",
|
|
5006
|
+
fields: [
|
|
5007
|
+
"person.title",
|
|
5008
|
+
"person.company",
|
|
5009
|
+
"person.companyObservedAt",
|
|
5010
|
+
"person.region",
|
|
5011
|
+
"person.whyText",
|
|
5012
|
+
"person.whyTokens",
|
|
5013
|
+
"person.skillsOffered",
|
|
5014
|
+
"person.openToRequests",
|
|
5015
|
+
"person.directoryPhotoConsent"
|
|
5016
|
+
]
|
|
5017
|
+
}),
|
|
5018
|
+
...rows2({
|
|
5019
|
+
scope: "network",
|
|
5020
|
+
writer: "network_person",
|
|
5021
|
+
projections: ["bnf_admin", "chapter_admin"],
|
|
5022
|
+
sensitivity: "restricted",
|
|
5023
|
+
memberAccess: "none",
|
|
5024
|
+
fields: [
|
|
5025
|
+
"person.linkedinMemberId",
|
|
5026
|
+
"person.identityClaims",
|
|
5027
|
+
"person.aliases",
|
|
5028
|
+
"person.mergeHistory",
|
|
5029
|
+
"person.introducedByPersonId",
|
|
5030
|
+
"person.introducedAt",
|
|
5031
|
+
"person.firstTouch",
|
|
5032
|
+
"person.globalSuppression",
|
|
5033
|
+
"person.deceasedAt",
|
|
5034
|
+
"person.archivedAt"
|
|
5035
|
+
]
|
|
5036
|
+
}),
|
|
5037
|
+
...rows2({
|
|
5038
|
+
scope: "network",
|
|
5039
|
+
writer: "network_person",
|
|
5040
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
5041
|
+
sensitivity: "sensitive",
|
|
5042
|
+
memberAccess: "edit",
|
|
5043
|
+
fields: ["person.accreditationSelfCertification", "person.accreditationCategory", "person.accreditationExpiresAt"]
|
|
5044
|
+
}),
|
|
5045
|
+
...rows2({
|
|
5046
|
+
scope: "network",
|
|
5047
|
+
writer: "network_person",
|
|
5048
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
5049
|
+
sensitivity: "restricted",
|
|
5050
|
+
memberAccess: "read",
|
|
5051
|
+
fields: ["person.acknowledgements"]
|
|
5052
|
+
}),
|
|
5053
|
+
...rows2({
|
|
5054
|
+
scope: "provider",
|
|
5055
|
+
writer: "clerk",
|
|
5056
|
+
projections: ["clerk_identity", "bnf_admin", "chapter_admin"],
|
|
5057
|
+
sensitivity: "restricted",
|
|
5058
|
+
memberAccess: "none",
|
|
5059
|
+
fields: ["identity.clerkUserIds", "identity.clerkEmailVerification"]
|
|
5060
|
+
}),
|
|
5061
|
+
...rows2({
|
|
5062
|
+
scope: "chapter",
|
|
5063
|
+
writer: "chapter_journey",
|
|
5064
|
+
projections: ["chapter_admin", "chapter_crm", "bnf_admin"],
|
|
5065
|
+
sensitivity: "ordinary",
|
|
5066
|
+
memberAccess: "none",
|
|
5067
|
+
fields: [
|
|
5068
|
+
"journey.chapterId",
|
|
5069
|
+
"journey.stage",
|
|
5070
|
+
"journey.stageEnteredAt",
|
|
5071
|
+
"journey.stageHistory",
|
|
5072
|
+
"journey.ending",
|
|
5073
|
+
"journey.endingReason",
|
|
5074
|
+
"journey.source",
|
|
5075
|
+
"journey.entryChapterId",
|
|
5076
|
+
"journey.route",
|
|
5077
|
+
"journey.flags",
|
|
5078
|
+
"journey.applicationStartedAt",
|
|
5079
|
+
"journey.appliedAt",
|
|
5080
|
+
"journey.paidAt",
|
|
5081
|
+
"journey.callBookedAt",
|
|
5082
|
+
"journey.metAt",
|
|
5083
|
+
"journey.approvedAt",
|
|
5084
|
+
"journey.onboardedAt",
|
|
5085
|
+
"journey.firstLoginAt",
|
|
5086
|
+
"journey.firstDealAt"
|
|
5087
|
+
]
|
|
5088
|
+
}),
|
|
5089
|
+
...rows2({
|
|
5090
|
+
scope: "chapter",
|
|
5091
|
+
writer: "chapter_journey",
|
|
5092
|
+
projections: ["chapter_admin", "chapter_crm"],
|
|
5093
|
+
sensitivity: "sensitive",
|
|
5094
|
+
memberAccess: "none",
|
|
5095
|
+
fields: [
|
|
5096
|
+
"journey.relationshipOwnerId",
|
|
5097
|
+
"journey.lastContactAt",
|
|
5098
|
+
"journey.nextAction",
|
|
5099
|
+
"journey.owes",
|
|
5100
|
+
"journey.asks",
|
|
5101
|
+
"journey.preparation",
|
|
5102
|
+
"journey.notes"
|
|
5103
|
+
]
|
|
5104
|
+
}),
|
|
5105
|
+
...rows2({
|
|
5106
|
+
scope: "chapter",
|
|
5107
|
+
writer: "chapter_journey",
|
|
5108
|
+
projections: ["chapter_admin", "chapter_crm", "member_self_service"],
|
|
5109
|
+
sensitivity: "ordinary",
|
|
5110
|
+
memberAccess: "edit",
|
|
5111
|
+
fields: ["journey.dealFlowConsent", "journey.directoryConsent", "journey.emailConsent", "journey.smsConsent"]
|
|
5112
|
+
}),
|
|
5113
|
+
...rows2({
|
|
5114
|
+
scope: "chapter",
|
|
5115
|
+
writer: "chapter_journey",
|
|
5116
|
+
projections: ["chapter_admin", "bnf_admin", "member_self_service"],
|
|
5117
|
+
sensitivity: "ordinary",
|
|
5118
|
+
memberAccess: "read",
|
|
5119
|
+
fields: ["journey.memberNumber"]
|
|
5120
|
+
}),
|
|
5121
|
+
...rows2({
|
|
5122
|
+
scope: "network",
|
|
5123
|
+
writer: "network_membership",
|
|
5124
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
5125
|
+
sensitivity: "ordinary",
|
|
5126
|
+
memberAccess: "read",
|
|
5127
|
+
fields: [
|
|
5128
|
+
"membership.chapterId",
|
|
5129
|
+
"membership.journeyId",
|
|
5130
|
+
"membership.termStartsAt",
|
|
5131
|
+
"membership.termEndsAt",
|
|
5132
|
+
"membership.tier",
|
|
5133
|
+
"membership.status",
|
|
5134
|
+
"membership.joinedAt",
|
|
5135
|
+
"membership.autoRenews",
|
|
5136
|
+
"membership.renewalAt",
|
|
5137
|
+
"membership.cancelsAt",
|
|
5138
|
+
"membership.graceEndsAt",
|
|
5139
|
+
"membership.foundingCohort",
|
|
5140
|
+
"membership.offeringPolicyVersion",
|
|
5141
|
+
"membership.discountPolicyVersion"
|
|
5142
|
+
]
|
|
5143
|
+
}),
|
|
5144
|
+
...rows2({
|
|
5145
|
+
scope: "network",
|
|
5146
|
+
writer: "network_commercial_projection",
|
|
5147
|
+
projections: ["bnf_admin", "chapter_admin"],
|
|
5148
|
+
sensitivity: "restricted",
|
|
5149
|
+
memberAccess: "none",
|
|
5150
|
+
fields: [
|
|
5151
|
+
"membership.stripeCustomerId",
|
|
5152
|
+
"membership.stripeSubscriptionId",
|
|
5153
|
+
"membership.stripePriceId",
|
|
5154
|
+
"membership.lastInvoiceId",
|
|
5155
|
+
"membership.paymentOutcome",
|
|
5156
|
+
"membership.refundOutcome"
|
|
5157
|
+
]
|
|
5158
|
+
}),
|
|
5159
|
+
...rows2({
|
|
5160
|
+
scope: "network",
|
|
5161
|
+
writer: "network_discount_policy",
|
|
5162
|
+
projections: ["bnf_admin", "chapter_admin", "stripe_billing"],
|
|
5163
|
+
sensitivity: "ordinary",
|
|
5164
|
+
memberAccess: "none",
|
|
5165
|
+
fields: [
|
|
5166
|
+
"discountPolicy.chapterId",
|
|
5167
|
+
"discountPolicy.version",
|
|
5168
|
+
"discountPolicy.eligibleOfferingIds",
|
|
5169
|
+
"discountPolicy.percentOff",
|
|
5170
|
+
"discountPolicy.amountOff",
|
|
5171
|
+
"discountPolicy.activatesOn",
|
|
5172
|
+
"discountPolicy.invoiceCount",
|
|
5173
|
+
"discountPolicy.expiresAt",
|
|
5174
|
+
"discountPolicy.stackingOrder",
|
|
5175
|
+
"discountPolicy.status"
|
|
5176
|
+
]
|
|
5177
|
+
}),
|
|
5178
|
+
...rows2({
|
|
5179
|
+
scope: "network",
|
|
5180
|
+
writer: "network_entitlement",
|
|
5181
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service", "stripe_billing"],
|
|
5182
|
+
sensitivity: "ordinary",
|
|
5183
|
+
memberAccess: "read",
|
|
5184
|
+
fields: [
|
|
5185
|
+
"entitlement.membershipId",
|
|
5186
|
+
"entitlement.kind",
|
|
5187
|
+
"entitlement.priceCents",
|
|
5188
|
+
"entitlement.currency",
|
|
5189
|
+
"entitlement.payerPersonId",
|
|
5190
|
+
"entitlement.purchasedAt",
|
|
5191
|
+
"entitlement.termEndsAt",
|
|
5192
|
+
"entitlement.renewsWithMembership",
|
|
5193
|
+
"entitlement.status"
|
|
5194
|
+
]
|
|
5195
|
+
}),
|
|
5196
|
+
...rows2({
|
|
5197
|
+
scope: "network",
|
|
5198
|
+
writer: "network_seat",
|
|
5199
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
5200
|
+
sensitivity: "pii",
|
|
5201
|
+
memberAccess: "read",
|
|
5202
|
+
fields: [
|
|
5203
|
+
"seat.membershipId",
|
|
5204
|
+
"seat.entitlementId",
|
|
5205
|
+
"seat.personId",
|
|
5206
|
+
"seat.recipientName",
|
|
5207
|
+
"seat.recipientEmail",
|
|
5208
|
+
"seat.role",
|
|
5209
|
+
"seat.status",
|
|
5210
|
+
"seat.acceptanceExpiresAt",
|
|
5211
|
+
"seat.acceptedAt",
|
|
5212
|
+
"seat.activatedAt",
|
|
5213
|
+
"seat.refundedAt"
|
|
5214
|
+
]
|
|
5215
|
+
}),
|
|
5216
|
+
...rows2({
|
|
5217
|
+
scope: "network",
|
|
5218
|
+
writer: "network_referral_ledger",
|
|
5219
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
5220
|
+
sensitivity: "ordinary",
|
|
5221
|
+
memberAccess: "read",
|
|
5222
|
+
fields: [
|
|
5223
|
+
"referral.referrerPersonId",
|
|
5224
|
+
"referral.referredPersonId",
|
|
5225
|
+
"referral.qualifiedMembershipId",
|
|
5226
|
+
"referral.creditCents",
|
|
5227
|
+
"referral.status",
|
|
5228
|
+
"referral.appliedInvoiceId",
|
|
5229
|
+
"referral.carryForwardCents",
|
|
5230
|
+
"referral.adjustmentOf"
|
|
5231
|
+
]
|
|
5232
|
+
}),
|
|
5233
|
+
...rows2({
|
|
5234
|
+
scope: "network",
|
|
5235
|
+
writer: "network_investment_ledger",
|
|
5236
|
+
projections: ["bnf_admin", "chapter_admin", "member_self_service"],
|
|
5237
|
+
sensitivity: "restricted",
|
|
5238
|
+
memberAccess: "read",
|
|
5239
|
+
fields: [
|
|
5240
|
+
"investment.personId",
|
|
5241
|
+
"investment.chapterId",
|
|
5242
|
+
"investment.season",
|
|
5243
|
+
"investment.purpose",
|
|
5244
|
+
"investment.targetCount",
|
|
5245
|
+
"investment.status",
|
|
5246
|
+
"investment.amountCents",
|
|
5247
|
+
"investment.closedAt",
|
|
5248
|
+
"investment.sourceReference"
|
|
5249
|
+
]
|
|
5250
|
+
}),
|
|
5251
|
+
...rows2({
|
|
5252
|
+
scope: "provider",
|
|
5253
|
+
writer: "stripe",
|
|
5254
|
+
projections: ["stripe_billing", "bnf_admin", "chapter_admin"],
|
|
5255
|
+
sensitivity: "restricted",
|
|
5256
|
+
memberAccess: "none",
|
|
5257
|
+
fields: [
|
|
5258
|
+
"commercial.charge",
|
|
5259
|
+
"commercial.invoice",
|
|
5260
|
+
"commercial.refund",
|
|
5261
|
+
"commercial.providerSubscription",
|
|
5262
|
+
"commercial.paymentMethod"
|
|
5263
|
+
]
|
|
5264
|
+
})
|
|
5265
|
+
];
|
|
5266
|
+
var MEMBER_SELF_EDITABLE_FIELDS = new Set(
|
|
5267
|
+
MEMBER_SYSTEM_AUTHORITY_MATRIX.filter((row) => row.memberAccess === "edit").map((row) => row.id)
|
|
5268
|
+
);
|
|
5269
|
+
var MEMBER_SELF_READABLE_FIELDS = new Set(
|
|
5270
|
+
MEMBER_SYSTEM_AUTHORITY_MATRIX.filter((row) => row.memberAccess !== "none").map((row) => row.id)
|
|
5271
|
+
);
|
|
5272
|
+
function projectMemberSelf(record4) {
|
|
5273
|
+
return Object.fromEntries(Object.entries(record4).filter(([field]) => MEMBER_SELF_READABLE_FIELDS.has(field)));
|
|
5274
|
+
}
|
|
5275
|
+
function classifyMemberSystemWrite(intent) {
|
|
5276
|
+
if (intent.actor === "bnf") return "reject_bnf_surface";
|
|
5277
|
+
const authority = MEMBER_SYSTEM_AUTHORITY_MATRIX.find((row) => row.id === intent.field);
|
|
5278
|
+
if (!authority) return "reject_unknown_field";
|
|
5279
|
+
if (authority.writer !== intent.actor) return "reject_wrong_writer";
|
|
5280
|
+
if (intent.expectedRevision !== intent.actualRevision) return "reject_stale_revision";
|
|
5281
|
+
return "apply";
|
|
5282
|
+
}
|
|
5283
|
+
function validateMemberSystemAuthority(matrix = MEMBER_SYSTEM_AUTHORITY_MATRIX) {
|
|
5284
|
+
const errors = [];
|
|
5285
|
+
const ids = /* @__PURE__ */ new Set();
|
|
5286
|
+
for (const row of matrix) {
|
|
5287
|
+
if (!row.id || !row.id.includes(".")) errors.push(`invalid field id "${row.id}"`);
|
|
5288
|
+
if (ids.has(row.id)) errors.push(`duplicate field authority "${row.id}"`);
|
|
5289
|
+
ids.add(row.id);
|
|
5290
|
+
if (row.memberAccess !== "none" && !row.projections.includes("member_self_service")) {
|
|
5291
|
+
errors.push(`${row.id} grants member access without a member_self_service projection`);
|
|
5292
|
+
}
|
|
5293
|
+
if (row.id.startsWith("person.") && (row.scope !== "network" || row.writer !== "network_person")) {
|
|
5294
|
+
errors.push(`${row.id} must be network_person authority`);
|
|
5295
|
+
}
|
|
5296
|
+
if (row.id.startsWith("journey.") && (row.scope !== "chapter" || row.writer !== "chapter_journey")) {
|
|
5297
|
+
errors.push(`${row.id} must be chapter_journey authority`);
|
|
5298
|
+
}
|
|
5299
|
+
}
|
|
5300
|
+
return { ok: errors.length === 0, errors };
|
|
5301
|
+
}
|
|
5302
|
+
|
|
5303
|
+
// src/member-system-contract.ts
|
|
5304
|
+
var MEMBER_SYSTEM_CONTRACT_VERSION = 1;
|
|
5305
|
+
var JOURNEY_STAGES = [
|
|
5306
|
+
"identified",
|
|
5307
|
+
"researched",
|
|
5308
|
+
"outreach",
|
|
5309
|
+
"in_conversation",
|
|
5310
|
+
"invited_or_requested",
|
|
5311
|
+
"application_started",
|
|
5312
|
+
"applied",
|
|
5313
|
+
"paid_awaiting_conversation",
|
|
5314
|
+
"ready_to_book",
|
|
5315
|
+
"booked",
|
|
5316
|
+
"met",
|
|
5317
|
+
"approved",
|
|
5318
|
+
"onboarded",
|
|
5319
|
+
"active",
|
|
5320
|
+
"first_deal"
|
|
5321
|
+
];
|
|
5322
|
+
var JOURNEY_ENDINGS = ["passed", "declined", "withdrew", "lapsed"];
|
|
5323
|
+
var REQUIRED_NOTICE_KINDS = [
|
|
5324
|
+
"payment_receipt",
|
|
5325
|
+
"refund_confirmation",
|
|
5326
|
+
"security_alert",
|
|
5327
|
+
"legal_notice",
|
|
5328
|
+
"membership_status",
|
|
5329
|
+
"renewal_notice",
|
|
5330
|
+
"cancellation_confirmation"
|
|
5331
|
+
];
|
|
5332
|
+
function memberSystemAvailability(input) {
|
|
5333
|
+
if (!input.odlaReachable) {
|
|
5334
|
+
return {
|
|
5335
|
+
bnfAdministration: false,
|
|
5336
|
+
chapterWorkflow: false,
|
|
5337
|
+
memberSelfService: false,
|
|
5338
|
+
newApplication: false,
|
|
5339
|
+
newCheckout: false,
|
|
5340
|
+
providerRenewalsMayContinue: true,
|
|
5341
|
+
reason: "odla_unavailable"
|
|
5342
|
+
};
|
|
5343
|
+
}
|
|
5344
|
+
return {
|
|
5345
|
+
bnfAdministration: input.bnfFrontendReachable,
|
|
5346
|
+
chapterWorkflow: true,
|
|
5347
|
+
memberSelfService: true,
|
|
5348
|
+
newApplication: true,
|
|
5349
|
+
newCheckout: true,
|
|
5350
|
+
providerRenewalsMayContinue: true,
|
|
5351
|
+
...!input.bnfFrontendReachable ? { reason: "bnf_frontend_unavailable" } : {}
|
|
5352
|
+
};
|
|
5353
|
+
}
|
|
5354
|
+
function classifyMemberStripeEvent(identity, target, hasProvenLegacyLocalLink) {
|
|
5355
|
+
const keys = ["appId", "environment", "dataEnvironment", "runtime", "chapterId"];
|
|
5356
|
+
const supplied = keys.filter((key) => identity[key] !== void 0);
|
|
5357
|
+
if (supplied.some((key) => identity[key] !== target[key])) return "ignore_sibling";
|
|
5358
|
+
if (supplied.length === keys.length) return "apply";
|
|
5359
|
+
return hasProvenLegacyLocalLink ? "apply_legacy" : "quarantine_unmatched";
|
|
5360
|
+
}
|
|
5361
|
+
function planMemberSystemEventReplay(events) {
|
|
5362
|
+
const seen = /* @__PURE__ */ new Map();
|
|
5363
|
+
const plan = { accepted: [], replayed: [], collisions: [] };
|
|
5364
|
+
for (const event of events) {
|
|
5365
|
+
const digest = seen.get(event.id);
|
|
5366
|
+
if (digest === void 0) {
|
|
5367
|
+
seen.set(event.id, event.digest);
|
|
5368
|
+
plan.accepted.push(event.id);
|
|
5369
|
+
} else if (digest === event.digest) plan.replayed.push(event.id);
|
|
5370
|
+
else plan.collisions.push(event.id);
|
|
5371
|
+
}
|
|
5372
|
+
return plan;
|
|
5373
|
+
}
|
|
5374
|
+
var MEMBER_SYSTEM_RECOVERY_OBJECTIVES = {
|
|
5375
|
+
failClosedWithinMs: 0,
|
|
5376
|
+
replayProjectionWithinMinutes: 15,
|
|
5377
|
+
providerEventsRemainReplayable: true,
|
|
5378
|
+
requireHumanReviewForCollision: true
|
|
5379
|
+
};
|
|
5380
|
+
function planMemberSystemMigration(rows3) {
|
|
5381
|
+
const plan = { importIds: [], fixtureIds: [], rejectedIds: [] };
|
|
5382
|
+
for (const row of rows3) {
|
|
5383
|
+
if (row.source === "synthetic_fixture" && !row.isRealPerson) plan.fixtureIds.push(row.id);
|
|
5384
|
+
else if (row.source === "external_reimport" && row.isRealPerson && row.provenance) plan.importIds.push(row.id);
|
|
5385
|
+
else plan.rejectedIds.push(row.id);
|
|
5386
|
+
}
|
|
5387
|
+
return plan;
|
|
5388
|
+
}
|
|
5389
|
+
function memberSystemRollbackPlan() {
|
|
5390
|
+
return {
|
|
5391
|
+
stopNetworkWrites: true,
|
|
5392
|
+
disableBnfMemberMutations: true,
|
|
5393
|
+
keepChapterProductionReads: true,
|
|
5394
|
+
keepStripeBillingAuthority: true,
|
|
5395
|
+
deleteProviderObjects: false,
|
|
5396
|
+
reverseProviderPayments: false,
|
|
5397
|
+
reconciliationRequired: true
|
|
5398
|
+
};
|
|
5399
|
+
}
|
|
5400
|
+
var SILVER_SALT_P0_FIXTURE = {
|
|
5401
|
+
sourceInventory: { applications: 36, meetings: 7, emails: 49, realPeople: 0 },
|
|
5402
|
+
application: { id: "fixture_application_001", personId: "fixture_person_001", migrates: false },
|
|
5403
|
+
crm: { recordId: "fixture_crm_001", email: "fixture.member@example.invalid", migrates: false },
|
|
5404
|
+
clerk: { userId: "user_fixture_001", verifiedEmail: "fixture.member@example.invalid", migrates: false },
|
|
5405
|
+
stripe: {
|
|
5406
|
+
customerId: "cus_fixture_001",
|
|
5407
|
+
subscriptionId: "sub_fixture_001",
|
|
5408
|
+
productId: "prod_fixture_001",
|
|
5409
|
+
priceId: "price_fixture_001",
|
|
5410
|
+
eventId: "evt_fixture_001",
|
|
5411
|
+
migrates: false
|
|
5412
|
+
},
|
|
5413
|
+
unmatchedStripeEvent: { id: "evt_fixture_unmatched", disposition: "quarantine_unmatched" },
|
|
5414
|
+
legacyStripeEvent: { id: "evt_fixture_legacy", requiresProvenLocalLink: true }
|
|
5415
|
+
};
|
|
4947
5416
|
//# sourceMappingURL=index.cjs.map
|