@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
@@ -2104,6 +2104,63 @@ var ENDPOINT_DEFINITIONS = {
2104
2104
  auth: "user",
2105
2105
  responseKind: "json"
2106
2106
  },
2107
+ updateRegisteredDomainContact: {
2108
+ path: "/domains/{domainId}/registrar/contact",
2109
+ method: "POST",
2110
+ errors: [
2111
+ "validation:invalid_input",
2112
+ "resource:not_found",
2113
+ "auth:forbidden",
2114
+ "external:service_error",
2115
+ "external:registrar_orphaned_contact_profile",
2116
+ "server:internal_error"
2117
+ ],
2118
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2119
+ auth: "user",
2120
+ responseKind: "json"
2121
+ },
2122
+ setRegisteredDomainPrivacy: {
2123
+ path: "/domains/{domainId}/registrar/privacy",
2124
+ method: "POST",
2125
+ errors: [
2126
+ "validation:invalid_input",
2127
+ "resource:not_found",
2128
+ "auth:forbidden",
2129
+ "external:service_error",
2130
+ "server:internal_error"
2131
+ ],
2132
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2133
+ auth: "user",
2134
+ responseKind: "json"
2135
+ },
2136
+ setRegisteredDomainAutoRenew: {
2137
+ path: "/domains/{domainId}/registrar/auto-renew",
2138
+ method: "POST",
2139
+ errors: [
2140
+ "validation:invalid_input",
2141
+ "resource:not_found",
2142
+ "auth:forbidden",
2143
+ "external:service_error",
2144
+ "server:internal_error"
2145
+ ],
2146
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2147
+ auth: "user",
2148
+ responseKind: "json"
2149
+ },
2150
+ getRegisteredDomainRenewalPosture: {
2151
+ path: "/domains/{domainId}/registrar/renewal",
2152
+ method: "GET",
2153
+ errors: [
2154
+ "validation:invalid_input",
2155
+ "resource:not_found",
2156
+ "auth:forbidden",
2157
+ "external:service_error",
2158
+ "server:internal_error"
2159
+ ],
2160
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2161
+ auth: "user",
2162
+ responseKind: "json"
2163
+ },
2107
2164
  retryDomainVercel: {
2108
2165
  path: "/domains/{domainId}/vercel",
2109
2166
  method: "POST",
@@ -371,6 +371,68 @@ function toLocationCoordinates(value) {
371
371
  };
372
372
  }
373
373
 
374
+ // ../core/src/participant-identity.ts
375
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
376
+ participant_id: {
377
+ field: "participant_id",
378
+ role: "canonical_link",
379
+ canonicalSource: "booking_participants.id",
380
+ contractAction: "tighten_in_839",
381
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
382
+ },
383
+ display_name: {
384
+ field: "display_name",
385
+ role: "contextual_snapshot",
386
+ canonicalSource: "booking_participants.display_name for live identity",
387
+ contractAction: "retain_as_snapshot",
388
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
389
+ },
390
+ email: {
391
+ field: "email",
392
+ role: "contextual_snapshot",
393
+ canonicalSource: "booking_participants.email_normalized for live email identity",
394
+ contractAction: "retain_as_snapshot",
395
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
396
+ },
397
+ email_normalized: {
398
+ field: "email_normalized",
399
+ role: "contextual_snapshot",
400
+ canonicalSource: "booking_participants.email_normalized for live email identity",
401
+ contractAction: "retain_as_snapshot",
402
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
403
+ },
404
+ phone: {
405
+ field: "phone",
406
+ role: "contextual_snapshot",
407
+ canonicalSource: "booking_participants.phone for live phone identity",
408
+ contractAction: "retain_as_snapshot",
409
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
410
+ },
411
+ identity_state: {
412
+ field: "identity_state",
413
+ role: "materialization_state",
414
+ canonicalSource: "booking_participants.identity_state for subject state",
415
+ contractAction: "review_for_later_contract_cleanup",
416
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
417
+ },
418
+ event_attendee_guest_id: {
419
+ field: "event_attendee_guest_id",
420
+ role: "compatibility_projection",
421
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
422
+ contractAction: "retain_as_projection",
423
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
424
+ }
425
+ };
426
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
427
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
428
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
429
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
430
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
431
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
432
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
433
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
434
+ ];
435
+
374
436
  // ../media-core/src/typeGuards.ts
375
437
  function isRecord(value) {
376
438
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -48722,6 +48784,63 @@ var ENDPOINT_DEFINITIONS = {
48722
48784
  auth: "user",
48723
48785
  responseKind: "json"
48724
48786
  },
48787
+ updateRegisteredDomainContact: {
48788
+ path: "/domains/{domainId}/registrar/contact",
48789
+ method: "POST",
48790
+ errors: [
48791
+ "validation:invalid_input",
48792
+ "resource:not_found",
48793
+ "auth:forbidden",
48794
+ "external:service_error",
48795
+ "external:registrar_orphaned_contact_profile",
48796
+ "server:internal_error"
48797
+ ],
48798
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
48799
+ auth: "user",
48800
+ responseKind: "json"
48801
+ },
48802
+ setRegisteredDomainPrivacy: {
48803
+ path: "/domains/{domainId}/registrar/privacy",
48804
+ method: "POST",
48805
+ errors: [
48806
+ "validation:invalid_input",
48807
+ "resource:not_found",
48808
+ "auth:forbidden",
48809
+ "external:service_error",
48810
+ "server:internal_error"
48811
+ ],
48812
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
48813
+ auth: "user",
48814
+ responseKind: "json"
48815
+ },
48816
+ setRegisteredDomainAutoRenew: {
48817
+ path: "/domains/{domainId}/registrar/auto-renew",
48818
+ method: "POST",
48819
+ errors: [
48820
+ "validation:invalid_input",
48821
+ "resource:not_found",
48822
+ "auth:forbidden",
48823
+ "external:service_error",
48824
+ "server:internal_error"
48825
+ ],
48826
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
48827
+ auth: "user",
48828
+ responseKind: "json"
48829
+ },
48830
+ getRegisteredDomainRenewalPosture: {
48831
+ path: "/domains/{domainId}/registrar/renewal",
48832
+ method: "GET",
48833
+ errors: [
48834
+ "validation:invalid_input",
48835
+ "resource:not_found",
48836
+ "auth:forbidden",
48837
+ "external:service_error",
48838
+ "server:internal_error"
48839
+ ],
48840
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
48841
+ auth: "user",
48842
+ responseKind: "json"
48843
+ },
48725
48844
  retryDomainVercel: {
48726
48845
  path: "/domains/{domainId}/vercel",
48727
48846
  method: "POST",
@@ -2065,6 +2065,63 @@ var ENDPOINT_DEFINITIONS = {
2065
2065
  auth: "user",
2066
2066
  responseKind: "json"
2067
2067
  },
2068
+ updateRegisteredDomainContact: {
2069
+ path: "/domains/{domainId}/registrar/contact",
2070
+ method: "POST",
2071
+ errors: [
2072
+ "validation:invalid_input",
2073
+ "resource:not_found",
2074
+ "auth:forbidden",
2075
+ "external:service_error",
2076
+ "external:registrar_orphaned_contact_profile",
2077
+ "server:internal_error"
2078
+ ],
2079
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2080
+ auth: "user",
2081
+ responseKind: "json"
2082
+ },
2083
+ setRegisteredDomainPrivacy: {
2084
+ path: "/domains/{domainId}/registrar/privacy",
2085
+ method: "POST",
2086
+ errors: [
2087
+ "validation:invalid_input",
2088
+ "resource:not_found",
2089
+ "auth:forbidden",
2090
+ "external:service_error",
2091
+ "server:internal_error"
2092
+ ],
2093
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2094
+ auth: "user",
2095
+ responseKind: "json"
2096
+ },
2097
+ setRegisteredDomainAutoRenew: {
2098
+ path: "/domains/{domainId}/registrar/auto-renew",
2099
+ method: "POST",
2100
+ errors: [
2101
+ "validation:invalid_input",
2102
+ "resource:not_found",
2103
+ "auth:forbidden",
2104
+ "external:service_error",
2105
+ "server:internal_error"
2106
+ ],
2107
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2108
+ auth: "user",
2109
+ responseKind: "json"
2110
+ },
2111
+ getRegisteredDomainRenewalPosture: {
2112
+ path: "/domains/{domainId}/registrar/renewal",
2113
+ method: "GET",
2114
+ errors: [
2115
+ "validation:invalid_input",
2116
+ "resource:not_found",
2117
+ "auth:forbidden",
2118
+ "external:service_error",
2119
+ "server:internal_error"
2120
+ ],
2121
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2122
+ auth: "user",
2123
+ responseKind: "json"
2124
+ },
2068
2125
  retryDomainVercel: {
2069
2126
  path: "/domains/{domainId}/vercel",
2070
2127
  method: "POST",
@@ -5772,6 +5829,68 @@ function toLocationCoordinates(value) {
5772
5829
  };
5773
5830
  }
5774
5831
 
5832
+ // ../core/src/participant-identity.ts
5833
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
5834
+ participant_id: {
5835
+ field: "participant_id",
5836
+ role: "canonical_link",
5837
+ canonicalSource: "booking_participants.id",
5838
+ contractAction: "tighten_in_839",
5839
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
5840
+ },
5841
+ display_name: {
5842
+ field: "display_name",
5843
+ role: "contextual_snapshot",
5844
+ canonicalSource: "booking_participants.display_name for live identity",
5845
+ contractAction: "retain_as_snapshot",
5846
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
5847
+ },
5848
+ email: {
5849
+ field: "email",
5850
+ role: "contextual_snapshot",
5851
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5852
+ contractAction: "retain_as_snapshot",
5853
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
5854
+ },
5855
+ email_normalized: {
5856
+ field: "email_normalized",
5857
+ role: "contextual_snapshot",
5858
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5859
+ contractAction: "retain_as_snapshot",
5860
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
5861
+ },
5862
+ phone: {
5863
+ field: "phone",
5864
+ role: "contextual_snapshot",
5865
+ canonicalSource: "booking_participants.phone for live phone identity",
5866
+ contractAction: "retain_as_snapshot",
5867
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
5868
+ },
5869
+ identity_state: {
5870
+ field: "identity_state",
5871
+ role: "materialization_state",
5872
+ canonicalSource: "booking_participants.identity_state for subject state",
5873
+ contractAction: "review_for_later_contract_cleanup",
5874
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
5875
+ },
5876
+ event_attendee_guest_id: {
5877
+ field: "event_attendee_guest_id",
5878
+ role: "compatibility_projection",
5879
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
5880
+ contractAction: "retain_as_projection",
5881
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
5882
+ }
5883
+ };
5884
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
5885
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
5886
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
5887
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
5888
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
5889
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
5890
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
5891
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
5892
+ ];
5893
+
5775
5894
  // ../media-core/src/transformRect.ts
5776
5895
  function isValidTransformRectStructure(rect) {
5777
5896
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -2110,6 +2110,63 @@ var ENDPOINT_DEFINITIONS = {
2110
2110
  auth: "user",
2111
2111
  responseKind: "json"
2112
2112
  },
2113
+ updateRegisteredDomainContact: {
2114
+ path: "/domains/{domainId}/registrar/contact",
2115
+ method: "POST",
2116
+ errors: [
2117
+ "validation:invalid_input",
2118
+ "resource:not_found",
2119
+ "auth:forbidden",
2120
+ "external:service_error",
2121
+ "external:registrar_orphaned_contact_profile",
2122
+ "server:internal_error"
2123
+ ],
2124
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2125
+ auth: "user",
2126
+ responseKind: "json"
2127
+ },
2128
+ setRegisteredDomainPrivacy: {
2129
+ path: "/domains/{domainId}/registrar/privacy",
2130
+ method: "POST",
2131
+ errors: [
2132
+ "validation:invalid_input",
2133
+ "resource:not_found",
2134
+ "auth:forbidden",
2135
+ "external:service_error",
2136
+ "server:internal_error"
2137
+ ],
2138
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2139
+ auth: "user",
2140
+ responseKind: "json"
2141
+ },
2142
+ setRegisteredDomainAutoRenew: {
2143
+ path: "/domains/{domainId}/registrar/auto-renew",
2144
+ method: "POST",
2145
+ errors: [
2146
+ "validation:invalid_input",
2147
+ "resource:not_found",
2148
+ "auth:forbidden",
2149
+ "external:service_error",
2150
+ "server:internal_error"
2151
+ ],
2152
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2153
+ auth: "user",
2154
+ responseKind: "json"
2155
+ },
2156
+ getRegisteredDomainRenewalPosture: {
2157
+ path: "/domains/{domainId}/registrar/renewal",
2158
+ method: "GET",
2159
+ errors: [
2160
+ "validation:invalid_input",
2161
+ "resource:not_found",
2162
+ "auth:forbidden",
2163
+ "external:service_error",
2164
+ "server:internal_error"
2165
+ ],
2166
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2167
+ auth: "user",
2168
+ responseKind: "json"
2169
+ },
2113
2170
  retryDomainVercel: {
2114
2171
  path: "/domains/{domainId}/vercel",
2115
2172
  method: "POST",
@@ -5817,6 +5874,68 @@ function toLocationCoordinates(value) {
5817
5874
  };
5818
5875
  }
5819
5876
 
5877
+ // ../core/src/participant-identity.ts
5878
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
5879
+ participant_id: {
5880
+ field: "participant_id",
5881
+ role: "canonical_link",
5882
+ canonicalSource: "booking_participants.id",
5883
+ contractAction: "tighten_in_839",
5884
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
5885
+ },
5886
+ display_name: {
5887
+ field: "display_name",
5888
+ role: "contextual_snapshot",
5889
+ canonicalSource: "booking_participants.display_name for live identity",
5890
+ contractAction: "retain_as_snapshot",
5891
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
5892
+ },
5893
+ email: {
5894
+ field: "email",
5895
+ role: "contextual_snapshot",
5896
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5897
+ contractAction: "retain_as_snapshot",
5898
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
5899
+ },
5900
+ email_normalized: {
5901
+ field: "email_normalized",
5902
+ role: "contextual_snapshot",
5903
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5904
+ contractAction: "retain_as_snapshot",
5905
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
5906
+ },
5907
+ phone: {
5908
+ field: "phone",
5909
+ role: "contextual_snapshot",
5910
+ canonicalSource: "booking_participants.phone for live phone identity",
5911
+ contractAction: "retain_as_snapshot",
5912
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
5913
+ },
5914
+ identity_state: {
5915
+ field: "identity_state",
5916
+ role: "materialization_state",
5917
+ canonicalSource: "booking_participants.identity_state for subject state",
5918
+ contractAction: "review_for_later_contract_cleanup",
5919
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
5920
+ },
5921
+ event_attendee_guest_id: {
5922
+ field: "event_attendee_guest_id",
5923
+ role: "compatibility_projection",
5924
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
5925
+ contractAction: "retain_as_projection",
5926
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
5927
+ }
5928
+ };
5929
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
5930
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
5931
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
5932
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
5933
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
5934
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
5935
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
5936
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
5937
+ ];
5938
+
5820
5939
  // ../media-core/src/transformRect.ts
5821
5940
  function isValidTransformRectStructure(rect) {
5822
5941
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -2062,6 +2062,63 @@ var ENDPOINT_DEFINITIONS = {
2062
2062
  auth: "user",
2063
2063
  responseKind: "json"
2064
2064
  },
2065
+ updateRegisteredDomainContact: {
2066
+ path: "/domains/{domainId}/registrar/contact",
2067
+ method: "POST",
2068
+ errors: [
2069
+ "validation:invalid_input",
2070
+ "resource:not_found",
2071
+ "auth:forbidden",
2072
+ "external:service_error",
2073
+ "external:registrar_orphaned_contact_profile",
2074
+ "server:internal_error"
2075
+ ],
2076
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2077
+ auth: "user",
2078
+ responseKind: "json"
2079
+ },
2080
+ setRegisteredDomainPrivacy: {
2081
+ path: "/domains/{domainId}/registrar/privacy",
2082
+ method: "POST",
2083
+ errors: [
2084
+ "validation:invalid_input",
2085
+ "resource:not_found",
2086
+ "auth:forbidden",
2087
+ "external:service_error",
2088
+ "server:internal_error"
2089
+ ],
2090
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2091
+ auth: "user",
2092
+ responseKind: "json"
2093
+ },
2094
+ setRegisteredDomainAutoRenew: {
2095
+ path: "/domains/{domainId}/registrar/auto-renew",
2096
+ method: "POST",
2097
+ errors: [
2098
+ "validation:invalid_input",
2099
+ "resource:not_found",
2100
+ "auth:forbidden",
2101
+ "external:service_error",
2102
+ "server:internal_error"
2103
+ ],
2104
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2105
+ auth: "user",
2106
+ responseKind: "json"
2107
+ },
2108
+ getRegisteredDomainRenewalPosture: {
2109
+ path: "/domains/{domainId}/registrar/renewal",
2110
+ method: "GET",
2111
+ errors: [
2112
+ "validation:invalid_input",
2113
+ "resource:not_found",
2114
+ "auth:forbidden",
2115
+ "external:service_error",
2116
+ "server:internal_error"
2117
+ ],
2118
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2119
+ auth: "user",
2120
+ responseKind: "json"
2121
+ },
2065
2122
  retryDomainVercel: {
2066
2123
  path: "/domains/{domainId}/vercel",
2067
2124
  method: "POST",
@@ -5769,6 +5826,68 @@ function toLocationCoordinates(value) {
5769
5826
  };
5770
5827
  }
5771
5828
 
5829
+ // ../core/src/participant-identity.ts
5830
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
5831
+ participant_id: {
5832
+ field: "participant_id",
5833
+ role: "canonical_link",
5834
+ canonicalSource: "booking_participants.id",
5835
+ contractAction: "tighten_in_839",
5836
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
5837
+ },
5838
+ display_name: {
5839
+ field: "display_name",
5840
+ role: "contextual_snapshot",
5841
+ canonicalSource: "booking_participants.display_name for live identity",
5842
+ contractAction: "retain_as_snapshot",
5843
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
5844
+ },
5845
+ email: {
5846
+ field: "email",
5847
+ role: "contextual_snapshot",
5848
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5849
+ contractAction: "retain_as_snapshot",
5850
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
5851
+ },
5852
+ email_normalized: {
5853
+ field: "email_normalized",
5854
+ role: "contextual_snapshot",
5855
+ canonicalSource: "booking_participants.email_normalized for live email identity",
5856
+ contractAction: "retain_as_snapshot",
5857
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
5858
+ },
5859
+ phone: {
5860
+ field: "phone",
5861
+ role: "contextual_snapshot",
5862
+ canonicalSource: "booking_participants.phone for live phone identity",
5863
+ contractAction: "retain_as_snapshot",
5864
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
5865
+ },
5866
+ identity_state: {
5867
+ field: "identity_state",
5868
+ role: "materialization_state",
5869
+ canonicalSource: "booking_participants.identity_state for subject state",
5870
+ contractAction: "review_for_later_contract_cleanup",
5871
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
5872
+ },
5873
+ event_attendee_guest_id: {
5874
+ field: "event_attendee_guest_id",
5875
+ role: "compatibility_projection",
5876
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
5877
+ contractAction: "retain_as_projection",
5878
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
5879
+ }
5880
+ };
5881
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
5882
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
5883
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
5884
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
5885
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
5886
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
5887
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
5888
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
5889
+ ];
5890
+
5772
5891
  // ../media-core/src/transformRect.ts
5773
5892
  function isValidTransformRectStructure(rect) {
5774
5893
  if (!Array.isArray(rect) || rect.length !== 4) return false;