@picked/client 0.0.1-dev.1787543060859 → 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 (70) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/api-DbMJli3H.js +22 -0
  3. package/dist/api-qiqq8lgz.cjs +1 -0
  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/how-to/fill-and-publish-a-page.md +18 -2
  11. package/dist/docs/reference/dashboard/content/pages.mdx +25 -0
  12. package/dist/docs/reference/dashboard/fields.mdx +17 -11
  13. package/dist/docs/reference/delivery-api/preview-caching-crawling.md +1 -1
  14. package/dist/docs/reference/sdk/features.md +5 -0
  15. package/dist/docs/reference/sdk/fields.md +62 -16
  16. package/dist/docs/reference/sdk/type-generation.md +18 -7
  17. package/dist/docs/reference/tools/mcp.md +3 -1
  18. package/dist/esm/index.js +468 -439
  19. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  20. package/dist/esm/plugins/responses-browser-storage/index.js +50 -16
  21. package/dist/esm/plugins/responses-indexeddb/index.js +1 -1
  22. package/dist/esm/plugins/telemetry/index.js +46 -47
  23. package/dist/esm/server/index.js +1 -1
  24. package/dist/{plugin-BcFzHPC7.cjs → plugin-BcLaCLm1.cjs} +1 -1
  25. package/dist/{plugin-L5y4NdFX.js → plugin-De_BJSwE.js} +3 -2
  26. package/dist/provider-C_9u0yGJ.cjs +1 -0
  27. package/dist/provider-ovM-CBX_.js +98 -0
  28. package/dist/types/client.d.ts +21 -0
  29. package/dist/types/client.d.ts.map +1 -1
  30. package/dist/types/data-source/api.d.ts.map +1 -1
  31. package/dist/types/data-source/provider.d.ts +3 -0
  32. package/dist/types/data-source/provider.d.ts.map +1 -1
  33. package/dist/types/data-source/request-observer.d.ts +38 -22
  34. package/dist/types/data-source/request-observer.d.ts.map +1 -1
  35. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  36. package/dist/types/entities/field/field.d.ts +29 -4
  37. package/dist/types/entities/field/field.d.ts.map +1 -1
  38. package/dist/types/entities/field/policies.d.ts +35 -0
  39. package/dist/types/entities/field/policies.d.ts.map +1 -0
  40. package/dist/types/entities/plugin/plugin.d.ts +3 -3
  41. package/dist/types/index.d.ts +1 -0
  42. package/dist/types/index.d.ts.map +1 -1
  43. package/dist/types/lifecycle/lifecycle.d.ts +1 -1
  44. package/dist/types/lifecycle/lifecycle.d.ts.map +1 -1
  45. package/dist/types/picked.d.ts +9 -11
  46. package/dist/types/picked.d.ts.map +1 -1
  47. package/dist/types/plugins/create-experience/create-experience.d.ts +3 -8
  48. package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
  49. package/dist/types/plugins/responses-browser-storage/plugin.d.ts +11 -0
  50. package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +1 -1
  51. package/dist/types/plugins/responses-indexeddb/plugin.d.ts.map +1 -1
  52. package/dist/types/plugins/telemetry/emit.d.ts +3 -3
  53. package/dist/types/plugins/telemetry/emit.d.ts.map +1 -1
  54. package/dist/types/plugins/telemetry/plugin.d.ts +10 -1
  55. package/dist/types/plugins/telemetry/plugin.d.ts.map +1 -1
  56. package/dist/types/utils/client-telemetry.d.ts +25 -0
  57. package/dist/types/utils/client-telemetry.d.ts.map +1 -0
  58. package/dist/types/utils/user-timing.d.ts +16 -13
  59. package/dist/types/utils/user-timing.d.ts.map +1 -1
  60. package/dist/{version-BqU6f22c.cjs → version-BvLZaTMC.cjs} +1 -1
  61. package/dist/{version-DAFO6eas.js → version-VvasRUfR.js} +2 -2
  62. package/package.json +3 -3
  63. package/dist/api-CahTmEWe.cjs +0 -1
  64. package/dist/api-DwTNwuWK.js +0 -33
  65. package/dist/provider-BLDm3i8g.cjs +0 -1
  66. package/dist/provider-Dx6VjvZg.js +0 -69
  67. package/dist/request-observer-BXDfOU0V.cjs +0 -1
  68. package/dist/request-observer-DtG0cRfz.js +0 -19
  69. package/dist/types/ping.d.ts +0 -11
  70. package/dist/types/ping.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
- import { t as e } from "../../../plugin-L5y4NdFX.js";
2
- import { n as t, t as n } from "../../../api-DwTNwuWK.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 ? [] : [[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
- 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).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
@@ -1,15 +1,14 @@
1
1
  import { f as e, p as t } from "../../../supports-CO9bJGNl.js";
2
- import { n } from "../../../request-observer-DtG0cRfz.js";
3
- import { createSpanId as r, createTraceId as i, formatTraceparent as a, toUnixNano as o } from "@picked/telemetry";
2
+ import { createSpanId as n, createTraceId as r, formatTraceparent as i, toUnixNano as a } from "@picked/telemetry";
4
3
  //#region src/plugins/telemetry/plugin-summary.ts
5
- var s = 100;
6
- function c(e) {
7
- return [...e].sort((e, t) => e.localeCompare(t)).slice(0, s);
4
+ var o = 100;
5
+ function s(e) {
6
+ return [...e].sort((e, t) => e.localeCompare(t)).slice(0, o);
8
7
  }
9
8
  //#endregion
10
9
  //#region src/plugins/telemetry/plugin.ts
11
- var l = "telemetry", u = "https://production.otel.picked.app/v1/traces", d = "picked:start";
12
- function f() {
10
+ var c = "telemetry", l = 5e3;
11
+ function u() {
13
12
  try {
14
13
  let e = t.navigator;
15
14
  return "globalPrivacyControl" in e && e.globalPrivacyControl === !0 || e.doNotTrack === "1";
@@ -17,79 +16,79 @@ function f() {
17
16
  return !1;
18
17
  }
19
18
  }
20
- function p() {
21
- try {
22
- return performance.getEntriesByName(d, "measure").at(-1);
23
- } catch {
24
- return;
25
- }
26
- }
27
- function m() {
19
+ function d() {
28
20
  return performance.timeOrigin + performance.now();
29
21
  }
30
- function h(e) {
22
+ function f(e) {
31
23
  try {
32
24
  t.addEventListener("pagehide", e), t.document.addEventListener("visibilitychange", () => {
33
25
  t.document.visibilityState === "hidden" && e();
34
26
  });
35
27
  } catch {}
36
28
  }
37
- function g(t) {
29
+ function p(t) {
38
30
  return {
39
- name: l,
40
- setup: (s) => {
41
- if (!e() || f() || !(Math.random() < (t?.sampleRate ?? 1))) return;
42
- let c = t?.endpoint ?? u, l = i(), d = r(), g = [], b = () => void y(c, _(s), g);
43
- h(b), n({ onRequest: (e) => {
44
- let t = r(), n = m();
31
+ name: c,
32
+ setup: (o) => {
33
+ if (!e() || u() || !(Math.random() < (t?.sampleRate ?? 1))) return;
34
+ let s = t?.endpoint, c = r(), p = n(), _ = [], v, y = () => {
35
+ clearTimeout(v), v = void 0, g(s, m(o), _);
36
+ }, b = () => {
37
+ v ??= setTimeout(y, l);
38
+ };
39
+ f(y), o.telemetry.observeDeliveryAPIRequests({ onRequest: (e) => {
40
+ let t = n(), r = d();
45
41
  return {
46
- headers: { traceparent: a(l, t, !0) },
47
- onSettled: (r) => {
48
- g.push({
42
+ headers: { traceparent: i(c, t, !0) },
43
+ onSettled: (n, i) => {
44
+ _.push({
49
45
  name: `picked.delivery.${e}`,
50
- traceId: l,
46
+ traceId: c,
51
47
  spanId: t,
52
- parentSpanId: d,
53
- startTimeUnixNano: o(n),
54
- endTimeUnixNano: o(m()),
55
- attributes: { "picked.endpoint": e },
56
- status: r ? "ok" : "error"
57
- }), g.length >= 50 && b();
48
+ parentSpanId: p,
49
+ startTimeUnixNano: a(r),
50
+ endTimeUnixNano: a(d()),
51
+ attributes: {
52
+ "picked.endpoint": e,
53
+ ...i !== void 0 && { "http.response.status_code": i }
54
+ },
55
+ status: n ? "ok" : "error"
56
+ }), _.length >= 50 ? y() : b();
58
57
  }
59
58
  };
60
- } }), s.eventBus.watch((e) => {
59
+ } }), o.eventBus.watch((e) => {
61
60
  if (e.type !== "ready") return;
62
- let t = p();
61
+ let t = o.performance.startMeasure;
63
62
  if (t) {
64
63
  let e = performance.timeOrigin + t.startTime;
65
- g.push({
64
+ _.push({
66
65
  name: "picked.start",
67
- traceId: l,
68
- spanId: d,
69
- startTimeUnixNano: o(e),
70
- endTimeUnixNano: o(e + t.duration),
71
- attributes: v(s),
66
+ traceId: c,
67
+ spanId: p,
68
+ startTimeUnixNano: a(e),
69
+ endTimeUnixNano: a(e + t.duration),
70
+ attributes: h(o),
72
71
  status: "ok"
73
72
  });
74
73
  }
75
- b();
74
+ y();
76
75
  });
77
76
  }
78
77
  };
79
78
  }
80
- function _(e) {
79
+ function m(e) {
81
80
  return {
82
81
  "service.name": "picked-sdk",
83
82
  "picked.project_id": e.projectId
84
83
  };
85
84
  }
86
- function v(e) {
85
+ function h(e) {
87
86
  return {
88
87
  "picked.data.mode": e.dataSource ? "bundle" : "api",
89
- "picked.sdk.plugins": c(e.pluginNames).join(",")
88
+ "picked.sdk.plugins": s(Object.keys(e.plugins)).join(",")
90
89
  };
91
90
  }
92
- async function y(e, t, n) {
91
+ async function g(e, t, n) {
93
92
  if (n.length === 0) return;
94
93
  let r = n.splice(0, n.length);
95
94
  try {
@@ -98,4 +97,4 @@ async function y(e, t, n) {
98
97
  } catch {}
99
98
  }
100
99
  //#endregion
101
- export { l as TELEMETRY_PLUGIN_NAME, g as telemetryPlugin };
100
+ export { c as TELEMETRY_PLUGIN_NAME, p as telemetryPlugin };
@@ -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-L5y4NdFX.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-BqU6f22c.cjs");require("./api-CahTmEWe.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-DAFO6eas.js";
3
- import "./api-DwTNwuWK.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;
@@ -0,0 +1,98 @@
1
+ import "./logger-DMN6TxJJ.js";
2
+ import { n as e, t } from "./api-DbMJli3H.js";
3
+ import { r as n, t as r } from "./registry-CXZv0uLg.js";
4
+ //#region src/data-source/request-observer.ts
5
+ function i(e, t) {
6
+ try {
7
+ return e?.onRequest(t) ?? {};
8
+ } catch {
9
+ return {};
10
+ }
11
+ }
12
+ function a(e, t, n) {
13
+ try {
14
+ e.onSettled?.(t, n);
15
+ } catch {}
16
+ }
17
+ async function o(e, t, n) {
18
+ let r = i(e?.(), t), o;
19
+ try {
20
+ let e = await n(r.headers, (e) => {
21
+ o = e;
22
+ });
23
+ return a(r, e !== null, o), e;
24
+ } catch (e) {
25
+ throw a(r, !1, o), e;
26
+ }
27
+ }
28
+ //#endregion
29
+ //#region src/data-source/provider.ts
30
+ var s = "bundle", c = "api";
31
+ async function l() {
32
+ try {
33
+ let e = await import("virtual:picked/data");
34
+ return n(e) ? e : null;
35
+ } catch {
36
+ return null;
37
+ }
38
+ }
39
+ function u(e) {
40
+ if (e === void 0 || n(e)) return e;
41
+ }
42
+ function d(n) {
43
+ let { apiUrl: i, projectId: a, previewToken: d, signal: f, getRequestObserver: p } = n, m = !!d, h = m ? c : n.mode, g = u(m ? void 0 : n.bundle), _ = m ? void 0 : n.projectConfig, v = n.getContent, y = {
44
+ mode: h ?? c,
45
+ manifest: null
46
+ }, b, x, S = /* @__PURE__ */ new Map();
47
+ function C() {
48
+ if (h === c) return Promise.resolve(null);
49
+ if (g) return Promise.resolve(g);
50
+ let e = r();
51
+ return e ? Promise.resolve(e) : (b ??= l(), b);
52
+ }
53
+ function w(e) {
54
+ y.mode = e ? s : c, y.manifest = e ? e.manifestMetadata : null;
55
+ }
56
+ async function T() {
57
+ if (_) return w(await C()), _;
58
+ let t = await C();
59
+ return w(t), t ? t.projectConfig : h === s ? null : o(p, "project-config", (t, n) => e(i, a, {
60
+ ...d !== void 0 && { previewToken: d },
61
+ ...f !== void 0 && { signal: f },
62
+ ...t !== void 0 && { headers: t },
63
+ ...n !== void 0 && { onResponse: n }
64
+ }));
65
+ }
66
+ async function E(e, n) {
67
+ let r = d === void 0 ? void 0 : { previewToken: d };
68
+ if (v) return v(e, r);
69
+ let c = await C();
70
+ if (w(c), c) try {
71
+ return await c.experienceContent(e, r);
72
+ } catch {
73
+ return `${e.id}`, null;
74
+ }
75
+ if (h === s) return null;
76
+ let l = n ?? f;
77
+ return o(p, "experience-content", (n, r) => t(i, a, e.id, {
78
+ ...d !== void 0 && { previewToken: d },
79
+ ...l !== void 0 && { signal: l },
80
+ ...n !== void 0 && { headers: n },
81
+ ...r !== void 0 && { onResponse: r }
82
+ }));
83
+ }
84
+ return {
85
+ meta: y,
86
+ getProjectConfig: () => (x ??= T(), x),
87
+ getContent: (e, t) => {
88
+ let n = S.get(e.id);
89
+ if (n) return n;
90
+ let r = E(e, t?.signal).finally(() => {
91
+ S.delete(e.id);
92
+ });
93
+ return S.set(e.id, r), r;
94
+ }
95
+ };
96
+ }
97
+ //#endregion
98
+ export { d as createPickedDataProvider };
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/data-source/api.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACd,MAAM,6BAA6B,CAAA;AA0FpC;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAEpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,yBAAyB,CAM5F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAI/B;AAED;;;;;;;;;;;;;;;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,CAI3C"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/data-source/api.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACd,MAAM,6BAA6B,CAAA;AAgDpC;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAEpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,yBAAyB,CAM5F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAE/B;AAED;;;;;;;;;;;;;;;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,CAE3C"}
@@ -9,6 +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 DeliveryAPIRequestObserverSource } from './request-observer';
12
13
  import { isVirtualPickedData } from './virtual-data';
13
14
  /** Where a data provider reads project config and CMS content from. */
14
15
  export type PickedDataMode = 'bundle' | 'api';
@@ -41,6 +42,8 @@ export interface PickedDataProviderOptions {
41
42
  getContent?: ContentLoader;
42
43
  /** Abort signal applied to API fetches, such as an `AbortSignal.timeout` deadline. */
43
44
  signal?: AbortSignal;
45
+ /** Supplies the observer wrapped around each delivery API fetch, read once per request. */
46
+ getRequestObserver?: DeliveryAPIRequestObserverSource;
44
47
  }
45
48
  /** Read-only description of what a provider resolved to. */
46
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;AAG7C,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;CACrB;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,CAuK/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"}
@@ -1,46 +1,62 @@
1
1
  /**
2
2
  * @file The hook the telemetry plugin uses to observe delivery API requests.
3
3
  *
4
- * The observer hands back a per-request handle, so each completion correlates
5
- * to its own request through the closure that created it.
4
+ * An observer belongs to the client that registered it and is passed in per
5
+ * request, so two clients on one page observe only their own traffic. The
6
+ * observer hands back a per-request handle, so each completion correlates to
7
+ * its own request through the closure that created it.
6
8
  */
7
- /** Which delivery endpoint a request is for. */
8
- export type DeliveryEndpoint = 'project-config' | 'experience-content';
9
+ /** Which delivery API endpoint a request is for. */
10
+ export type DeliveryAPIEndpoint = 'project-config' | 'experience-content';
9
11
  /** A request in flight, from the observer's point of view. */
10
12
  export interface ObservedRequest {
11
13
  /** Headers to merge into this request, such as `traceparent`. */
12
14
  headers?: Record<string, string>;
13
- /** Called once the request has settled. */
14
- 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;
15
17
  }
16
- /** Receives delivery requests as they are made. */
17
- export interface DeliveryRequestObserver {
18
+ /** Receives delivery API requests as they are made. */
19
+ export interface DeliveryAPIRequestObserver {
18
20
  /** Called as a request begins; returns headers to add and a completion callback. */
19
- onRequest: (endpoint: DeliveryEndpoint) => ObservedRequest;
21
+ onRequest: (endpoint: DeliveryAPIEndpoint) => ObservedRequest;
20
22
  }
21
- /**
22
- * Registers the observer, or clears it when passed `null`.
23
- *
24
- * @param {DeliveryRequestObserver | null} next - The observer to install, or `null` to remove it.
25
- * @returns {void}
26
- * @example setDeliveryRequestObserver({ onRequest: () => ({ headers: { traceparent } }) })
27
- */
28
- export declare function setDeliveryRequestObserver(next: DeliveryRequestObserver | null): void;
23
+ /** Supplies the observer in force for the next request, or `null` when there is none. */
24
+ export type DeliveryAPIRequestObserverSource = () => DeliveryAPIRequestObserver | null | undefined;
29
25
  /**
30
26
  * Notifies the observer that a request is starting.
31
27
  *
32
- * @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.
33
30
  * @returns {ObservedRequest} Headers to merge and a completion callback, both possibly absent.
34
- * @example const observed = beginObservedRequest('project-config')
31
+ * @example const observed = beginObservedRequest(observer, 'project-config')
35
32
  */
36
- export declare function beginObservedRequest(endpoint: DeliveryEndpoint): ObservedRequest;
33
+ export declare function beginObservedRequest(observer: DeliveryAPIRequestObserver | null | undefined, endpoint: DeliveryAPIEndpoint): ObservedRequest;
37
34
  /**
38
35
  * Notifies the observer that a request has settled.
39
36
  *
40
37
  * @param {ObservedRequest} observed - The handle returned when the request began.
41
38
  * @param {boolean} ok - Whether the request produced a usable result.
39
+ * @param {number} [status] - HTTP status the server answered with, when it answered.
42
40
  * @returns {void}
43
- * @example settleObservedRequest(observed, true)
41
+ * @example settleObservedRequest(observed, true, 200)
42
+ */
43
+ export declare function settleObservedRequest(observed: ObservedRequest, ok: boolean, status?: number): void;
44
+ /**
45
+ * Runs a delivery API fetch with the observer wrapped around it.
46
+ *
47
+ * The observer is read once per request, so one registered after an earlier fetch
48
+ * still applies to this one. Its headers are handed to `run` to travel with the
49
+ * request, and the same handle receives the outcome.
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
+ *
54
+ * @template T - The value the fetch resolves to.
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.
58
+ * @returns {Promise<T | null>} Whatever the fetch resolved to.
59
+ * @example observeDeliveryAPIRequest(source, 'project-config', (headers, onResponse) => fetchProject(url, id, { headers, onResponse }))
44
60
  */
45
- export declare function settleObservedRequest(observed: ObservedRequest, ok: boolean): void;
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>;
46
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;;;;;GAKG;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;AAID;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,GAAG,IAAI,CAErF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,eAAe,CAOhF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAMlF"}
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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"}