@picked/client 0.0.1-dev.1787788898336 → 0.0.1-dev.1788925875333

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 (55) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{api-DU4j3Qw0.js → api-DbMJli3H.js} +1 -1
  3. package/dist/{api-9gq3GBPF.cjs → api-qiqq8lgz.cjs} +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  7. package/dist/cjs/plugins/responses-indexeddb/index.js +1 -1
  8. package/dist/cjs/plugins/telemetry/index.js +1 -1
  9. package/dist/cjs/server/index.js +1 -1
  10. package/dist/docs/reference/dashboard/fields.mdx +17 -11
  11. package/dist/docs/reference/sdk/features.md +5 -0
  12. package/dist/docs/reference/sdk/fields.md +38 -6
  13. package/dist/docs/reference/sdk/type-generation.md +18 -7
  14. package/dist/docs/reference/tools/mcp.md +3 -1
  15. package/dist/esm/index.js +448 -430
  16. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  17. package/dist/esm/plugins/responses-browser-storage/index.js +50 -16
  18. package/dist/esm/plugins/responses-indexeddb/index.js +1 -1
  19. package/dist/esm/plugins/telemetry/index.js +6 -3
  20. package/dist/esm/server/index.js +1 -1
  21. package/dist/{plugin-rwzR9hVc.cjs → plugin-BcLaCLm1.cjs} +1 -1
  22. package/dist/{plugin-CYXHEafF.js → plugin-De_BJSwE.js} +3 -2
  23. package/dist/provider-C_9u0yGJ.cjs +1 -0
  24. package/dist/{provider-BWDd3oaq.js → provider-ovM-CBX_.js} +15 -11
  25. package/dist/types/client.d.ts +21 -0
  26. package/dist/types/client.d.ts.map +1 -1
  27. package/dist/types/data-source/provider.d.ts +3 -3
  28. package/dist/types/data-source/provider.d.ts.map +1 -1
  29. package/dist/types/data-source/request-observer.d.ts +23 -19
  30. package/dist/types/data-source/request-observer.d.ts.map +1 -1
  31. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  32. package/dist/types/entities/field/field.d.ts +26 -7
  33. package/dist/types/entities/field/field.d.ts.map +1 -1
  34. package/dist/types/entities/field/policies.d.ts +35 -0
  35. package/dist/types/entities/field/policies.d.ts.map +1 -0
  36. package/dist/types/index.d.ts +1 -0
  37. package/dist/types/index.d.ts.map +1 -1
  38. package/dist/types/lifecycle/lifecycle.d.ts +1 -1
  39. package/dist/types/lifecycle/lifecycle.d.ts.map +1 -1
  40. package/dist/types/picked.d.ts +4 -13
  41. package/dist/types/picked.d.ts.map +1 -1
  42. package/dist/types/plugins/create-experience/create-experience.d.ts +3 -8
  43. package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
  44. package/dist/types/plugins/responses-browser-storage/plugin.d.ts +11 -0
  45. package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +1 -1
  46. package/dist/types/plugins/telemetry/plugin.d.ts +2 -2
  47. package/dist/types/plugins/telemetry/plugin.d.ts.map +1 -1
  48. package/dist/types/utils/client-telemetry.d.ts +25 -0
  49. package/dist/types/utils/client-telemetry.d.ts.map +1 -0
  50. package/dist/{version-BaI_1eQx.cjs → version-BvLZaTMC.cjs} +1 -1
  51. package/dist/{version-DXDZM7eT.js → version-VvasRUfR.js} +2 -2
  52. package/package.json +3 -3
  53. package/dist/provider-lgLyP_0N.cjs +0 -1
  54. package/dist/types/ping.d.ts +0 -11
  55. package/dist/types/ping.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
- import { t as e } from "../../../plugin-CYXHEafF.js";
2
- import { n as t, t as n } from "../../../api-DU4j3Qw0.js";
1
+ import { t as e } from "../../../plugin-De_BJSwE.js";
2
+ import { n as t, t as n } from "../../../api-DbMJli3H.js";
3
3
  import { n as r } from "../../../registry-CXZv0uLg.js";
4
4
  import { createClientHeaders as i, fetchSchema as a } from "@picked/delivery-api-client";
5
5
  export { i as createClientHeaders, e as dynamicExperiencesPlugin, n as fetchExperienceContent, t as fetchProject, a as fetchSchema, r as registerPickedBundle };
@@ -3,35 +3,69 @@ import { n as t, r as n, t as r } from "../../../storage-1MW3-_As.js";
3
3
  import { attach as i, createEffect as a, sample as o } from "effector";
4
4
  //#region src/plugins/responses-browser-storage/plugin.ts
5
5
  var s = r("responses", "global");
6
- function c(e, t) {
7
- return Object.fromEntries(Object.entries(e).flatMap(([e, n]) => t.find((t) => t.key === e)?.policies?.doNotStoreValue === !1 ? [[e, n]] : []));
6
+ function c(e, t, n) {
7
+ let r = new Map(n.map((e) => [e.key, e])), i = {};
8
+ for (let [t, n] of Object.entries(e ?? {})) {
9
+ let e = r.get(t);
10
+ (!e || e.policies?.storeValue === !0) && (i[t] = n);
11
+ }
12
+ for (let e of n) {
13
+ let n = t[e.key];
14
+ e.policies?.storeValue === !0 && n !== void 0 && (i[e.key] = n);
15
+ }
16
+ return i;
17
+ }
18
+ function l(e, t) {
19
+ let n = Object.keys(e);
20
+ return n.length === Object.keys(t).length && n.every((n) => JSON.stringify(e[n]) === JSON.stringify(t[n]));
8
21
  }
9
- var l = ({ storage: r = "local" } = {}) => ({
22
+ var u = ({ storage: r = "local" } = {}) => ({
10
23
  name: "responses-browser-storage-plugin",
11
- setup: (l) => {
24
+ setup: (u) => {
12
25
  if (!e()) return;
13
- let u = r === "local" ? t : n, d = a(async () => {
14
- let e = u.get(s).json();
26
+ let d = r === "local" ? t : n, f = a(async () => {
27
+ let e = d.get(s).json();
15
28
  if (!e) return null;
16
- l.responses.register(e);
17
- }), f = i({
29
+ u.responses.register(e);
30
+ }), p = (e) => {
31
+ if (Object.keys(e).length === 0) {
32
+ d.remove(s);
33
+ return;
34
+ }
35
+ d.set(s, e);
36
+ }, m = i({
18
37
  source: {
19
- responses: l.responses.getAllStore,
20
- fields: l.fields.listStore
38
+ responses: u.responses.getAllStore,
39
+ fields: u.fields.listStore
21
40
  },
22
41
  effect: ({ responses: e, fields: t }) => {
23
- t.length !== 0 && u.set(s, c(e, t));
42
+ let n = d.get(s).json(), r = c(n, e, t);
43
+ n !== null && l(n, r) || (n !== null || Object.keys(r).length !== 0) && p(r);
24
44
  }
45
+ }), h = a(() => {
46
+ d.remove(s);
47
+ }), g = a((e) => {
48
+ let t = d.get(s).json();
49
+ !t || !Object.hasOwn(t, e) || p(Object.fromEntries(Object.entries(t).filter(([t]) => t !== e)));
25
50
  });
26
51
  o({
27
- source: l.eventBus,
52
+ source: u.eventBus,
28
53
  filter: (e) => e.type === "load",
29
- target: d
30
- }), o({
31
- source: l.responses.getAllStore,
32
54
  target: f
55
+ }), o({
56
+ source: u.responses.getAllStore,
57
+ target: m
58
+ }), o({
59
+ source: u.fields.listStore,
60
+ target: m
61
+ }), o({
62
+ clock: u.responses.clearAll,
63
+ target: h
64
+ }), o({
65
+ clock: u.responses.clear,
66
+ target: g
33
67
  });
34
68
  }
35
69
  });
36
70
  //#endregion
37
- export { l as responsesBrowserStoragePlugin };
71
+ export { u as responsesBrowserStoragePlugin };
@@ -69,7 +69,7 @@ var l = "responses", u = {
69
69
  fields: r.fields.listStore
70
70
  },
71
71
  fn: ({ responses: e, fields: t }) => {
72
- let n = new Set(t.filter((e) => e.policies?.doNotStoreValue === !1).map((e) => e.key));
72
+ let n = new Set(t.filter((e) => e.policies?.storeValue === !0).map((e) => e.key));
73
73
  return e.filter((e) => n.has(e.fieldKey)).map((e) => ({
74
74
  fieldKey: e.fieldKey,
75
75
  value: e.value
@@ -36,11 +36,11 @@ function p(t) {
36
36
  }, b = () => {
37
37
  v ??= setTimeout(y, l);
38
38
  };
39
- f(y), o.setDeliveryRequestObserver({ onRequest: (e) => {
39
+ f(y), o.telemetry.observeDeliveryAPIRequests({ onRequest: (e) => {
40
40
  let t = n(), r = d();
41
41
  return {
42
42
  headers: { traceparent: i(c, t, !0) },
43
- onSettled: (n) => {
43
+ onSettled: (n, i) => {
44
44
  _.push({
45
45
  name: `picked.delivery.${e}`,
46
46
  traceId: c,
@@ -48,7 +48,10 @@ function p(t) {
48
48
  parentSpanId: p,
49
49
  startTimeUnixNano: a(r),
50
50
  endTimeUnixNano: a(d()),
51
- attributes: { "picked.endpoint": e },
51
+ attributes: {
52
+ "picked.endpoint": e,
53
+ ...i !== void 0 && { "http.response.status_code": i }
54
+ },
52
55
  status: n ? "ok" : "error"
53
56
  }), _.length >= 50 ? y() : b();
54
57
  }
@@ -1,5 +1,5 @@
1
1
  import { a as e, c as t, i as n, o as r, s as i, t as a, u as o } from "../../experience-instance-DGk11d8a.js";
2
- import { n as s } from "../../plugin-CYXHEafF.js";
2
+ import { n as s } from "../../plugin-De_BJSwE.js";
3
3
  import { attach as c, createEffect as l, createEvent as u, createStore as d, sample as f } from "effector";
4
4
  //#region src/server/serialize.ts
5
5
  var p = 1e4;
@@ -1 +1 @@
1
- require("./logger-CSTvAyyB.cjs");const e=require("./version-BaI_1eQx.cjs");require("./api-9gq3GBPF.cjs");let t=require("effector");function n(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return t>>>0}function r(e){let t=e;return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}function i(e,t){return r(n(`${e}:${t}`))%100}function a(e,t){return t<=0?!1:t>=100||e<t}var o=4294967296;function s(e,t,i){return(r(n(`${e}:${t}:${i}`))+.5)/o}function c(e,t,n){return n.weight<=0?0:n.weight/-Math.log(s(e,t,n.key))}function l(e,t,n){let r=null,i=0;for(let a of n){let n=c(e,t,a);n<=0||(n>i||n===i&&r!==null&&a.key<r.key)&&(i=n,r=a)}return r}function u(e,t){if(Array.isArray(t.conditions))for(let n of t.conditions)e.registerCondition(n)}function d(e,t){e.registerExperience({id:t.id,key:t.key,name:t.name,targets:t.targets,nodes:t.nodes,edges:t.edges,condition:t.condition,initializeOpen:t.initializeOpen,componentName:t.componentName})}function f(e){return typeof e!=`object`||!e?!1:`id`in e&&`key`in e&&`type`in e&&`name`in e}function p(e,t){if(Array.isArray(t.fields))for(let n of t.fields)f(n)&&e.registerField(n)}function m(e,t){if(!Array.isArray(t.steps))return;let n=new Map(t.fields.map(e=>[e.id,e.key]));for(let r of t.steps){let t=[];for(let e of r.fieldIds??[]){let i=n.get(e);if(i===void 0){`${r.key}${e}`;continue}t.push(i)}let i=r.layoutContentId?e.contents.getById(r.layoutContentId):null;e.registerStep({id:r.id,key:r.key,name:r.name,fieldKeys:t,layoutName:r.layoutName,...r.layoutContentId!==void 0&&{layoutContentId:r.layoutContentId,layoutContentStore:i}})}}function h(e,t){if(Array.isArray(t.experiences))for(let n of t.experiences)d(e,n)}function g(e,t,n){y(e,t,n.isPreview,n.sessionId),u(e,t),p(e,t),m(e,t),h(e,t)}function _(e){let t=e.searchParams[`preview-token`];if(t&&t.length>0)return t[0]}function v(t){let n=new Map,r=t.searchParams.feature;if(!r)return n;for(let t of r){let r=e.r(t);r&&n.set(r.id,r.bucket)}return n}function y(e,t,n,r){let i=v(e);for(let a of t.features){let t=i.get(a.id);if(t!==void 0){b(e,a,t);continue}x(e,a,n,r)}}function b(e,t,n){e.registerFeature(t.id,{key:`${n}`,name:t.name,weight:t.weight,...t.valueType!==void 0&&{valueType:t.valueType},...t.variants!==void 0&&{variants:t.variants},storage:`session`,decide:()=>n})}function x(e,t,n,r){let o=t.id,s=t.variants;e.registerFeature(o,{key:`v${t.version}`,name:t.name,enabled:t.enabled,weight:t.weight,storage:n?`session`:`local`,valueType:t.valueType,variants:s,decide:()=>t.valueType===`text`?!s||s.length===0?(`${o}`,!1):l(r,o,s)?.value??!1:a(i(r,o),t.weight)})}function S(e,t){for(let n of[...t.references??[],...t.content])e.registerContent({id:n.id,contentModelKey:n.contentModelKey,data:n.data})}function C(e,t){let n=new Map;return(r,i)=>{let a=n.get(r.id);if(a)return a;let o=(async()=>{try{let n=await t(r,i);return n&&S(e,n),n}finally{n.delete(r.id)}})();return n.set(r.id,o),o}}function w(e,t){let n=new Set(t&&Array.isArray(t.experiences)?t.experiences.map(e=>e.id):[]);return(t,r)=>n.has(t.id)?e(t,r):Promise.resolve(null)}function T(){return{name:`dynamic-experiences`,setup:e=>({onStart:(0,t.attach)({source:e.session.store.map(e=>e.id),effect:async t=>{let n=_(e),r=n!==void 0,i=n===void 0?void 0:{previewToken:n},a=await e.getProjectConfig(n===void 0?void 0:{previewToken:n}).catch(e=>null);if(e.contentLoader=C(e,w(t=>e.getExperienceContent(t,i),a)),!a)return;let o=e.seededVersionId;if(o!==null&&o!==a.versionId){e.versionSkew={seeded:o,resolved:a.versionId},`${a.versionId}${o}`;return}e.previewEmbedderOrigins=a.previewEmbedderOrigins??null,g(e,a,{isPreview:r,sessionId:t})}})})}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return T}});
1
+ require("./logger-CSTvAyyB.cjs");const e=require("./version-BvLZaTMC.cjs");require("./api-qiqq8lgz.cjs");let t=require("effector");function n(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return t>>>0}function r(e){let t=e;return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}function i(e,t){return r(n(`${e}:${t}`))%100}function a(e,t){return t<=0?!1:t>=100||e<t}var o=4294967296;function s(e,t,i){return(r(n(`${e}:${t}:${i}`))+.5)/o}function c(e,t,n){return n.weight<=0?0:n.weight/-Math.log(s(e,t,n.key))}function l(e,t,n){let r=null,i=0;for(let a of n){let n=c(e,t,a);n<=0||(n>i||n===i&&r!==null&&a.key<r.key)&&(i=n,r=a)}return r}function u(e,t){if(Array.isArray(t.conditions))for(let n of t.conditions)e.registerCondition(n)}function d(e,t){e.registerExperience({id:t.id,key:t.key,name:t.name,targets:t.targets,nodes:t.nodes,edges:t.edges,condition:t.condition,initializeOpen:t.initializeOpen,componentName:t.componentName})}function f(e){return typeof e!=`object`||!e?!1:`id`in e&&`key`in e&&`type`in e&&`name`in e}function p(e,t){if(Array.isArray(t.fields))for(let n of t.fields)f(n)&&e.registerField(n)}function m(e,t){if(!Array.isArray(t.steps))return;let n=new Map(t.fields.map(e=>[e.id,e.key]));for(let r of t.steps){let t=[];for(let e of r.fieldIds??[]){let i=n.get(e);if(i===void 0){`${r.key}${e}`;continue}t.push(i)}let i=r.layoutContentId?e.contents.getById(r.layoutContentId):null;e.registerStep({id:r.id,key:r.key,name:r.name,fieldKeys:t,layoutName:r.layoutName,...r.layoutContentId!==void 0&&{layoutContentId:r.layoutContentId,layoutContentStore:i}})}}function h(e,t){if(Array.isArray(t.experiences))for(let n of t.experiences)d(e,n)}function g(e,t,n){y(e,t,n.isPreview,n.sessionId),u(e,t),p(e,t),m(e,t),h(e,t)}function _(e){let t=e.searchParams[`preview-token`];if(t&&t.length>0)return t[0]}function v(t){let n=new Map,r=t.searchParams.feature;if(!r)return n;for(let t of r){let r=e.r(t);r&&n.set(r.id,r.bucket)}return n}function y(e,t,n,r){let i=v(e);for(let a of t.features){let t=i.get(a.id);if(t!==void 0){b(e,a,t);continue}x(e,a,n,r)}}function b(e,t,n){e.registerFeature(t.id,{key:`${n}`,name:t.name,enabled:!0,weight:t.weight,...t.valueType!==void 0&&{valueType:t.valueType},...t.variants!==void 0&&{variants:t.variants},storage:`session`,decide:()=>n})}function x(e,t,n,r){let o=t.id,s=t.variants;e.registerFeature(o,{key:`v${t.version}`,name:t.name,enabled:t.enabled,weight:t.weight,storage:n?`session`:`local`,valueType:t.valueType,variants:s,decide:()=>t.valueType===`text`?!s||s.length===0?(`${o}`,!1):l(r,o,s)?.value??!1:a(i(r,o),t.weight)})}function S(e,t){for(let n of[...t.references??[],...t.content])e.registerContent({id:n.id,contentModelKey:n.contentModelKey,data:n.data})}function C(e,t){let n=new Map;return(r,i)=>{let a=n.get(r.id);if(a)return a;let o=(async()=>{try{let n=await t(r,i);return n&&S(e,n),n}finally{n.delete(r.id)}})();return n.set(r.id,o),o}}function w(e,t){let n=new Set(t&&Array.isArray(t.experiences)?t.experiences.map(e=>e.id):[]);return(t,r)=>n.has(t.id)?e(t,r):Promise.resolve(null)}function T(){return{name:`dynamic-experiences`,setup:e=>({onStart:(0,t.attach)({source:e.session.store.map(e=>e.id),effect:async t=>{let n=_(e),r=n!==void 0,i=n===void 0?void 0:{previewToken:n},a=await e.getProjectConfig(n===void 0?void 0:{previewToken:n}).catch(e=>null);if(e.contentLoader=C(e,w(t=>e.getExperienceContent(t,i),a)),!a)return;let o=e.seededVersionId;if(o!==null&&o!==a.versionId){e.versionSkew={seeded:o,resolved:a.versionId},`${a.versionId}${o}`;return}e.previewEmbedderOrigins=a.previewEmbedderOrigins??null,g(e,a,{isPreview:r,sessionId:t})}})})}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return T}});
@@ -1,6 +1,6 @@
1
1
  import "./logger-DMN6TxJJ.js";
2
- import { r as e } from "./version-DXDZM7eT.js";
3
- import "./api-DU4j3Qw0.js";
2
+ import { r as e } from "./version-VvasRUfR.js";
3
+ import "./api-DbMJli3H.js";
4
4
  import { attach as t } from "effector";
5
5
  //#region src/plugins/dynamic-experiences/hash.ts
6
6
  function n(e) {
@@ -118,6 +118,7 @@ function b(e, t, n) {
118
118
  e.registerFeature(t.id, {
119
119
  key: `${n}`,
120
120
  name: t.name,
121
+ enabled: !0,
121
122
  weight: t.weight,
122
123
  ...t.valueType !== void 0 && { valueType: t.valueType },
123
124
  ...t.variants !== void 0 && { variants: t.variants },
@@ -0,0 +1 @@
1
+ require("./logger-CSTvAyyB.cjs");const e=require("./api-qiqq8lgz.cjs"),t=require("./registry-C1t8l3t9.cjs");function n(e,t){try{return e?.onRequest(t)??{}}catch{return{}}}function r(e,t,n){try{e.onSettled?.(t,n)}catch{}}async function i(e,t,i){let a=n(e?.(),t),o;try{let e=await i(a.headers,e=>{o=e});return r(a,e!==null,o),e}catch(e){throw r(a,!1,o),e}}var a=`bundle`,o=`api`;async function s(){try{let e=await import(`virtual:picked/data`);return t.r(e)?e:null}catch{return null}}function c(e){if(e===void 0||t.r(e))return e}function l(n){let{apiUrl:r,projectId:l,previewToken:u,signal:d,getRequestObserver:f}=n,p=!!u,m=p?o:n.mode,h=c(p?void 0:n.bundle),g=p?void 0:n.projectConfig,_=n.getContent,v={mode:m??o,manifest:null},y,b,x=new Map;function S(){if(m===o)return Promise.resolve(null);if(h)return Promise.resolve(h);let e=t.t();return e?Promise.resolve(e):(y??=s(),y)}function C(e){v.mode=e?a:o,v.manifest=e?e.manifestMetadata:null}async function w(){if(g)return C(await S()),g;let t=await S();return C(t),t?t.projectConfig:m===a?null:i(f,`project-config`,(t,n)=>e.n(r,l,{...u!==void 0&&{previewToken:u},...d!==void 0&&{signal:d},...t!==void 0&&{headers:t},...n!==void 0&&{onResponse:n}}))}async function T(t,n){let o=u===void 0?void 0:{previewToken:u};if(_)return _(t,o);let s=await S();if(C(s),s)try{return await s.experienceContent(t,o)}catch{return`${t.id}`,null}if(m===a)return null;let c=n??d;return i(f,`experience-content`,(n,i)=>e.t(r,l,t.id,{...u!==void 0&&{previewToken:u},...c!==void 0&&{signal:c},...n!==void 0&&{headers:n},...i!==void 0&&{onResponse:i}}))}return{meta:v,getProjectConfig:()=>(b??=w(),b),getContent:(e,t)=>{let n=x.get(e.id);if(n)return n;let r=T(e,t?.signal).finally(()=>{x.delete(e.id)});return x.set(e.id,r),r}}}exports.createPickedDataProvider=l;
@@ -1,5 +1,5 @@
1
1
  import "./logger-DMN6TxJJ.js";
2
- import { n as e, t } from "./api-DU4j3Qw0.js";
2
+ import { n as e, t } from "./api-DbMJli3H.js";
3
3
  import { r as n, t as r } from "./registry-CXZv0uLg.js";
4
4
  //#region src/data-source/request-observer.ts
5
5
  function i(e, t) {
@@ -9,18 +9,20 @@ function i(e, t) {
9
9
  return {};
10
10
  }
11
11
  }
12
- function a(e, t) {
12
+ function a(e, t, n) {
13
13
  try {
14
- e.onSettled?.(t);
14
+ e.onSettled?.(t, n);
15
15
  } catch {}
16
16
  }
17
17
  async function o(e, t, n) {
18
- let r = i(e?.(), t);
18
+ let r = i(e?.(), t), o;
19
19
  try {
20
- let e = await n(r.headers);
21
- return a(r, e !== null), e;
20
+ let e = await n(r.headers, (e) => {
21
+ o = e;
22
+ });
23
+ return a(r, e !== null, o), e;
22
24
  } catch (e) {
23
- throw a(r, !1), e;
25
+ throw a(r, !1, o), e;
24
26
  }
25
27
  }
26
28
  //#endregion
@@ -54,10 +56,11 @@ function d(n) {
54
56
  async function T() {
55
57
  if (_) return w(await C()), _;
56
58
  let t = await C();
57
- return w(t), t ? t.projectConfig : h === s ? null : o(p, "project-config", (t) => e(i, a, {
59
+ return w(t), t ? t.projectConfig : h === s ? null : o(p, "project-config", (t, n) => e(i, a, {
58
60
  ...d !== void 0 && { previewToken: d },
59
61
  ...f !== void 0 && { signal: f },
60
- ...t !== void 0 && { headers: t }
62
+ ...t !== void 0 && { headers: t },
63
+ ...n !== void 0 && { onResponse: n }
61
64
  }));
62
65
  }
63
66
  async function E(e, n) {
@@ -71,10 +74,11 @@ function d(n) {
71
74
  }
72
75
  if (h === s) return null;
73
76
  let l = n ?? f;
74
- return o(p, "experience-content", (n) => t(i, a, e.id, {
77
+ return o(p, "experience-content", (n, r) => t(i, a, e.id, {
75
78
  ...d !== void 0 && { previewToken: d },
76
79
  ...l !== void 0 && { signal: l },
77
- ...n !== void 0 && { headers: n }
80
+ ...n !== void 0 && { headers: n },
81
+ ...r !== void 0 && { onResponse: r }
78
82
  }));
79
83
  }
80
84
  return {
@@ -3,6 +3,7 @@ import type { Predicate } from './entities/predicate/predicate';
3
3
  import type { Action } from './entities/action/action';
4
4
  import type { Plugin } from './entities/plugin/plugin';
5
5
  import type { Feature } from './entities/feature/feature';
6
+ import type { FieldDefinition } from './entities/field/field';
6
7
  import type { AdaptedComponent } from './entities/component/component';
7
8
  import type { LogicRule } from './logic-engine';
8
9
  export interface CreateClientOptions {
@@ -98,6 +99,26 @@ export interface CreateClientOptions {
98
99
  * ```
99
100
  */
100
101
  features?: Record<string, Feature | (() => Feature)>;
102
+ /**
103
+ * Register fields that capture responses in experiences. The record key supplies the
104
+ * field `key` when the definition omits one; an explicit `key` on the definition wins.
105
+ * A function value is resolved once during client setup.
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * fields: {
110
+ * email: {
111
+ * id: 'email',
112
+ * name: 'email',
113
+ * label: 'Email',
114
+ * type: 'text',
115
+ * multiple: false,
116
+ * required: true,
117
+ * }
118
+ * }
119
+ * ```
120
+ */
121
+ fields?: Record<string, FieldDefinition | (() => FieldDefinition)>;
101
122
  /**
102
123
  * Register components for use in dynamic experiences.
103
124
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEtC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,EAAE,CAAA;IAEnE;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAA;IAEpD;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAE7C;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,SAAS,CAAA;IAExB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEtC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,EAAE,CAAA;IAEnE;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAA;IAEpD;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,CAAC,CAAA;IAElE;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAE7C;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,SAAS,CAAA;IAExB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB"}
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import type { ExperienceContentResponse, ProjectConfig } from '@picked/delivery-api-client';
11
11
  import type { ContentLoader, PickedManifestMetadata, VirtualPickedData } from '../plugins/dynamic-experiences/types';
12
- import { type DeliveryRequestObserverSource } from './request-observer';
12
+ import { type DeliveryAPIRequestObserverSource } from './request-observer';
13
13
  import { isVirtualPickedData } from './virtual-data';
14
14
  /** Where a data provider reads project config and CMS content from. */
15
15
  export type PickedDataMode = 'bundle' | 'api';
@@ -42,8 +42,8 @@ export interface PickedDataProviderOptions {
42
42
  getContent?: ContentLoader;
43
43
  /** Abort signal applied to API fetches, such as an `AbortSignal.timeout` deadline. */
44
44
  signal?: AbortSignal;
45
- /** Supplies the observer wrapped around each delivery fetch, read once per request. */
46
- getRequestObserver?: DeliveryRequestObserverSource;
45
+ /** Supplies the observer wrapped around each delivery API fetch, read once per request. */
46
+ getRequestObserver?: DeliveryAPIRequestObserverSource;
47
47
  }
48
48
  /** Read-only description of what a provider resolved to. */
49
49
  export interface PickedDataProviderMeta {
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/data-source/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3F,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EAA0B,KAAK,6BAA6B,EAAE,MAAM,oBAAoB,CAAA;AAE/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAA;AAQ7C,oDAAoD;AACpD,MAAM,WAAW,yBAAyB;IACxC,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,sFAAsF;IACtF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sFAAsF;IACtF,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,sFAAsF;IACtF,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,uFAAuF;IACvF,kBAAkB,CAAC,EAAE,6BAA6B,CAAA;CACnD;AAED,4DAA4D;AAC5D,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,IAAI,EAAE,cAAc,CAAA;IACpB,gFAAgF;IAChF,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACxC;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,4FAA4F;IAC5F,gBAAgB,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACrD,oGAAoG;IACpG,UAAU,EAAE,CACV,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EACvC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAC/B,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYlF;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAyB9B;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CA6K/F"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/data-source/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3F,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAA;AAQ7C,oDAAoD;AACpD,MAAM,WAAW,yBAAyB;IACxC,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,sFAAsF;IACtF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sFAAsF;IACtF,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,sFAAsF;IACtF,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,gCAAgC,CAAA;CACtD;AAED,4DAA4D;AAC5D,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,IAAI,EAAE,cAAc,CAAA;IACpB,gFAAgF;IAChF,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACxC;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,4FAA4F;IAC5F,gBAAgB,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACrD,oGAAoG;IACpG,UAAU,EAAE,CACV,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EACvC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAC/B,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYlF;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAyB9B;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CAkL/F"}
@@ -6,53 +6,57 @@
6
6
  * observer hands back a per-request handle, so each completion correlates to
7
7
  * its own request through the closure that created it.
8
8
  */
9
- /** Which delivery endpoint a request is for. */
10
- export type DeliveryEndpoint = 'project-config' | 'experience-content';
9
+ /** Which delivery API endpoint a request is for. */
10
+ export type DeliveryAPIEndpoint = 'project-config' | 'experience-content';
11
11
  /** A request in flight, from the observer's point of view. */
12
12
  export interface ObservedRequest {
13
13
  /** Headers to merge into this request, such as `traceparent`. */
14
14
  headers?: Record<string, string>;
15
- /** Called once the request has settled. */
16
- onSettled?: (ok: boolean) => void;
15
+ /** Called once the request has settled, with the HTTP status when the server answered. */
16
+ onSettled?: (ok: boolean, status?: number) => void;
17
17
  }
18
- /** Receives delivery requests as they are made. */
19
- export interface DeliveryRequestObserver {
18
+ /** Receives delivery API requests as they are made. */
19
+ export interface DeliveryAPIRequestObserver {
20
20
  /** Called as a request begins; returns headers to add and a completion callback. */
21
- onRequest: (endpoint: DeliveryEndpoint) => ObservedRequest;
21
+ onRequest: (endpoint: DeliveryAPIEndpoint) => ObservedRequest;
22
22
  }
23
23
  /** Supplies the observer in force for the next request, or `null` when there is none. */
24
- export type DeliveryRequestObserverSource = () => DeliveryRequestObserver | null | undefined;
24
+ export type DeliveryAPIRequestObserverSource = () => DeliveryAPIRequestObserver | null | undefined;
25
25
  /**
26
26
  * Notifies the observer that a request is starting.
27
27
  *
28
- * @param {DeliveryRequestObserver | null} [observer] - The observer to notify, if any.
29
- * @param {DeliveryEndpoint} endpoint - Which endpoint is being called.
28
+ * @param {DeliveryAPIRequestObserver | null} [observer] - The observer to notify, if any.
29
+ * @param {DeliveryAPIEndpoint} endpoint - Which endpoint is being called.
30
30
  * @returns {ObservedRequest} Headers to merge and a completion callback, both possibly absent.
31
31
  * @example const observed = beginObservedRequest(observer, 'project-config')
32
32
  */
33
- export declare function beginObservedRequest(observer: DeliveryRequestObserver | null | undefined, endpoint: DeliveryEndpoint): ObservedRequest;
33
+ export declare function beginObservedRequest(observer: DeliveryAPIRequestObserver | null | undefined, endpoint: DeliveryAPIEndpoint): ObservedRequest;
34
34
  /**
35
35
  * Notifies the observer that a request has settled.
36
36
  *
37
37
  * @param {ObservedRequest} observed - The handle returned when the request began.
38
38
  * @param {boolean} ok - Whether the request produced a usable result.
39
+ * @param {number} [status] - HTTP status the server answered with, when it answered.
39
40
  * @returns {void}
40
- * @example settleObservedRequest(observed, true)
41
+ * @example settleObservedRequest(observed, true, 200)
41
42
  */
42
- export declare function settleObservedRequest(observed: ObservedRequest, ok: boolean): void;
43
+ export declare function settleObservedRequest(observed: ObservedRequest, ok: boolean, status?: number): void;
43
44
  /**
44
- * Runs a delivery fetch with the observer wrapped around it.
45
+ * Runs a delivery API fetch with the observer wrapped around it.
45
46
  *
46
47
  * The observer is read once per request, so one registered after an earlier fetch
47
48
  * still applies to this one. Its headers are handed to `run` to travel with the
48
49
  * request, and the same handle receives the outcome.
49
50
  *
51
+ * `run` reports the HTTP status through the `onResponse` callback it is handed.
52
+ * A fetch that never reached the server leaves the status absent.
53
+ *
50
54
  * @template T - The value the fetch resolves to.
51
- * @param {DeliveryRequestObserverSource} [source] - Supplies the observer for this request.
52
- * @param {DeliveryEndpoint} endpoint - Which endpoint is being called.
53
- * @param {(headers?: Record<string, string>) => Promise<T | null>} run - The fetch to perform.
55
+ * @param {DeliveryAPIRequestObserverSource} [source] - Supplies the observer for this request.
56
+ * @param {DeliveryAPIEndpoint} endpoint - Which endpoint is being called.
57
+ * @param {(headers?: Record<string, string>, onResponse?: (status: number) => void) => Promise<T | null>} run - The fetch to perform.
54
58
  * @returns {Promise<T | null>} Whatever the fetch resolved to.
55
- * @example observeDeliveryRequest(source, 'project-config', (headers) => fetchProject(url, id, { headers }))
59
+ * @example observeDeliveryAPIRequest(source, 'project-config', (headers, onResponse) => fetchProject(url, id, { headers, onResponse }))
56
60
  */
57
- export declare function observeDeliveryRequest<T>(source: DeliveryRequestObserverSource | undefined, endpoint: DeliveryEndpoint, run: (headers?: Record<string, string>) => Promise<T | null>): Promise<T | null>;
61
+ export declare function observeDeliveryAPIRequest<T>(source: DeliveryAPIRequestObserverSource | undefined, endpoint: DeliveryAPIEndpoint, run: (headers?: Record<string, string>, onResponse?: (status: number) => void) => Promise<T | null>): Promise<T | null>;
58
62
  //# sourceMappingURL=request-observer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-observer.d.ts","sourceRoot":"","sources":["../../../src/data-source/request-observer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gDAAgD;AAChD,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,oBAAoB,CAAA;AAEtE,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;CAClC;AAED,mDAAmD;AACnD,MAAM,WAAW,uBAAuB;IACtC,oFAAoF;IACpF,SAAS,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,eAAe,CAAA;CAC3D;AAED,yFAAyF;AACzF,MAAM,MAAM,6BAA6B,GAAG,MAAM,uBAAuB,GAAG,IAAI,GAAG,SAAS,CAAA;AAE5F;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,EACpD,QAAQ,EAAE,gBAAgB,GACzB,eAAe,CAOjB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAMlF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,MAAM,EAAE,6BAA6B,GAAG,SAAS,EACjD,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAC3D,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAYnB"}
1
+ {"version":3,"file":"request-observer.d.ts","sourceRoot":"","sources":["../../../src/data-source/request-observer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,oBAAoB,CAAA;AAEzE,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,0FAA0F;IAC1F,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACnD;AAED,uDAAuD;AACvD,MAAM,WAAW,0BAA0B;IACzC,oFAAoF;IACpF,SAAS,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,eAAe,CAAA;CAC9D;AAED,yFAAyF;AACzF,MAAM,MAAM,gCAAgC,GAAG,MAAM,0BAA0B,GAAG,IAAI,GAAG,SAAS,CAAA;AAElG;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,EACvD,QAAQ,EAAE,mBAAmB,GAC5B,eAAe,CAOjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,OAAO,EACX,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAMN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,MAAM,EAAE,gCAAgC,GAAG,SAAS,EACpD,QAAQ,EAAE,mBAAmB,EAC7B,GAAG,EAAE,CACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,KAClC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GACrB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAenB"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /** @file Field entity — Effector stores, types, and CRUD helpers for experience fields. */
2
2
  import { type Store } from 'effector';
3
3
  import type { LogicRule } from '../../logic-engine';
4
+ import { type FieldPolicies } from './policies';
4
5
  export type FieldsStore = ReturnType<typeof createFieldIndex>;
5
6
  export type PrimitiveFieldValue = string | number | boolean | null;
6
7
  export type FieldOptionValue = string | number | boolean;
@@ -37,14 +38,12 @@ export interface FieldBase<TOptionValue = JsonValue> {
37
38
  validation?: LogicRule;
38
39
  /**
39
40
  * Privacy policies governing what leaves the page. Both are opt-in: a value is
40
- * tracked only under `doNotTrackValue: false` and persisted only under
41
- * `doNotStoreValue: false`, so an absent policy captures nothing. Neither affects
42
- * the in-memory response store.
41
+ * tracked only under `trackValue: true` and persisted only under `storeValue: true`,
42
+ * so an absent policy captures nothing. Registration resolves whatever the field
43
+ * states into all four flags, so a registered field always answers on `trackValue`
44
+ * and `storeValue`.
43
45
  */
44
- policies?: {
45
- doNotTrackValue?: boolean;
46
- doNotStoreValue?: boolean;
47
- };
46
+ policies?: FieldPolicies;
48
47
  options?: FieldOptionArray<TOptionValue> | null;
49
48
  }
50
49
  export interface FieldTextSingular extends FieldBase<string> {
@@ -88,6 +87,26 @@ export interface FieldBooleanMultiple extends FieldBase<boolean> {
88
87
  defaultValue?: boolean[];
89
88
  }
90
89
  export type Field = FieldTextSingular | FieldTextMultiple | FieldNumberSingular | FieldNumberMultiple | FieldObjectSingular | FieldObjectMultiple | FieldBooleanSingular | FieldBooleanMultiple;
90
+ type FieldWithOptionalKey<T> = T extends Field ? Omit<T, 'key'> & {
91
+ key?: string;
92
+ } : never;
93
+ /**
94
+ * A {@link Field} whose `key` is optional. A registration site that accepts one supplies
95
+ * the key from its own context — `createClient({ fields })` uses the record key.
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const email: FieldDefinition = {
100
+ * id: 'email',
101
+ * name: 'email',
102
+ * label: 'Email',
103
+ * type: 'text',
104
+ * multiple: false,
105
+ * required: true,
106
+ * }
107
+ * ```
108
+ */
109
+ export type FieldDefinition = FieldWithOptionalKey<Field>;
91
110
  declare const createFieldIndexFactory: () => {
92
111
  register: (field: Field) => void;
93
112
  update: (key: FieldBase['key'], updates: Partial<Field>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../../src/entities/field/field.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../../src/entities/field/field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /** @file Field privacy policies — the policy shape and the normalisation applied at registration. */
2
+ /**
3
+ * Privacy policies governing what leaves the page. Both are opt-in, and neither affects
4
+ * the in-memory response store.
5
+ */
6
+ export interface FieldPolicies {
7
+ /** Sends the captured value to analytics. */
8
+ trackValue?: boolean;
9
+ /** Persists the captured value in browser storage. */
10
+ storeValue?: boolean;
11
+ /**
12
+ * @deprecated Use `trackValue`. `doNotTrackValue: false` will be removed in a future version.
13
+ */
14
+ doNotTrackValue?: boolean;
15
+ /**
16
+ * @deprecated Use `storeValue`. `doNotStoreValue: false` will be removed in a future version.
17
+ */
18
+ doNotStoreValue?: boolean;
19
+ }
20
+ /**
21
+ * Resolves the policies a field states into all four flags, so every reader downstream
22
+ * consults `trackValue` and `storeValue` alone. The positive flag decides whenever the
23
+ * field states it; otherwise the deprecated flag grants capture at an explicit `false`.
24
+ * An absent `policies` object and an absent flag both withhold the value.
25
+ *
26
+ * @param {FieldPolicies | undefined} policies - The policies as the field states them.
27
+ * @returns {Required<FieldPolicies>} All four flags, each deprecated flag the inverse of its replacement.
28
+ * @example
29
+ * ```typescript
30
+ * normaliseFieldPolicies({ doNotTrackValue: false })
31
+ * // { trackValue: true, storeValue: false, doNotTrackValue: false, doNotStoreValue: true }
32
+ * ```
33
+ */
34
+ export declare function normaliseFieldPolicies(policies?: FieldPolicies): Required<FieldPolicies>;
35
+ //# sourceMappingURL=policies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../../../src/entities/field/policies.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAErG;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAQD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,CAWxF"}
@@ -12,6 +12,7 @@ export type * from './entities/experience/experience';
12
12
  export type * from './entities/step/step';
13
13
  export type * from './entities/feature/feature';
14
14
  export type * from './entities/field/field';
15
+ export type * from './entities/field/policies';
15
16
  export type * from './entities/framework/framework';
16
17
  export type * from './entities/history/history';
17
18
  export type * from './entities/plugin/plugin';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,cAAc,WAAW,CAAA;AACzB,mBAAmB,UAAU,CAAA;AAC7B,mBAAmB,0BAA0B,CAAA;AAC7C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,8BAA8B,CAAA;AACjD,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,oCAAoC,CAAA;AACvD,mBAAmB,oDAAoD,CAAA;AACvE,mBAAmB,kCAAkC,CAAA;AACrD,mBAAmB,sBAAsB,CAAA;AACzC,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,wBAAwB,CAAA;AAC3C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,0BAA0B,CAAA;AAC7C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,uBAAuB,CAAA;AAC1C,mBAAmB,8BAA8B,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,YAAY,GACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,cAAc,WAAW,CAAA;AACzB,mBAAmB,UAAU,CAAA;AAC7B,mBAAmB,0BAA0B,CAAA;AAC7C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,8BAA8B,CAAA;AACjD,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,oCAAoC,CAAA;AACvD,mBAAmB,oDAAoD,CAAA;AACvE,mBAAmB,kCAAkC,CAAA;AACrD,mBAAmB,sBAAsB,CAAA;AACzC,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,wBAAwB,CAAA;AAC3C,mBAAmB,2BAA2B,CAAA;AAC9C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,0BAA0B,CAAA;AAC7C,mBAAmB,gCAAgC,CAAA;AACnD,mBAAmB,4BAA4B,CAAA;AAC/C,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,uBAAuB,CAAA;AAC1C,mBAAmB,8BAA8B,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,YAAY,GACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -27,7 +27,7 @@ interface Lifecycle {
27
27
  }
28
28
  /**
29
29
  * Creates the lifecycle module for a Picked client. Owns the start chain as an effector
30
- * event graph: `start` triggers a fan-out of effects (ping, plugin hooks, domInteractive)
30
+ * event graph: `start` triggers a fan-out of effects (plugin hooks, domInteractive)
31
31
  * whose `.done` events drive the next phases via `sample`.
32
32
  *
33
33
  * @param {object} params - Factory params.
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/lifecycle.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAOhD,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE,8GAA8G;AAC9G,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,6DAA6D;AAC7D,UAAU,SAAS;IACjB,8HAA8H;IAC9H,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAE1B,4CAA4C;IAC5C,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,2FAA2F;IAC3F,uBAAuB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAC3D,wFAAwF;IACxF,oBAAoB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IACxD,qDAAqD;IACrD,mBAAmB,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAElD,sDAAsD;IACtD,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjE,iFAAiF;IACjF,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C,8EAA8E;IAC9E,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CACxC;AA4OD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAErE"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/lifecycle.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAMhD,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE,8GAA8G;AAC9G,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,6DAA6D;AAC7D,UAAU,SAAS;IACjB,8HAA8H;IAC9H,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAE1B,4CAA4C;IAC5C,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,2FAA2F;IAC3F,uBAAuB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAC3D,wFAAwF;IACxF,oBAAoB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IACxD,qDAAqD;IACrD,mBAAmB,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAElD,sDAAsD;IACtD,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjE,iFAAiF;IACjF,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C,8EAA8E;IAC9E,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CACxC;AAuOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAErE"}
@@ -18,10 +18,10 @@ import type { Field } from './entities/field/field';
18
18
  import type { ExperienceStep } from './entities/step/step';
19
19
  import type { Content, ContentDataPatch } from './entities/content/content';
20
20
  import type { ContentLoader } from './plugins/dynamic-experiences/types';
21
- import type { DeliveryRequestObserver } from './data-source/request-observer';
22
21
  import type { Action } from './entities/action/action';
23
22
  import { type Condition } from './entities/condition/condition';
24
23
  import { type StartTiming } from './utils/user-timing';
24
+ import { type ClientTelemetry } from './utils/client-telemetry';
25
25
  import type { SessionEntity } from './entities/session/session';
26
26
  /**
27
27
  * Provenance metadata describing where the Picked client's project config and
@@ -78,18 +78,8 @@ export declare class Picked {
78
78
  previewEmbedderOrigins: string[] | null;
79
79
  /** Config of every registered plugin, keyed by name in registration order. */
80
80
  readonly plugins: PluginConfigIndex;
81
- private deliveryObserver;
82
- /**
83
- * Registers the observer wrapped around this client's delivery requests, or clears it.
84
- *
85
- * The observer sees each request as it starts, can add headers to it, and is told the
86
- * outcome. It observes this client alone.
87
- *
88
- * @param {DeliveryRequestObserver | null} next - The observer to install, or `null` to remove it.
89
- * @returns {void}
90
- * @example client.setDeliveryRequestObserver({ onRequest: () => ({ headers: { traceparent } }) })
91
- */
92
- setDeliveryRequestObserver: (next: DeliveryRequestObserver | null) => void;
81
+ /** This client's telemetry hooks. */
82
+ readonly telemetry: ClientTelemetry;
93
83
  private readonly dataProviders;
94
84
  readonly eventBus: EventCallable<EventBusPayload>;
95
85
  readonly events: EventHistoryStore;
@@ -436,6 +426,7 @@ export declare class Picked {
436
426
  private setupFeatures;
437
427
  private setupPredicates;
438
428
  private setupActions;
429
+ private setupFields;
439
430
  private setupComponents;
440
431
  getPluginConfig: (pluginName: string) => PluginConfigIndex[string] | Record<string, unknown>;
441
432
  }