@chat-de-hp/site 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/astro.js CHANGED
@@ -3,7 +3,7 @@ import react from "@astrojs/react";
3
3
  import { d1, r2 } from "@emdash-cms/cloudflare";
4
4
  import { defineConfig } from "astro/config";
5
5
  import emdash from "emdash/astro";
6
- import { createAnnotationOnlyIntegration } from "./internal/annotation-integration.js";
6
+ import { createPublicAnnotationsIntegration } from "./internal/annotation-integration.js";
7
7
  import { createApprovedAstroPlugins } from "./internal/astro-plugins.js";
8
8
  import { resolveSiteDefinition } from "./internal/registry.js";
9
9
  const SITE_ASTRO_OPTION_KEYS = [
@@ -53,7 +53,7 @@ export function createChatDeHpAstroConfig(site, options = {}) {
53
53
  plugins: plugins,
54
54
  storage: r2({ binding: "MEDIA" }),
55
55
  }),
56
- createAnnotationOnlyIntegration(),
56
+ createPublicAnnotationsIntegration(),
57
57
  ],
58
58
  output: "server",
59
59
  });
@@ -1 +1 @@
1
- {"version":3,"file":"emdash-annotation.d.ts","sourceRoot":"","sources":["../src/emdash-annotation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEhB,WAAW,EACX,mBAAmB,EACpB,MAAM,QAAQ,CAAC;AAKhB,cAAc,QAAQ,CAAC;AAEvB,wBAAsB,mBAAmB,CACvC,CAAC,SAAS,MAAM,EAChB,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,EAC1B,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAUlE;AAED,wBAAsB,cAAc,CAClC,CAAC,SAAS,MAAM,EAChB,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,EAC1B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAU7E"}
1
+ {"version":3,"file":"emdash-annotation.d.ts","sourceRoot":"","sources":["../src/emdash-annotation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEhB,WAAW,EACX,mBAAmB,EACpB,MAAM,QAAQ,CAAC;AAGhB,cAAc,QAAQ,CAAC;AAEvB,wBAAsB,mBAAmB,CACvC,CAAC,SAAS,MAAM,EAChB,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,EAC1B,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAMlE;AAED,wBAAsB,cAAc,CAClC,CAAC,SAAS,MAAM,EAChB,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,EAC1B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAU7E"}
@@ -1,12 +1,8 @@
1
1
  import { createEditable, getEmDashCollection as getPublishedEmDashCollection, getEmDashEntry as getPublishedEmDashEntry, } from "emdash";
2
- import { isAnnotationMode } from "./internal/annotation-context.js";
3
2
  // oxlint-disable-next-line no-barrel-file -- this compatibility module preserves the existing EmDash API while overriding only its two content queries
4
3
  export * from "emdash";
5
4
  export async function getEmDashCollection(type, filter) {
6
5
  const result = await getPublishedEmDashCollection(type, filter);
7
- if (!isAnnotationMode()) {
8
- return result;
9
- }
10
6
  return {
11
7
  ...result,
12
8
  entries: result.entries.map((entry) => annotateEntry(type, entry)),
@@ -14,7 +10,7 @@ export async function getEmDashCollection(type, filter) {
14
10
  }
15
11
  export async function getEmDashEntry(type, id, options) {
16
12
  const result = await getPublishedEmDashEntry(type, id, options);
17
- if (!(isAnnotationMode() && result.entry)) {
13
+ if (!result.entry) {
18
14
  return result;
19
15
  }
20
16
  return {
@@ -1,3 +1,3 @@
1
1
  import type { AstroIntegration } from "astro";
2
- export declare function createAnnotationOnlyIntegration(): AstroIntegration;
2
+ export declare function createPublicAnnotationsIntegration(): AstroIntegration;
3
3
  //# sourceMappingURL=annotation-integration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"annotation-integration.d.ts","sourceRoot":"","sources":["../../src/internal/annotation-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAK9C,wBAAgB,+BAA+B,IAAI,gBAAgB,CAqBlE"}
1
+ {"version":3,"file":"annotation-integration.d.ts","sourceRoot":"","sources":["../../src/internal/annotation-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAK9C,wBAAgB,kCAAkC,IAAI,gBAAgB,CAiBrE"}
@@ -1,12 +1,8 @@
1
- const ANNOTATION_INTEGRATION_NAME = "@chat-de-hp/site/annotation-only";
2
- export function createAnnotationOnlyIntegration() {
1
+ const ANNOTATION_INTEGRATION_NAME = "@chat-de-hp/site/public-annotations";
2
+ export function createPublicAnnotationsIntegration() {
3
3
  return {
4
4
  hooks: {
5
- "astro:config:setup": ({ addMiddleware, injectScript, updateConfig }) => {
6
- addMiddleware({
7
- entrypoint: "@chat-de-hp/site/annotation-middleware",
8
- order: "pre",
9
- });
5
+ "astro:config:setup": ({ injectScript, updateConfig }) => {
10
6
  injectScript("page", 'import "@chat-de-hp/site/runtime/annotation-capture";');
11
7
  updateConfig({
12
8
  vite: {
@@ -1,2 +1,2 @@
1
- export {};
1
+ export declare function startAnnotationCapture(): () => void;
2
2
  //# sourceMappingURL=annotation-capture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"annotation-capture.d.ts","sourceRoot":"","sources":["../../src/runtime/annotation-capture.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"annotation-capture.d.ts","sourceRoot":"","sources":["../../src/runtime/annotation-capture.ts"],"names":[],"mappings":"AAkBA,wBAAgB,sBAAsB,eA6ErC"}
@@ -1,69 +1,79 @@
1
- import { isExpectedSiteCaptureParentMessage, SITE_CAPTURE_BOOT_NONCE_PARAM, SITE_CAPTURE_BOOT_PAGE_HASH_PARAM, SITE_CAPTURE_BOOT_PARENT_ORIGIN_PARAM, SITE_CAPTURE_MESSAGE_TYPE, SITE_CAPTURE_PARENT_ORIGIN_COOKIE, SITE_CAPTURE_SESSION_STORAGE_KEY, } from "./capture-contract.js";
1
+ import { isExpectedSiteCaptureParentMessage, SITE_CAPTURE_BOOT_PAGE_HASH_PARAM, SITE_CAPTURE_BOOT_PARENT_ORIGIN_PARAM, SITE_CAPTURE_MESSAGE_TYPE, SITE_CAPTURE_SESSION_STORAGE_KEY, } from "./capture-contract.js";
2
2
  import { freezeCaptureViewport } from "./capture-viewport.js";
3
- import { SITE_ANNOTATION_END_PARAM } from "./contracts.js";
4
3
  import { extractElements } from "./element-extractor.js";
5
4
  let captureFrozen = false;
6
- let endSessionPromise = null;
7
5
  let resumeViewport = null;
8
- function startAnnotationCapture() {
6
+ export function startAnnotationCapture() {
9
7
  if (window.parent === window) {
10
- return;
8
+ return () => { };
11
9
  }
12
10
  const session = readCaptureSession();
13
11
  if (!session) {
14
- return;
12
+ return () => { };
15
13
  }
16
- window.addEventListener("message", (event) => {
14
+ const onMessage = (event) => {
17
15
  if (!isExpectedSiteCaptureParentMessage(event, {
18
- nonce: session.nonce,
19
16
  origin: session.parentOrigin,
20
17
  source: window.parent,
21
18
  })) {
22
19
  return;
23
20
  }
21
+ if (event.data.type === SITE_CAPTURE_MESSAGE_TYPE.reload) {
22
+ window.location.reload();
23
+ return;
24
+ }
24
25
  if (event.data.type === SITE_CAPTURE_MESSAGE_TYPE.end) {
25
- void endAnnotationSession(session, true);
26
+ cleanup();
27
+ endAnnotationSession(session, true);
28
+ return;
29
+ }
30
+ if (event.data.type === SITE_CAPTURE_MESSAGE_TYPE.probe) {
31
+ postReady(session);
26
32
  return;
27
33
  }
28
34
  if (event.data.type === SITE_CAPTURE_MESSAGE_TYPE.resume) {
29
35
  resumeViewport?.();
30
36
  resumeViewport = null;
31
37
  captureFrozen = false;
32
- postToParent(session, {
33
- nonce: session.nonce,
34
- pagePath: currentPagePath(),
35
- type: SITE_CAPTURE_MESSAGE_TYPE.ready,
36
- });
38
+ postReady(session);
37
39
  return;
38
40
  }
39
41
  if (captureFrozen) {
40
42
  return;
41
43
  }
42
- try {
43
- const root = document.body ?? document.documentElement;
44
- const elements = extractElements(root);
45
- resumeViewport = freezeCaptureViewport();
46
- captureFrozen = true;
47
- postToParent(session, {
48
- elements,
49
- nonce: session.nonce,
50
- pagePath: currentPagePath(),
51
- type: SITE_CAPTURE_MESSAGE_TYPE.captured,
52
- });
44
+ captureCurrentViewport(session);
45
+ };
46
+ const onBeforeUnload = () => {
47
+ postToParent(session, {
48
+ type: SITE_CAPTURE_MESSAGE_TYPE.loading,
49
+ });
50
+ };
51
+ let pendingScrollFrame = null;
52
+ const onScroll = () => {
53
+ if (pendingScrollFrame !== null) {
54
+ return;
53
55
  }
54
- catch {
56
+ pendingScrollFrame = window.requestAnimationFrame(() => {
57
+ pendingScrollFrame = null;
55
58
  postToParent(session, {
56
- message: "画面を読み取れませんでした。",
57
- nonce: session.nonce,
58
- type: SITE_CAPTURE_MESSAGE_TYPE.error,
59
+ type: SITE_CAPTURE_MESSAGE_TYPE.scroll,
59
60
  });
60
- }
61
- });
62
- postToParent(session, {
63
- nonce: session.nonce,
64
- pagePath: currentPagePath(),
65
- type: SITE_CAPTURE_MESSAGE_TYPE.ready,
66
- });
61
+ });
62
+ };
63
+ window.addEventListener("message", onMessage);
64
+ window.addEventListener("beforeunload", onBeforeUnload);
65
+ window.addEventListener("scroll", onScroll, { passive: true });
66
+ const cleanup = () => {
67
+ window.removeEventListener("message", onMessage);
68
+ window.removeEventListener("beforeunload", onBeforeUnload);
69
+ window.removeEventListener("scroll", onScroll);
70
+ if (pendingScrollFrame !== null) {
71
+ window.cancelAnimationFrame(pendingScrollFrame);
72
+ pendingScrollFrame = null;
73
+ }
74
+ };
75
+ postReady(session);
76
+ return cleanup;
67
77
  }
68
78
  function readCaptureSession() {
69
79
  const bootstrap = readCaptureBootstrap();
@@ -85,18 +95,14 @@ function readCaptureSession() {
85
95
  }
86
96
  function readCaptureBootstrap() {
87
97
  const hash = new URLSearchParams(window.location.hash.slice(1));
88
- const nonce = hash.get(SITE_CAPTURE_BOOT_NONCE_PARAM);
89
98
  const parentOrigin = normalizeOrigin(hash.get(SITE_CAPTURE_BOOT_PARENT_ORIGIN_PARAM));
90
- if (!(nonce?.trim() &&
91
- nonce.length <= 256 &&
92
- parentOrigin &&
93
- parentOrigin === readAllowedParentOrigin())) {
99
+ if (!parentOrigin) {
94
100
  return null;
95
101
  }
96
102
  const pageHash = hash.get(SITE_CAPTURE_BOOT_PAGE_HASH_PARAM);
97
103
  const nextUrl = `${window.location.pathname}${window.location.search}${pageHash ? `#${pageHash}` : ""}`;
98
104
  window.history.replaceState(window.history.state, "", nextUrl);
99
- return { nonce, parentOrigin };
105
+ return { parentOrigin };
100
106
  }
101
107
  function parseStoredSession(value) {
102
108
  if (!value) {
@@ -107,15 +113,8 @@ function parseStoredSession(value) {
107
113
  if (!parsed || typeof parsed !== "object") {
108
114
  return null;
109
115
  }
110
- const nonce = Reflect.get(parsed, "nonce");
111
116
  const parentOrigin = normalizeOrigin(Reflect.get(parsed, "parentOrigin"));
112
- return typeof nonce === "string" &&
113
- nonce.trim() &&
114
- nonce.length <= 256 &&
115
- parentOrigin &&
116
- parentOrigin === readAllowedParentOrigin()
117
- ? { nonce, parentOrigin }
118
- : null;
117
+ return parentOrigin ? { parentOrigin } : null;
119
118
  }
120
119
  catch {
121
120
  return null;
@@ -137,61 +136,53 @@ function normalizeOrigin(value) {
137
136
  return null;
138
137
  }
139
138
  }
140
- function readAllowedParentOrigin() {
141
- for (const item of document.cookie.split(";")) {
142
- const separator = item.indexOf("=");
143
- if (separator < 1) {
144
- continue;
145
- }
146
- if (item.slice(0, separator).trim() === SITE_CAPTURE_PARENT_ORIGIN_COOKIE) {
147
- try {
148
- return normalizeOrigin(decodeURIComponent(item.slice(separator + 1).trim()));
149
- }
150
- catch {
151
- return null;
152
- }
153
- }
154
- }
155
- return null;
156
- }
157
139
  function currentPagePath() {
158
140
  return `${window.location.pathname}${window.location.search}${window.location.hash}`;
159
141
  }
142
+ function captureCurrentViewport(session) {
143
+ try {
144
+ const root = document.body ?? document.documentElement;
145
+ const elements = extractElements(root);
146
+ resumeViewport = freezeCaptureViewport();
147
+ captureFrozen = true;
148
+ postToParent(session, {
149
+ elements,
150
+ pagePath: currentPagePath(),
151
+ type: SITE_CAPTURE_MESSAGE_TYPE.captured,
152
+ });
153
+ }
154
+ catch {
155
+ postToParent(session, {
156
+ message: "画面を読み取れませんでした。",
157
+ type: SITE_CAPTURE_MESSAGE_TYPE.error,
158
+ });
159
+ }
160
+ }
160
161
  function endAnnotationSession(session, notifyParent) {
161
- if (endSessionPromise) {
162
- return endSessionPromise;
162
+ resumeViewport?.();
163
+ resumeViewport = null;
164
+ captureFrozen = false;
165
+ try {
166
+ window.sessionStorage.removeItem(SITE_CAPTURE_SESSION_STORAGE_KEY);
167
+ }
168
+ catch {
169
+ // The capture bridge is inactive after its message listeners are removed.
170
+ }
171
+ if (notifyParent) {
172
+ postToParent(session, {
173
+ type: SITE_CAPTURE_MESSAGE_TYPE.ended,
174
+ });
163
175
  }
164
- endSessionPromise = (async () => {
165
- try {
166
- window.sessionStorage.removeItem(SITE_CAPTURE_SESSION_STORAGE_KEY);
167
- }
168
- catch {
169
- // The server-side cookie expiration remains authoritative.
170
- }
171
- const endUrl = new URL(window.location.href);
172
- endUrl.hash = "";
173
- endUrl.search = "";
174
- endUrl.searchParams.set(SITE_ANNOTATION_END_PARAM, "1");
175
- try {
176
- await window.fetch(endUrl, {
177
- cache: "no-store",
178
- credentials: "same-origin",
179
- });
180
- }
181
- finally {
182
- if (notifyParent) {
183
- postToParent(session, {
184
- nonce: session.nonce,
185
- type: SITE_CAPTURE_MESSAGE_TYPE.ended,
186
- });
187
- }
188
- }
189
- })();
190
- return endSessionPromise;
191
176
  }
192
177
  function postToParent(session, message) {
193
178
  window.parent.postMessage(message, session.parentOrigin);
194
179
  }
180
+ function postReady(session) {
181
+ postToParent(session, {
182
+ pagePath: currentPagePath(),
183
+ type: SITE_CAPTURE_MESSAGE_TYPE.ready,
184
+ });
185
+ }
195
186
  if (document.readyState === "loading") {
196
187
  document.addEventListener("DOMContentLoaded", startAnnotationCapture, {
197
188
  once: true,
@@ -1,8 +1,6 @@
1
1
  import type { ExtractedElement } from "./element-extractor.js";
2
- export declare const SITE_CAPTURE_BOOT_NONCE_PARAM = "__chat_de_hp_capture";
3
2
  export declare const SITE_CAPTURE_BOOT_PARENT_ORIGIN_PARAM = "__chat_de_hp_capture_parent";
4
3
  export declare const SITE_CAPTURE_BOOT_PAGE_HASH_PARAM = "__chat_de_hp_capture_page_hash";
5
- export declare const SITE_CAPTURE_PARENT_ORIGIN_COOKIE = "__Host-chat-de-hp-annotation-parent";
6
4
  export declare const SITE_CAPTURE_SESSION_STORAGE_KEY = "chat-de-hp:capture-session";
7
5
  export declare const SITE_CAPTURE_MESSAGE_TYPE: {
8
6
  readonly capture: "chat-de-hp:capture";
@@ -10,35 +8,40 @@ export declare const SITE_CAPTURE_MESSAGE_TYPE: {
10
8
  readonly end: "chat-de-hp:end-capture";
11
9
  readonly ended: "chat-de-hp:capture-ended";
12
10
  readonly error: "chat-de-hp:capture-error";
11
+ readonly loading: "chat-de-hp:capture-loading";
12
+ readonly probe: "chat-de-hp:capture-probe";
13
13
  readonly ready: "chat-de-hp:capture-ready";
14
+ readonly reload: "chat-de-hp:reload";
14
15
  readonly resume: "chat-de-hp:resume-capture";
16
+ readonly scroll: "chat-de-hp:scroll";
15
17
  };
16
18
  export type SiteCaptureParentMessage = {
17
- nonce: string;
18
19
  type: typeof SITE_CAPTURE_MESSAGE_TYPE.capture;
19
20
  } | {
20
- nonce: string;
21
21
  type: typeof SITE_CAPTURE_MESSAGE_TYPE.end;
22
22
  } | {
23
- nonce: string;
23
+ type: typeof SITE_CAPTURE_MESSAGE_TYPE.probe;
24
+ } | {
25
+ type: typeof SITE_CAPTURE_MESSAGE_TYPE.reload;
26
+ } | {
24
27
  type: typeof SITE_CAPTURE_MESSAGE_TYPE.resume;
25
28
  };
26
29
  export type SiteCaptureFrameMessage = {
27
- nonce: string;
28
30
  pagePath: string;
29
31
  type: typeof SITE_CAPTURE_MESSAGE_TYPE.ready;
30
32
  } | {
31
33
  elements: ExtractedElement[];
32
- nonce: string;
33
34
  pagePath: string;
34
35
  type: typeof SITE_CAPTURE_MESSAGE_TYPE.captured;
35
36
  } | {
36
37
  message: string;
37
- nonce: string;
38
38
  type: typeof SITE_CAPTURE_MESSAGE_TYPE.error;
39
39
  } | {
40
- nonce: string;
40
+ type: typeof SITE_CAPTURE_MESSAGE_TYPE.loading;
41
+ } | {
41
42
  type: typeof SITE_CAPTURE_MESSAGE_TYPE.ended;
43
+ } | {
44
+ type: typeof SITE_CAPTURE_MESSAGE_TYPE.scroll;
42
45
  };
43
46
  type CaptureMessageEvent = {
44
47
  data: unknown;
@@ -46,7 +49,6 @@ type CaptureMessageEvent = {
46
49
  source: unknown;
47
50
  };
48
51
  type CaptureMessageExpectation = {
49
- nonce: string;
50
52
  origin: string;
51
53
  source: unknown;
52
54
  };
@@ -56,6 +58,7 @@ export declare function isExpectedSiteCaptureParentMessage(event: CaptureMessage
56
58
  export declare function isExpectedSiteCaptureFrameMessage(event: CaptureMessageEvent, expected: CaptureMessageExpectation): event is CaptureMessageEvent & {
57
59
  data: SiteCaptureFrameMessage;
58
60
  };
61
+ export declare function isSiteCaptureFrameProtocolMessage(value: unknown): boolean;
59
62
  export declare function isSiteCaptureParentMessage(value: unknown): value is SiteCaptureParentMessage;
60
63
  export declare function isSiteCaptureFrameMessage(value: unknown): value is SiteCaptureFrameMessage;
61
64
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"capture-contract.d.ts","sourceRoot":"","sources":["../../src/runtime/capture-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AACpE,eAAO,MAAM,qCAAqC,gCACnB,CAAC;AAChC,eAAO,MAAM,iCAAiC,mCACZ,CAAC;AACnC,eAAO,MAAM,iCAAiC,wCACP,CAAC;AACxC,eAAO,MAAM,gCAAgC,+BAA+B,CAAC;AAE7E,eAAO,MAAM,yBAAyB;;;;;;;;CAQ5B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAChC;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,yBAAyB,CAAC,OAAO,CAAC;CAChD,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,yBAAyB,CAAC,GAAG,CAAC;CAC5C,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,yBAAyB,CAAC,MAAM,CAAC;CAC/C,CAAC;AAEN,MAAM,MAAM,uBAAuB,GAC/B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,yBAAyB,CAAC,KAAK,CAAC;CAC9C,GACD;IACE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,yBAAyB,CAAC,QAAQ,CAAC;CACjD,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,yBAAyB,CAAC,KAAK,CAAC;CAC9C,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,yBAAyB,CAAC,KAAK,CAAC;CAC9C,CAAC;AAEN,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,yBAAyB,GAClC,KAAK,IAAI,mBAAmB,GAAG;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAAE,CAOnE;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,yBAAyB,GAClC,KAAK,IAAI,mBAAmB,GAAG;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,CAOlE;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,wBAAwB,CASnC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAmBlC"}
1
+ {"version":3,"file":"capture-contract.d.ts","sourceRoot":"","sources":["../../src/runtime/capture-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAO,MAAM,qCAAqC,gCACnB,CAAC;AAChC,eAAO,MAAM,iCAAiC,mCACZ,CAAC;AACnC,eAAO,MAAM,gCAAgC,+BAA+B,CAAC;AAE7E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;CAY5B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAChC;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,OAAO,CAAC;CAChD,GACD;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,GAAG,CAAC;CAC5C,GACD;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,KAAK,CAAC;CAC9C,GACD;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,MAAM,CAAC;CAC/C,GACD;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,MAAM,CAAC;CAC/C,CAAC;AAEN,MAAM,MAAM,uBAAuB,GAC/B;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,yBAAyB,CAAC,KAAK,CAAC;CAC9C,GACD;IACE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,yBAAyB,CAAC,QAAQ,CAAC;CACjD,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,yBAAyB,CAAC,KAAK,CAAC;CAC9C,GACD;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,OAAO,CAAC;CAChD,GACD;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,KAAK,CAAC;CAC9C,GACD;IACE,IAAI,EAAE,OAAO,yBAAyB,CAAC,MAAM,CAAC;CAC/C,CAAC;AAEN,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,yBAAyB,GAClC,KAAK,IAAI,mBAAmB,GAAG;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAAE,CAMnE;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,yBAAyB,GAClC,KAAK,IAAI,mBAAmB,GAAG;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,CAMlE;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,WAa/D;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,wBAAwB,CAWnC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAuBlC"}
@@ -1,7 +1,5 @@
1
- export const SITE_CAPTURE_BOOT_NONCE_PARAM = "__chat_de_hp_capture";
2
1
  export const SITE_CAPTURE_BOOT_PARENT_ORIGIN_PARAM = "__chat_de_hp_capture_parent";
3
2
  export const SITE_CAPTURE_BOOT_PAGE_HASH_PARAM = "__chat_de_hp_capture_page_hash";
4
- export const SITE_CAPTURE_PARENT_ORIGIN_COOKIE = "__Host-chat-de-hp-annotation-parent";
5
3
  export const SITE_CAPTURE_SESSION_STORAGE_KEY = "chat-de-hp:capture-session";
6
4
  export const SITE_CAPTURE_MESSAGE_TYPE = {
7
5
  capture: "chat-de-hp:capture",
@@ -9,31 +7,47 @@ export const SITE_CAPTURE_MESSAGE_TYPE = {
9
7
  end: "chat-de-hp:end-capture",
10
8
  ended: "chat-de-hp:capture-ended",
11
9
  error: "chat-de-hp:capture-error",
10
+ loading: "chat-de-hp:capture-loading",
11
+ probe: "chat-de-hp:capture-probe",
12
12
  ready: "chat-de-hp:capture-ready",
13
+ reload: "chat-de-hp:reload",
13
14
  resume: "chat-de-hp:resume-capture",
15
+ scroll: "chat-de-hp:scroll",
14
16
  };
15
17
  export function isExpectedSiteCaptureParentMessage(event, expected) {
16
18
  return (event.origin === expected.origin &&
17
19
  event.source === expected.source &&
18
- isSiteCaptureParentMessage(event.data) &&
19
- event.data.nonce === expected.nonce);
20
+ isSiteCaptureParentMessage(event.data));
20
21
  }
21
22
  export function isExpectedSiteCaptureFrameMessage(event, expected) {
22
23
  return (event.origin === expected.origin &&
23
24
  event.source === expected.source &&
24
- isSiteCaptureFrameMessage(event.data) &&
25
- event.data.nonce === expected.nonce);
25
+ isSiteCaptureFrameMessage(event.data));
26
+ }
27
+ export function isSiteCaptureFrameProtocolMessage(value) {
28
+ if (!isRecord(value)) {
29
+ return false;
30
+ }
31
+ const { type } = value;
32
+ return (type === SITE_CAPTURE_MESSAGE_TYPE.captured ||
33
+ type === SITE_CAPTURE_MESSAGE_TYPE.ended ||
34
+ type === SITE_CAPTURE_MESSAGE_TYPE.error ||
35
+ type === SITE_CAPTURE_MESSAGE_TYPE.loading ||
36
+ type === SITE_CAPTURE_MESSAGE_TYPE.ready ||
37
+ type === SITE_CAPTURE_MESSAGE_TYPE.scroll);
26
38
  }
27
39
  export function isSiteCaptureParentMessage(value) {
28
- if (!isRecord(value) || !isNonce(value.nonce)) {
40
+ if (!isRecord(value)) {
29
41
  return false;
30
42
  }
31
43
  return (value.type === SITE_CAPTURE_MESSAGE_TYPE.capture ||
32
44
  value.type === SITE_CAPTURE_MESSAGE_TYPE.end ||
45
+ value.type === SITE_CAPTURE_MESSAGE_TYPE.probe ||
46
+ value.type === SITE_CAPTURE_MESSAGE_TYPE.reload ||
33
47
  value.type === SITE_CAPTURE_MESSAGE_TYPE.resume);
34
48
  }
35
49
  export function isSiteCaptureFrameMessage(value) {
36
- if (!isRecord(value) || !isNonce(value.nonce)) {
50
+ if (!isRecord(value)) {
37
51
  return false;
38
52
  }
39
53
  if (value.type === SITE_CAPTURE_MESSAGE_TYPE.ready) {
@@ -47,7 +61,9 @@ export function isSiteCaptureFrameMessage(value) {
47
61
  if (value.type === SITE_CAPTURE_MESSAGE_TYPE.error) {
48
62
  return isNonEmptyString(value.message);
49
63
  }
50
- return value.type === SITE_CAPTURE_MESSAGE_TYPE.ended;
64
+ return (value.type === SITE_CAPTURE_MESSAGE_TYPE.ended ||
65
+ value.type === SITE_CAPTURE_MESSAGE_TYPE.loading ||
66
+ value.type === SITE_CAPTURE_MESSAGE_TYPE.scroll);
51
67
  }
52
68
  function isExtractedElement(value) {
53
69
  if (!isRecord(value) ||
@@ -96,9 +112,6 @@ function isPagePath(value) {
96
112
  !value.startsWith("//") &&
97
113
  !value.includes("\\"));
98
114
  }
99
- function isNonce(value) {
100
- return isNonEmptyString(value) && value.length <= 256;
101
- }
102
115
  function isNonEmptyString(value) {
103
116
  return typeof value === "string" && value.trim().length > 0;
104
117
  }
@@ -1,5 +1,3 @@
1
- export declare const CHAT_DE_HP_ANNOTATION_MODE_HEADER = "x-chat-de-hp-annotation-mode";
2
- export declare const SITE_ANNOTATION_END_PARAM = "__chat_de_hp_annotation_end";
3
1
  export type ChatDeHpExecutionContext = {
4
2
  passThroughOnException?(): void;
5
3
  waitUntil(promise: Promise<unknown>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/runtime/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/runtime/contracts.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1 @@
1
- export const CHAT_DE_HP_ANNOTATION_MODE_HEADER = "x-chat-de-hp-annotation-mode";
2
- export const SITE_ANNOTATION_END_PARAM = "__chat_de_hp_annotation_end";
1
+ export {};
@@ -1,5 +1,4 @@
1
1
  export { PluginBridge } from "@emdash-cms/cloudflare/sandbox";
2
2
  export type { ChatDeHpExecutionContext, ChatDeHpRuntimeContribution, ChatDeHpRuntimeRoute, ChatDeHpSiteEnv, GeneratedSiteRuntime, } from "./contracts.js";
3
- export { CHAT_DE_HP_ANNOTATION_MODE_HEADER } from "./contracts.js";
4
3
  export { createChatDeHpSiteWorker } from "./worker.js";
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,YAAY,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iCAAiC,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,YAAY,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC"}
@@ -1,3 +1,2 @@
1
1
  export { PluginBridge } from "@emdash-cms/cloudflare/sandbox";
2
- export { CHAT_DE_HP_ANNOTATION_MODE_HEADER } from "./contracts.js";
3
2
  export { createChatDeHpSiteWorker } from "./worker.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chat-de-hp/site",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "private": false,
5
5
  "description": "Managed Astro site runtime and primitive composition for Chat de HP",
6
6
  "license": "MIT",
@@ -22,10 +22,6 @@
22
22
  "types": "./dist/astro.d.ts",
23
23
  "default": "./dist/astro.js"
24
24
  },
25
- "./annotation-middleware": {
26
- "types": "./dist/annotation-middleware.d.ts",
27
- "default": "./dist/annotation-middleware.js"
28
- },
29
25
  "./emdash": {
30
26
  "types": "./dist/emdash-annotation.d.ts",
31
27
  "default": "./dist/emdash-annotation.js"