@happyvertical/smrt-education 0.57.51 → 0.57.52

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/AGENTS.md CHANGED
@@ -52,7 +52,7 @@ Structured questions from scans and imported course files use
52
52
  ingestion handler. Anchors come from provider region catalogs only; match by worksheet
53
53
  id and layout, never text; ambiguous matches stay unattached; source-keyed replays.
54
54
 
55
- Course bundles (zip with a closed manifest, or a file set) use
55
+ Course bundles (zip with a closed manifest, or a file set; Word/PowerPoint members render through an injected `DocumentConverter`, fail closed) use
56
56
  [CourseBundleImportService](agents/course-bundle-import.md). Parse only with the
57
57
  bounded reader; refuse, never trim, hostile input; unsupported members stay
58
58
  visible; proposals only, nothing auto-published.
@@ -38,7 +38,8 @@ authorizer: `importBundle` needs `education.course.author`, `readImport`
38
38
  4. `readImport({ ...actor, importId })` returns the recorded evidence.
39
39
 
40
40
  Progress is an observer callback (`onProgress({ stage, completed, total })`,
41
- stages `unpack`, `classify`, `extract`, `propose`; each starts at `completed: 0`).
41
+ stages `unpack`, `classify`, `render`, `extract`, `propose`; each starts at `completed: 0`;
42
+ `render` is emitted only when the bundle has Word/PowerPoint members).
42
43
  Ingestion has no public job-progress seam, so none is invented. A throwing
43
44
  listener never affects the import.
44
45
 
@@ -55,6 +56,9 @@ listener never affects the import.
55
56
  | `maxManifestBytes` | 256 KiB |
56
57
  | `maxLessons` (the proposal schema's cap) | 50 |
57
58
  | `maxLessonBodyChars` | 100 000 |
59
+ | `maxOfficeMembers` (Word/PowerPoint members rendered per bundle) | 50 |
60
+ | `maxRenderedBytes` (PDF accepted back from the converter) | 50 MiB |
61
+ | `conversionTimeoutMs` (one Office member) | 60 000 |
58
62
  | archive nesting | 1: a zip inside a zip is never expanded |
59
63
 
60
64
  A lesson whose combined text members exceed `maxLessonBodyChars` refuses the
@@ -80,7 +84,7 @@ too long or deep). An **honestly** oversize member (declared over
80
84
 
81
85
  ## Members and statuses
82
86
 
83
- By content (never by extension alone): `pdf` (`%PDF-` in the first 1 KiB),
87
+ By content (never by extension alone): `docx`/`pptx` (see below), `pdf` (`%PDF-` in the first 1 KiB),
84
88
  `image` (PNG, JPEG, WebP), `text` (`.txt`/`.md`, strict UTF-8, no control
85
89
  characters, body-sized), `manifest` (root `manifest.json`), else `unsupported`.
86
90
  Status: `accepted` (handed to extraction), `duplicate` (same sha256 as an earlier
@@ -91,6 +95,74 @@ extracted again), `unsupported` (`unsupported_type`, `nested_archive`,
91
95
  `/Encrypt` token anywhere in its bytes (trailer, xref stream): a false positive
92
96
  on literal text inside an uncompressed stream is refused, never read.
93
97
 
98
+ ## Word and PowerPoint members (SMRT #4615)
99
+
100
+ A `.docx`/`.pptx` member is an OOXML package only when the name and the content
101
+ agree: a zip whose entries include `[Content_Types].xml` and `word/document.xml`
102
+ (docx) or `ppt/presentation.xml` (pptx). Before the bytes go anywhere, the
103
+ package itself passes the same bounded zip reader (ratio, overlap, paths, CRC,
104
+ 100 MiB inflated); a failure is `refused / unsafe_office`, never a refusal of the
105
+ whole bundle. Other zips stay `unsupported / nested_archive`.
106
+
107
+ Two separate things happen to an accepted Office member, both after
108
+ authorization and before the evidence is written:
109
+
110
+ - **Pages**: a `DocumentConverter` (`document-converter.ts`) renders the original
111
+ to PDF. The importer enforces the byte and time limits itself (input
112
+ `maxEntryBytes`, output `maxRenderedBytes`, `conversionTimeoutMs` with an abort
113
+ signal and a hard race, so an adapter that ignores the signal still times out),
114
+ and rejects output that is not a PDF or is encrypted. The converter is told a
115
+ neutral file name (`document.docx`), never the bundle path. Identical documents
116
+ are rendered once.
117
+ - **Text**: an injectable `OfficeTextReader` (best effort; a failure or a `null`
118
+ costs the member nothing) returns whole-document text and, for decks, text and
119
+ speaker notes per slide. Office text is handed to the host on the accepted
120
+ member (`officeText`) and is **never** inlined into a proposed lesson body:
121
+ teacher guides and notes carry answers, and audience belongs to manifest v2.
122
+
123
+ `receiveMember` gets the original `bytes` (store them as the private original
124
+ asset: "Open in PowerPoint" for decks) and `rendered` (`{ bytes, sha256, mediaType:
125
+ 'application/pdf', converterId }`, store as a private asset beside the original:
126
+ the pages for "Present"/reading). The member row records `renderedSha256` and
127
+ `renderedSizeBytes`; bytes are still not retained here.
128
+
129
+ **Fail closed.** Any converter problem records that member `unsupported` with a
130
+ reason and writes the rest of the bundle normally: `converter_unavailable` (none
131
+ configured), `converter_failed` (unreachable or 5xx), `converter_timeout`,
132
+ `converter_too_large`, `converter_rejected` (HTTP 4xx, not a PDF, encrypted),
133
+ `office_limit` (beyond `maxOfficeMembers`, in natural path order). A member that
134
+ failed is not a lesson in the proposal, and identical copies of a failed document
135
+ fail the same way rather than becoming duplicates of nothing. Outcomes are part
136
+ of the append-only evidence, so a replay does not retry a recorded failure (to
137
+ retry, change the bundle). A replay does re-render recorded-accepted members so the
138
+ host receives the bytes again; if it can no longer render one it throws
139
+ `DocumentConversionError` rather than silently dropping an accepted member.
140
+
141
+ ### Host configuration
142
+
143
+ ```ts
144
+ const service = new CourseBundleImportService(db, authorizer, {
145
+ converter: new GotenbergDocumentConverter({
146
+ baseUrl: process.env.GOTENBERG_URL, // for example http://gotenberg:3000
147
+ timeoutMs: 60_000,
148
+ maxBytes: 50 * 1024 * 1024,
149
+ }),
150
+ officeTextReader, // optional, see below
151
+ });
152
+ ```
153
+
154
+ `GotenbergDocumentConverter` posts to `<baseUrl>/forms/libreoffice/convert`, talks
155
+ to nothing else, refuses redirects and URLs with credentials, and caps the response
156
+ as it streams. Run Gotenberg as an internal-only service with **no outbound
157
+ network**, its own size/time limits and no shared volume with the app; this
158
+ package assumes untrusted files never run next to the application. Tests use
159
+ `FakeDocumentConverter` (records calls; `failWith`, `failWhen`, `delayMs`, `output`).
160
+
161
+ `OfficeTextReader` is deliberately not wired to the SDK here, so this package
162
+ does not depend on an unreleased `@happyvertical/documents`. Once the Office
163
+ processors ship (sdk#1485, `extractOffice(bytes, 'docx' | 'pptx')`), implement
164
+ `read` with it; the snippet is in the `OfficeTextReader` doc comment.
165
+
94
166
  ## Manifest (`manifest.json`, version 1, closed)
95
167
 
96
168
  ```json
@@ -139,6 +211,12 @@ Normal manifest migrations create both tables.
139
211
 
140
212
  ## Not in this release
141
213
 
214
+ - Manifest version 2 (material roles with audience, lesson pages, course-level
215
+ members, external video references) waits for the phase 1 role vocabulary
216
+ (smrt#4614). The page-role vocabulary and the closed v1 schema are unchanged;
217
+ see the hand-off note on smrt#4615.
218
+ - Re-rendering a member whose first import recorded a converter failure (outcomes
219
+ are append-only per bundle identity).
142
220
  - Ingestion's receipt contract is unchanged: there is no `application/zip` part
143
221
  type or `parentEvidenceId` in ingestion. The education side unpacks and the
144
222
  host receives members one by one, so archive-to-member lineage lives in
@@ -30,6 +30,12 @@ export interface CourseBundleLimits {
30
30
  maxLessons: number;
31
31
  /** Longest text member used as a lesson body, in characters. */
32
32
  maxLessonBodyChars: number;
33
+ /** Most Word/PowerPoint members rendered per bundle; later ones are recorded unsupported. */
34
+ maxOfficeMembers: number;
35
+ /** Largest rendered PDF accepted back from the converter, in bytes. */
36
+ maxRenderedBytes: number;
37
+ /** Wall-clock budget for rendering one Office member, in milliseconds. */
38
+ conversionTimeoutMs: number;
33
39
  }
34
40
  export declare const COURSE_BUNDLE_LIMITS: Readonly<CourseBundleLimits>;
35
41
  /** Nested archives are never expanded: depth is one, and a zip member is unsupported evidence. */
@@ -55,7 +61,11 @@ export declare class CourseBundleNotFoundError extends CourseAuthoringError {
55
61
  constructor();
56
62
  }
57
63
  /** What the bytes of a bundle member turned out to be (by content, never by name alone). */
58
- export type CourseBundleMemberKind = 'pdf' | 'image' | 'text' | 'manifest' | 'unsupported';
64
+ export type CourseBundleMemberKind = 'pdf' | 'image' | 'text'
65
+ /** Word (`.docx`): rendered to PDF by the converter, text read by the SDK processor. */
66
+ | 'docx'
67
+ /** PowerPoint (`.pptx`): the deck is kept as the original and as rendered pages. */
68
+ | 'pptx' | 'manifest' | 'unsupported';
59
69
  export type CourseBundleMemberStatus =
60
70
  /** Supported, unique content: handed to extraction and eligible for a lesson. */
61
71
  'accepted'
@@ -67,11 +77,21 @@ export type CourseBundleMemberStatus =
67
77
  | 'refused'
68
78
  /** The bundle manifest itself. */
69
79
  | 'metadata';
70
- export type CourseBundleMemberReason = 'unsupported_type' | 'nested_archive' | 'unreadable_text' | 'encrypted_pdf' | 'entry_too_large' | 'duplicate_content';
80
+ export type CourseBundleMemberReason = 'unsupported_type' | 'nested_archive' | 'unreadable_text' | 'encrypted_pdf' | 'entry_too_large' | 'duplicate_content'
81
+ /** The OOXML package failed the bounded zip checks (bomb, bad paths, damaged). */
82
+ | 'unsafe_office'
83
+ /** More Office members than `maxOfficeMembers`. */
84
+ | 'office_limit'
85
+ /** No `DocumentConverter` is configured: the member cannot be rendered. */
86
+ | 'converter_unavailable'
87
+ /** The converter could not be reached or failed (server side). */
88
+ | 'converter_failed' | 'converter_timeout' | 'converter_too_large'
89
+ /** The converter refused the file, or returned something that is not a PDF. */
90
+ | 'converter_rejected';
71
91
  export declare const COURSE_BUNDLE_PAGE_ROLES: readonly ["exercise", "example", "instructions", "cover", "answer_key", "mixed", "unknown"];
72
92
  export type CourseBundlePageRole = (typeof COURSE_BUNDLE_PAGE_ROLES)[number];
73
93
  /** Named progress stages, in order. */
74
- export declare const COURSE_BUNDLE_STAGES: readonly ["unpack", "classify", "extract", "propose"];
94
+ export declare const COURSE_BUNDLE_STAGES: readonly ["unpack", "classify", "render", "extract", "propose"];
75
95
  export type CourseBundleStage = (typeof COURSE_BUNDLE_STAGES)[number];
76
96
  /** One progress event. A stage emits `completed: 0` first and `completed === total` last. */
77
97
  export interface CourseBundleProgress {
@@ -1 +1 @@
1
- {"version":3,"file":"course-bundle-contracts.d.ts","sourceRoot":"","sources":["../src/course-bundle-contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"course-bundle-contracts.d.ts","sourceRoot":"","sources":["../src/course-bundle-contracts.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,9 @@ export declare class CourseBundleMember extends SmrtObject {
55
55
  role: string;
56
56
  sectionKey: string;
57
57
  lessonKey: string;
58
+ /** sha256 of the PDF rendered from a Word/PowerPoint member; empty otherwise. */
59
+ renderedSha256: string;
60
+ renderedSizeBytes: number;
58
61
  recordedAt: Date;
59
62
  constructor(options?: Record<string, unknown>);
60
63
  delete(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"course-bundle-models.d.ts","sourceRoot":"","sources":["../src/course-bundle-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,UAAU,EACV,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAqClC;;;;;GAKG;AACH,qBAaa,kBAAmB,SAAQ,UAAU;IACpC,QAAQ,SAAM;IAC1B,yDAAyD;IACzD,cAAc,SAAM;IACpB,wBAAwB;IACxB,MAAM,SAAS;IACf,gFAAgF;IAChF,QAAQ,SAAM;IACd,4CAA4C;IAC5C,eAAe,SAAK;IACpB,UAAU,SAAK;IACf,aAAa,SAAK;IAClB,cAAc,SAAK;IACnB,gBAAgB,SAAK;IACrB,YAAY,SAAK;IACjB,UAAU,SAAK;IACf,gBAAgB,SAAM;IACtB,UAAU,OAAc;gBACZ,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGvB,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB9D;AACD,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,UAAU,4BAAsB;CACjD;AAED;;;;GAIG;AACH,qBAiBa,kBAAmB,SAAQ,UAAU;IACpC,QAAQ,SAAM;IAC4B,QAAQ,SAAM;IACpE,gDAAgD;IAChD,OAAO,SAAK;IACZ,IAAI,SAAM;IACV,wEAAwE;IACxE,MAAM,SAAM;IACZ,SAAS,SAAK;IACd,SAAS,SAAM;IACf,IAAI,SAAiB;IACrB,MAAM,SAAiB;IACvB,gEAAgE;IAChE,MAAM,SAAM;IACZ,uDAAuD;IACvD,eAAe,SAAM;IACrB,sDAAsD;IACtD,IAAI,SAAM;IACV,UAAU,SAAM;IAChB,SAAS,SAAM;IACf,UAAU,OAAc;gBACZ,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGvB,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAuB9D;AACD,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,UAAU,4BAAsB;CACjD"}
1
+ {"version":3,"file":"course-bundle-models.d.ts","sourceRoot":"","sources":["../src/course-bundle-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,UAAU,EACV,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AA6ClC;;;;;GAKG;AACH,qBAaa,kBAAmB,SAAQ,UAAU;IACpC,QAAQ,SAAM;IAC1B,yDAAyD;IACzD,cAAc,SAAM;IACpB,wBAAwB;IACxB,MAAM,SAAS;IACf,gFAAgF;IAChF,QAAQ,SAAM;IACd,4CAA4C;IAC5C,eAAe,SAAK;IACpB,UAAU,SAAK;IACf,aAAa,SAAK;IAClB,cAAc,SAAK;IACnB,gBAAgB,SAAK;IACrB,YAAY,SAAK;IACjB,UAAU,SAAK;IACf,gBAAgB,SAAM;IACtB,UAAU,OAAc;gBACZ,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGvB,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB9D;AACD,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,UAAU,4BAAsB;CACjD;AAED;;;;GAIG;AACH,qBAiBa,kBAAmB,SAAQ,UAAU;IACpC,QAAQ,SAAM;IAC4B,QAAQ,SAAM;IACpE,gDAAgD;IAChD,OAAO,SAAK;IACZ,IAAI,SAAM;IACV,wEAAwE;IACxE,MAAM,SAAM;IACZ,SAAS,SAAK;IACd,SAAS,SAAM;IACf,IAAI,SAAiB;IACrB,MAAM,SAAiB;IACvB,gEAAgE;IAChE,MAAM,SAAM;IACZ,uDAAuD;IACvD,eAAe,SAAM;IACrB,sDAAsD;IACtD,IAAI,SAAM;IACV,UAAU,SAAM;IAChB,SAAS,SAAM;IACf,iFAAiF;IACjF,cAAc,SAAM;IACpB,iBAAiB,SAAK;IACtB,UAAU,OAAc;gBACZ,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGvB,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB9D;AACD,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,UAAU,4BAAsB;CACjD"}
@@ -5,6 +5,7 @@ import { type BundleReaderRegistry } from './course-bundle.js';
5
5
  import { type CourseBundleInput, type CourseBundleLimits, type CourseBundleMemberKind, type CourseBundleMemberReason, type CourseBundleMemberStatus, type CourseBundleProgressListener } from './course-bundle-contracts.js';
6
6
  import type { CourseGenerationView } from './course-generation-contracts.js';
7
7
  import { type CourseGenerationReviewServiceOptions } from './course-generation-review-service.js';
8
+ import { type DocumentConverter, type OfficeText, type OfficeTextReader } from './document-converter.js';
8
9
  /** One bundle member as evidence. Never carries bytes, storage locators or text. */
9
10
  export interface CourseBundleMemberView {
10
11
  path: string;
@@ -19,6 +20,9 @@ export interface CourseBundleMemberView {
19
20
  role: string | null;
20
21
  sectionKey: string | null;
21
22
  lessonKey: string | null;
23
+ /** sha256 of the PDF rendered from a Word/PowerPoint member, null otherwise. */
24
+ renderedSha256: string | null;
25
+ renderedSizeBytes: number;
22
26
  }
23
27
  export interface CourseBundleImportView {
24
28
  importId: string;
@@ -41,12 +45,29 @@ export interface AcceptedCourseBundleMember {
41
45
  path: string;
42
46
  sha256: string;
43
47
  mediaType: string;
44
- kind: 'pdf' | 'image' | 'text';
48
+ kind: 'pdf' | 'image' | 'text' | 'docx' | 'pptx';
45
49
  /** Declared page role (`exercise`, `answer_key`, ...), or null. */
46
50
  role: string | null;
47
51
  sectionKey: string | null;
48
52
  lessonKey: string | null;
53
+ /** The original bytes. For Word/PowerPoint, keep these as the private original asset. */
49
54
  bytes: Uint8Array;
55
+ /**
56
+ * Word/PowerPoint only: the PDF the converter rendered. Store it as a private
57
+ * asset beside the original (pages for reading or "Present"); null for other kinds.
58
+ */
59
+ rendered: {
60
+ bytes: Uint8Array;
61
+ sha256: string;
62
+ mediaType: 'application/pdf';
63
+ converterId: string;
64
+ } | null;
65
+ /**
66
+ * Word/PowerPoint only: text read by the injected `OfficeTextReader` (slide text
67
+ * and speaker notes per slide for PPTX), or null. It is never copied into a
68
+ * proposed lesson body: audience belongs to the manifest v2 roles.
69
+ */
70
+ officeText: OfficeText | null;
50
71
  }
51
72
  export interface CourseBundleImportResult {
52
73
  import: CourseBundleImportView;
@@ -83,6 +104,13 @@ export interface ProposeBundleStructureRequest extends CourseAuthoringActor {
83
104
  export interface CourseBundleImportServiceOptions extends Omit<CourseGenerationReviewServiceOptions, 'generator'> {
84
105
  readers?: BundleReaderRegistry;
85
106
  limits?: Partial<CourseBundleLimits>;
107
+ /**
108
+ * Renders Word/PowerPoint members to PDF in an isolated service. Without one,
109
+ * every Office member is recorded `unsupported / converter_unavailable`.
110
+ */
111
+ converter?: DocumentConverter;
112
+ /** Reads Office text (see `OfficeTextReader`); optional and best effort. */
113
+ officeTextReader?: OfficeTextReader;
86
114
  }
87
115
  /**
88
116
  * Import a course bundle (zip with an optional closed manifest, or a plain file
@@ -102,7 +130,23 @@ export declare class CourseBundleImportService extends CourseAuthoringService {
102
130
  /** The same service bound to a host-owned transaction executor. */
103
131
  withExecutor(executor: DatabaseInterface): CourseBundleImportService;
104
132
  private limits;
133
+ /**
134
+ * Unpack and classify (sync), settle Word/PowerPoint members, then plan.
135
+ * `render` runs the converter (import); otherwise only the recorded outcome
136
+ * is recalled (proposals), so both see the same structure.
137
+ */
105
138
  private plan;
139
+ /** Recorded Word/PowerPoint outcomes of an earlier import of the same bundle, by sha256. */
140
+ private recordedOffice;
141
+ /**
142
+ * Render each distinct Word/PowerPoint document once, in natural path order.
143
+ * Every failure fails closed for that member (recorded unsupported with a
144
+ * reason). A first import records the outcome; a replay of a recorded-accepted
145
+ * member that can no longer be rendered throws, because its evidence says it
146
+ * was accepted and the host still needs the bytes.
147
+ */
148
+ private renderOffice;
149
+ private convert;
106
150
  /**
107
151
  * Unpack, classify and record a bundle, then hand accepted members to the
108
152
  * host. Authorization is checked before any bytes are parsed and again in the
@@ -1 +1 @@
1
- {"version":3,"file":"course-bundle-service.d.ts","sourceRoot":"","sources":["../src/course-bundle-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"course-bundle-service.d.ts","sourceRoot":"","sources":["../src/course-bundle-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EACV,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EACL,KAAK,oBAAoB,EAY1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAE7B,KAAK,4BAA4B,EAGlC,MAAM,8BAA8B,CAAC;AAMtC,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,KAAK,oCAAoC,EAC1C,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,iBAAiB,EAGtB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAIjC,oFAAoF;AACpF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACxC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gFAAgF;IAChF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AACD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AACD,4EAA4E;AAC5E,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjD,mEAAmE;IACnE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yFAAyF;IACzF,KAAK,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,iBAAiB,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI,CAAC;IACT;;;;OAIG;IACH,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AACD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,uFAAuF;IACvF,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AACD,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,4BAA4B,CAAC;IAC1C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,0BAA0B,EAClC,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,KAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AACD,MAAM,WAAW,6BAA8B,SAAQ,oBAAoB;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AACD,MAAM,WAAW,gCACf,SAAQ,IAAI,CAAC,oCAAoC,EAAE,WAAW,CAAC;IAC/D,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC;;;OAGG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAoID;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,SAAQ,sBAAsB;IACnE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;gBAG7C,EAAE,EAAE,iBAAiB,EACrB,UAAU,EAAE,yBAAyB,EACrC,OAAO,GAAE,gCAAqC;IAShD,mEAAmE;IACnE,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,yBAAyB;IAQpE,OAAO,CAAC,MAAM;IAOd;;;;OAIG;YACW,IAAI;IA4BlB,4FAA4F;YAC9E,cAAc;IA4B5B;;;;;;OAMG;YACW,YAAY;YA2CZ,OAAO;IAoDrB;;;;OAIG;IACG,YAAY,CAChB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC;IA6IpC,gFAAgF;IAC1E,UAAU,CACd,OAAO,EAAE,oBAAoB,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,sBAAsB,CAAC;IAelC;;;;;OAKG;IACG,gBAAgB,CACpB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,oBAAoB,CAAC;YAkDlB,MAAM;YAeN,IAAI;CA2BnB"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { type CourseBundleInput, type CourseBundleLimits, type CourseBundleMemberKind, type CourseBundleMemberReason, type CourseBundleMemberStatus, type CourseBundlePageRole } from './course-bundle-contracts.js';
6
6
  import { type RawBundleMember } from './course-bundle-zip.js';
7
+ import { type OfficeText } from './document-converter.js';
7
8
  /** A member after sniffing its bytes. `bytes` is present only for `accepted` members. */
8
9
  export interface ClassifiedBundleMember {
9
10
  path: string;
@@ -18,6 +19,13 @@ export interface ClassifiedBundleMember {
18
19
  bytes: Uint8Array | null;
19
20
  /** Decoded body of a readable text member. */
20
21
  text: string | null;
22
+ /** Word/PowerPoint only: the PDF the converter rendered (set before the evidence is written). */
23
+ rendered: {
24
+ bytes: Uint8Array;
25
+ sha256: string;
26
+ } | null;
27
+ /** Word/PowerPoint only: text read by the injected `OfficeTextReader`, when available. */
28
+ officeText: OfficeText | null;
21
29
  }
22
30
  export interface BundleStructureLesson {
23
31
  key: string;
@@ -114,8 +122,32 @@ export declare function courseBundleIdentity(members: ReadonlyArray<{
114
122
  sha256: string | null;
115
123
  size: number;
116
124
  }>): string;
125
+ /** Classify every raw member (sync, no network). */
126
+ export declare function classifyBundle(raw: readonly RawBundleMember[], limits?: CourseBundleLimits, onProgress?: (completed: number, total: number) => void): ClassifiedBundleMember[];
127
+ /**
128
+ * What became of one Office member's rendering (keyed by content sha256).
129
+ * `rendered`/`officeText` are present on a fresh render, absent when the outcome
130
+ * is only recalled from recorded evidence.
131
+ */
132
+ export type OfficeOutcome = {
133
+ ok: true;
134
+ rendered?: {
135
+ bytes: Uint8Array;
136
+ sha256: string;
137
+ };
138
+ officeText?: OfficeText | null;
139
+ } | {
140
+ ok: false;
141
+ reason: CourseBundleMemberReason;
142
+ };
117
143
  /** Classify, order, mark duplicate content and lay out the proposed structure. */
118
144
  export declare function planCourseBundle(raw: readonly RawBundleMember[], registry?: BundleReaderRegistry, limits?: CourseBundleLimits, onProgress?: (completed: number, total: number) => void): CourseBundlePlan;
145
+ /**
146
+ * Plan already-classified members. `officeOutcomes` (by sha256) settles
147
+ * Word/PowerPoint members before duplicates and the structure are decided, so
148
+ * a member that could not be rendered never becomes a lesson.
149
+ */
150
+ export declare function planClassifiedBundle(raw: readonly RawBundleMember[], classified: ClassifiedBundleMember[], registry?: BundleReaderRegistry, limits?: CourseBundleLimits, officeOutcomes?: ReadonlyMap<string, OfficeOutcome>): CourseBundlePlan;
119
151
  /** Closed proposal output (`validateCourseGenerationOutput` shape) for a structure. */
120
152
  export declare function bundleProposalOutput(plan: CourseBundlePlan, limits?: CourseBundleLimits): {
121
153
  course: {
@@ -1 +1 @@
1
- {"version":3,"file":"course-bundle.d.ts","sourceRoot":"","sources":["../src/course-bundle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"course-bundle.d.ts","sourceRoot":"","sources":["../src/course-bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Document conversion for Office course-bundle members (SMRT #4615).
3
+ *
4
+ * Untrusted Word and PowerPoint files never run next to the application: the
5
+ * app only talks to a `DocumentConverter`, which renders a member to PDF in an
6
+ * isolated service. The importer enforces the byte and time limits itself, so
7
+ * a misbehaving adapter cannot exceed them.
8
+ */
9
+ /** Office kinds the importer can render. */
10
+ export type OfficeDocumentKind = 'docx' | 'pptx';
11
+ export declare const OFFICE_MEDIA_TYPES: Readonly<Record<OfficeDocumentKind, string>>;
12
+ export declare const DEFAULT_DOCUMENT_CONVERSION_TIMEOUT_MS = 60000;
13
+ export declare const DEFAULT_DOCUMENT_CONVERSION_MAX_BYTES: number;
14
+ export interface DocumentConversionLimits {
15
+ /** Largest input handed to the converter, in bytes. */
16
+ maxInputBytes: number;
17
+ /** Largest rendered PDF accepted back, in bytes. */
18
+ maxOutputBytes: number;
19
+ /** Wall-clock budget for one conversion, in milliseconds. */
20
+ timeoutMs: number;
21
+ }
22
+ export interface DocumentConversionRequest {
23
+ bytes: Uint8Array;
24
+ kind: OfficeDocumentKind;
25
+ /** A neutral file name (extension only matters); never the bundle path. */
26
+ fileName: string;
27
+ limits: DocumentConversionLimits;
28
+ /** Aborted when the time budget is spent; adapters must honour it. */
29
+ signal: AbortSignal;
30
+ }
31
+ export interface DocumentConversionResult {
32
+ /** The rendered document as a PDF. */
33
+ pdf: Uint8Array;
34
+ }
35
+ /** Render an Office document to PDF. Implementations must not retain the bytes. */
36
+ export interface DocumentConverter {
37
+ /** Stable identifier recorded as provenance (for example `gotenberg`). */
38
+ readonly id: string;
39
+ convertToPdf(request: DocumentConversionRequest): Promise<DocumentConversionResult>;
40
+ }
41
+ export type DocumentConversionFailure =
42
+ /** The service could not be reached or answered with a server error. */
43
+ 'unavailable' | 'timeout' | 'too_large'
44
+ /** The service refused or could not render this file. */
45
+ | 'rejected'
46
+ /** The answer was not a usable PDF. */
47
+ | 'invalid_output';
48
+ export declare class DocumentConversionError extends Error {
49
+ readonly code: DocumentConversionFailure;
50
+ constructor(code: DocumentConversionFailure, message?: string);
51
+ }
52
+ /** Text of an Office document as read by an SDK processor (never learner-visible by default). */
53
+ export interface OfficeText {
54
+ /** Whole-document text. */
55
+ text: string;
56
+ /** PPTX only: slide text and speaker notes per slide, in order. */
57
+ slides?: Array<{
58
+ index: number;
59
+ text: string;
60
+ notes?: string;
61
+ }>;
62
+ }
63
+ /**
64
+ * Injectable text reader for Office members. Return `null` when the engine is
65
+ * unavailable. Wire the SDK processor once `@happyvertical/documents` with
66
+ * `extractOffice` is released:
67
+ *
68
+ * ```ts
69
+ * import { extractOffice } from '@happyvertical/documents';
70
+ * const officeTextReader: OfficeTextReader = {
71
+ * async read({ bytes, kind }) {
72
+ * const r = await extractOffice(bytes, kind, { extractImages: false });
73
+ * if (r.status !== 'ok') return null;
74
+ * const slides = kind === 'pptx'
75
+ * ? r.parts.map((p, i) => ({ index: Number(p.metadata?.slide ?? i + 1), text: p.content, notes: p.notes }))
76
+ * : undefined;
77
+ * const text = r.parts.flatMap(function flat(p): string[] { return [p.content, ...(p.parts ?? []).flatMap(flat)]; }).filter(Boolean).join('\n\n');
78
+ * return { text, slides };
79
+ * },
80
+ * };
81
+ * ```
82
+ */
83
+ export interface OfficeTextReader {
84
+ read(input: {
85
+ bytes: Uint8Array;
86
+ kind: OfficeDocumentKind;
87
+ }): Promise<OfficeText | null>;
88
+ }
89
+ export interface GotenbergConverterOptions {
90
+ /** Base URL of the Gotenberg service, for example `http://gotenberg:3000`. */
91
+ baseUrl: string;
92
+ /** Per-request timeout; the importer's own budget still applies. */
93
+ timeoutMs?: number;
94
+ /** Largest input sent and largest response read, in bytes. */
95
+ maxBytes?: number;
96
+ /** Injected for tests; defaults to the global `fetch`. */
97
+ fetch?: typeof fetch;
98
+ }
99
+ /** True when the bytes start like a PDF (header within the first KiB). */
100
+ export declare function looksLikePdf(bytes: Uint8Array): boolean;
101
+ /**
102
+ * Gotenberg (LibreOffice in a container) over HTTP. The only network it ever
103
+ * touches is `baseUrl`; redirects are refused, credentials in the URL are
104
+ * rejected and the response body is read with a hard size cap. Deploy the
105
+ * service with no outbound network of its own.
106
+ */
107
+ export declare class GotenbergDocumentConverter implements DocumentConverter {
108
+ readonly id = "gotenberg";
109
+ private readonly endpoint;
110
+ private readonly timeoutMs;
111
+ private readonly maxBytes;
112
+ private readonly fetchImpl;
113
+ constructor(options: GotenbergConverterOptions);
114
+ convertToPdf(request: DocumentConversionRequest): Promise<DocumentConversionResult>;
115
+ }
116
+ export interface FakeDocumentConverterOptions {
117
+ /** Throw this failure for every call. */
118
+ failWith?: DocumentConversionFailure;
119
+ /** Fail only when this predicate matches the input bytes. */
120
+ failWhen?: (request: DocumentConversionRequest) => boolean;
121
+ /** Wait this long (honouring the abort signal) before answering. */
122
+ delayMs?: number;
123
+ /** Bytes to return instead of the built-in one-page PDF. */
124
+ output?: Uint8Array;
125
+ }
126
+ /** Deterministic in-memory converter for tests. Records every call. */
127
+ export declare class FakeDocumentConverter implements DocumentConverter {
128
+ private readonly options;
129
+ readonly id = "fake";
130
+ readonly calls: Array<{
131
+ kind: OfficeDocumentKind;
132
+ fileName: string;
133
+ byteLength: number;
134
+ }>;
135
+ constructor(options?: FakeDocumentConverterOptions);
136
+ convertToPdf(request: DocumentConversionRequest): Promise<DocumentConversionResult>;
137
+ }
138
+ //# sourceMappingURL=document-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-converter.d.ts","sourceRoot":"","sources":["../src/document-converter.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -26,7 +26,7 @@ export { AUTHORED_IDENTITY_SOURCE_KEY, AUTHORED_RELEASE_SOURCE_KEY, isAuthoredRe
26
26
  export * from './course-authoring-models.js';
27
27
  export type { CourseAuthoringServiceOptions } from './course-authoring-service.js';
28
28
  export { CourseAuthoringService } from './course-authoring-service.js';
29
- export { type BundleReader, BundleReaderRegistry, type BundleStructure, type BundleStructureLesson, type BundleStructureSection, bundleProposalOutput, type ClassifiedBundleMember, type CourseBundlePlan, classifyBundleMember, courseBundleIdentity, createBundleReaderRegistry, manifestBundleReader, naturalCompare, type PreparedBundle, parseBundleManifest, pdfIsEncrypted, plainBundleReader, planCourseBundle, unpackBundle, } from './course-bundle.js';
29
+ export { type BundleReader, BundleReaderRegistry, type BundleStructure, type BundleStructureLesson, type BundleStructureSection, bundleProposalOutput, type ClassifiedBundleMember, type CourseBundlePlan, classifyBundle, classifyBundleMember, courseBundleIdentity, createBundleReaderRegistry, manifestBundleReader, naturalCompare, type OfficeOutcome, type PreparedBundle, parseBundleManifest, pdfIsEncrypted, plainBundleReader, planClassifiedBundle, planCourseBundle, unpackBundle, } from './course-bundle.js';
30
30
  export * from './course-bundle-contracts.js';
31
31
  export * from './course-bundle-models.js';
32
32
  export { type AcceptedCourseBundleMember, type CourseBundleImportResult, CourseBundleImportService, type CourseBundleImportServiceOptions, type CourseBundleImportView, type CourseBundleMemberView, type ImportCourseBundleRequest, type ProposeBundleStructureRequest, } from './course-bundle-service.js';
@@ -46,6 +46,7 @@ export * from './course-review-models.js';
46
46
  export type { CourseSourceConfig, CourseSourceKind, SourceSharing, } from './course-source.js';
47
47
  export { CourseSource, CourseSourceCollection } from './course-source.js';
48
48
  export { authoredVisibilityPermitsGroups, effectiveCourseVisibility, } from './course-visibility.js';
49
+ export * from './document-converter.js';
49
50
  export type { EnrollmentParentNoteView } from './enrollment-note-service.js';
50
51
  export { ENROLLMENT_NOTE_MAX_LENGTH, EnrollmentParentNote, EnrollmentParentNoteCollection, validateEnrollmentNote, } from './enrollment-notes.js';
51
52
  export * from './family-intake-contracts.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}