@book.dev/sdk 1.71.0 → 1.72.0

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/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export { authorize, isEmailAuthoritative, type Role, type EffectiveVisibility, t
16
16
  export { snapshotText, paragraphBlocks, textSnapshot, appendTextToSnapshot, appendBlocksToSnapshot, type AppendBlock } from './content';
17
17
  export { snapshotBlocks, contentHash, computeBlockMtimes, stampSnapshotMtimes, latestBlockMtime, type BlockDigest, } from './mtime';
18
18
  export { computeBlockAuthors, stampSnapshotAuthors, stampSnapshotAuthorsPerBlock, latestSnapshotAuthor, type BlockAuthorResolver, } from './authors';
19
- export { OPENBOOK_ISLAND_MARKER, encodeIsland, islandScript, readIsland, readIslandRaw, } from './island';
19
+ export { OPENBOOK_ISLAND_MARKER, OPENBOOK_ASSETS_MARKER, encodeIsland, islandScript, assetsIslandScript, readIsland, readIslandRaw, readAssetsIsland, type ExportAssetEntry, type ExportAssetsIsland, } from './island';
20
20
  export { pageToBookHtml, bookHtmlToPage, readBookHtmlMeta, pageIslandScript, sanitizeLegacyInline, isSafeHref, slugify, bookRuntimeScripts, BOOK_RUNTIME_DIR, BOOK_RUNTIME_FILE, type BookHtmlOptions, type BookPageRecord, type PageIsland, } from './bookfile';
21
21
  export { spaceToBookFiles, parseBookFolder, spaceIslandScript, readSpaceIsland, SPACE_BUNDLE_FILE, type BookFolderFile, type SpaceSnapshot, type SpaceToBookFilesOptions, type SpaceIsland, } from './bookFolder';
22
22
  export { canonicalDigest, generateRegistryKeys, signPlugin, verifyPlugin, validateManifest, OPENBOOK_REGISTRY, type PluginManifest, type PluginAgentTool, type PluginPackage, type PluginSignature, type StoredPlugin, } from './plugins';
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ export { authorize, isEmailAuthoritative, } from './authorize';
13
13
  export { snapshotText, paragraphBlocks, textSnapshot, appendTextToSnapshot, appendBlocksToSnapshot } from './content';
14
14
  export { snapshotBlocks, contentHash, computeBlockMtimes, stampSnapshotMtimes, latestBlockMtime, } from './mtime';
15
15
  export { computeBlockAuthors, stampSnapshotAuthors, stampSnapshotAuthorsPerBlock, latestSnapshotAuthor, } from './authors';
16
- export { OPENBOOK_ISLAND_MARKER, encodeIsland, islandScript, readIsland, readIslandRaw, } from './island';
16
+ export { OPENBOOK_ISLAND_MARKER, OPENBOOK_ASSETS_MARKER, encodeIsland, islandScript, assetsIslandScript, readIsland, readIslandRaw, readAssetsIsland, } from './island';
17
17
  export { pageToBookHtml, bookHtmlToPage, readBookHtmlMeta, pageIslandScript, sanitizeLegacyInline, isSafeHref, slugify, bookRuntimeScripts, BOOK_RUNTIME_DIR, BOOK_RUNTIME_FILE, } from './bookfile';
18
18
  export { spaceToBookFiles, parseBookFolder, spaceIslandScript, readSpaceIsland, SPACE_BUNDLE_FILE, } from './bookFolder';
19
19
  export { canonicalDigest, generateRegistryKeys, signPlugin, verifyPlugin, validateManifest, OPENBOOK_REGISTRY, } from './plugins';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/island.d.ts CHANGED
@@ -46,3 +46,47 @@ export declare function readIslandRaw(html: string): string | null;
46
46
  * is a valid JSON escape for `/`), so no separate unescape step is needed.
47
47
  */
48
48
  export declare function readIsland<T = unknown>(html: string): T | null;
49
+ /**
50
+ * The `<script type>` marking an export's **assets island** — the sibling blob
51
+ * carrying asset BYTES the visible document has no natural carrier for (today:
52
+ * `htmlArtifact` documents; images ride the visible `<img data-asset-id
53
+ * src="data:…">` tags instead and are never duplicated here). Emitted by the
54
+ * ui export pipeline AFTER the source island; consumed by the standalone
55
+ * viewer's boot and by island-first import, which together with the img tags
56
+ * recovers a producer-decoupled `Map<assetId, bytes>`.
57
+ */
58
+ export declare const OPENBOOK_ASSETS_MARKER = "application/openbook-assets+json";
59
+ /** One asset's bytes in the assets island. `utf8` carries text directly (an
60
+ * HTML artifact stays human-readable inside the JSON); `base64` is the
61
+ * extension point for binary payloads. */
62
+ export interface ExportAssetEntry {
63
+ mime: string;
64
+ encoding: 'utf8' | 'base64';
65
+ data: string;
66
+ }
67
+ /** The assets island payload: `{version: 1, assets: {assetId → entry}}`. */
68
+ export interface ExportAssetsIsland {
69
+ version: 1;
70
+ assets: Record<string, ExportAssetEntry>;
71
+ }
72
+ /**
73
+ * Wrap an assets map as its island `<script>` (versioned, `</`-escaped).
74
+ *
75
+ * ORDERING CONTRACT: emitters must place this AFTER the source island. String
76
+ * readers accept the first plausible `<script type=…>` sequence, and hostile
77
+ * *content* inside an earlier blob can embed a spoof opening tag — keeping the
78
+ * trusted islands first means a spoof can only trail the real ones (and
79
+ * {@link readAssetsIsland} additionally shape-checks every candidate).
80
+ */
81
+ export declare function assetsIslandScript(assets: Record<string, ExportAssetEntry>, opts?: {
82
+ attrs?: string;
83
+ indent?: string;
84
+ }): string;
85
+ /**
86
+ * Read an export's assets island back, or `null` when absent/corrupt. Scans
87
+ * EVERY candidate tag and returns the first that parses to the versioned
88
+ * shape: a spoof opening tag smuggled inside the (earlier) source island's
89
+ * JSON text captures garbage that fails the parse, so it cannot mask the real
90
+ * island that follows.
91
+ */
92
+ export declare function readAssetsIsland(html: string): ExportAssetsIsland | null;
package/dist/island.js CHANGED
@@ -37,13 +37,19 @@ export function encodeIsland(value) {
37
37
  * executes a non-JS `type`, so the island is pure carried data.
38
38
  */
39
39
  export function islandScript(value, opts = {}) {
40
+ return taggedIslandScript(OPENBOOK_ISLAND_MARKER, value, opts);
41
+ }
42
+ /** The generic inert-tag wrapper behind every island flavour. */
43
+ function taggedIslandScript(marker, value, opts = {}) {
40
44
  const { attrs = '', indent = '' } = opts;
41
- return `${indent}<script type="${OPENBOOK_ISLAND_MARKER}"${attrs ? ` ${attrs}` : ''}>\n${encodeIsland(value)}\n${indent}</script>`;
45
+ return `${indent}<script type="${marker}"${attrs ? ` ${attrs}` : ''}>\n${encodeIsland(value)}\n${indent}</script>`;
42
46
  }
43
- const ISLAND_RE = new RegExp(`<script[^>]*type="${OPENBOOK_ISLAND_MARKER.replace(/[/+]/g, '\\$&')}"[^>]*>([\\s\\S]*?)</script>`, 'i');
47
+ const islandRe = (marker) => new RegExp(`<script[^>]*type="${marker.replace(/[/+]/g, '\\$&')}"[^>]*>([\\s\\S]*?)</script>`, 'gi');
48
+ const ISLAND_RE = islandRe(OPENBOOK_ISLAND_MARKER);
44
49
  /** Extract the first island's raw (still `<\/`-escaped) JSON text, or `null`. */
45
50
  export function readIslandRaw(html) {
46
- const m = html.match(ISLAND_RE);
51
+ ISLAND_RE.lastIndex = 0; // shared sticky regex — always scan from the top
52
+ const m = ISLAND_RE.exec(html);
47
53
  return m ? m[1].trim() : null;
48
54
  }
49
55
  /**
@@ -62,4 +68,50 @@ export function readIsland(html) {
62
68
  return null;
63
69
  }
64
70
  }
71
+ // ── Export assets island ─────────────────────────────────────────────────────
72
+ /**
73
+ * The `<script type>` marking an export's **assets island** — the sibling blob
74
+ * carrying asset BYTES the visible document has no natural carrier for (today:
75
+ * `htmlArtifact` documents; images ride the visible `<img data-asset-id
76
+ * src="data:…">` tags instead and are never duplicated here). Emitted by the
77
+ * ui export pipeline AFTER the source island; consumed by the standalone
78
+ * viewer's boot and by island-first import, which together with the img tags
79
+ * recovers a producer-decoupled `Map<assetId, bytes>`.
80
+ */
81
+ export const OPENBOOK_ASSETS_MARKER = 'application/openbook-assets+json';
82
+ /**
83
+ * Wrap an assets map as its island `<script>` (versioned, `</`-escaped).
84
+ *
85
+ * ORDERING CONTRACT: emitters must place this AFTER the source island. String
86
+ * readers accept the first plausible `<script type=…>` sequence, and hostile
87
+ * *content* inside an earlier blob can embed a spoof opening tag — keeping the
88
+ * trusted islands first means a spoof can only trail the real ones (and
89
+ * {@link readAssetsIsland} additionally shape-checks every candidate).
90
+ */
91
+ export function assetsIslandScript(assets, opts = {}) {
92
+ const payload = { version: 1, assets };
93
+ return taggedIslandScript(OPENBOOK_ASSETS_MARKER, payload, { attrs: 'data-openbook-assets', ...opts });
94
+ }
95
+ /**
96
+ * Read an export's assets island back, or `null` when absent/corrupt. Scans
97
+ * EVERY candidate tag and returns the first that parses to the versioned
98
+ * shape: a spoof opening tag smuggled inside the (earlier) source island's
99
+ * JSON text captures garbage that fails the parse, so it cannot mask the real
100
+ * island that follows.
101
+ */
102
+ export function readAssetsIsland(html) {
103
+ const re = islandRe(OPENBOOK_ASSETS_MARKER);
104
+ for (let m = re.exec(html); m; m = re.exec(html)) {
105
+ try {
106
+ const parsed = JSON.parse(m[1].trim());
107
+ if (parsed && parsed.version === 1 && parsed.assets && typeof parsed.assets === 'object' && !Array.isArray(parsed.assets)) {
108
+ return { version: 1, assets: parsed.assets };
109
+ }
110
+ }
111
+ catch {
112
+ /* spoofed / truncated candidate — keep scanning */
113
+ }
114
+ }
115
+ return null;
116
+ }
65
117
  //# sourceMappingURL=island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"island.js","sourceRoot":"","sources":["../src/island.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,OAA0C,EAAE;IACvF,MAAM,EAAC,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAC,GAAG,IAAI,CAAC;IACvC,OAAO,GAAG,MAAM,iBAAiB,sBAAsB,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,MAAM,WAAW,CAAC;AACrI,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B,qBAAqB,sBAAsB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,8BAA8B,EAClG,GAAG,CACJ,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAc,IAAY;IAClD,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"island.js","sourceRoot":"","sources":["../src/island.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@book.dev/sdk",
3
- "version": "1.71.0",
3
+ "version": "1.72.0",
4
4
  "description": "Shared OpenBook types and HTTP client used by the server, desktop, and web.",
5
5
  "repository": {
6
6
  "type": "git",