picked 0.0.101-next.2 → 0.0.101

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 (175) hide show
  1. package/README.md +27 -12
  2. package/docs/explanation/conditions-and-the-logic-engine.md +94 -0
  3. package/docs/explanation/content-references.md +99 -0
  4. package/docs/explanation/feature-flag-allocation.md +218 -0
  5. package/docs/explanation/how-picked-works.md +124 -0
  6. package/docs/explanation/how-pickedql-works.md +76 -0
  7. package/docs/explanation/pages-and-flows.md +64 -0
  8. package/docs/explanation/the-content-model.md +87 -0
  9. package/docs/explanation/the-two-apis.md +68 -0
  10. package/docs/explanation/why-server-side-rendering.md +76 -0
  11. package/docs/explanation/workspaces-and-versions.md +71 -0
  12. package/docs/how-to/add-a-step-field-or-action.md +56 -0
  13. package/docs/how-to/analytics/index.md +324 -0
  14. package/docs/how-to/archive-or-delete-a-workspace.md +59 -0
  15. package/docs/how-to/authenticate-the-cli.md +101 -0
  16. package/docs/how-to/authenticate-with-a-magic-link.md +56 -0
  17. package/docs/how-to/authenticate-with-a-password.md +68 -0
  18. package/docs/how-to/authenticate-with-an-api-key.md +60 -0
  19. package/docs/how-to/authenticate-with-oauth.md +49 -0
  20. package/docs/how-to/build-a-flow.md +106 -0
  21. package/docs/how-to/call-an-external-api-from-a-workflow.md +116 -0
  22. package/docs/how-to/connect-the-mcp-server.md +46 -0
  23. package/docs/how-to/create-a-content-entry.md +58 -0
  24. package/docs/how-to/create-a-project.md +40 -0
  25. package/docs/how-to/create-an-experience.md +51 -0
  26. package/docs/how-to/create-and-revoke-an-api-key.md +54 -0
  27. package/docs/how-to/debug-with-the-chrome-extension.md +57 -0
  28. package/docs/how-to/define-a-page-layout.md +54 -0
  29. package/docs/how-to/fill-and-publish-a-page.md +82 -0
  30. package/docs/how-to/install-the-gtm-template.md +84 -0
  31. package/docs/how-to/install-the-sdk.md +93 -0
  32. package/docs/how-to/install-the-vite-plugin.md +69 -0
  33. package/docs/how-to/invite-and-remove-members.md +45 -0
  34. package/docs/how-to/point-one-entry-at-another.md +75 -0
  35. package/docs/how-to/preview-a-workspace.md +39 -0
  36. package/docs/how-to/publish-a-workspace.md +42 -0
  37. package/docs/how-to/read-a-feature-flag.md +113 -0
  38. package/docs/how-to/read-a-referenced-entry.md +109 -0
  39. package/docs/how-to/register-a-component.md +55 -0
  40. package/docs/how-to/register-an-action-handler.md +85 -0
  41. package/docs/how-to/register-an-api-that-uses-oauth2.md +107 -0
  42. package/docs/how-to/render-a-step-form.md +131 -0
  43. package/docs/how-to/render-an-unpublished-preview.md +41 -0
  44. package/docs/how-to/retry-a-failed-call-with-a-loop.md +81 -0
  45. package/docs/how-to/reuse-a-section.md +64 -0
  46. package/docs/how-to/reuse-a-step-field-or-action.md +39 -0
  47. package/docs/how-to/roll-back-a-published-version.md +39 -0
  48. package/docs/how-to/run-an-ab-test.md +59 -0
  49. package/docs/how-to/run-code-on-a-form-submission.md +125 -0
  50. package/docs/how-to/server-render-a-page.md +81 -0
  51. package/docs/how-to/set-a-content-security-policy.md +32 -0
  52. package/docs/how-to/set-up-mfa.md +126 -0
  53. package/docs/how-to/switch-workspaces.md +122 -0
  54. package/docs/how-to/upload-and-use-an-asset.mdx +87 -0
  55. package/docs/how-to/validate-a-field.md +52 -0
  56. package/docs/how-to/wait-for-an-action-response.md +182 -0
  57. package/docs/how-to/write-a-condition.md +57 -0
  58. package/docs/how-to/write-a-predicate.md +60 -0
  59. package/docs/index.md +59 -0
  60. package/docs/reference/dashboard/actions.mdx +65 -0
  61. package/docs/reference/dashboard/api-keys.mdx +47 -0
  62. package/docs/reference/dashboard/conditions.mdx +51 -0
  63. package/docs/reference/dashboard/content/asset-library.mdx +74 -0
  64. package/docs/reference/dashboard/content/blocks.mdx +66 -0
  65. package/docs/reference/dashboard/content/content-entries.mdx +109 -0
  66. package/docs/reference/dashboard/content/models.mdx +119 -0
  67. package/docs/reference/dashboard/content/pages.mdx +72 -0
  68. package/docs/reference/dashboard/experiences.mdx +61 -0
  69. package/docs/reference/dashboard/external-apis.md +182 -0
  70. package/docs/reference/dashboard/features.mdx +165 -0
  71. package/docs/reference/dashboard/fields.mdx +120 -0
  72. package/docs/reference/dashboard/flow-builder/canvas.mdx +58 -0
  73. package/docs/reference/dashboard/flow-builder/condition-builder.md +69 -0
  74. package/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +72 -0
  75. package/docs/reference/dashboard/flow-builder/nodes.md +74 -0
  76. package/docs/reference/dashboard/labels.md +321 -0
  77. package/docs/reference/dashboard/lead-search.md +235 -0
  78. package/docs/reference/dashboard/projects.mdx +53 -0
  79. package/docs/reference/dashboard/reports.mdx +53 -0
  80. package/docs/reference/dashboard/steps.mdx +47 -0
  81. package/docs/reference/dashboard/team-management.md +38 -0
  82. package/docs/reference/dashboard/workflow-runs.md +157 -0
  83. package/docs/reference/dashboard/workflow-templates.md +182 -0
  84. package/docs/reference/dashboard/workflow-test-runs.md +85 -0
  85. package/docs/reference/dashboard/workspace-versioning.mdx +42 -0
  86. package/docs/reference/dashboard/workspaces.mdx +91 -0
  87. package/docs/reference/delivery-api/experience-content.md +152 -0
  88. package/docs/reference/delivery-api/index.md +45 -0
  89. package/docs/reference/delivery-api/preview-caching-crawling.md +79 -0
  90. package/docs/reference/delivery-api/project-config.md +65 -0
  91. package/docs/reference/delivery-api/workspace-schema.md +107 -0
  92. package/docs/reference/glossary.md +201 -0
  93. package/docs/reference/management-api/authentication.md +87 -0
  94. package/docs/reference/management-api/authorization-and-scopes.md +291 -0
  95. package/docs/reference/management-api/error-handling.md +232 -0
  96. package/docs/reference/management-api/pagination.md +192 -0
  97. package/docs/reference/management-api/schema/action.md +261 -0
  98. package/docs/reference/management-api/schema/analytics-session.md +363 -0
  99. package/docs/reference/management-api/schema/analytics.md +73 -0
  100. package/docs/reference/management-api/schema/api-key.md +170 -0
  101. package/docs/reference/management-api/schema/auth.md +1177 -0
  102. package/docs/reference/management-api/schema/cms-fields.md +954 -0
  103. package/docs/reference/management-api/schema/cms-models.md +1155 -0
  104. package/docs/reference/management-api/schema/common.md +362 -0
  105. package/docs/reference/management-api/schema/condition.md +254 -0
  106. package/docs/reference/management-api/schema/design-system.md +199 -0
  107. package/docs/reference/management-api/schema/experience.md +1098 -0
  108. package/docs/reference/management-api/schema/external-api.md +637 -0
  109. package/docs/reference/management-api/schema/feature.md +350 -0
  110. package/docs/reference/management-api/schema/feedback.md +103 -0
  111. package/docs/reference/management-api/schema/field.md +400 -0
  112. package/docs/reference/management-api/schema/index.md +243 -0
  113. package/docs/reference/management-api/schema/integration.md +272 -0
  114. package/docs/reference/management-api/schema/label.md +349 -0
  115. package/docs/reference/management-api/schema/lead.md +340 -0
  116. package/docs/reference/management-api/schema/mcp-server.md +299 -0
  117. package/docs/reference/management-api/schema/metric.md +223 -0
  118. package/docs/reference/management-api/schema/operation.md +96 -0
  119. package/docs/reference/management-api/schema/organization.md +749 -0
  120. package/docs/reference/management-api/schema/project.md +607 -0
  121. package/docs/reference/management-api/schema/report.md +243 -0
  122. package/docs/reference/management-api/schema/saved-view.md +288 -0
  123. package/docs/reference/management-api/schema/shopify.md +795 -0
  124. package/docs/reference/management-api/schema/step.md +273 -0
  125. package/docs/reference/management-api/schema/tenant-branding.md +185 -0
  126. package/docs/reference/management-api/schema/workbench.md +246 -0
  127. package/docs/reference/management-api/schema/workflow-run.md +263 -0
  128. package/docs/reference/management-api/schema/workflow.md +1110 -0
  129. package/docs/reference/management-api/schema/workspace-version.md +823 -0
  130. package/docs/reference/management-api/schema/workspace.md +917 -0
  131. package/docs/reference/pickedql/data-sources.md +174 -0
  132. package/docs/reference/pickedql/dimensions.md +103 -0
  133. package/docs/reference/pickedql/filtering.md +64 -0
  134. package/docs/reference/pickedql/index.md +18 -0
  135. package/docs/reference/pickedql/schema.md +172 -0
  136. package/docs/reference/pickedql/virtual-functions.md +248 -0
  137. package/docs/reference/sdk/actions.md +154 -0
  138. package/docs/reference/sdk/analytics-events.md +453 -0
  139. package/docs/reference/sdk/conditions.md +147 -0
  140. package/docs/reference/sdk/content-security-policy.md +21 -0
  141. package/docs/reference/sdk/content.md +253 -0
  142. package/docs/reference/sdk/experiences.md +51 -0
  143. package/docs/reference/sdk/features.md +256 -0
  144. package/docs/reference/sdk/fields.md +255 -0
  145. package/docs/reference/sdk/index.md +68 -0
  146. package/docs/reference/sdk/plugins/create-experience.md +123 -0
  147. package/docs/reference/sdk/plugins/dynamic-experiences.md +74 -0
  148. package/docs/reference/sdk/plugins/fingerprintjs.md +39 -0
  149. package/docs/reference/sdk/plugins/hotjar.md +60 -0
  150. package/docs/reference/sdk/plugins/index.md +33 -0
  151. package/docs/reference/sdk/plugins/sentry.md +51 -0
  152. package/docs/reference/sdk/plugins/shopify.md +109 -0
  153. package/docs/reference/sdk/plugins/window-object.md +25 -0
  154. package/docs/reference/sdk/predicates.md +43 -0
  155. package/docs/reference/sdk/react.md +61 -0
  156. package/docs/reference/sdk/ssr/index.md +33 -0
  157. package/docs/reference/sdk/ssr/rendering-and-hydration.md +103 -0
  158. package/docs/reference/sdk/ssr/serialize.md +80 -0
  159. package/docs/reference/sdk/ssr/slots-and-placements.md +113 -0
  160. package/docs/reference/sdk/steps.md +86 -0
  161. package/docs/reference/sdk/svelte.md +74 -0
  162. package/docs/reference/sdk/type-generation.md +265 -0
  163. package/docs/reference/tools/admin-api-client.md +89 -0
  164. package/docs/reference/tools/chrome-extension.md +16 -0
  165. package/docs/reference/tools/cli.md +319 -0
  166. package/docs/reference/tools/delivery-api-client.md +60 -0
  167. package/docs/reference/tools/image-optimisation-service.md +104 -0
  168. package/docs/reference/tools/mcp-run.md +121 -0
  169. package/docs/reference/tools/mcp.md +391 -0
  170. package/docs/reference/tools/vite-plugin.md +163 -0
  171. package/docs/tutorials/first-api-call.md +253 -0
  172. package/docs/tutorials/first-experience-in-the-dashboard.mdx +160 -0
  173. package/docs/tutorials/first-experience.mdx +254 -0
  174. package/docs/tutorials/first-server-rendered-page.mdx +186 -0
  175. package/package.json +8 -7
@@ -0,0 +1,1098 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ generated: true
5
+ ---
6
+
7
+ # Experience schema
8
+
9
+ The operations and types that `experience.graphql` adds to the Management API. See [Management API schema](/reference/management-api/schema) for every domain, the endpoint and authentication.
10
+
11
+ ## Queries
12
+
13
+ ### `experience`
14
+
15
+ Get an experience by ID within a workspace.
16
+
17
+ ```graphql
18
+ experience(id: ID!, workspaceId: ID!): Experience @auth
19
+ ```
20
+
21
+ ### `experiences`
22
+
23
+ List experiences within a workspace. Filter by name with `search` (case-insensitive
24
+ substring) and order with `sortKey` (default `NAME`) plus `reverse`.
25
+
26
+ ```graphql
27
+ experiences(workspaceId: ID!, type: ExperienceType, first: Int, after: String, last: Int, before: String, search: String, sortKey: ExperienceSortKeys = NAME, reverse: Boolean = false): ExperienceConnection! @auth
28
+ ```
29
+
30
+ ## Mutations
31
+
32
+ ### `experienceCreate`
33
+
34
+ Create a new experience. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
35
+
36
+ ```graphql
37
+ experienceCreate(input: ExperienceCreateInput!): ExperienceCreatePayload! @auth
38
+ ```
39
+
40
+ ### `experienceUpdate`
41
+
42
+ Update an experience. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
43
+
44
+ ```graphql
45
+ experienceUpdate(input: ExperienceUpdateInput!): ExperienceUpdatePayload! @auth
46
+ ```
47
+
48
+ ### `experienceDelete`
49
+
50
+ Delete an experience. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
51
+
52
+ ```graphql
53
+ experienceDelete(input: ExperienceDeleteInput!): ExperienceDeletePayload! @auth
54
+ ```
55
+
56
+ ### `experienceFlowUpdate`
57
+
58
+ Atomically save all changes to an experience flow. Requires scope: `ORGANIZATION_PROJECTS_UPDATE`.
59
+
60
+ ```graphql
61
+ experienceFlowUpdate(input: ExperienceFlowUpdateInput!): ExperienceFlowUpdatePayload! @auth
62
+ ```
63
+
64
+ ## Types
65
+
66
+ ### `ExperienceNodeType`
67
+
68
+ ```graphql
69
+ """Discriminator for `ExperienceNode` implementations."""
70
+ enum ExperienceNodeType {
71
+ """The starting point of every flow graph. Exactly one per experience."""
72
+ ORIGIN
73
+ """A node that renders a step (UI)."""
74
+ STEP
75
+ """A node that evaluates a condition for branching."""
76
+ CONDITION
77
+ """A node that triggers an action (side effect)."""
78
+ ACTION
79
+ """A node that launches another experience."""
80
+ EXPERIENCE
81
+ }
82
+ ```
83
+
84
+ ### `ExperienceEdgeHandle`
85
+
86
+ ```graphql
87
+ """
88
+ Edge handle for `ConditionNode` outgoing edges. Picks which branch of a
89
+ condition the flow follows when the condition resolves true / false.
90
+ """
91
+ enum ExperienceEdgeHandle {
92
+ """The TRUE branch of a `ConditionNode`."""
93
+ TRUE
94
+ """The FALSE branch of a `ConditionNode`."""
95
+ FALSE
96
+ }
97
+ ```
98
+
99
+ ### `Position`
100
+
101
+ ```graphql
102
+ """
103
+ Position of a node on the flow graph canvas. Used purely for layout in the dashboard editor.
104
+ """
105
+ type Position {
106
+ """X coordinate (canvas units, can be negative)."""
107
+ x: Float!
108
+ """Y coordinate (canvas units, can be negative)."""
109
+ y: Float!
110
+ }
111
+ ```
112
+
113
+ ### `PositionInput`
114
+
115
+ ```graphql
116
+ """Input form of `Position`."""
117
+ input PositionInput {
118
+ """X coordinate."""
119
+ x: Float!
120
+ """Y coordinate."""
121
+ y: Float!
122
+ }
123
+ ```
124
+
125
+ ### `ExperienceTargetPlacement`
126
+
127
+ ```graphql
128
+ """
129
+ Where the experience content is placed relative to the target DOM element.
130
+
131
+ `REPLACE` swaps the target node out. `APPEND` / `PREPEND` add children
132
+ inside the target. `BEFORE` / `AFTER` insert siblings around the target.
133
+ """
134
+ enum ExperienceTargetPlacement {
135
+ REPLACE
136
+ APPEND
137
+ PREPEND
138
+ BEFORE
139
+ AFTER
140
+ }
141
+ ```
142
+
143
+ ### `ExperienceTarget`
144
+
145
+ ```graphql
146
+ """
147
+ A DOM target element and how the experience content is placed relative to it.
148
+ """
149
+ type ExperienceTarget {
150
+ """CSS selector identifying the target DOM element."""
151
+ selector: String!
152
+ """How the experience content is placed relative to the target element."""
153
+ placement: ExperienceTargetPlacement!
154
+ }
155
+ ```
156
+
157
+ ### `ExperienceTargetInput`
158
+
159
+ ```graphql
160
+ """Input form of `ExperienceTarget`."""
161
+ input ExperienceTargetInput {
162
+ """CSS selector for the target DOM element."""
163
+ selector: String!
164
+ """How the experience content is placed relative to the target element."""
165
+ placement: ExperienceTargetPlacement!
166
+ }
167
+ ```
168
+
169
+ ### `ExperienceType`
170
+
171
+ ```graphql
172
+ """
173
+ Experience kind discriminator.
174
+
175
+ `FLOW` is a multi-step user journey driven by a flow graph. `PAGE` is a
176
+ CMS-backed dynamic landing page with a single auto-created step.
177
+ Mutations branch on this discriminator at create time.
178
+ """
179
+ enum ExperienceType {
180
+ """Multi-step user journey driven by a flow graph."""
181
+ FLOW
182
+ """CMS-backed dynamic landing page with a single auto-created step."""
183
+ PAGE
184
+ }
185
+ ```
186
+
187
+ ### `ExperienceStatus`
188
+
189
+ ```graphql
190
+ """
191
+ Delivery status for an experience.
192
+
193
+ `ACTIVE` is delivered to every request. `DRAFT` is omitted from the published
194
+ payload, along with the steps, fields and actions only it references, and
195
+ delivered only to a request carrying a valid preview token for the owning
196
+ workspace.
197
+
198
+ Status is captured in the published snapshot, so a change takes effect once the
199
+ workspace is published again.
200
+ """
201
+ enum ExperienceStatus {
202
+ """Delivered to every request."""
203
+ ACTIVE
204
+ """Delivered only behind a valid preview token."""
205
+ DRAFT
206
+ }
207
+ ```
208
+
209
+ ### `Experience`
210
+
211
+ ```graphql
212
+ """
213
+ An experience defines a user journey within a workspace. The flow graph
214
+ is stored opaquely in `flowJson` and exposed structurally via `nodes` and
215
+ `edges`.
216
+
217
+ `targets` selects which DOM elements the experience attaches to. `key`
218
+ is a stable identifier SDK consumers use to opt in to specific
219
+ experiences. `condition` is a JSON Logic expression gating whether the
220
+ experience renders at all.
221
+ """
222
+ type Experience {
223
+ """Unique experience identifier."""
224
+ id: ID!
225
+ """Display name of the experience."""
226
+ name: String!
227
+ """DOM elements this experience attaches to, with placement strategy."""
228
+ targets: [ExperienceTarget!]!
229
+ """Stable, human-readable key for SDK consumers."""
230
+ key: String!
231
+ """
232
+ Discriminator: `FLOW` (multi-step journey) or `PAGE` (CMS-backed landing).
233
+ """
234
+ type: ExperienceType!
235
+ """
236
+ Delivery status: `ACTIVE` to everyone, `DRAFT` only behind a valid preview token.
237
+ """
238
+ status: ExperienceStatus!
239
+ """Opaque flow graph blob. Use `nodes` + `edges` for structured access."""
240
+ flowJson: JSON
241
+ """Optional JSON Logic condition gating whether the experience renders."""
242
+ condition: JSON
243
+ """
244
+ JSON value controlling whether the experience initialises in an open state.
245
+ """
246
+ initializeOpen: JSON
247
+ """
248
+ Name of the React/Svelte component the SDK should render for this experience.
249
+ """
250
+ componentName: String!
251
+ """The workspace this experience belongs to."""
252
+ workspace: Workspace!
253
+ """Nodes in the flow graph, typed by their `__typename`."""
254
+ nodes: [ExperienceNode!]!
255
+ """Edges in the flow graph connecting nodes."""
256
+ edges: [ExperienceEdge!]!
257
+ """All steps referenced by `STEP` nodes in this experience's flow."""
258
+ steps: [Step!]!
259
+ """
260
+ All conditions referenced by `CONDITION` nodes in this experience's flow.
261
+ """
262
+ conditions: [Condition!]!
263
+ """All actions referenced by `ACTION` nodes in this experience's flow."""
264
+ actions: [Action!]!
265
+ """When this experience was created."""
266
+ createdAt: DateTime!
267
+ """When this experience was last updated."""
268
+ updatedAt: DateTime!
269
+ }
270
+ ```
271
+
272
+ ### `ExperienceConnection`
273
+
274
+ ```graphql
275
+ """
276
+ Relay-style connection of experiences, with both an `edges` list and a flat `nodes` accessor.
277
+ """
278
+ type ExperienceConnection {
279
+ """List of experience edges."""
280
+ edges: [ExperienceConnectionEdge!]!
281
+ """
282
+ Flat list of experiences, equivalent to `edges[].node`. Convenience accessor.
283
+ """
284
+ nodes: [Experience!]!
285
+ """Pagination metadata."""
286
+ pageInfo: PageInfo!
287
+ """Total number of experiences."""
288
+ totalCount: Int!
289
+ }
290
+ ```
291
+
292
+ ### `ExperienceConnectionEdge`
293
+
294
+ ```graphql
295
+ """Edge type for `ExperienceConnection`."""
296
+ type ExperienceConnectionEdge {
297
+ """Pagination cursor for this edge."""
298
+ cursor: String!
299
+ """The experience."""
300
+ node: Experience!
301
+ }
302
+ ```
303
+
304
+ ### `ExperienceNode`
305
+
306
+ ```graphql
307
+ """
308
+ A node in the experience flow graph. Use `__typename` to discriminate the implementation.
309
+ """
310
+ interface ExperienceNode {
311
+ """Stable node identifier within the graph."""
312
+ id: ID!
313
+ """Node kind discriminator (also encoded in `__typename`)."""
314
+ type: ExperienceNodeType!
315
+ """Canvas position for the dashboard editor."""
316
+ position: Position!
317
+ }
318
+ ```
319
+
320
+ ### `OriginNode`
321
+
322
+ ```graphql
323
+ """Starting point of an experience flow. Exactly one per experience."""
324
+ type OriginNode implements ExperienceNode {
325
+ id: ID!
326
+ type: ExperienceNodeType!
327
+ position: Position!
328
+ }
329
+ ```
330
+
331
+ ### `StepNode`
332
+
333
+ ```graphql
334
+ """A node that renders a step's UI."""
335
+ type StepNode implements ExperienceNode {
336
+ id: ID!
337
+ type: ExperienceNodeType!
338
+ position: Position!
339
+ """The step rendered when the flow reaches this node."""
340
+ step: Step!
341
+ }
342
+ ```
343
+
344
+ ### `ConditionNode`
345
+
346
+ ```graphql
347
+ """
348
+ A node that evaluates a condition for branching. Outgoing edges carry `sourceHandle: TRUE | FALSE`.
349
+ """
350
+ type ConditionNode implements ExperienceNode {
351
+ id: ID!
352
+ type: ExperienceNodeType!
353
+ position: Position!
354
+ """The condition evaluated when the flow reaches this node."""
355
+ condition: Condition!
356
+ }
357
+ ```
358
+
359
+ ### `ActionNode`
360
+
361
+ ```graphql
362
+ """A node that triggers an action (side effect)."""
363
+ type ActionNode implements ExperienceNode {
364
+ id: ID!
365
+ type: ExperienceNodeType!
366
+ position: Position!
367
+ """The action triggered when the flow reaches this node."""
368
+ action: Action!
369
+ }
370
+ ```
371
+
372
+ ### `LaunchExperienceNode`
373
+
374
+ ```graphql
375
+ """A node that launches another experience. Used to compose experiences."""
376
+ type LaunchExperienceNode implements ExperienceNode {
377
+ id: ID!
378
+ type: ExperienceNodeType!
379
+ position: Position!
380
+ """The experience launched when the flow reaches this node."""
381
+ targetExperience: Experience!
382
+ }
383
+ ```
384
+
385
+ ### `ExperienceEdge`
386
+
387
+ ```graphql
388
+ """An edge connecting two nodes in the experience flow graph."""
389
+ type ExperienceEdge {
390
+ """Stable edge identifier within the graph."""
391
+ id: ID!
392
+ """Source node (resolved)."""
393
+ sourceNode: ExperienceNode!
394
+ """Destination node (resolved)."""
395
+ destinationNode: ExperienceNode!
396
+ """Source node id (denormalised)."""
397
+ sourceNodeId: ID!
398
+ """Destination node id (denormalised)."""
399
+ destinationNodeId: ID!
400
+ """
401
+ Only meaningful when the source is a `ConditionNode` — picks the TRUE / FALSE branch.
402
+ """
403
+ sourceHandle: ExperienceEdgeHandle
404
+ }
405
+ ```
406
+
407
+ ### `ExperienceNodeInput`
408
+
409
+ ```graphql
410
+ """
411
+ Input form of a node in the flow graph. Only the field matching the node's `type` should be populated.
412
+ """
413
+ input ExperienceNodeInput {
414
+ """Stable node identifier."""
415
+ id: ID!
416
+ """Node kind discriminator."""
417
+ type: ExperienceNodeType!
418
+ """Canvas position."""
419
+ position: PositionInput!
420
+ """For STEP nodes: referenced step id."""
421
+ stepId: ID
422
+ """For CONDITION nodes: referenced condition id."""
423
+ conditionId: ID
424
+ """For ACTION nodes: referenced action id."""
425
+ actionId: ID
426
+ """For EXPERIENCE nodes: referenced experience id to launch."""
427
+ targetExperienceId: ID
428
+ }
429
+ ```
430
+
431
+ ### `ExperienceEdgeInput`
432
+
433
+ ```graphql
434
+ """Input form of an edge in the flow graph."""
435
+ input ExperienceEdgeInput {
436
+ """Stable edge identifier."""
437
+ id: ID!
438
+ """Source node id."""
439
+ sourceNodeId: ID!
440
+ """Destination node id."""
441
+ destinationNodeId: ID!
442
+ """For edges from a `ConditionNode`: which branch (TRUE / FALSE)."""
443
+ sourceHandle: ExperienceEdgeHandle
444
+ }
445
+ ```
446
+
447
+ ### `ExperienceCreateInput`
448
+
449
+ ```graphql
450
+ """Input for `experienceCreate`."""
451
+ input ExperienceCreateInput {
452
+ """Workspace ID to create the experience in."""
453
+ workspaceId: ID!
454
+ """Display name for the experience."""
455
+ name: String!
456
+ """Stable, human-readable key for SDK consumers."""
457
+ key: String!
458
+ """
459
+ Discriminator. `PAGE` auto-creates the singleton Step; `FLOW` uses the caller-supplied nodes / edges.
460
+ """
461
+ type: ExperienceType
462
+ """Delivery status. Defaults to `ACTIVE`."""
463
+ status: ExperienceStatus
464
+ """Optional JSON Logic condition gating whether the experience renders."""
465
+ condition: JSON
466
+ """Whether the experience should initialise in an open state."""
467
+ initializeOpen: JSON
468
+ """Name of the React/Svelte component the SDK should render."""
469
+ componentName: String
470
+ """
471
+ Targeting configuration — which DOM elements the experience attaches to.
472
+ """
473
+ targets: [ExperienceTargetInput!]
474
+ """Initial flow graph nodes."""
475
+ nodes: [ExperienceNodeInput!]
476
+ """Initial flow graph edges."""
477
+ edges: [ExperienceEdgeInput!]
478
+ }
479
+ ```
480
+
481
+ ### `ExperienceCreatePayload`
482
+
483
+ ```graphql
484
+ """Payload returned by `experienceCreate`."""
485
+ type ExperienceCreatePayload {
486
+ """The created experience."""
487
+ experience: Experience
488
+ }
489
+ ```
490
+
491
+ ### `ExperienceUpdateInput`
492
+
493
+ ```graphql
494
+ """Input for `experienceUpdate`. Omit a field to leave it unchanged."""
495
+ input ExperienceUpdateInput {
496
+ """Experience ID."""
497
+ id: ID!
498
+ """New display name."""
499
+ name: String
500
+ """New delivery status."""
501
+ status: ExperienceStatus
502
+ """New JSON Logic condition gating whether the experience renders."""
503
+ condition: JSON
504
+ """Whether the experience should initialise in an open state."""
505
+ initializeOpen: JSON
506
+ """New component name."""
507
+ componentName: String
508
+ """New targeting configuration."""
509
+ targets: [ExperienceTargetInput!]
510
+ }
511
+ ```
512
+
513
+ ### `ExperienceUpdatePayload`
514
+
515
+ ```graphql
516
+ """Payload returned by `experienceUpdate`."""
517
+ type ExperienceUpdatePayload {
518
+ """The updated experience."""
519
+ experience: Experience
520
+ }
521
+ ```
522
+
523
+ ### `ExperienceDeleteInput`
524
+
525
+ ```graphql
526
+ """Input for `experienceDelete`."""
527
+ input ExperienceDeleteInput {
528
+ """Experience ID."""
529
+ id: ID!
530
+ }
531
+ ```
532
+
533
+ ### `ExperienceDeletePayload`
534
+
535
+ ```graphql
536
+ """Payload returned by `experienceDelete`."""
537
+ type ExperienceDeletePayload {
538
+ """ID of the deleted experience."""
539
+ deletedExperienceId: ID
540
+ }
541
+ ```
542
+
543
+ ### `ExperienceFlowUpdateInput`
544
+
545
+ ```graphql
546
+ """
547
+ Atomically save all changes to an experience flow in a single
548
+ operation. Handles creation, updates, and deletion of nodes, edges,
549
+ steps, conditions, actions, and fields.
550
+
551
+ Set `allowPartialSuccess: true` to persist valid changes even when some
552
+ fail validation; the failures appear in `errors` while successful
553
+ changes are committed. Default (`false`) treats the operation as
554
+ all-or-nothing.
555
+ """
556
+ input ExperienceFlowUpdateInput {
557
+ """New display name."""
558
+ name: String
559
+ """New delivery status."""
560
+ status: ExperienceStatus
561
+ """New JSON Logic condition gating whether the experience renders."""
562
+ condition: JSON
563
+ """Whether the experience should initialise in an open state."""
564
+ initializeOpen: JSON
565
+ """New component name."""
566
+ componentName: String
567
+ """New targeting configuration."""
568
+ targets: [ExperienceTargetInput!]
569
+ """The experience to update."""
570
+ experienceId: ID!
571
+ """All changes to apply to the experience flow."""
572
+ changes: ExperienceFlowChangesInput!
573
+ """
574
+ When true, valid changes are persisted even if some fail validation. When false (default), the entire operation fails if any change fails.
575
+ """
576
+ allowPartialSuccess: Boolean = false
577
+ }
578
+ ```
579
+
580
+ ### `ExperienceFlowChangesInput`
581
+
582
+ ```graphql
583
+ """Container for all change operations grouped by entity type."""
584
+ input ExperienceFlowChangesInput {
585
+ """Step changes (workspace-level resources)."""
586
+ steps: StepChangesInput
587
+ """Condition changes (workspace-level resources)."""
588
+ conditions: ConditionChangesInput
589
+ """Action changes (workspace-level resources)."""
590
+ actions: ActionChangesInput
591
+ """Field changes (workspace-level resources)."""
592
+ fields: FieldChangesInput
593
+ """Node changes in the flow graph."""
594
+ nodes: ExperienceNodeChangesInput
595
+ """Edge changes connecting nodes."""
596
+ edges: ExperienceEdgeChangesInput
597
+ }
598
+ ```
599
+
600
+ ### `StepChangesInput`
601
+
602
+ ```graphql
603
+ """Step-level changes within an `experienceFlowUpdate` batch."""
604
+ input StepChangesInput {
605
+ """
606
+ Steps to create. Each entry carries a `clientId` for cross-referencing from `nodes`.
607
+ """
608
+ create: [StepCreateData!]
609
+ """Steps to update."""
610
+ update: [StepUpdateData!]
611
+ """Step ids to delete."""
612
+ delete: [ID!]
613
+ }
614
+ ```
615
+
616
+ ### `StepCreateData`
617
+
618
+ ```graphql
619
+ """Data for creating a new step in the parent workspace."""
620
+ input StepCreateData {
621
+ """Client-generated ID for mapping and cross-referencing."""
622
+ clientId: ID!
623
+ """Display name for the step."""
624
+ name: String!
625
+ """Unique key identifier for the step."""
626
+ key: String!
627
+ """Optional description."""
628
+ description: String
629
+ """Layout name."""
630
+ layoutName: String
631
+ """IDs of existing workspace-level fields to reference."""
632
+ fieldIds: [ID!]
633
+ """Step content configuration (free-form JSON)."""
634
+ content: JSON
635
+ """
636
+ ID of an existing step. When set, the create acts as an idempotent upsert against the existing step.
637
+ """
638
+ stepId: ID
639
+ }
640
+ ```
641
+
642
+ ### `StepUpdateData`
643
+
644
+ ```graphql
645
+ """Data for updating an existing step."""
646
+ input StepUpdateData {
647
+ """Step ID."""
648
+ id: ID!
649
+ """New display name."""
650
+ name: String
651
+ """New description."""
652
+ description: String
653
+ """New layout name."""
654
+ layoutName: String
655
+ """New field-id list (replaces the existing list when set)."""
656
+ fieldIds: [ID!]
657
+ """New step content configuration."""
658
+ content: JSON
659
+ }
660
+ ```
661
+
662
+ ### `ConditionChangesInput`
663
+
664
+ ```graphql
665
+ """Condition-level changes within an `experienceFlowUpdate` batch."""
666
+ input ConditionChangesInput {
667
+ """
668
+ Conditions to create. Each entry carries a `clientId` for cross-referencing from `nodes`.
669
+ """
670
+ create: [ConditionCreateData!]
671
+ """Conditions to update."""
672
+ update: [ConditionUpdateData!]
673
+ """Condition ids to delete."""
674
+ delete: [ID!]
675
+ }
676
+ ```
677
+
678
+ ### `ConditionCreateData`
679
+
680
+ ```graphql
681
+ """Data for creating a new condition."""
682
+ input ConditionCreateData {
683
+ """Client-generated ID for mapping and cross-referencing."""
684
+ clientId: ID!
685
+ """Display name for the condition."""
686
+ name: String!
687
+ """Unique key identifier for the condition."""
688
+ key: String!
689
+ """JSON Logic expression for condition evaluation."""
690
+ logic: JSON!
691
+ """
692
+ ID of an existing condition. When set, the create acts as an idempotent upsert against the existing condition.
693
+ """
694
+ conditionId: ID
695
+ }
696
+ ```
697
+
698
+ ### `ConditionUpdateData`
699
+
700
+ ```graphql
701
+ """Data for updating an existing condition."""
702
+ input ConditionUpdateData {
703
+ """Condition ID."""
704
+ id: ID!
705
+ """New display name."""
706
+ name: String
707
+ """New JSON Logic expression."""
708
+ logic: JSON
709
+ }
710
+ ```
711
+
712
+ ### `ActionChangesInput`
713
+
714
+ ```graphql
715
+ """Action-level changes within an `experienceFlowUpdate` batch."""
716
+ input ActionChangesInput {
717
+ """
718
+ Actions to create. Each entry carries a `clientId` for cross-referencing from `nodes`.
719
+ """
720
+ create: [ActionCreateData!]
721
+ """Actions to update."""
722
+ update: [ActionUpdateData!]
723
+ """Action ids to delete."""
724
+ delete: [ID!]
725
+ }
726
+ ```
727
+
728
+ ### `ActionCreateData`
729
+
730
+ ```graphql
731
+ """Data for creating a new action in the parent workspace."""
732
+ input ActionCreateData {
733
+ """Client-generated ID for mapping and cross-referencing."""
734
+ clientId: ID!
735
+ """Display name for the action."""
736
+ name: String!
737
+ """Unique key identifier for the action."""
738
+ key: String!
739
+ """Description of what this action does."""
740
+ description: String
741
+ """
742
+ ID of an existing action. When set, the create acts as an idempotent upsert against the existing action.
743
+ """
744
+ actionId: ID
745
+ }
746
+ ```
747
+
748
+ ### `ActionUpdateData`
749
+
750
+ ```graphql
751
+ """Data for updating an existing action."""
752
+ input ActionUpdateData {
753
+ """Action ID."""
754
+ id: ID!
755
+ """New display name."""
756
+ name: String
757
+ """New description."""
758
+ description: String
759
+ """
760
+ Replacement set of ids for the fields whose responses this action receives.
761
+ Omit to leave the set unchanged; pass an empty list to request nothing.
762
+ """
763
+ fieldIds: [ID!]
764
+ }
765
+ ```
766
+
767
+ ### `FieldChangesInput`
768
+
769
+ ```graphql
770
+ """Field-level changes within an `experienceFlowUpdate` batch."""
771
+ input FieldChangesInput {
772
+ """
773
+ Fields to create. Each entry carries a `clientId` and a step reference.
774
+ """
775
+ create: [FieldCreateData!]
776
+ """Fields to update."""
777
+ update: [FieldUpdateData!]
778
+ """Field ids to delete."""
779
+ delete: [ID!]
780
+ }
781
+ ```
782
+
783
+ ### `FieldCreateData`
784
+
785
+ ```graphql
786
+ """Data for creating a new field in the parent workspace."""
787
+ input FieldCreateData {
788
+ """Client-generated ID for mapping and cross-referencing."""
789
+ clientId: ID!
790
+ """
791
+ Reference an existing step by server ID. Mutually exclusive with `stepClientId`.
792
+ """
793
+ stepId: ID
794
+ """
795
+ Reference a step being created in this same mutation. Mutually exclusive with `stepId`.
796
+ """
797
+ stepClientId: ID
798
+ """Stable machine-readable name."""
799
+ name: String!
800
+ """Unique key identifier for the field."""
801
+ key: String!
802
+ """Human-readable label."""
803
+ label: String!
804
+ """The field type."""
805
+ type: FieldType!
806
+ """Whether multiple values are allowed."""
807
+ multiple: Boolean
808
+ """Whether the field is required."""
809
+ required: Boolean
810
+ """Validation rules as a JSON-encoded string. Parsed server-side."""
811
+ validationString: String
812
+ """JSON default value."""
813
+ defaultValue: JSON
814
+ """JSON Logic condition controlling whether the field is rendered."""
815
+ condition: JSON
816
+ """Placeholder text."""
817
+ placeholder: String
818
+ """Description."""
819
+ description: String
820
+ """Help text."""
821
+ helpText: String
822
+ """
823
+ When true, the captured value is excluded from analytics tracking. Omitted defaults to `true`: tracking is opt-in.
824
+ """
825
+ doNotTrack: Boolean
826
+ """
827
+ When true, the captured value is excluded from persistence. Omitted defaults to `true`: persistence is opt-in.
828
+ """
829
+ doNotStore: Boolean
830
+ """
831
+ ID of an existing field. When set, the create acts as an idempotent upsert against the existing field.
832
+ """
833
+ fieldId: ID
834
+ }
835
+ ```
836
+
837
+ ### `FieldUpdateData`
838
+
839
+ ```graphql
840
+ """Data for updating an existing field."""
841
+ input FieldUpdateData {
842
+ """Field ID."""
843
+ id: ID!
844
+ """New machine-readable name."""
845
+ name: String
846
+ """New label."""
847
+ label: String
848
+ """
849
+ Field type. Required even when unchanged — used to coerce other fields server-side.
850
+ """
851
+ type: FieldType!
852
+ """Whether multiple values are allowed."""
853
+ multiple: Boolean
854
+ """Whether the field is required."""
855
+ required: Boolean
856
+ """Validation rules as a JSON-encoded string."""
857
+ validationString: String
858
+ """JSON default value."""
859
+ defaultValue: JSON
860
+ """JSON Logic condition controlling whether the field is rendered."""
861
+ condition: JSON
862
+ """Placeholder text."""
863
+ placeholder: String
864
+ """Description."""
865
+ description: String
866
+ """Help text."""
867
+ helpText: String
868
+ """When true, the captured value is excluded from analytics tracking."""
869
+ doNotTrack: Boolean
870
+ """When true, the captured value is excluded from persistence."""
871
+ doNotStore: Boolean
872
+ """Field options as a JSON array."""
873
+ options: JSON
874
+ }
875
+ ```
876
+
877
+ ### `ExperienceNodeChangesInput`
878
+
879
+ ```graphql
880
+ """Node-level changes within an `experienceFlowUpdate` batch."""
881
+ input ExperienceNodeChangesInput {
882
+ """Nodes to create."""
883
+ create: [ExperienceNodeCreateData!]
884
+ """Nodes to update."""
885
+ update: [ExperienceNodeUpdateData!]
886
+ """Node ids to delete."""
887
+ delete: [ID!]
888
+ }
889
+ ```
890
+
891
+ ### `ExperienceNodeCreateData`
892
+
893
+ ```graphql
894
+ """
895
+ Data for creating a new node in the flow graph. The fields populated
896
+ depend on `type`:
897
+
898
+ - `STEP`: `stepId` or `stepClientId` (mutually exclusive).
899
+ - `CONDITION`: `conditionId` or `conditionClientId`.
900
+ - `ACTION`: `actionId` or `actionClientId`.
901
+ - `EXPERIENCE`: `targetExperienceId`.
902
+ - `ORIGIN`: no extras.
903
+ """
904
+ input ExperienceNodeCreateData {
905
+ """Client-generated ID for mapping and cross-referencing from edges."""
906
+ clientId: ID!
907
+ """Node kind discriminator."""
908
+ type: ExperienceNodeType!
909
+ """Canvas position."""
910
+ position: PositionInput!
911
+ """
912
+ For STEP nodes: reference an existing step by server ID. Mutually exclusive with `stepClientId`.
913
+ """
914
+ stepId: ID
915
+ """
916
+ For STEP nodes: reference a step being created in this same mutation. Mutually exclusive with `stepId`.
917
+ """
918
+ stepClientId: ID
919
+ """
920
+ For CONDITION nodes: reference an existing condition by server ID. Mutually exclusive with `conditionClientId`.
921
+ """
922
+ conditionId: ID
923
+ """
924
+ For CONDITION nodes: reference a condition being created in this same mutation. Mutually exclusive with `conditionId`.
925
+ """
926
+ conditionClientId: ID
927
+ """
928
+ For ACTION nodes: reference an existing workspace-level action. Mutually exclusive with `actionClientId`.
929
+ """
930
+ actionId: ID
931
+ """
932
+ For ACTION nodes: reference an action being created in this same mutation. Mutually exclusive with `actionId`.
933
+ """
934
+ actionClientId: ID
935
+ """For EXPERIENCE nodes: reference target experience to launch."""
936
+ targetExperienceId: ID
937
+ }
938
+ ```
939
+
940
+ ### `ExperienceNodeUpdateData`
941
+
942
+ ```graphql
943
+ """Data for updating an existing node."""
944
+ input ExperienceNodeUpdateData {
945
+ """Node ID."""
946
+ id: ID!
947
+ """New canvas position."""
948
+ position: PositionInput!
949
+ """For STEP nodes: new step reference."""
950
+ stepId: ID
951
+ """For CONDITION nodes: new condition reference."""
952
+ conditionId: ID
953
+ """For ACTION nodes: new action reference."""
954
+ actionId: ID
955
+ """For EXPERIENCE nodes: new target experience."""
956
+ targetExperienceId: ID
957
+ }
958
+ ```
959
+
960
+ ### `ExperienceEdgeChangesInput`
961
+
962
+ ```graphql
963
+ """Edge-level changes within an `experienceFlowUpdate` batch."""
964
+ input ExperienceEdgeChangesInput {
965
+ """Edges to create."""
966
+ create: [ExperienceEdgeCreateInput!]
967
+ """Edges to update."""
968
+ update: [ExperienceEdgeUpdateInput!]
969
+ """Edge ids to delete."""
970
+ delete: [ID!]
971
+ }
972
+ ```
973
+
974
+ ### `ExperienceEdgeCreateInput`
975
+
976
+ ```graphql
977
+ """Data for creating a new edge."""
978
+ input ExperienceEdgeCreateInput {
979
+ """Client-generated ID for this edge."""
980
+ clientId: ID!
981
+ """
982
+ Source node by server ID. Mutually exclusive with `sourceNodeClientId`.
983
+ """
984
+ sourceNodeId: ID
985
+ """
986
+ Source node being created in this same mutation. Mutually exclusive with `sourceNodeId`.
987
+ """
988
+ sourceNodeClientId: ID
989
+ """
990
+ Destination node by server ID. Mutually exclusive with `destinationNodeClientId`.
991
+ """
992
+ destinationNodeId: ID
993
+ """
994
+ Destination node being created in this same mutation. Mutually exclusive with `destinationNodeId`.
995
+ """
996
+ destinationNodeClientId: ID
997
+ """For edges from conditional nodes: which branch (TRUE / FALSE)."""
998
+ sourceHandle: ExperienceEdgeHandle
999
+ }
1000
+ ```
1001
+
1002
+ ### `ExperienceEdgeUpdateInput`
1003
+
1004
+ ```graphql
1005
+ """Data for updating an existing edge."""
1006
+ input ExperienceEdgeUpdateInput {
1007
+ """Edge ID."""
1008
+ id: ID!
1009
+ """New source node id."""
1010
+ sourceNodeId: ID
1011
+ """New destination node id."""
1012
+ destinationNodeId: ID
1013
+ """New conditional branch handle."""
1014
+ sourceHandle: ExperienceEdgeHandle
1015
+ }
1016
+ ```
1017
+
1018
+ ### `ExperienceFlowUpdatePayload`
1019
+
1020
+ ```graphql
1021
+ """Payload returned by `experienceFlowUpdate`."""
1022
+ type ExperienceFlowUpdatePayload {
1023
+ """The updated experience with all changes applied."""
1024
+ experience: Experience
1025
+ """
1026
+ Mappings from client-generated IDs to server-generated IDs, grouped by entity kind.
1027
+ """
1028
+ idMappings: ExperienceFlowIdMappings!
1029
+ """Validation errors. Empty array indicates success."""
1030
+ errors: [UserError!]!
1031
+ }
1032
+ ```
1033
+
1034
+ ### `ExperienceFlowIdMappings`
1035
+
1036
+ ```graphql
1037
+ """
1038
+ Categorised client-to-server ID mappings emitted by `experienceFlowUpdate`.
1039
+ """
1040
+ type ExperienceFlowIdMappings {
1041
+ """Step id mappings."""
1042
+ steps: [IdMapping!]!
1043
+ """Condition id mappings."""
1044
+ conditions: [IdMapping!]!
1045
+ """Action id mappings."""
1046
+ actions: [IdMapping!]!
1047
+ """Field id mappings."""
1048
+ fields: [IdMapping!]!
1049
+ """Node id mappings."""
1050
+ nodes: [IdMapping!]!
1051
+ """Edge id mappings."""
1052
+ edges: [IdMapping!]!
1053
+ }
1054
+ ```
1055
+
1056
+ ### `IdMapping`
1057
+
1058
+ ```graphql
1059
+ """Maps a client-generated ID to a server-generated ID."""
1060
+ type IdMapping {
1061
+ """The ID provided by the client in the create operation."""
1062
+ clientId: ID!
1063
+ """The ID generated by the server for the created entity."""
1064
+ id: ID!
1065
+ }
1066
+ ```
1067
+
1068
+ ### `ReferencingExperience`
1069
+
1070
+ ```graphql
1071
+ """
1072
+ An experience that references a workspace resource, preventing its
1073
+ deletion. Returned in `ActionDeleteUserError`, `ConditionDeleteUserError`,
1074
+ and `StepDeleteUserError` when the delete is blocked by usage.
1075
+ """
1076
+ type ReferencingExperience {
1077
+ """The experience id."""
1078
+ id: ID!
1079
+ """The experience name."""
1080
+ name: String!
1081
+ }
1082
+ ```
1083
+
1084
+ ### `ExperienceSortKeys`
1085
+
1086
+ ```graphql
1087
+ """
1088
+ Sort keys for `experiences(...)`. Pair with `reverse: true` to flip the order (`NAME` + `reverse: false` sorts A→Z; `CREATED_AT` + `reverse: true` is newest-first).
1089
+ """
1090
+ enum ExperienceSortKeys {
1091
+ """Sort by `name` (alphabetical)."""
1092
+ NAME
1093
+ """Sort by `createdAt`."""
1094
+ CREATED_AT
1095
+ """Sort by `updatedAt`."""
1096
+ UPDATED_AT
1097
+ }
1098
+ ```