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.
- package/README.md +27 -12
- package/docs/explanation/conditions-and-the-logic-engine.md +94 -0
- package/docs/explanation/content-references.md +99 -0
- package/docs/explanation/feature-flag-allocation.md +218 -0
- package/docs/explanation/how-picked-works.md +124 -0
- package/docs/explanation/how-pickedql-works.md +76 -0
- package/docs/explanation/pages-and-flows.md +64 -0
- package/docs/explanation/the-content-model.md +87 -0
- package/docs/explanation/the-two-apis.md +68 -0
- package/docs/explanation/why-server-side-rendering.md +76 -0
- package/docs/explanation/workspaces-and-versions.md +71 -0
- package/docs/how-to/add-a-step-field-or-action.md +56 -0
- package/docs/how-to/analytics/index.md +324 -0
- package/docs/how-to/archive-or-delete-a-workspace.md +59 -0
- package/docs/how-to/authenticate-the-cli.md +101 -0
- package/docs/how-to/authenticate-with-a-magic-link.md +56 -0
- package/docs/how-to/authenticate-with-a-password.md +68 -0
- package/docs/how-to/authenticate-with-an-api-key.md +60 -0
- package/docs/how-to/authenticate-with-oauth.md +49 -0
- package/docs/how-to/build-a-flow.md +106 -0
- package/docs/how-to/call-an-external-api-from-a-workflow.md +116 -0
- package/docs/how-to/connect-the-mcp-server.md +46 -0
- package/docs/how-to/create-a-content-entry.md +58 -0
- package/docs/how-to/create-a-project.md +40 -0
- package/docs/how-to/create-an-experience.md +51 -0
- package/docs/how-to/create-and-revoke-an-api-key.md +54 -0
- package/docs/how-to/debug-with-the-chrome-extension.md +57 -0
- package/docs/how-to/define-a-page-layout.md +54 -0
- package/docs/how-to/fill-and-publish-a-page.md +82 -0
- package/docs/how-to/install-the-gtm-template.md +84 -0
- package/docs/how-to/install-the-sdk.md +93 -0
- package/docs/how-to/install-the-vite-plugin.md +69 -0
- package/docs/how-to/invite-and-remove-members.md +45 -0
- package/docs/how-to/point-one-entry-at-another.md +75 -0
- package/docs/how-to/preview-a-workspace.md +39 -0
- package/docs/how-to/publish-a-workspace.md +42 -0
- package/docs/how-to/read-a-feature-flag.md +113 -0
- package/docs/how-to/read-a-referenced-entry.md +109 -0
- package/docs/how-to/register-a-component.md +55 -0
- package/docs/how-to/register-an-action-handler.md +85 -0
- package/docs/how-to/register-an-api-that-uses-oauth2.md +107 -0
- package/docs/how-to/render-a-step-form.md +131 -0
- package/docs/how-to/render-an-unpublished-preview.md +41 -0
- package/docs/how-to/retry-a-failed-call-with-a-loop.md +81 -0
- package/docs/how-to/reuse-a-section.md +64 -0
- package/docs/how-to/reuse-a-step-field-or-action.md +39 -0
- package/docs/how-to/roll-back-a-published-version.md +39 -0
- package/docs/how-to/run-an-ab-test.md +59 -0
- package/docs/how-to/run-code-on-a-form-submission.md +125 -0
- package/docs/how-to/server-render-a-page.md +81 -0
- package/docs/how-to/set-a-content-security-policy.md +32 -0
- package/docs/how-to/set-up-mfa.md +126 -0
- package/docs/how-to/switch-workspaces.md +122 -0
- package/docs/how-to/upload-and-use-an-asset.mdx +87 -0
- package/docs/how-to/validate-a-field.md +52 -0
- package/docs/how-to/wait-for-an-action-response.md +182 -0
- package/docs/how-to/write-a-condition.md +57 -0
- package/docs/how-to/write-a-predicate.md +60 -0
- package/docs/index.md +59 -0
- package/docs/reference/dashboard/actions.mdx +65 -0
- package/docs/reference/dashboard/api-keys.mdx +47 -0
- package/docs/reference/dashboard/conditions.mdx +51 -0
- package/docs/reference/dashboard/content/asset-library.mdx +74 -0
- package/docs/reference/dashboard/content/blocks.mdx +66 -0
- package/docs/reference/dashboard/content/content-entries.mdx +109 -0
- package/docs/reference/dashboard/content/models.mdx +119 -0
- package/docs/reference/dashboard/content/pages.mdx +72 -0
- package/docs/reference/dashboard/experiences.mdx +61 -0
- package/docs/reference/dashboard/external-apis.md +182 -0
- package/docs/reference/dashboard/features.mdx +165 -0
- package/docs/reference/dashboard/fields.mdx +120 -0
- package/docs/reference/dashboard/flow-builder/canvas.mdx +58 -0
- package/docs/reference/dashboard/flow-builder/condition-builder.md +69 -0
- package/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +72 -0
- package/docs/reference/dashboard/flow-builder/nodes.md +74 -0
- package/docs/reference/dashboard/labels.md +321 -0
- package/docs/reference/dashboard/lead-search.md +235 -0
- package/docs/reference/dashboard/projects.mdx +53 -0
- package/docs/reference/dashboard/reports.mdx +53 -0
- package/docs/reference/dashboard/steps.mdx +47 -0
- package/docs/reference/dashboard/team-management.md +38 -0
- package/docs/reference/dashboard/workflow-runs.md +157 -0
- package/docs/reference/dashboard/workflow-templates.md +182 -0
- package/docs/reference/dashboard/workflow-test-runs.md +85 -0
- package/docs/reference/dashboard/workspace-versioning.mdx +42 -0
- package/docs/reference/dashboard/workspaces.mdx +91 -0
- package/docs/reference/delivery-api/experience-content.md +152 -0
- package/docs/reference/delivery-api/index.md +45 -0
- package/docs/reference/delivery-api/preview-caching-crawling.md +79 -0
- package/docs/reference/delivery-api/project-config.md +65 -0
- package/docs/reference/delivery-api/workspace-schema.md +107 -0
- package/docs/reference/glossary.md +201 -0
- package/docs/reference/management-api/authentication.md +87 -0
- package/docs/reference/management-api/authorization-and-scopes.md +291 -0
- package/docs/reference/management-api/error-handling.md +232 -0
- package/docs/reference/management-api/pagination.md +192 -0
- package/docs/reference/management-api/schema/action.md +261 -0
- package/docs/reference/management-api/schema/analytics-session.md +363 -0
- package/docs/reference/management-api/schema/analytics.md +73 -0
- package/docs/reference/management-api/schema/api-key.md +170 -0
- package/docs/reference/management-api/schema/auth.md +1177 -0
- package/docs/reference/management-api/schema/cms-fields.md +954 -0
- package/docs/reference/management-api/schema/cms-models.md +1155 -0
- package/docs/reference/management-api/schema/common.md +362 -0
- package/docs/reference/management-api/schema/condition.md +254 -0
- package/docs/reference/management-api/schema/design-system.md +199 -0
- package/docs/reference/management-api/schema/experience.md +1098 -0
- package/docs/reference/management-api/schema/external-api.md +637 -0
- package/docs/reference/management-api/schema/feature.md +350 -0
- package/docs/reference/management-api/schema/feedback.md +103 -0
- package/docs/reference/management-api/schema/field.md +400 -0
- package/docs/reference/management-api/schema/index.md +243 -0
- package/docs/reference/management-api/schema/integration.md +272 -0
- package/docs/reference/management-api/schema/label.md +349 -0
- package/docs/reference/management-api/schema/lead.md +340 -0
- package/docs/reference/management-api/schema/mcp-server.md +299 -0
- package/docs/reference/management-api/schema/metric.md +223 -0
- package/docs/reference/management-api/schema/operation.md +96 -0
- package/docs/reference/management-api/schema/organization.md +749 -0
- package/docs/reference/management-api/schema/project.md +607 -0
- package/docs/reference/management-api/schema/report.md +243 -0
- package/docs/reference/management-api/schema/saved-view.md +288 -0
- package/docs/reference/management-api/schema/shopify.md +795 -0
- package/docs/reference/management-api/schema/step.md +273 -0
- package/docs/reference/management-api/schema/tenant-branding.md +185 -0
- package/docs/reference/management-api/schema/workbench.md +246 -0
- package/docs/reference/management-api/schema/workflow-run.md +263 -0
- package/docs/reference/management-api/schema/workflow.md +1110 -0
- package/docs/reference/management-api/schema/workspace-version.md +823 -0
- package/docs/reference/management-api/schema/workspace.md +917 -0
- package/docs/reference/pickedql/data-sources.md +174 -0
- package/docs/reference/pickedql/dimensions.md +103 -0
- package/docs/reference/pickedql/filtering.md +64 -0
- package/docs/reference/pickedql/index.md +18 -0
- package/docs/reference/pickedql/schema.md +172 -0
- package/docs/reference/pickedql/virtual-functions.md +248 -0
- package/docs/reference/sdk/actions.md +154 -0
- package/docs/reference/sdk/analytics-events.md +453 -0
- package/docs/reference/sdk/conditions.md +147 -0
- package/docs/reference/sdk/content-security-policy.md +21 -0
- package/docs/reference/sdk/content.md +253 -0
- package/docs/reference/sdk/experiences.md +51 -0
- package/docs/reference/sdk/features.md +256 -0
- package/docs/reference/sdk/fields.md +255 -0
- package/docs/reference/sdk/index.md +68 -0
- package/docs/reference/sdk/plugins/create-experience.md +123 -0
- package/docs/reference/sdk/plugins/dynamic-experiences.md +74 -0
- package/docs/reference/sdk/plugins/fingerprintjs.md +39 -0
- package/docs/reference/sdk/plugins/hotjar.md +60 -0
- package/docs/reference/sdk/plugins/index.md +33 -0
- package/docs/reference/sdk/plugins/sentry.md +51 -0
- package/docs/reference/sdk/plugins/shopify.md +109 -0
- package/docs/reference/sdk/plugins/window-object.md +25 -0
- package/docs/reference/sdk/predicates.md +43 -0
- package/docs/reference/sdk/react.md +61 -0
- package/docs/reference/sdk/ssr/index.md +33 -0
- package/docs/reference/sdk/ssr/rendering-and-hydration.md +103 -0
- package/docs/reference/sdk/ssr/serialize.md +80 -0
- package/docs/reference/sdk/ssr/slots-and-placements.md +113 -0
- package/docs/reference/sdk/steps.md +86 -0
- package/docs/reference/sdk/svelte.md +74 -0
- package/docs/reference/sdk/type-generation.md +265 -0
- package/docs/reference/tools/admin-api-client.md +89 -0
- package/docs/reference/tools/chrome-extension.md +16 -0
- package/docs/reference/tools/cli.md +319 -0
- package/docs/reference/tools/delivery-api-client.md +60 -0
- package/docs/reference/tools/image-optimisation-service.md +104 -0
- package/docs/reference/tools/mcp-run.md +121 -0
- package/docs/reference/tools/mcp.md +391 -0
- package/docs/reference/tools/vite-plugin.md +163 -0
- package/docs/tutorials/first-api-call.md +253 -0
- package/docs/tutorials/first-experience-in-the-dashboard.mdx +160 -0
- package/docs/tutorials/first-experience.mdx +254 -0
- package/docs/tutorials/first-server-rendered-page.mdx +186 -0
- 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
|
+
```
|