@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
@@ -6,13 +6,15 @@
6
6
  * across API routes, type guards, and client-side form submission.
7
7
  */
8
8
  import { z } from 'zod';
9
+ export declare const formPresentationSettingsSchema: z.ZodObject<{
10
+ submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
+ templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
+ }, z.core.$strict>;
9
13
  /**
10
14
  * Contact form settings
11
15
  * Used for general inquiry forms that send notifications to site owners
12
16
  */
13
17
  export declare const contactFormSettingsSchema: z.ZodObject<{
14
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
15
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16
18
  type: z.ZodLiteral<"contact">;
17
19
  successMessage: z.ZodOptional<z.ZodString>;
18
20
  sensitiveCollectionMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -57,8 +59,6 @@ export declare const contactFormSettingsSchema: z.ZodObject<{
57
59
  * XOR validation enforces this constraint.
58
60
  */
59
61
  export declare const bookingFormSettingsSchema: z.ZodObject<{
60
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
61
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
62
  type: z.ZodLiteral<"booking">;
63
63
  serviceId: z.ZodOptional<z.ZodString>;
64
64
  serviceIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -84,8 +84,6 @@ export declare const bookingFormSettingsSchema: z.ZodObject<{
84
84
  * - If not provided: Block must specify series or get from context
85
85
  */
86
86
  export declare const eventRegistrationFormSettingsSchema: z.ZodObject<{
87
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
88
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
89
87
  type: z.ZodLiteral<"event-registration">;
90
88
  seriesId: z.ZodOptional<z.ZodString>;
91
89
  maxTickets: z.ZodDefault<z.ZodNumber>;
@@ -106,8 +104,6 @@ export declare const eventRegistrationFormSettingsSchema: z.ZodObject<{
106
104
  * Used for reusable short forms / detailed questionnaires attached through booking requirements.
107
105
  */
108
106
  export declare const bookingQuestionsFormSettingsSchema: z.ZodObject<{
109
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
110
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
111
107
  type: z.ZodLiteral<"booking-questions">;
112
108
  schemaVersion: z.ZodDefault<z.ZodLiteral<2>>;
113
109
  shape: z.ZodDefault<z.ZodEnum<{
@@ -142,8 +138,6 @@ export declare const bookingQuestionsFormSettingsSchema: z.ZodObject<{
142
138
  * Use this schema to validate form settings in API routes
143
139
  */
144
140
  export declare const formSettingsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
145
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
146
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
147
141
  type: z.ZodLiteral<"contact">;
148
142
  successMessage: z.ZodOptional<z.ZodString>;
149
143
  sensitiveCollectionMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -175,8 +169,6 @@ export declare const formSettingsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
175
169
  emails: z.ZodOptional<z.ZodArray<z.ZodString>>;
176
170
  }, z.core.$strict>>;
177
171
  }, z.core.$strict>, z.ZodObject<{
178
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
179
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
180
172
  type: z.ZodLiteral<"booking">;
181
173
  serviceId: z.ZodOptional<z.ZodString>;
182
174
  serviceIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -193,8 +185,6 @@ export declare const formSettingsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
193
185
  confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
194
186
  }, z.core.$strict>>;
195
187
  }, z.core.$strict>, z.ZodObject<{
196
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
197
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
198
188
  type: z.ZodLiteral<"event-registration">;
199
189
  seriesId: z.ZodOptional<z.ZodString>;
200
190
  maxTickets: z.ZodDefault<z.ZodNumber>;
@@ -210,8 +200,6 @@ export declare const formSettingsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
210
200
  confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
211
201
  }, z.core.$strict>>;
212
202
  }, z.core.$strict>, z.ZodObject<{
213
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
214
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
215
203
  type: z.ZodLiteral<"booking-questions">;
216
204
  schemaVersion: z.ZodDefault<z.ZodLiteral<2>>;
217
205
  shape: z.ZodDefault<z.ZodEnum<{
@@ -241,6 +229,111 @@ export declare const formSettingsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
241
229
  sectioned: "sectioned";
242
230
  }>>;
243
231
  }, z.core.$strict>], "type">;
232
+ /**
233
+ * Transitional input schema for API/SDK callers that may still send form-level
234
+ * presentation metadata inside settings. Storage code must split these keys out
235
+ * before persisting canonical behavior settings.
236
+ */
237
+ export declare const formSettingsInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
238
+ type: z.ZodLiteral<"contact">;
239
+ successMessage: z.ZodOptional<z.ZodString>;
240
+ sensitiveCollectionMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
241
+ standard: "standard";
242
+ sensitive: "sensitive";
243
+ }>>>;
244
+ sensitiveCollection: z.ZodOptional<z.ZodObject<{
245
+ enabledAt: z.ZodNullable<z.ZodString>;
246
+ enabledByUserId: z.ZodNullable<z.ZodString>;
247
+ confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
248
+ }, z.core.$strict>>;
249
+ notifications: z.ZodOptional<z.ZodObject<{
250
+ email: z.ZodOptional<z.ZodObject<{
251
+ enabled: z.ZodBoolean;
252
+ recipients: z.ZodOptional<z.ZodArray<z.ZodString>>;
253
+ }, z.core.$strict>>;
254
+ autoReply: z.ZodOptional<z.ZodObject<{
255
+ enabled: z.ZodBoolean;
256
+ override: z.ZodOptional<z.ZodObject<{
257
+ subjectTemplate: z.ZodString;
258
+ bodyTemplate: z.ZodString;
259
+ }, z.core.$strict>>;
260
+ }, z.core.$strict>>;
261
+ webhook: z.ZodOptional<z.ZodObject<{
262
+ enabled: z.ZodBoolean;
263
+ url: z.ZodOptional<z.ZodString>;
264
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
265
+ }, z.core.$strict>>;
266
+ emails: z.ZodOptional<z.ZodArray<z.ZodString>>;
267
+ }, z.core.$strict>>;
268
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
269
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
270
+ }, z.core.$strict>, z.ZodObject<{
271
+ type: z.ZodLiteral<"booking">;
272
+ serviceId: z.ZodOptional<z.ZodString>;
273
+ serviceIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
274
+ resourceId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
275
+ requiresApproval: z.ZodDefault<z.ZodBoolean>;
276
+ successMessage: z.ZodOptional<z.ZodString>;
277
+ sensitiveCollectionMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
278
+ standard: "standard";
279
+ sensitive: "sensitive";
280
+ }>>>;
281
+ sensitiveCollection: z.ZodOptional<z.ZodObject<{
282
+ enabledAt: z.ZodNullable<z.ZodString>;
283
+ enabledByUserId: z.ZodNullable<z.ZodString>;
284
+ confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
285
+ }, z.core.$strict>>;
286
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
287
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
288
+ }, z.core.$strict>, z.ZodObject<{
289
+ type: z.ZodLiteral<"event-registration">;
290
+ seriesId: z.ZodOptional<z.ZodString>;
291
+ maxTickets: z.ZodDefault<z.ZodNumber>;
292
+ requiresApproval: z.ZodDefault<z.ZodBoolean>;
293
+ successMessage: z.ZodOptional<z.ZodString>;
294
+ sensitiveCollectionMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
295
+ standard: "standard";
296
+ sensitive: "sensitive";
297
+ }>>>;
298
+ sensitiveCollection: z.ZodOptional<z.ZodObject<{
299
+ enabledAt: z.ZodNullable<z.ZodString>;
300
+ enabledByUserId: z.ZodNullable<z.ZodString>;
301
+ confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
302
+ }, z.core.$strict>>;
303
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
304
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
305
+ }, z.core.$strict>, z.ZodObject<{
306
+ type: z.ZodLiteral<"booking-questions">;
307
+ schemaVersion: z.ZodDefault<z.ZodLiteral<2>>;
308
+ shape: z.ZodDefault<z.ZodEnum<{
309
+ "short-form": "short-form";
310
+ "detailed-questionnaire": "detailed-questionnaire";
311
+ }>>;
312
+ sensitiveCollectionMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
313
+ standard: "standard";
314
+ sensitive: "sensitive";
315
+ }>>>;
316
+ sensitiveCollection: z.ZodOptional<z.ZodObject<{
317
+ enabledAt: z.ZodNullable<z.ZodString>;
318
+ enabledByUserId: z.ZodNullable<z.ZodString>;
319
+ confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
320
+ }, z.core.$strict>>;
321
+ audienceHint: z.ZodOptional<z.ZodEnum<{
322
+ appointments: "appointments";
323
+ courses: "courses";
324
+ events: "events";
325
+ mixed: "mixed";
326
+ }>>;
327
+ customerTitle: z.ZodOptional<z.ZodString>;
328
+ introTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
329
+ introBody: z.ZodOptional<z.ZodNullable<z.ZodString>>;
330
+ reviewLayout: z.ZodDefault<z.ZodEnum<{
331
+ flat: "flat";
332
+ sectioned: "sectioned";
333
+ }>>;
334
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
335
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
336
+ }, z.core.$strict>], "type">;
244
337
  /**
245
338
  * TypeScript types derived from schemas
246
339
  */
@@ -249,6 +342,20 @@ export type BookingFormSettings = z.infer<typeof bookingFormSettingsSchema>;
249
342
  export type EventRegistrationFormSettings = z.infer<typeof eventRegistrationFormSettingsSchema>;
250
343
  export type BookingQuestionsFormSettings = z.infer<typeof bookingQuestionsFormSettingsSchema>;
251
344
  export type FormSettings = z.infer<typeof formSettingsSchema>;
345
+ export type FormPresentationSettings = z.infer<typeof formPresentationSettingsSchema>;
346
+ export type FormSettingsInput = z.infer<typeof formSettingsInputSchema>;
347
+ type JsonRecord = Record<string, unknown>;
348
+ export declare function stripPresentationKeysFromBehaviorSettings(value: unknown): JsonRecord;
349
+ export declare function extractFormPresentationSettings(input: Readonly<{
350
+ settingsJson?: unknown;
351
+ presentationJson?: unknown;
352
+ }>): FormPresentationSettings;
353
+ export declare function mergeFormPresentationSettings(...parts: readonly unknown[]): FormPresentationSettings;
354
+ export declare function composeFormStoredSettingsForPublicContract(input: Readonly<{
355
+ settingsJson?: unknown;
356
+ presentationJson?: unknown;
357
+ }>): JsonRecord;
358
+ export declare function parseFormBehaviorSettingsFromStoredSettings(value: unknown): FormSettings | null;
252
359
  export declare const formFieldSchema: z.ZodObject<{
253
360
  id: z.ZodString;
254
361
  label: z.ZodString;
@@ -823,8 +930,6 @@ export declare const createFormPayloadSchema: z.ZodObject<{
823
930
  }, z.core.$strict>>;
824
931
  }, z.core.$strict>;
825
932
  settings: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
826
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
827
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
828
933
  type: z.ZodLiteral<"contact">;
829
934
  successMessage: z.ZodOptional<z.ZodString>;
830
935
  sensitiveCollectionMode: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -855,9 +960,9 @@ export declare const createFormPayloadSchema: z.ZodObject<{
855
960
  }, z.core.$strict>>;
856
961
  emails: z.ZodOptional<z.ZodArray<z.ZodString>>;
857
962
  }, z.core.$strict>>;
963
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
964
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
858
965
  }, z.core.$strict>, z.ZodObject<{
859
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
860
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
861
966
  type: z.ZodLiteral<"booking">;
862
967
  serviceId: z.ZodOptional<z.ZodString>;
863
968
  serviceIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -873,9 +978,9 @@ export declare const createFormPayloadSchema: z.ZodObject<{
873
978
  enabledByUserId: z.ZodNullable<z.ZodString>;
874
979
  confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
875
980
  }, z.core.$strict>>;
981
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
982
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
876
983
  }, z.core.$strict>, z.ZodObject<{
877
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
878
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
879
984
  type: z.ZodLiteral<"event-registration">;
880
985
  seriesId: z.ZodOptional<z.ZodString>;
881
986
  maxTickets: z.ZodDefault<z.ZodNumber>;
@@ -890,9 +995,9 @@ export declare const createFormPayloadSchema: z.ZodObject<{
890
995
  enabledByUserId: z.ZodNullable<z.ZodString>;
891
996
  confirmationVersion: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodNull]>;
892
997
  }, z.core.$strict>>;
998
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
999
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
893
1000
  }, z.core.$strict>, z.ZodObject<{
894
- submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
895
- templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
896
1001
  type: z.ZodLiteral<"booking-questions">;
897
1002
  schemaVersion: z.ZodDefault<z.ZodLiteral<2>>;
898
1003
  shape: z.ZodDefault<z.ZodEnum<{
@@ -921,7 +1026,13 @@ export declare const createFormPayloadSchema: z.ZodObject<{
921
1026
  flat: "flat";
922
1027
  sectioned: "sectioned";
923
1028
  }>>;
1029
+ readonly submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1030
+ readonly templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
924
1031
  }, z.core.$strict>], "type">>;
1032
+ presentation: z.ZodOptional<z.ZodObject<{
1033
+ submitLabel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1034
+ templateKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1035
+ }, z.core.$strict>>;
925
1036
  }, z.core.$strict>;
926
1037
  export type CreateFormPayload = z.infer<typeof createFormPayloadSchema>;
927
1038
  export {};
@@ -26,7 +26,7 @@ export interface ApiResponse<TData> {
26
26
  data: TData;
27
27
  meta: ResponseMeta;
28
28
  }
29
- export type ApiErrorCode = "auth:unauthenticated" | "auth:token_expired" | "auth:token_invalid" | "auth:forbidden" | "auth:mfa_required" | "auth:sudo_required" | "auth:insufficient_permissions" | "auth:impersonation_restricted" | "validation:invalid_input" | "validation:missing_field" | "validation:invalid_format" | "validation:payload_too_large" | "resource:not_found" | "resource:already_exists" | "resource:conflict" | "resource:gone" | "rate_limit:exceeded" | "billing:payment_required" | "billing:plan_limit_exceeded" | "billing:pass_redemption_failed" | "server:internal_error" | "server:unavailable" | "external:service_error" | "network:connection_error" | "network:timeout" | "network:dns_error";
29
+ export type ApiErrorCode = "auth:unauthenticated" | "auth:token_expired" | "auth:token_invalid" | "auth:forbidden" | "auth:mfa_required" | "auth:sudo_required" | "auth:insufficient_permissions" | "auth:impersonation_restricted" | "validation:invalid_input" | "validation:missing_field" | "validation:invalid_format" | "validation:payload_too_large" | "resource:not_found" | "resource:already_exists" | "resource:conflict" | "resource:gone" | "rate_limit:exceeded" | "billing:payment_required" | "billing:plan_limit_exceeded" | "billing:pass_redemption_failed" | "server:internal_error" | "server:unavailable" | "external:service_error" | "external:registrar_orphaned_contact_profile" | "network:connection_error" | "network:timeout" | "network:dns_error";
30
30
  export interface FieldError {
31
31
  field: string;
32
32
  code: string;
@@ -8,4 +8,4 @@
8
8
  * 1. This constant
9
9
  * 2. The "version" field in package.json
10
10
  */
11
- export declare const SDK_VERSION = "0.60.11";
11
+ export declare const SDK_VERSION = "0.60.12";
@@ -197,9 +197,70 @@ var init_participants = __esm({
197
197
  });
198
198
 
199
199
  // ../core/src/participant-identity.ts
200
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD;
200
201
  var init_participant_identity = __esm({
201
202
  "../core/src/participant-identity.ts"() {
202
203
  init_assertNever();
204
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
205
+ participant_id: {
206
+ field: "participant_id",
207
+ role: "canonical_link",
208
+ canonicalSource: "booking_participants.id",
209
+ contractAction: "tighten_in_839",
210
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
211
+ },
212
+ display_name: {
213
+ field: "display_name",
214
+ role: "contextual_snapshot",
215
+ canonicalSource: "booking_participants.display_name for live identity",
216
+ contractAction: "retain_as_snapshot",
217
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
218
+ },
219
+ email: {
220
+ field: "email",
221
+ role: "contextual_snapshot",
222
+ canonicalSource: "booking_participants.email_normalized for live email identity",
223
+ contractAction: "retain_as_snapshot",
224
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
225
+ },
226
+ email_normalized: {
227
+ field: "email_normalized",
228
+ role: "contextual_snapshot",
229
+ canonicalSource: "booking_participants.email_normalized for live email identity",
230
+ contractAction: "retain_as_snapshot",
231
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
232
+ },
233
+ phone: {
234
+ field: "phone",
235
+ role: "contextual_snapshot",
236
+ canonicalSource: "booking_participants.phone for live phone identity",
237
+ contractAction: "retain_as_snapshot",
238
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
239
+ },
240
+ identity_state: {
241
+ field: "identity_state",
242
+ role: "materialization_state",
243
+ canonicalSource: "booking_participants.identity_state for subject state",
244
+ contractAction: "review_for_later_contract_cleanup",
245
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
246
+ },
247
+ event_attendee_guest_id: {
248
+ field: "event_attendee_guest_id",
249
+ role: "compatibility_projection",
250
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
251
+ contractAction: "retain_as_projection",
252
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
253
+ }
254
+ };
255
+ [
256
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
257
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
258
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
259
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
260
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
261
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
262
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
263
+ ];
203
264
  }
204
265
  });
205
266
 
@@ -16185,6 +16246,63 @@ var ENDPOINT_DEFINITIONS = {
16185
16246
  auth: "user",
16186
16247
  responseKind: "json"
16187
16248
  },
16249
+ updateRegisteredDomainContact: {
16250
+ path: "/domains/{domainId}/registrar/contact",
16251
+ method: "POST",
16252
+ errors: [
16253
+ "validation:invalid_input",
16254
+ "resource:not_found",
16255
+ "auth:forbidden",
16256
+ "external:service_error",
16257
+ "external:registrar_orphaned_contact_profile",
16258
+ "server:internal_error"
16259
+ ],
16260
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
16261
+ auth: "user",
16262
+ responseKind: "json"
16263
+ },
16264
+ setRegisteredDomainPrivacy: {
16265
+ path: "/domains/{domainId}/registrar/privacy",
16266
+ method: "POST",
16267
+ errors: [
16268
+ "validation:invalid_input",
16269
+ "resource:not_found",
16270
+ "auth:forbidden",
16271
+ "external:service_error",
16272
+ "server:internal_error"
16273
+ ],
16274
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
16275
+ auth: "user",
16276
+ responseKind: "json"
16277
+ },
16278
+ setRegisteredDomainAutoRenew: {
16279
+ path: "/domains/{domainId}/registrar/auto-renew",
16280
+ method: "POST",
16281
+ errors: [
16282
+ "validation:invalid_input",
16283
+ "resource:not_found",
16284
+ "auth:forbidden",
16285
+ "external:service_error",
16286
+ "server:internal_error"
16287
+ ],
16288
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
16289
+ auth: "user",
16290
+ responseKind: "json"
16291
+ },
16292
+ getRegisteredDomainRenewalPosture: {
16293
+ path: "/domains/{domainId}/registrar/renewal",
16294
+ method: "GET",
16295
+ errors: [
16296
+ "validation:invalid_input",
16297
+ "resource:not_found",
16298
+ "auth:forbidden",
16299
+ "external:service_error",
16300
+ "server:internal_error"
16301
+ ],
16302
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
16303
+ auth: "user",
16304
+ responseKind: "json"
16305
+ },
16188
16306
  retryDomainVercel: {
16189
16307
  path: "/domains/{domainId}/vercel",
16190
16308
  method: "POST",
@@ -45419,7 +45537,7 @@ var SimpleCache = class {
45419
45537
  };
45420
45538
 
45421
45539
  // src/version.ts
45422
- var SDK_VERSION = "0.60.11";
45540
+ var SDK_VERSION = "0.60.12";
45423
45541
 
45424
45542
  // src/client/error.ts
45425
45543
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -3752,6 +3752,68 @@ function addLocalScheduleDays(date, days) {
3752
3752
  };
3753
3753
  }
3754
3754
 
3755
+ // ../core/src/participant-identity.ts
3756
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
3757
+ participant_id: {
3758
+ field: "participant_id",
3759
+ role: "canonical_link",
3760
+ canonicalSource: "booking_participants.id",
3761
+ contractAction: "tighten_in_839",
3762
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
3763
+ },
3764
+ display_name: {
3765
+ field: "display_name",
3766
+ role: "contextual_snapshot",
3767
+ canonicalSource: "booking_participants.display_name for live identity",
3768
+ contractAction: "retain_as_snapshot",
3769
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
3770
+ },
3771
+ email: {
3772
+ field: "email",
3773
+ role: "contextual_snapshot",
3774
+ canonicalSource: "booking_participants.email_normalized for live email identity",
3775
+ contractAction: "retain_as_snapshot",
3776
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
3777
+ },
3778
+ email_normalized: {
3779
+ field: "email_normalized",
3780
+ role: "contextual_snapshot",
3781
+ canonicalSource: "booking_participants.email_normalized for live email identity",
3782
+ contractAction: "retain_as_snapshot",
3783
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
3784
+ },
3785
+ phone: {
3786
+ field: "phone",
3787
+ role: "contextual_snapshot",
3788
+ canonicalSource: "booking_participants.phone for live phone identity",
3789
+ contractAction: "retain_as_snapshot",
3790
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
3791
+ },
3792
+ identity_state: {
3793
+ field: "identity_state",
3794
+ role: "materialization_state",
3795
+ canonicalSource: "booking_participants.identity_state for subject state",
3796
+ contractAction: "review_for_later_contract_cleanup",
3797
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
3798
+ },
3799
+ event_attendee_guest_id: {
3800
+ field: "event_attendee_guest_id",
3801
+ role: "compatibility_projection",
3802
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
3803
+ contractAction: "retain_as_projection",
3804
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
3805
+ }
3806
+ };
3807
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
3808
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
3809
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
3810
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
3811
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
3812
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
3813
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
3814
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
3815
+ ];
3816
+
3755
3817
  // ../theme-core/src/accordions/types.ts
3756
3818
  import { z as z4 } from "zod";
3757
3819
  var accordionIconSchema = z4.enum([
@@ -609,10 +609,71 @@ var init_participants = __esm({
609
609
  });
610
610
 
611
611
  // ../core/src/participant-identity.ts
612
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD, PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS;
612
613
  var init_participant_identity = __esm({
613
614
  "../core/src/participant-identity.ts"() {
614
615
  "use strict";
615
616
  init_assertNever();
617
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
618
+ participant_id: {
619
+ field: "participant_id",
620
+ role: "canonical_link",
621
+ canonicalSource: "booking_participants.id",
622
+ contractAction: "tighten_in_839",
623
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
624
+ },
625
+ display_name: {
626
+ field: "display_name",
627
+ role: "contextual_snapshot",
628
+ canonicalSource: "booking_participants.display_name for live identity",
629
+ contractAction: "retain_as_snapshot",
630
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
631
+ },
632
+ email: {
633
+ field: "email",
634
+ role: "contextual_snapshot",
635
+ canonicalSource: "booking_participants.email_normalized for live email identity",
636
+ contractAction: "retain_as_snapshot",
637
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
638
+ },
639
+ email_normalized: {
640
+ field: "email_normalized",
641
+ role: "contextual_snapshot",
642
+ canonicalSource: "booking_participants.email_normalized for live email identity",
643
+ contractAction: "retain_as_snapshot",
644
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
645
+ },
646
+ phone: {
647
+ field: "phone",
648
+ role: "contextual_snapshot",
649
+ canonicalSource: "booking_participants.phone for live phone identity",
650
+ contractAction: "retain_as_snapshot",
651
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
652
+ },
653
+ identity_state: {
654
+ field: "identity_state",
655
+ role: "materialization_state",
656
+ canonicalSource: "booking_participants.identity_state for subject state",
657
+ contractAction: "review_for_later_contract_cleanup",
658
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
659
+ },
660
+ event_attendee_guest_id: {
661
+ field: "event_attendee_guest_id",
662
+ role: "compatibility_projection",
663
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
664
+ contractAction: "retain_as_projection",
665
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
666
+ }
667
+ };
668
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
669
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
670
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
671
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
672
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
673
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
674
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
675
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
676
+ ];
616
677
  }
617
678
  });
618
679
 
@@ -60768,6 +60829,63 @@ var ENDPOINT_DEFINITIONS = {
60768
60829
  auth: "user",
60769
60830
  responseKind: "json"
60770
60831
  },
60832
+ updateRegisteredDomainContact: {
60833
+ path: "/domains/{domainId}/registrar/contact",
60834
+ method: "POST",
60835
+ errors: [
60836
+ "validation:invalid_input",
60837
+ "resource:not_found",
60838
+ "auth:forbidden",
60839
+ "external:service_error",
60840
+ "external:registrar_orphaned_contact_profile",
60841
+ "server:internal_error"
60842
+ ],
60843
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60844
+ auth: "user",
60845
+ responseKind: "json"
60846
+ },
60847
+ setRegisteredDomainPrivacy: {
60848
+ path: "/domains/{domainId}/registrar/privacy",
60849
+ method: "POST",
60850
+ errors: [
60851
+ "validation:invalid_input",
60852
+ "resource:not_found",
60853
+ "auth:forbidden",
60854
+ "external:service_error",
60855
+ "server:internal_error"
60856
+ ],
60857
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60858
+ auth: "user",
60859
+ responseKind: "json"
60860
+ },
60861
+ setRegisteredDomainAutoRenew: {
60862
+ path: "/domains/{domainId}/registrar/auto-renew",
60863
+ method: "POST",
60864
+ errors: [
60865
+ "validation:invalid_input",
60866
+ "resource:not_found",
60867
+ "auth:forbidden",
60868
+ "external:service_error",
60869
+ "server:internal_error"
60870
+ ],
60871
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60872
+ auth: "user",
60873
+ responseKind: "json"
60874
+ },
60875
+ getRegisteredDomainRenewalPosture: {
60876
+ path: "/domains/{domainId}/registrar/renewal",
60877
+ method: "GET",
60878
+ errors: [
60879
+ "validation:invalid_input",
60880
+ "resource:not_found",
60881
+ "auth:forbidden",
60882
+ "external:service_error",
60883
+ "server:internal_error"
60884
+ ],
60885
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
60886
+ auth: "user",
60887
+ responseKind: "json"
60888
+ },
60771
60889
  retryDomainVercel: {
60772
60890
  path: "/domains/{domainId}/vercel",
60773
60891
  method: "POST",
@@ -80102,7 +80220,7 @@ var SimpleCache = class {
80102
80220
  };
80103
80221
 
80104
80222
  // src/version.ts
80105
- var SDK_VERSION = "0.60.11";
80223
+ var SDK_VERSION = "0.60.12";
80106
80224
 
80107
80225
  // src/client/error.ts
80108
80226
  var RiverbankApiError = class _RiverbankApiError extends Error {