@picked/client 0.0.62-next.1 → 0.0.62-next.11

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 (133) hide show
  1. package/README.md +0 -8
  2. package/dist/{api-Dfrznen2.js → api-C6HQ65g9.js} +1 -1
  3. package/dist/api-v323-Asd.cjs +1 -0
  4. package/dist/cjs/form/index.js +1 -1
  5. package/dist/cjs/index.js +4 -4
  6. package/dist/cjs/plugins/create-experience/index.js +1 -1
  7. package/dist/cjs/plugins/dom-observer/index.js +1 -0
  8. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  9. package/dist/cjs/plugins/experience-browser-storage/index.js +1 -1
  10. package/dist/cjs/plugins/history-browser-storage/index.js +1 -1
  11. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  12. package/dist/cjs/plugins/single-page-app/index.js +1 -1
  13. package/dist/cjs/plugins/web-components/index.js +1 -1
  14. package/dist/cjs/server/index.js +1 -1
  15. package/dist/docs/actions.mdx +0 -1
  16. package/dist/docs/api/authentication.md +376 -0
  17. package/dist/docs/api/authorization-and-scopes.md +262 -0
  18. package/dist/docs/api/error-handling.md +211 -0
  19. package/dist/docs/api/index.md +172 -11
  20. package/dist/docs/api/pagination.md +176 -0
  21. package/dist/docs/image-optimisation-service.md +72 -0
  22. package/dist/docs/index.md +0 -2
  23. package/dist/docs/pickedql/data-sources.md +2 -2
  24. package/dist/docs/pickedql/dimensions.md +2 -0
  25. package/dist/docs/pickedql/schema.md +2 -2
  26. package/dist/docs/pickedql/virtual-functions.md +27 -0
  27. package/dist/docs/sdk/actions.md +0 -1
  28. package/dist/docs/sdk/content-security-policy.md +8 -7
  29. package/dist/docs/sdk/features.md +0 -1
  30. package/dist/docs/sdk/fields.md +2 -2
  31. package/dist/docs/sdk/index.md +0 -1
  32. package/dist/docs/sdk/plugins/create-experience.md +0 -1
  33. package/dist/docs/sdk/plugins/dynamic-experiences.md +2 -3
  34. package/dist/docs/sdk/plugins/window-object.md +0 -1
  35. package/dist/docs/sdk/predicates.md +0 -1
  36. package/dist/docs/workspaces.mdx +60 -1
  37. package/dist/dom-C3C6Fmwz.cjs +1 -0
  38. package/dist/dom-DGePXPpM.js +84 -0
  39. package/dist/esm/form/index.js +1 -1
  40. package/dist/esm/index.js +1020 -494
  41. package/dist/esm/plugins/create-experience/index.js +1 -1
  42. package/dist/esm/plugins/dom-observer/index.js +87 -0
  43. package/dist/esm/plugins/dynamic-experiences/index.js +133 -60
  44. package/dist/esm/plugins/experience-browser-storage/index.js +9 -6
  45. package/dist/esm/plugins/history-browser-storage/index.js +1 -1
  46. package/dist/esm/plugins/responses-browser-storage/index.js +1 -1
  47. package/dist/esm/plugins/single-page-app/index.js +1 -1
  48. package/dist/esm/plugins/web-components/index.js +1 -1
  49. package/dist/esm/server/index.js +23 -13
  50. package/dist/experience-instance-DImym3m_.js +419 -0
  51. package/dist/experience-instance-DygAdzbn.cjs +1 -0
  52. package/dist/rules-logic-D_CVBuv7.js +13 -0
  53. package/dist/rules-logic-H6P8xwHF.cjs +1 -0
  54. package/dist/types/client.d.ts +2 -2
  55. package/dist/types/entities/action/action.d.ts +6 -3
  56. package/dist/types/entities/action/action.d.ts.map +1 -1
  57. package/dist/types/entities/component/component.d.ts +39 -2
  58. package/dist/types/entities/component/component.d.ts.map +1 -1
  59. package/dist/types/entities/content/content.d.ts +37 -0
  60. package/dist/types/entities/content/content.d.ts.map +1 -0
  61. package/dist/types/entities/experience/experience.d.ts +69 -113
  62. package/dist/types/entities/experience/experience.d.ts.map +1 -1
  63. package/dist/types/entities/experience-instance/experience-instance.d.ts +17 -2
  64. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  65. package/dist/types/entities/feature/feature.d.ts +26 -2
  66. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  67. package/dist/types/entities/field/field.d.ts.map +1 -1
  68. package/dist/types/entities/framework/framework.d.ts +24 -3
  69. package/dist/types/entities/framework/framework.d.ts.map +1 -1
  70. package/dist/types/entities/plugin/plugin.d.ts +32 -1
  71. package/dist/types/entities/plugin/plugin.d.ts.map +1 -1
  72. package/dist/types/entities/predicate/predicate.d.ts +24 -3
  73. package/dist/types/entities/predicate/predicate.d.ts.map +1 -1
  74. package/dist/types/entities/session/session.d.ts +45 -0
  75. package/dist/types/entities/session/session.d.ts.map +1 -0
  76. package/dist/types/entities/step/step.d.ts +17 -2
  77. package/dist/types/entities/step/step.d.ts.map +1 -1
  78. package/dist/types/exports.d.ts +9 -3
  79. package/dist/types/exports.d.ts.map +1 -1
  80. package/dist/types/index.d.ts +3 -1
  81. package/dist/types/index.d.ts.map +1 -1
  82. package/dist/types/lifecycle/lifecycle.d.ts +47 -0
  83. package/dist/types/lifecycle/lifecycle.d.ts.map +1 -0
  84. package/dist/types/lifecycle/rules-logic.d.ts +24 -0
  85. package/dist/types/lifecycle/rules-logic.d.ts.map +1 -0
  86. package/dist/types/lifecycle/state-snapshot.d.ts +37 -0
  87. package/dist/types/lifecycle/state-snapshot.d.ts.map +1 -0
  88. package/dist/types/logic-engine.d.ts +1 -1
  89. package/dist/types/logic-engine.d.ts.map +1 -1
  90. package/dist/types/picked.d.ts +141 -187
  91. package/dist/types/picked.d.ts.map +1 -1
  92. package/dist/types/plugins/dom-observer/index.d.ts +3 -0
  93. package/dist/types/plugins/dom-observer/index.d.ts.map +1 -0
  94. package/dist/types/plugins/dom-observer/plugin.d.ts +50 -0
  95. package/dist/types/plugins/dom-observer/plugin.d.ts.map +1 -0
  96. package/dist/types/plugins/dynamic-experiences/index.d.ts +2 -1
  97. package/dist/types/plugins/dynamic-experiences/index.d.ts.map +1 -1
  98. package/dist/types/plugins/dynamic-experiences/plugin.d.ts +18 -1
  99. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  100. package/dist/types/plugins/dynamic-experiences/types.d.ts +63 -1
  101. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  102. package/dist/types/plugins/experience-browser-storage/plugin.d.ts.map +1 -1
  103. package/dist/types/plugins/web-components/plugin.d.ts.map +1 -1
  104. package/dist/types/server/index.d.ts +7 -0
  105. package/dist/types/server/index.d.ts.map +1 -1
  106. package/dist/types/utils/events.d.ts +1 -1
  107. package/dist/types/utils/events.d.ts.map +1 -1
  108. package/dist/types/utils/picked-config.d.ts +12 -4
  109. package/dist/types/utils/picked-config.d.ts.map +1 -1
  110. package/dist/types/utils/rules-logic.d.ts +4 -9
  111. package/dist/types/utils/rules-logic.d.ts.map +1 -1
  112. package/package.json +12 -2
  113. package/dist/api-NpGrXHyM.cjs +0 -1
  114. package/dist/docs/reference/index.md +0 -11
  115. package/dist/docs/tooling/index.md +0 -19
  116. package/dist/experience-instance-DC2gKwA6.cjs +0 -1
  117. package/dist/experience-instance-DJaNc5Ob.js +0 -486
  118. package/dist/rules-logic-BTIxfrJJ.js +0 -240
  119. package/dist/rules-logic-DNLOv90w.cjs +0 -1
  120. package/dist/types/utils/state-snaphot.d.ts +0 -26
  121. package/dist/types/utils/state-snaphot.d.ts.map +0 -1
  122. package/dist/types/utils/user-session.d.ts +0 -12
  123. package/dist/types/utils/user-session.d.ts.map +0 -1
  124. /package/dist/docs/{tooling/chrome-extension.md → chrome-extension.md} +0 -0
  125. /package/dist/docs/{tooling/gtm-template.md → gtm-template.md} +0 -0
  126. /package/dist/docs/{tooling/mcp.md → mcp.md} +0 -0
  127. /package/dist/docs/{tooling/vite-plugin.md → vite-plugin.md} +0 -0
  128. /package/dist/{id-Bv44ilEo.cjs → id-Cg7fVl1O.cjs} +0 -0
  129. /package/dist/{id-CRqy981z.js → id-n2yrHvNo.js} +0 -0
  130. /package/dist/{object-C82v79xc.js → object-DvUDOytC.js} +0 -0
  131. /package/dist/{object-CUJOjanb.cjs → object-ThO1DEyl.cjs} +0 -0
  132. /package/dist/{storage-B6lQtc4-.cjs → storage-BXSlLTRa.cjs} +0 -0
  133. /package/dist/{storage-6Xk0uAxB.js → storage-hOHCCXvP.js} +0 -0
@@ -1,215 +1,176 @@
1
+ import { Effect, EventCallable, Store, StoreWritable } from 'effector';
1
2
  import { Experience, LaunchExperienceOptions } from './entities/experience/experience';
2
3
  import { Plugin, PluginConfigIndex } from './entities/plugin/plugin';
3
4
  import { CreateClientOptions } from './client';
4
5
  import { AdaptedComponent } from './entities/component/component';
5
6
  import { Framework } from './entities/framework/framework';
6
- import { StateSnapshot } from './utils/state-snaphot';
7
+ import { StateSnapshot } from './lifecycle/state-snapshot';
8
+ import { EvaluateRuleLogicParams } from './lifecycle/rules-logic';
9
+ import { LifecycleStage } from './lifecycle/lifecycle';
7
10
  import { Predicate } from './entities/predicate/predicate';
8
11
  import { Feature } from './entities/feature/feature';
9
12
  import { EventBusPayload, EventHistoryStore } from './utils/events';
10
13
  import { Field } from './entities/field/field';
11
14
  import { ExperienceStep } from './entities/step/step';
15
+ import { Content } from './entities/content/content';
16
+ import { ContentLoader } from './plugins/dynamic-experiences/types';
12
17
  import { Action } from './entities/action/action';
13
18
  import { Condition } from './entities/condition/condition';
14
- import { SessionStore } from './utils/user-session';
15
- import { LogicRule } from './logic-engine';
19
+ import { SessionEntity } from './entities/session/session';
20
+ /**
21
+ * Provenance metadata describing where the Picked client's project config and
22
+ * content came from. Set by `dynamicExperiencesPlugin` when the Vite plugin's
23
+ * virtual data module is available; remains `null` otherwise.
24
+ */
25
+ export interface PickedDataSource {
26
+ /** `'build'` when build-mode prefetch JSON was used, `'dev'` when the dev-mode runtime fetch was used. */
27
+ mode: 'dev' | 'build';
28
+ /** ISO 8601 timestamp from the manifest. `null` in dev mode where no manifest is written. */
29
+ fetchedAt: string | null;
30
+ /** The `versionId` recorded by the source, when known. */
31
+ projectVersionId: string | null;
32
+ /** The `workspaceId` recorded by the source, when known. */
33
+ workspaceId: string | null;
34
+ }
16
35
  export declare class Picked {
17
36
  static readonly logger: (level: "log" | "warn" | "info" | "error", ...args: Parameters<Console["log"]>) => void;
18
37
  private readonly options;
19
- isReady: boolean;
38
+ /**
39
+ * Provenance metadata for the data backing this client. Populated by
40
+ * `dynamicExperiencesPlugin` when the Vite plugin's virtual data module is
41
+ * resolvable; remains `null` when the SDK is using the runtime API path.
42
+ */
43
+ dataSource: PickedDataSource | null;
44
+ /**
45
+ * Content fetcher selected by `dynamicExperiencesPlugin`'s resolution chain. Called
46
+ * by each experience's `prepareExperienceContentFx` (fired in parallel with
47
+ * `initialiseFx` by the per-experience sample graph). `undefined` when no plugin
48
+ * has registered one yet.
49
+ */
50
+ contentLoader?: ContentLoader;
20
51
  private readonly plugins;
21
- private readonly pluginStartHooks;
22
- readonly eventBus: import('effector').EventCallable<EventBusPayload>;
52
+ readonly eventBus: EventCallable<EventBusPayload>;
23
53
  readonly events: EventHistoryStore;
24
- readonly organizationId: string;
25
54
  readonly projectId: string;
26
55
  readonly apiUrl: string;
27
56
  readonly dashboardUrl: string;
28
57
  readonly documentationSiteUrl: string;
29
- readonly session?: SessionStore | null;
30
- readonly precondition?: LogicRule | boolean;
31
- readonly condition?: LogicRule | boolean;
32
- preconditionPassed?: boolean;
58
+ readonly session: SessionEntity;
33
59
  readonly searchParams: import('.').PickedSearchParams;
34
60
  readonly history: {
35
- push: import('effector').EventCallable<{
61
+ push: EventCallable<{
36
62
  experienceId: string;
37
63
  node: import('.').ExperienceNode;
38
64
  }>;
39
- replace: import('effector').EventCallable<{
65
+ replace: EventCallable<{
40
66
  experienceId: string;
41
67
  node: import('.').ExperienceNode;
42
68
  }>;
43
- back: import('effector').EventCallable<{
69
+ back: EventCallable<{
44
70
  experienceId?: string;
45
71
  }>;
46
- restore: import('effector').EventCallable<{
72
+ restore: EventCallable<{
47
73
  entries: import('.').HistoryEntry[];
48
74
  }>;
49
- entriesStore: import('effector').Store<import('.').HistoryEntry[]>;
75
+ entriesStore: Store<import('.').HistoryEntry[]>;
50
76
  };
51
77
  readonly components: {
52
- register: (name: string, component: AdaptedComponent) => void;
53
- getByName: (name: string) => import('effector').Store<{
78
+ register: EventCallable<{
79
+ name: string;
80
+ component: AdaptedComponent;
81
+ }>;
82
+ getByName: (name: string) => Store<{
54
83
  name: string;
55
84
  component: AdaptedComponent;
56
85
  } | undefined>;
57
- listStore: import('effector').Store<{
86
+ listStore: Store<{
58
87
  name: string;
59
88
  component: AdaptedComponent<string, unknown>;
60
- frameworkStore: import('effector').Store<Framework | undefined>;
89
+ frameworkStore: Store<Framework | undefined>;
61
90
  }[]>;
62
91
  };
63
92
  readonly experienceInstances: {
64
93
  spawn: (experience: import('.').ExperienceStore, target: HTMLElement, options?: LaunchExperienceOptions) => void;
65
- getByExperienceKey: (key: Experience["key"]) => import('effector').Store<import('.').ExperienceInstance[]>;
66
- getByExperienceId: (id: Experience["id"]) => import('effector').Store<import('.').ExperienceInstance[]>;
67
- listStore: import('effector').Store<import('.').ExperienceInstance[]>;
94
+ getByExperienceKey: (key: Experience["key"]) => Store<import('.').ExperienceInstance[]>;
95
+ getByExperienceId: (id: Experience["id"]) => Store<import('.').ExperienceInstance[]>;
96
+ listStore: Store<import('.').ExperienceInstance[]>;
68
97
  };
69
98
  readonly experiences: {
70
- register: (experience: Experience) => void;
71
- get: (id: Experience["id"]) => import('effector').Store<{
72
- id: string;
73
- key: string;
74
- name: string;
75
- configStore: import('effector').Store<{
76
- name: string;
77
- decisionLogic: import('./logic-engine').LogicValue | LogicRule;
78
- targetSelectors: import('.').ExperienceTarget[];
79
- initializeOpenLogic: import('./logic-engine').LogicValue | LogicRule;
80
- }>;
81
- treeStore: import('effector').Store<{
82
- steps: ExperienceStep[];
83
- nodes: import('.').ExperienceNode[];
84
- edges: import('.').ExperienceEdge[];
85
- conditions: Condition[];
86
- }>;
87
- componentStore: import('effector').Store<{
88
- name: string;
89
- component: AdaptedComponent<string, unknown>;
90
- frameworkStore: import('effector').Store<Framework | undefined>;
91
- } | undefined>;
92
- actions: import('.').ExperienceAction[];
93
- merge: import('effector').EventCallable<{
94
- experience: Partial<Experience>;
95
- strategy: "override";
96
- }>;
97
- } | undefined>;
98
- getById: (id: Experience["id"]) => import('effector').Store<{
99
- id: string;
100
- key: string;
101
- name: string;
102
- configStore: import('effector').Store<{
103
- name: string;
104
- decisionLogic: import('./logic-engine').LogicValue | LogicRule;
105
- targetSelectors: import('.').ExperienceTarget[];
106
- initializeOpenLogic: import('./logic-engine').LogicValue | LogicRule;
107
- }>;
108
- treeStore: import('effector').Store<{
109
- steps: ExperienceStep[];
110
- nodes: import('.').ExperienceNode[];
111
- edges: import('.').ExperienceEdge[];
112
- conditions: Condition[];
113
- }>;
114
- componentStore: import('effector').Store<{
115
- name: string;
116
- component: AdaptedComponent<string, unknown>;
117
- frameworkStore: import('effector').Store<Framework | undefined>;
118
- } | undefined>;
119
- actions: import('.').ExperienceAction[];
120
- merge: import('effector').EventCallable<{
121
- experience: Partial<Experience>;
122
- strategy: "override";
123
- }>;
124
- } | undefined>;
125
- getByKey: (key: Experience["key"]) => import('effector').Store<import('.').ExperienceStore | undefined>;
126
- launch: import('effector').Effect<{
99
+ register: EventCallable<Experience>;
100
+ get: (id: Experience["id"]) => Store<import('.').ExperienceStore | undefined>;
101
+ getById: (id: Experience["id"]) => Store<import('.').ExperienceStore | undefined>;
102
+ getByKey: (key: Experience["key"]) => Store<import('.').ExperienceStore | undefined>;
103
+ launch: Effect<{
127
104
  key: string;
128
105
  options?: LaunchExperienceOptions;
129
106
  } | {
130
107
  id: string;
131
108
  options?: LaunchExperienceOptions;
132
109
  }, void, Error>;
133
- open: import('effector').Effect<{
110
+ open: Effect<{
134
111
  key: string;
135
112
  options?: import('./exports').OpenExperienceOptions;
136
113
  } | {
137
114
  id: string;
138
115
  options?: import('./exports').OpenExperienceOptions;
139
116
  }, void, Error>;
140
- listStore: import('effector').Store<{
141
- id: string;
142
- key: string;
143
- name: string;
144
- configStore: import('effector').Store<{
145
- name: string;
146
- decisionLogic: import('./logic-engine').LogicValue | LogicRule;
147
- targetSelectors: import('.').ExperienceTarget[];
148
- initializeOpenLogic: import('./logic-engine').LogicValue | LogicRule;
149
- }>;
150
- treeStore: import('effector').Store<{
151
- steps: ExperienceStep[];
152
- nodes: import('.').ExperienceNode[];
153
- edges: import('.').ExperienceEdge[];
154
- conditions: Condition[];
155
- }>;
156
- componentStore: import('effector').Store<{
157
- name: string;
158
- component: AdaptedComponent<string, unknown>;
159
- frameworkStore: import('effector').Store<Framework | undefined>;
160
- } | undefined>;
161
- actions: import('.').ExperienceAction[];
162
- merge: import('effector').EventCallable<{
163
- experience: Partial<Experience>;
164
- strategy: "override";
165
- }>;
166
- }[]>;
117
+ listStore: Store<import('.').ExperienceStore[]>;
118
+ initialiseExperiencesFx: Effect<void, void, Error>;
167
119
  };
168
120
  readonly frameworks: {
169
- register: (name: string, framework: Framework) => void;
170
- getByName: (name: string) => import('effector').Store<Framework | undefined>;
171
- listStore: import('effector').Store<Framework[]>;
121
+ register: EventCallable<{
122
+ name: string;
123
+ framework: Framework;
124
+ }>;
125
+ getByName: (name: string) => Store<Framework | undefined>;
126
+ listStore: Store<Framework[]>;
172
127
  };
173
128
  readonly predicates: {
174
- register: (name: string, predicate: Predicate) => void;
175
- getByName: (name: string) => import('effector').Store<Predicate | undefined>;
176
- listStore: import('effector').Store<{
129
+ register: EventCallable<{
130
+ name: string;
131
+ predicate: Predicate;
132
+ }>;
133
+ getByName: (name: string) => Store<Predicate | undefined>;
134
+ listStore: Store<{
177
135
  name: string;
178
136
  predicate: Predicate;
179
137
  }[]>;
180
- getEvokablePredicate: (predicateName: string) => import('effector').Store<() => ReturnType<Predicate>>;
138
+ getEvokablePredicate: (predicateName: string) => Store<() => ReturnType<Predicate>>;
181
139
  };
182
140
  readonly features: {
183
- register: (id: string, feature: Feature) => void;
184
- getById: (id: string) => import('effector').Store<import('.').FeatureBucket | undefined>;
185
- getByName: (name: string) => import('effector').Store<import('.').FeatureIndexItem | undefined>;
186
- listStore: import('effector').Store<import('.').FeatureBucket[]>;
187
- getEvokableFeature: (featureName: string) => import('effector').Store<() => Promise<boolean | string | undefined>>;
141
+ register: EventCallable<{
142
+ id: string;
143
+ feature: Feature;
144
+ }>;
145
+ getById: (id: string) => Store<import('.').FeatureBucket | undefined>;
146
+ getByName: (name: string) => Store<import('.').FeatureIndexItem | undefined>;
147
+ listStore: Store<import('.').FeatureBucket[]>;
148
+ getEvokableFeature: (featureName: string) => Store<() => Promise<boolean | string | undefined>>;
188
149
  };
189
150
  readonly conditions: {
190
151
  register: (condition: Condition) => void;
191
- getById: (id: Condition["id"]) => import('effector').Store<Condition | null>;
192
- getByKey: (key: Condition["key"]) => import('effector').Store<Condition | null>;
193
- listStore: import('effector').Store<Condition[]>;
194
- indexStore: import('effector').StoreWritable<{
152
+ getById: (id: Condition["id"]) => Store<Condition | null>;
153
+ getByKey: (key: Condition["key"]) => Store<Condition | null>;
154
+ listStore: Store<Condition[]>;
155
+ indexStore: StoreWritable<{
195
156
  [id: string]: Condition;
196
157
  }>;
197
158
  };
198
159
  readonly fields: {
199
160
  register: (field: Field) => void;
200
161
  update: (key: import('.').FieldBase["key"], updates: Partial<Field>) => void;
201
- getById: (id: import('.').FieldBase["id"]) => import('effector').Store<Field | null>;
202
- getByKey: (key: import('.').FieldBase["key"]) => import('effector').Store<Field | null>;
203
- listStore: import('effector').Store<Field[]>;
204
- getByName: (name: import('.').FieldBase["name"]) => import('effector').Store<Field | null>;
162
+ getById: (id: import('.').FieldBase["id"]) => Store<Field | null>;
163
+ getByKey: (key: import('.').FieldBase["key"]) => Store<Field | null>;
164
+ listStore: Store<Field[]>;
165
+ getByName: (name: import('.').FieldBase["name"]) => Store<Field | null>;
205
166
  };
206
167
  readonly responses: {
207
168
  register: {
208
169
  (fieldKey: Field["key"], response: import('.').Response): void;
209
170
  (payload: Record<Field["key"], import('.').Response>, response?: never): void;
210
171
  };
211
- clearAll: import('effector').EventCallable<void>;
212
- clear: import('effector').EventCallable<string>;
172
+ clearAll: EventCallable<void>;
173
+ clear: EventCallable<string>;
213
174
  commit: (responsesToCommit: import('.').CommitResponses) => Promise<{
214
175
  errors: import('.').ValidationError[];
215
176
  }>;
@@ -217,36 +178,71 @@ export declare class Picked {
217
178
  responsesToCommit: import('.').CommitResponses;
218
179
  validationErrors: import('.').ValidationError[];
219
180
  }>;
220
- listStore: import('effector').Store<{
181
+ listStore: Store<{
221
182
  fieldKey: string;
222
183
  value: import('.').FieldValue;
223
184
  }[]>;
224
- getAllStore: import('effector').Store<{
185
+ getAllStore: Store<{
225
186
  [fieldKey: string]: import('.').FieldValue;
226
187
  }>;
227
- getByFieldId: (id: Field["id"]) => import('effector').Store<import('.').FieldValue>;
228
- getByFieldKey: (key: Field["key"]) => import('effector').Store<import('.').FieldValue>;
229
- getByFieldName: (fieldName: Field["name"]) => import('effector').Store<import('.').FieldValue>;
188
+ getByFieldId: (id: Field["id"]) => Store<import('.').FieldValue>;
189
+ getByFieldKey: (key: Field["key"]) => Store<import('.').FieldValue>;
190
+ getByFieldName: (fieldName: Field["name"]) => Store<import('.').FieldValue>;
230
191
  };
231
192
  readonly steps: {
232
193
  register: (step: ExperienceStep) => void;
233
- getById: (id: ExperienceStep["id"]) => import('effector').Store<ExperienceStep | null>;
234
- getByKey: (key: ExperienceStep["key"]) => import('effector').Store<ExperienceStep | null>;
235
- listStore: import('effector').Store<ExperienceStep[]>;
236
- indexStore: import('effector').StoreWritable<{
194
+ getById: (id: ExperienceStep["id"]) => Store<ExperienceStep | null>;
195
+ getByKey: (key: ExperienceStep["key"]) => Store<ExperienceStep | null>;
196
+ listStore: Store<ExperienceStep[]>;
197
+ indexStore: StoreWritable<{
237
198
  [id: string]: ExperienceStep;
238
199
  }>;
239
200
  };
201
+ readonly contents: {
202
+ register: (content: Content) => void;
203
+ getById: (id: Content["id"]) => Store<Content | null>;
204
+ listStore: Store<Content[]>;
205
+ indexStore: StoreWritable<{
206
+ [id: string]: Content;
207
+ }>;
208
+ };
240
209
  readonly actions: {
241
- register: (key: string, action: Action) => void;
242
- getByKey: (key: string) => import('effector').Store<Action | undefined>;
243
- listStore: import('effector').Store<import('.').ActionIndexItem[]>;
210
+ register: EventCallable<{
211
+ key: string;
212
+ action: Action;
213
+ }>;
214
+ getByKey: (key: string) => Store<Action | undefined>;
215
+ listStore: Store<import('.').ActionIndexItem[]>;
244
216
  getEvokableAction: (actionKey: string, options?: {
245
217
  experience: import('.').ExperienceInstance;
246
- }) => import('effector').Store<() => ReturnType<Action>>;
218
+ }) => Store<() => ReturnType<Action>>;
247
219
  };
220
+ readonly stateSnapshotStore: Store<StateSnapshot>;
221
+ readonly evaluateRuleLogicFx: Effect<EvaluateRuleLogicParams, unknown, Error>;
222
+ /** Public trigger — fires the start chain. `await allSettled(client.start, { scope })` resolves once the chain has fully settled. */
223
+ readonly start: EventCallable<void>;
224
+ /** Reactive store of the readiness flag. */
225
+ readonly readyStore: StoreWritable<boolean>;
226
+ /** Reactive store of the precondition-gate result (`undefined` until `start` is fired). */
227
+ readonly preconditionPassedStore: StoreWritable<boolean | undefined>;
228
+ /** Reactive store of the condition-gate result (`undefined` until `start` is fired). */
229
+ readonly conditionPassedStore: StoreWritable<boolean | undefined>;
230
+ /** Reactive store of the current lifecycle stage. */
231
+ readonly lifecycleStageStore: StoreWritable<LifecycleStage>;
232
+ private readonly lifecycle;
233
+ /**
234
+ * Effect that interpolates a template string against the latest responses plus a caller-supplied context. Source is `responses.listStore` so renders are scope-aware and pick up the latest committed responses without `.getState()`.
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const greeting = await client.renderStringFx({ template: 'Hi {{name}}', context: { name: 'Mae' } })
239
+ * ```
240
+ */
241
+ readonly renderStringFx: Effect<{
242
+ template: string;
243
+ context?: Record<string, unknown>;
244
+ }, string, Error>;
248
245
  constructor(options: CreateClientOptions);
249
- start: () => void;
250
246
  registerFramework: (framework: Framework) => void;
251
247
  registerComponent: (name: string, component: AdaptedComponent) => void;
252
248
  registerPlugin: (plugin: Plugin) => void;
@@ -255,9 +251,9 @@ export declare class Picked {
255
251
  registerCondition: (condition: Condition) => void;
256
252
  registerField: (field: Field) => void;
257
253
  registerStep: (step: ExperienceStep) => void;
254
+ registerContent: (content: Content) => void;
258
255
  registerAction: (key: string, action: Action) => void;
259
256
  registerExperience: (experience: Experience) => void;
260
- getStateSnapshot: () => StateSnapshot;
261
257
  /**
262
258
  * Launches an experience by ID.
263
259
  *
@@ -300,53 +296,11 @@ export declare class Picked {
300
296
  * ```
301
297
  */
302
298
  openExperienceByKey: (experienceKey: string) => Promise<void>;
303
- private runPluginStartHooks;
304
- private evaluateGate;
305
299
  private setupPlugins;
306
300
  private setupFeatures;
307
301
  private setupPredicates;
308
302
  private setupActions;
309
303
  private setupComponents;
310
304
  getPluginConfig: (pluginName: string) => PluginConfigIndex[string] | Record<string, unknown>;
311
- /**
312
- * Interpolates a template string using values from the client's response store and/or a provided context.
313
- * Supports dot-notation, modifiers, and executing functions found in the context.
314
- *
315
- * Sources:
316
- * - responses.*: Loaded automatically from the client's internal response store by fieldId (e.g. {{ responses.email }}).
317
- * - Context: Any non-responses.* key must be supplied in the context; nested dot-notation is supported.
318
- * - Functions: If a context value is a function, it is invoked and its result is rendered.
319
- *
320
- * Placeholders:
321
- * - {{ key | modifier: arg | modifier2: arg2 }} with modifiers applied left-to-right.
322
- *
323
- * Modifiers:
324
- * - default: Use the argument when the value is null, undefined, NaN, or empty string; otherwise return the value as a string.
325
- * - append: Append the argument (space-separated) when the value is non-empty.
326
- * - prepend: Prepend the argument (space-separated) when the value is non-empty.
327
- * - upper: Uppercase string values.
328
- * - lower: Lowercase string values.
329
- * - capitalize: Capitalize the first letter of string values.
330
- * - list: Format Arrays, Maps, and Sets via Intl.ListFormat (Maps render as key: value pairs).
331
- *
332
- * Behavior:
333
- * - Empty values (null, undefined, empty string, NaN) render as empty. Numeric 0 renders as "0", boolean false renders as "false", and boolean true renders as "true".
334
- * - Objects and arrays are JSON-stringified; Maps/Sets serialize to {} unless the list modifier is used.
335
- * - Unknown modifiers are ignored.
336
- *
337
- * @param template Template containing placeholders.
338
- * @param context Optional data for interpolation. Non-responses.* keys belong here; function values are executed.
339
- * @returns Interpolated string.
340
- * @example
341
- * renderString("Hello {{ name | default: 'Guest' | capitalize }}! Email: {{ responses.email | lower }}.", { name: "ALICE" })
342
- * // => "Hello Alice! Email: alice@example.com."
343
- * @example
344
- * renderString("User: {{ getName | capitalize }}", { getName: () => "alice" })
345
- * // => "User: Alice"
346
- * @example
347
- * renderString("Fruits: {{ fruits | list }}", { fruits: ["apple", "banana", "cherry"] })
348
- * // => "Fruits: apple, banana, and cherry"
349
- */
350
- renderString: (template: string, context?: Record<string, unknown>) => string;
351
305
  }
352
306
  //# sourceMappingURL=picked.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** @file Public entrypoint for the dom-observer plugin. */
2
+ export { domObserverPlugin } from './plugin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dom-observer/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,50 @@
1
+ import { Plugin } from '../../entities/plugin/plugin';
2
+ /**
3
+ * Watches the document for `childList` mutations and reconciles experiences
4
+ * whose declared target selectors match newly added DOM subtrees. Each
5
+ * matching experience runs through its per-experience `shouldInitialiseFx`,
6
+ * and on `true` is handed to its `initialiseFx(undefined)`.
7
+ *
8
+ * Scope: lazy-mounted target hosts that arrive after the initial bulk init
9
+ * in `picked.ts`. Route-driven re-initialisation (decisionLogic depending
10
+ * on `location.pathname`, lifecycle event re-fires, plugin start hooks)
11
+ * is the responsibility of `singlePageAppPlugin`, which calls
12
+ * `client.start()` on history events. Pair the two plugins to cover both.
13
+ *
14
+ * Pipeline:
15
+ * - Each experience's `configStore.watch()` pushes its trimmed selectors
16
+ * into a reactive `Store<Map<id, string[]>>`. Empty / whitespace-only
17
+ * selectors are filtered out.
18
+ * - A single `MutationObserver` collects `Element` instances from
19
+ * `childList.addedNodes` across one animation frame, then fires a
20
+ * single `mutationObserved` event carrying the collected elements.
21
+ * - `sample` filters registered experiences to those whose selectors
22
+ * match at least one added element via `el.matches` or
23
+ * `el.querySelector`. Malformed selectors are skipped per-experience
24
+ * without poisoning the rest of the batch. The matched array is
25
+ * routed straight into `reconcileMatchedFx` via `sample.target`.
26
+ * - `reconcileMatchedFx` invokes each experience's
27
+ * `shouldInitialiseFx`, and on `true` its `initialiseFx(undefined)`.
28
+ * `initialiseFx` is idempotent: tagged target elements are skipped
29
+ * on subsequent passes.
30
+ *
31
+ * Setup is deferred until `document.body` is parsed, so SDKs loaded from
32
+ * `<head>` without `defer` (the standard Shopify-theme / GTM-template
33
+ * pattern) still install once the body becomes available.
34
+ *
35
+ * No-ops outside browser environments and on partial-DOM runtimes that
36
+ * lack `MutationObserver` or `requestAnimationFrame`. `MutationObserver`
37
+ * does not cross shadow root or iframe boundaries, so experiences whose
38
+ * target lives inside a shadow tree or a cross-origin frame are not
39
+ * reconciled by this plugin.
40
+ *
41
+ * @returns {Plugin} The plugin.
42
+ * @example
43
+ * ```typescript
44
+ * createClient({
45
+ * plugins: [domObserverPlugin()]
46
+ * })
47
+ * ```
48
+ */
49
+ export declare const domObserverPlugin: () => Plugin;
50
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dom-observer/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAiBpC,CAAA"}
@@ -1,4 +1,5 @@
1
- export { dynamicExperiencesPlugin, fetchProject } from './plugin';
1
+ /** @file Public exports for the dynamic-experiences plugin (project config + per-experience content resolution). */
2
+ export { dynamicExperiencesPlugin, fetchExperienceContent, fetchProject } from './plugin';
2
3
  export { createClientHeaders } from '../../utils/client-headers';
3
4
  export type * from './types';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,mBAAmB,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/index.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,mBAAmB,SAAS,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Plugin } from '../../entities/plugin/plugin';
2
- import { DynamicExperiencesPluginOptions, FetchProjectOptions, ProjectConfig } from './types';
2
+ import { DynamicExperiencesPluginOptions, ExperienceContentResponse, FetchProjectOptions, ProjectConfig } from './types';
3
3
  /**
4
4
  * Fetches the project configuration from the Picked REST API.
5
5
  *
@@ -16,6 +16,23 @@ import { DynamicExperiencesPluginOptions, FetchProjectOptions, ProjectConfig } f
16
16
  * ```
17
17
  */
18
18
  export declare function fetchProject(apiUrl: string, projectId: string, options?: FetchProjectOptions): Promise<ProjectConfig | null>;
19
+ /**
20
+ * Fetches per-experience content from the Picked API.
21
+ *
22
+ * Returns `null` on network failure, non-OK responses, or invalid JSON shape — preserving
23
+ * the failure-tolerant policy: experiences still render, layouts handle null defensively.
24
+ *
25
+ * @param {string} apiUrl - Base URL for the Picked API.
26
+ * @param {string} projectId - Project ID to fetch content for.
27
+ * @param {string} experienceId - Experience ID whose content to fetch.
28
+ * @param {FetchProjectOptions} [options] - Optional headers and preview token.
29
+ * @returns {Promise<ExperienceContentResponse | null>} Validated content response, or `null` on any failure.
30
+ * @example
31
+ * ```typescript
32
+ * const content = await fetchExperienceContent('https://api.picked.app', 'proj_1', 'exp_1')
33
+ * ```
34
+ */
35
+ export declare function fetchExperienceContent(apiUrl: string, projectId: string, experienceId: string, options?: FetchProjectOptions): Promise<ExperienceContentResponse | null>;
19
36
  /**
20
37
  * Plugin that fetches project configuration from the Picked REST API and registers
21
38
  * features, steps, fields, and experiences with the client.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D,OAAO,KAAK,EACV,+BAA+B,EAC/B,mBAAmB,EACnB,aAAa,EAGd,MAAM,SAAS,CAAA;AA4VhB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmC/B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAgD1F"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D,OAAO,KAAK,EAEV,+BAA+B,EAC/B,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EAId,MAAM,SAAS,CAAA;AAsThB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmC/B;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAsC3C;AAkPD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAoC1F"}