@riverbankcms/sdk 0.60.11 → 0.60.12

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.
Files changed (34) hide show
  1. package/dist/_dts/api/src/accessAdmin.d.ts +102 -0
  2. package/dist/_dts/api/src/common/envelope.d.ts +1 -1
  3. package/dist/_dts/api/src/domains.d.ts +14 -13
  4. package/dist/_dts/api/src/endpoints.d.ts +32 -0
  5. package/dist/_dts/api/src/index.d.ts +2 -2
  6. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -1
  7. package/dist/_dts/core/src/participant-identity.d.ts +72 -0
  8. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +96 -60
  9. package/dist/_dts/db/src/schemas/forms.d.ts +135 -24
  10. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -1
  11. package/dist/_dts/sdk/src/version.d.ts +1 -1
  12. package/dist/cli/index.mjs +119 -1
  13. package/dist/client/bookings.mjs +62 -0
  14. package/dist/client/client.mjs +119 -1
  15. package/dist/client/hooks.mjs +119 -0
  16. package/dist/client/rendering/client.mjs +61 -0
  17. package/dist/client/rendering/islands.mjs +61 -0
  18. package/dist/client/rendering.mjs +118 -0
  19. package/dist/preview-next/before-render.mjs +57 -0
  20. package/dist/preview-next/client/runtime.mjs +120 -2
  21. package/dist/preview-next/middleware.mjs +57 -0
  22. package/dist/server/components.mjs +119 -0
  23. package/dist/server/config-validation.mjs +119 -0
  24. package/dist/server/config.mjs +119 -0
  25. package/dist/server/data.mjs +119 -0
  26. package/dist/server/index.mjs +120 -1
  27. package/dist/server/next.mjs +120 -1
  28. package/dist/server/page-converter.mjs +62 -0
  29. package/dist/server/prebuild.mjs +1 -1
  30. package/dist/server/rendering/server.mjs +119 -0
  31. package/dist/server/rendering.mjs +119 -0
  32. package/dist/server/routing.mjs +118 -0
  33. package/dist/server/server.mjs +120 -1
  34. package/package.json +1 -1
@@ -2069,6 +2069,63 @@ var ENDPOINT_DEFINITIONS = {
2069
2069
  auth: "user",
2070
2070
  responseKind: "json"
2071
2071
  },
2072
+ updateRegisteredDomainContact: {
2073
+ path: "/domains/{domainId}/registrar/contact",
2074
+ method: "POST",
2075
+ errors: [
2076
+ "validation:invalid_input",
2077
+ "resource:not_found",
2078
+ "auth:forbidden",
2079
+ "external:service_error",
2080
+ "external:registrar_orphaned_contact_profile",
2081
+ "server:internal_error"
2082
+ ],
2083
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2084
+ auth: "user",
2085
+ responseKind: "json"
2086
+ },
2087
+ setRegisteredDomainPrivacy: {
2088
+ path: "/domains/{domainId}/registrar/privacy",
2089
+ method: "POST",
2090
+ errors: [
2091
+ "validation:invalid_input",
2092
+ "resource:not_found",
2093
+ "auth:forbidden",
2094
+ "external:service_error",
2095
+ "server:internal_error"
2096
+ ],
2097
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2098
+ auth: "user",
2099
+ responseKind: "json"
2100
+ },
2101
+ setRegisteredDomainAutoRenew: {
2102
+ path: "/domains/{domainId}/registrar/auto-renew",
2103
+ method: "POST",
2104
+ errors: [
2105
+ "validation:invalid_input",
2106
+ "resource:not_found",
2107
+ "auth:forbidden",
2108
+ "external:service_error",
2109
+ "server:internal_error"
2110
+ ],
2111
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2112
+ auth: "user",
2113
+ responseKind: "json"
2114
+ },
2115
+ getRegisteredDomainRenewalPosture: {
2116
+ path: "/domains/{domainId}/registrar/renewal",
2117
+ method: "GET",
2118
+ errors: [
2119
+ "validation:invalid_input",
2120
+ "resource:not_found",
2121
+ "auth:forbidden",
2122
+ "external:service_error",
2123
+ "server:internal_error"
2124
+ ],
2125
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2126
+ auth: "user",
2127
+ responseKind: "json"
2128
+ },
2072
2129
  retryDomainVercel: {
2073
2130
  path: "/domains/{domainId}/vercel",
2074
2131
  method: "POST",
@@ -5776,6 +5833,68 @@ function toLocationCoordinates(value) {
5776
5833
  };
5777
5834
  }
5778
5835
 
5836
+ // ../core/src/participant-identity.ts
5837
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
5838
+ participant_id: {
5839
+ field: "participant_id",
5840
+ role: "canonical_link",
5841
+ canonicalSource: "booking_participants.id",
5842
+ contractAction: "tighten_in_839",
5843
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
5844
+ },
5845
+ display_name: {
5846
+ field: "display_name",
5847
+ role: "contextual_snapshot",
5848
+ canonicalSource: "booking_participants.display_name for live identity",
5849
+ contractAction: "retain_as_snapshot",
5850
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
5851
+ },
5852
+ email: {
5853
+ field: "email",
5854
+ role: "contextual_snapshot",
5855
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5856
+ contractAction: "retain_as_snapshot",
5857
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
5858
+ },
5859
+ email_normalized: {
5860
+ field: "email_normalized",
5861
+ role: "contextual_snapshot",
5862
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5863
+ contractAction: "retain_as_snapshot",
5864
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
5865
+ },
5866
+ phone: {
5867
+ field: "phone",
5868
+ role: "contextual_snapshot",
5869
+ canonicalSource: "booking_participants.phone for live phone identity",
5870
+ contractAction: "retain_as_snapshot",
5871
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
5872
+ },
5873
+ identity_state: {
5874
+ field: "identity_state",
5875
+ role: "materialization_state",
5876
+ canonicalSource: "booking_participants.identity_state for subject state",
5877
+ contractAction: "review_for_later_contract_cleanup",
5878
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
5879
+ },
5880
+ event_attendee_guest_id: {
5881
+ field: "event_attendee_guest_id",
5882
+ role: "compatibility_projection",
5883
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
5884
+ contractAction: "retain_as_projection",
5885
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
5886
+ }
5887
+ };
5888
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
5889
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
5890
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
5891
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
5892
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
5893
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
5894
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
5895
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
5896
+ ];
5897
+
5779
5898
  // ../media-core/src/transformRect.ts
5780
5899
  function isValidTransformRectStructure(rect) {
5781
5900
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -3250,10 +3250,71 @@ var init_participants = __esm({
3250
3250
  });
3251
3251
 
3252
3252
  // ../core/src/participant-identity.ts
3253
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD, PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS;
3253
3254
  var init_participant_identity = __esm({
3254
3255
  "../core/src/participant-identity.ts"() {
3255
3256
  "use strict";
3256
3257
  init_assertNever();
3258
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
3259
+ participant_id: {
3260
+ field: "participant_id",
3261
+ role: "canonical_link",
3262
+ canonicalSource: "booking_participants.id",
3263
+ contractAction: "tighten_in_839",
3264
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
3265
+ },
3266
+ display_name: {
3267
+ field: "display_name",
3268
+ role: "contextual_snapshot",
3269
+ canonicalSource: "booking_participants.display_name for live identity",
3270
+ contractAction: "retain_as_snapshot",
3271
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
3272
+ },
3273
+ email: {
3274
+ field: "email",
3275
+ role: "contextual_snapshot",
3276
+ canonicalSource: "booking_participants.email_normalized for live email identity",
3277
+ contractAction: "retain_as_snapshot",
3278
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
3279
+ },
3280
+ email_normalized: {
3281
+ field: "email_normalized",
3282
+ role: "contextual_snapshot",
3283
+ canonicalSource: "booking_participants.email_normalized for live email identity",
3284
+ contractAction: "retain_as_snapshot",
3285
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
3286
+ },
3287
+ phone: {
3288
+ field: "phone",
3289
+ role: "contextual_snapshot",
3290
+ canonicalSource: "booking_participants.phone for live phone identity",
3291
+ contractAction: "retain_as_snapshot",
3292
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
3293
+ },
3294
+ identity_state: {
3295
+ field: "identity_state",
3296
+ role: "materialization_state",
3297
+ canonicalSource: "booking_participants.identity_state for subject state",
3298
+ contractAction: "review_for_later_contract_cleanup",
3299
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
3300
+ },
3301
+ event_attendee_guest_id: {
3302
+ field: "event_attendee_guest_id",
3303
+ role: "compatibility_projection",
3304
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
3305
+ contractAction: "retain_as_projection",
3306
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
3307
+ }
3308
+ };
3309
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
3310
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
3311
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
3312
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
3313
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
3314
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
3315
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
3316
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
3317
+ ];
3257
3318
  }
3258
3319
  });
3259
3320
 
@@ -691,10 +691,71 @@ var init_participants = __esm({
691
691
  });
692
692
 
693
693
  // ../core/src/participant-identity.ts
694
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD, PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS;
694
695
  var init_participant_identity = __esm({
695
696
  "../core/src/participant-identity.ts"() {
696
697
  "use strict";
697
698
  init_assertNever();
699
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
700
+ participant_id: {
701
+ field: "participant_id",
702
+ role: "canonical_link",
703
+ canonicalSource: "booking_participants.id",
704
+ contractAction: "tighten_in_839",
705
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
706
+ },
707
+ display_name: {
708
+ field: "display_name",
709
+ role: "contextual_snapshot",
710
+ canonicalSource: "booking_participants.display_name for live identity",
711
+ contractAction: "retain_as_snapshot",
712
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
713
+ },
714
+ email: {
715
+ field: "email",
716
+ role: "contextual_snapshot",
717
+ canonicalSource: "booking_participants.email_normalized for live email identity",
718
+ contractAction: "retain_as_snapshot",
719
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
720
+ },
721
+ email_normalized: {
722
+ field: "email_normalized",
723
+ role: "contextual_snapshot",
724
+ canonicalSource: "booking_participants.email_normalized for live email identity",
725
+ contractAction: "retain_as_snapshot",
726
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
727
+ },
728
+ phone: {
729
+ field: "phone",
730
+ role: "contextual_snapshot",
731
+ canonicalSource: "booking_participants.phone for live phone identity",
732
+ contractAction: "retain_as_snapshot",
733
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
734
+ },
735
+ identity_state: {
736
+ field: "identity_state",
737
+ role: "materialization_state",
738
+ canonicalSource: "booking_participants.identity_state for subject state",
739
+ contractAction: "review_for_later_contract_cleanup",
740
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
741
+ },
742
+ event_attendee_guest_id: {
743
+ field: "event_attendee_guest_id",
744
+ role: "compatibility_projection",
745
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
746
+ contractAction: "retain_as_projection",
747
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
748
+ }
749
+ };
750
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
751
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
752
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
753
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
754
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
755
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
756
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
757
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
758
+ ];
698
759
  }
699
760
  });
700
761
 
@@ -4966,10 +4966,71 @@ var init_participants = __esm({
4966
4966
  });
4967
4967
 
4968
4968
  // ../core/src/participant-identity.ts
4969
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD, PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS;
4969
4970
  var init_participant_identity = __esm({
4970
4971
  "../core/src/participant-identity.ts"() {
4971
4972
  "use strict";
4972
4973
  init_assertNever();
4974
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
4975
+ participant_id: {
4976
+ field: "participant_id",
4977
+ role: "canonical_link",
4978
+ canonicalSource: "booking_participants.id",
4979
+ contractAction: "tighten_in_839",
4980
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
4981
+ },
4982
+ display_name: {
4983
+ field: "display_name",
4984
+ role: "contextual_snapshot",
4985
+ canonicalSource: "booking_participants.display_name for live identity",
4986
+ contractAction: "retain_as_snapshot",
4987
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
4988
+ },
4989
+ email: {
4990
+ field: "email",
4991
+ role: "contextual_snapshot",
4992
+ canonicalSource: "booking_participants.email_normalized for live email identity",
4993
+ contractAction: "retain_as_snapshot",
4994
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
4995
+ },
4996
+ email_normalized: {
4997
+ field: "email_normalized",
4998
+ role: "contextual_snapshot",
4999
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5000
+ contractAction: "retain_as_snapshot",
5001
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
5002
+ },
5003
+ phone: {
5004
+ field: "phone",
5005
+ role: "contextual_snapshot",
5006
+ canonicalSource: "booking_participants.phone for live phone identity",
5007
+ contractAction: "retain_as_snapshot",
5008
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
5009
+ },
5010
+ identity_state: {
5011
+ field: "identity_state",
5012
+ role: "materialization_state",
5013
+ canonicalSource: "booking_participants.identity_state for subject state",
5014
+ contractAction: "review_for_later_contract_cleanup",
5015
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
5016
+ },
5017
+ event_attendee_guest_id: {
5018
+ field: "event_attendee_guest_id",
5019
+ role: "compatibility_projection",
5020
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
5021
+ contractAction: "retain_as_projection",
5022
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
5023
+ }
5024
+ };
5025
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
5026
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
5027
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
5028
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
5029
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
5030
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
5031
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
5032
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
5033
+ ];
4973
5034
  }
4974
5035
  });
4975
5036
 
@@ -75135,6 +75196,63 @@ var ENDPOINT_DEFINITIONS = {
75135
75196
  auth: "user",
75136
75197
  responseKind: "json"
75137
75198
  },
75199
+ updateRegisteredDomainContact: {
75200
+ path: "/domains/{domainId}/registrar/contact",
75201
+ method: "POST",
75202
+ errors: [
75203
+ "validation:invalid_input",
75204
+ "resource:not_found",
75205
+ "auth:forbidden",
75206
+ "external:service_error",
75207
+ "external:registrar_orphaned_contact_profile",
75208
+ "server:internal_error"
75209
+ ],
75210
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
75211
+ auth: "user",
75212
+ responseKind: "json"
75213
+ },
75214
+ setRegisteredDomainPrivacy: {
75215
+ path: "/domains/{domainId}/registrar/privacy",
75216
+ method: "POST",
75217
+ errors: [
75218
+ "validation:invalid_input",
75219
+ "resource:not_found",
75220
+ "auth:forbidden",
75221
+ "external:service_error",
75222
+ "server:internal_error"
75223
+ ],
75224
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
75225
+ auth: "user",
75226
+ responseKind: "json"
75227
+ },
75228
+ setRegisteredDomainAutoRenew: {
75229
+ path: "/domains/{domainId}/registrar/auto-renew",
75230
+ method: "POST",
75231
+ errors: [
75232
+ "validation:invalid_input",
75233
+ "resource:not_found",
75234
+ "auth:forbidden",
75235
+ "external:service_error",
75236
+ "server:internal_error"
75237
+ ],
75238
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
75239
+ auth: "user",
75240
+ responseKind: "json"
75241
+ },
75242
+ getRegisteredDomainRenewalPosture: {
75243
+ path: "/domains/{domainId}/registrar/renewal",
75244
+ method: "GET",
75245
+ errors: [
75246
+ "validation:invalid_input",
75247
+ "resource:not_found",
75248
+ "auth:forbidden",
75249
+ "external:service_error",
75250
+ "server:internal_error"
75251
+ ],
75252
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
75253
+ auth: "user",
75254
+ responseKind: "json"
75255
+ },
75138
75256
  retryDomainVercel: {
75139
75257
  path: "/domains/{domainId}/vercel",
75140
75258
  method: "POST",
@@ -2091,6 +2091,63 @@ var ENDPOINT_DEFINITIONS = {
2091
2091
  auth: "user",
2092
2092
  responseKind: "json"
2093
2093
  },
2094
+ updateRegisteredDomainContact: {
2095
+ path: "/domains/{domainId}/registrar/contact",
2096
+ method: "POST",
2097
+ errors: [
2098
+ "validation:invalid_input",
2099
+ "resource:not_found",
2100
+ "auth:forbidden",
2101
+ "external:service_error",
2102
+ "external:registrar_orphaned_contact_profile",
2103
+ "server:internal_error"
2104
+ ],
2105
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2106
+ auth: "user",
2107
+ responseKind: "json"
2108
+ },
2109
+ setRegisteredDomainPrivacy: {
2110
+ path: "/domains/{domainId}/registrar/privacy",
2111
+ method: "POST",
2112
+ errors: [
2113
+ "validation:invalid_input",
2114
+ "resource:not_found",
2115
+ "auth:forbidden",
2116
+ "external:service_error",
2117
+ "server:internal_error"
2118
+ ],
2119
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2120
+ auth: "user",
2121
+ responseKind: "json"
2122
+ },
2123
+ setRegisteredDomainAutoRenew: {
2124
+ path: "/domains/{domainId}/registrar/auto-renew",
2125
+ method: "POST",
2126
+ errors: [
2127
+ "validation:invalid_input",
2128
+ "resource:not_found",
2129
+ "auth:forbidden",
2130
+ "external:service_error",
2131
+ "server:internal_error"
2132
+ ],
2133
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2134
+ auth: "user",
2135
+ responseKind: "json"
2136
+ },
2137
+ getRegisteredDomainRenewalPosture: {
2138
+ path: "/domains/{domainId}/registrar/renewal",
2139
+ method: "GET",
2140
+ errors: [
2141
+ "validation:invalid_input",
2142
+ "resource:not_found",
2143
+ "auth:forbidden",
2144
+ "external:service_error",
2145
+ "server:internal_error"
2146
+ ],
2147
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2148
+ auth: "user",
2149
+ responseKind: "json"
2150
+ },
2094
2151
  retryDomainVercel: {
2095
2152
  path: "/domains/{domainId}/vercel",
2096
2153
  method: "POST",
@@ -2261,6 +2261,63 @@ var init_endpoints = __esm({
2261
2261
  auth: "user",
2262
2262
  responseKind: "json"
2263
2263
  },
2264
+ updateRegisteredDomainContact: {
2265
+ path: "/domains/{domainId}/registrar/contact",
2266
+ method: "POST",
2267
+ errors: [
2268
+ "validation:invalid_input",
2269
+ "resource:not_found",
2270
+ "auth:forbidden",
2271
+ "external:service_error",
2272
+ "external:registrar_orphaned_contact_profile",
2273
+ "server:internal_error"
2274
+ ],
2275
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2276
+ auth: "user",
2277
+ responseKind: "json"
2278
+ },
2279
+ setRegisteredDomainPrivacy: {
2280
+ path: "/domains/{domainId}/registrar/privacy",
2281
+ method: "POST",
2282
+ errors: [
2283
+ "validation:invalid_input",
2284
+ "resource:not_found",
2285
+ "auth:forbidden",
2286
+ "external:service_error",
2287
+ "server:internal_error"
2288
+ ],
2289
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2290
+ auth: "user",
2291
+ responseKind: "json"
2292
+ },
2293
+ setRegisteredDomainAutoRenew: {
2294
+ path: "/domains/{domainId}/registrar/auto-renew",
2295
+ method: "POST",
2296
+ errors: [
2297
+ "validation:invalid_input",
2298
+ "resource:not_found",
2299
+ "auth:forbidden",
2300
+ "external:service_error",
2301
+ "server:internal_error"
2302
+ ],
2303
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2304
+ auth: "user",
2305
+ responseKind: "json"
2306
+ },
2307
+ getRegisteredDomainRenewalPosture: {
2308
+ path: "/domains/{domainId}/registrar/renewal",
2309
+ method: "GET",
2310
+ errors: [
2311
+ "validation:invalid_input",
2312
+ "resource:not_found",
2313
+ "auth:forbidden",
2314
+ "external:service_error",
2315
+ "server:internal_error"
2316
+ ],
2317
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2318
+ auth: "user",
2319
+ responseKind: "json"
2320
+ },
2264
2321
  retryDomainVercel: {
2265
2322
  path: "/domains/{domainId}/vercel",
2266
2323
  method: "POST",
@@ -96829,9 +96886,70 @@ var init_participants = __esm({
96829
96886
  });
96830
96887
 
96831
96888
  // ../core/src/participant-identity.ts
96889
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD;
96832
96890
  var init_participant_identity = __esm({
96833
96891
  "../core/src/participant-identity.ts"() {
96834
96892
  init_assertNever();
96893
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
96894
+ participant_id: {
96895
+ field: "participant_id",
96896
+ role: "canonical_link",
96897
+ canonicalSource: "booking_participants.id",
96898
+ contractAction: "tighten_in_839",
96899
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
96900
+ },
96901
+ display_name: {
96902
+ field: "display_name",
96903
+ role: "contextual_snapshot",
96904
+ canonicalSource: "booking_participants.display_name for live identity",
96905
+ contractAction: "retain_as_snapshot",
96906
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
96907
+ },
96908
+ email: {
96909
+ field: "email",
96910
+ role: "contextual_snapshot",
96911
+ canonicalSource: "booking_participants.email_normalized for live email identity",
96912
+ contractAction: "retain_as_snapshot",
96913
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
96914
+ },
96915
+ email_normalized: {
96916
+ field: "email_normalized",
96917
+ role: "contextual_snapshot",
96918
+ canonicalSource: "booking_participants.email_normalized for live email identity",
96919
+ contractAction: "retain_as_snapshot",
96920
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
96921
+ },
96922
+ phone: {
96923
+ field: "phone",
96924
+ role: "contextual_snapshot",
96925
+ canonicalSource: "booking_participants.phone for live phone identity",
96926
+ contractAction: "retain_as_snapshot",
96927
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
96928
+ },
96929
+ identity_state: {
96930
+ field: "identity_state",
96931
+ role: "materialization_state",
96932
+ canonicalSource: "booking_participants.identity_state for subject state",
96933
+ contractAction: "review_for_later_contract_cleanup",
96934
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
96935
+ },
96936
+ event_attendee_guest_id: {
96937
+ field: "event_attendee_guest_id",
96938
+ role: "compatibility_projection",
96939
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
96940
+ contractAction: "retain_as_projection",
96941
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
96942
+ }
96943
+ };
96944
+ [
96945
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
96946
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
96947
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
96948
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
96949
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
96950
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
96951
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
96952
+ ];
96835
96953
  }
96836
96954
  });
96837
96955
 
@@ -201934,8 +202052,8 @@ function deriveLaunchReadiness(input) {
201934
202052
  description: input.customDomain.kind === "connected" ? "A custom domain is already connected." : "You can connect a custom domain later when you are ready to launch.",
201935
202053
  action: openDashboardPathAction(
201936
202054
  siteId,
201937
- "/settings/domains",
201938
- "Manage domains"
202055
+ "/settings/domains?setup=domain",
202056
+ "Set up domain"
201939
202057
  ),
201940
202058
  evidence: evidenceFromDerivedState(
201941
202059
  input.customDomain.kind === "connected" ? "complete" : "pending"