@opengeni/contracts 0.40.0 → 0.44.1

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 (125) hide show
  1. package/dist/atlassian.d.ts +278 -0
  2. package/dist/atlassian.js +55 -0
  3. package/dist/atlassian.js.map +1 -0
  4. package/dist/chunk-52SGB2QO.js +688 -0
  5. package/dist/chunk-52SGB2QO.js.map +1 -0
  6. package/dist/{chunk-7JZMI22I.js → chunk-5UDNP7AO.js} +34 -2
  7. package/dist/chunk-5UDNP7AO.js.map +1 -0
  8. package/dist/chunk-BVGIYW7D.js +11 -0
  9. package/dist/chunk-BVGIYW7D.js.map +1 -0
  10. package/dist/chunk-CADSX6UN.js +1145 -0
  11. package/dist/chunk-CADSX6UN.js.map +1 -0
  12. package/dist/chunk-D2HKF2EF.js +1460 -0
  13. package/dist/chunk-D2HKF2EF.js.map +1 -0
  14. package/dist/chunk-FJBG5E4O.js +194 -0
  15. package/dist/chunk-FJBG5E4O.js.map +1 -0
  16. package/dist/chunk-H5BVCZKF.js +382 -0
  17. package/dist/chunk-H5BVCZKF.js.map +1 -0
  18. package/dist/chunk-LSB7GRLG.js +779 -0
  19. package/dist/chunk-LSB7GRLG.js.map +1 -0
  20. package/dist/chunk-MYBZRDTY.js +340 -0
  21. package/dist/chunk-MYBZRDTY.js.map +1 -0
  22. package/dist/chunk-RIY7GYQS.js +1204 -0
  23. package/dist/chunk-RIY7GYQS.js.map +1 -0
  24. package/dist/chunk-TZ6YEYN4.js +386 -0
  25. package/dist/chunk-TZ6YEYN4.js.map +1 -0
  26. package/dist/chunk-VA22KRHS.js +15177 -0
  27. package/dist/chunk-VA22KRHS.js.map +1 -0
  28. package/dist/chunk-Y3MLSLB4.js +392 -0
  29. package/dist/chunk-Y3MLSLB4.js.map +1 -0
  30. package/dist/chunk-YRKRZ6OF.js +134 -0
  31. package/dist/chunk-YRKRZ6OF.js.map +1 -0
  32. package/dist/company-profile.d.ts +629 -0
  33. package/dist/document-artifact-commands.d.ts +282 -0
  34. package/dist/document-artifact-commands.js +54 -0
  35. package/dist/document-artifact-commands.js.map +1 -0
  36. package/dist/document-artifact-query.d.ts +2 -0
  37. package/dist/document-artifact-query.js +54 -0
  38. package/dist/document-artifact-query.js.map +1 -0
  39. package/dist/editable-artifact-binary.d.ts +56 -0
  40. package/dist/editable-artifact-causal-frontier.d.ts +12 -0
  41. package/dist/editable-artifact-causal-frontier.js +18 -0
  42. package/dist/editable-artifact-causal-frontier.js.map +1 -0
  43. package/dist/editable-artifact-codec-registry.d.ts +48 -0
  44. package/dist/editable-artifact-codec-registry.js +20 -0
  45. package/dist/editable-artifact-codec-registry.js.map +1 -0
  46. package/dist/editable-artifact-committed-transaction.d.ts +35 -0
  47. package/dist/editable-artifact-committed-transaction.js +19 -0
  48. package/dist/editable-artifact-committed-transaction.js.map +1 -0
  49. package/dist/editable-artifact-live.d.ts +276 -0
  50. package/dist/editable-artifact-live.js +907 -0
  51. package/dist/editable-artifact-live.js.map +1 -0
  52. package/dist/editable-artifact-serialized-commit.d.ts +53 -0
  53. package/dist/editable-artifact-serialized-commit.js +26 -0
  54. package/dist/editable-artifact-serialized-commit.js.map +1 -0
  55. package/dist/editable-artifact-versions.d.ts +6 -0
  56. package/dist/editable-artifact-versions.js +11 -0
  57. package/dist/editable-artifact-versions.js.map +1 -0
  58. package/dist/editable-artifacts.d.ts +46 -0
  59. package/dist/editable-artifacts.js +236 -0
  60. package/dist/editable-artifacts.js.map +1 -0
  61. package/dist/event-preview.d.ts +1 -1
  62. package/dist/google-drive.d.ts +114 -2
  63. package/dist/google-drive.js +70 -14
  64. package/dist/google-drive.js.map +1 -1
  65. package/dist/image-generation.d.ts +70 -0
  66. package/dist/index.d.ts +4460 -155
  67. package/dist/index.js +1127 -30
  68. package/dist/interaction.d.ts +6895 -0
  69. package/dist/memory-slack-delivery.d.ts +397 -0
  70. package/dist/presentation-artifact-commands.d.ts +349 -0
  71. package/dist/presentation-artifact-commands.js +66 -0
  72. package/dist/presentation-artifact-commands.js.map +1 -0
  73. package/dist/presentation-artifact-query.d.ts +2 -0
  74. package/dist/presentation-artifact-query.js +66 -0
  75. package/dist/presentation-artifact-query.js.map +1 -0
  76. package/dist/retained-output.d.ts +24 -0
  77. package/dist/sandbox-snapshots.d.ts +9 -0
  78. package/dist/scoped-knowledge.d.ts +14 -13
  79. package/dist/slack-bot-scopes.d.ts +4 -0
  80. package/dist/slack-bot-scopes.js +3 -1
  81. package/dist/spreadsheet-artifact-commands.d.ts +101 -0
  82. package/dist/spreadsheet-artifact-commands.js +27 -0
  83. package/dist/spreadsheet-artifact-commands.js.map +1 -0
  84. package/dist/spreadsheet-artifact-date.d.ts +4 -0
  85. package/dist/spreadsheet-artifact-query.d.ts +120 -0
  86. package/dist/spreadsheet-artifact-query.js +48 -0
  87. package/dist/spreadsheet-artifact-query.js.map +1 -0
  88. package/dist/tool-catalog.d.ts +576 -0
  89. package/dist/video-generation.d.ts +532 -0
  90. package/dist/video-generation.js +51 -0
  91. package/dist/video-generation.js.map +1 -0
  92. package/dist/workspace-learning-policy.d.ts +208 -0
  93. package/package.json +61 -1
  94. package/src/atlassian.ts +160 -0
  95. package/src/company-profile.ts +306 -0
  96. package/src/document-artifact-commands.ts +1709 -0
  97. package/src/document-artifact-query.ts +2 -0
  98. package/src/editable-artifact-binary.ts +396 -0
  99. package/src/editable-artifact-causal-frontier.ts +154 -0
  100. package/src/editable-artifact-codec-registry.ts +261 -0
  101. package/src/editable-artifact-committed-transaction.ts +478 -0
  102. package/src/editable-artifact-live.ts +1379 -0
  103. package/src/editable-artifact-serialized-commit.ts +494 -0
  104. package/src/editable-artifact-versions.ts +8 -0
  105. package/src/editable-artifacts.ts +473 -0
  106. package/src/google-drive.ts +68 -15
  107. package/src/image-generation.ts +106 -0
  108. package/src/index.ts +2326 -325
  109. package/src/interaction.ts +2292 -0
  110. package/src/memory-slack-delivery.ts +183 -0
  111. package/src/presentation-artifact-commands.ts +2035 -0
  112. package/src/presentation-artifact-query.ts +2 -0
  113. package/src/retained-output.ts +149 -2
  114. package/src/sandbox-snapshots.ts +28 -1
  115. package/src/scoped-knowledge.ts +18 -4
  116. package/src/slack-bot-scopes.ts +34 -1
  117. package/src/spreadsheet-artifact-commands.ts +999 -0
  118. package/src/spreadsheet-artifact-date.ts +21 -0
  119. package/src/spreadsheet-artifact-query.ts +1411 -0
  120. package/src/tool-catalog.ts +334 -0
  121. package/src/video-generation.ts +394 -0
  122. package/src/workspace-learning-policy.ts +233 -0
  123. package/dist/chunk-5HR2GPSC.js +0 -11031
  124. package/dist/chunk-5HR2GPSC.js.map +0 -1
  125. package/dist/chunk-7JZMI22I.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/document-artifact-commands.ts"],"sourcesContent":["/** Canonical identity-free OGADC001 structured-document commands. */\n\nimport {\n ArtifactBinaryReader,\n ArtifactBinaryWriter,\n decodeCountedEnvelope,\n encodeCountedEnvelope,\n equalBytes,\n strictUtf8,\n} from \"./editable-artifact-binary\";\n\nexport const DOCUMENT_ARTIFACT_COMMAND_VERSION = 1 as const;\n// The modality payload is nested inside OGATX001, whose public command budget\n// is 4 MiB. Keep the leaf codec at that same ceiling so a locally accepted\n// document edit can never become unsendable at the durable/live boundary.\nexport const DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES = 4 * 1024 * 1024;\nexport const DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS = 4_096;\nexport const DOCUMENT_ARTIFACT_COMMAND_MAX_STRING_BYTES = 4 * 1024 * 1024;\nexport const DOCUMENT_ARTIFACT_MAX_TEXT_UTF16 = 10_000_000;\nexport const DOCUMENT_ARTIFACT_MAX_TEXT_RUNS = 250_000;\nexport const DOCUMENT_ARTIFACT_MAX_TABLE_CELLS = 1_000_000;\nexport const DOCUMENT_ARTIFACT_MAX_STRUCTURAL_COUNTER = 2 ** 53 - 2;\nexport const DOCUMENT_ARTIFACT_QUERY_VERSION = 1 as const;\nexport const DOCUMENT_ARTIFACT_QUERY_RESPONSE_VERSION = 1 as const;\nexport const DOCUMENT_ARTIFACT_QUERY_MAX_BYTES = 256;\nexport const DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES = 8 * 1024 * 1024;\nexport const DOCUMENT_ARTIFACT_QUERY_MAX_ITEMS = 4_096;\nexport const DOCUMENT_ARTIFACT_QUERY_MAX_TEXT_UTF16 = 1_000_000;\nexport const DOCUMENT_ARTIFACT_QUERY_MAX_TABLE_CELLS = 100_000;\n\nconst MAGIC = \"OGADC001\";\nconst QUERY_MAGIC = \"OGADQ001\";\nconst QUERY_RESPONSE_MAGIC = \"OGADP001\";\nconst QUERY_RESPONSE_EXTENSION_MARKER = 0xff;\nconst PAGE_EXTRAS_EXTENSION_VERSION = 1;\n\nexport type DocumentArtifactIdKind =\n | \"paragraph\"\n | \"table\"\n | \"page-break\"\n | \"section\"\n | \"header\"\n | \"footer\"\n | \"comment\"\n | \"tracked-change\";\n\nexport type DocumentArtifactId = string;\n\nexport type DocumentArtifactPageGeometry = Readonly<{\n widthPt: number;\n heightPt: number;\n marginTopPt: number;\n marginRightPt: number;\n marginBottomPt: number;\n marginLeftPt: number;\n headerPt?: number;\n footerPt?: number;\n gutterPt?: number;\n}>;\n\nexport type DocumentArtifactTextStyle = Readonly<{\n fontFamily?: string;\n fontSizePt?: number;\n color?: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strike?: boolean;\n}>;\n\nexport type DocumentArtifactTextStylePatch = Readonly<{\n fontFamily?: string | null;\n fontSizePt?: number | null;\n color?: string | null;\n bold?: boolean | null;\n italic?: boolean | null;\n underline?: boolean | null;\n strike?: boolean | null;\n}>;\n\nexport type DocumentArtifactTextRun = Readonly<{\n text: string;\n style: DocumentArtifactTextStyle;\n}>;\n\nexport type DocumentArtifactParagraphStyle = Readonly<{\n headingLevel?: number;\n alignment?: \"left\" | \"center\" | \"right\" | \"justify\";\n spaceBeforePt?: number;\n spaceAfterPt?: number;\n lineHeight?: number;\n keepNext?: boolean;\n pageBreakBefore?: boolean;\n list?: Readonly<{\n kind: \"bullet\" | \"number\";\n level: number | null;\n instanceId: string | null;\n }>;\n}>;\n\nexport type DocumentArtifactTableStyle = Readonly<{\n widthPt?: number;\n columnWidthsPt?: readonly number[];\n headerRows?: number;\n cellPaddingPt?: number;\n borderColor?: string;\n headerFill?: string;\n allowRowSplit?: boolean;\n}>;\n\nexport type DocumentArtifactStoryTarget =\n | Readonly<{ kind: \"body\" }>\n | Readonly<{\n kind: \"section\";\n sectionId: DocumentArtifactId;\n storyKind: \"header\" | \"footer\";\n variant: \"default\" | \"first\" | \"even\";\n }>;\n\nexport type DocumentArtifactTextRange = Readonly<{ start: number; end: number }>;\nexport type DocumentArtifactCommentReply = Readonly<{\n author: string;\n text: string;\n createdAt: string;\n}>;\n\nexport type DocumentArtifactCommand =\n | Readonly<{\n kind: \"document.flags.set\";\n evenAndOddHeaders?: boolean | null;\n trackRevisions?: boolean | null;\n }>\n | Readonly<{\n kind: \"paragraph.add\";\n target: DocumentArtifactStoryTarget;\n id: DocumentArtifactId;\n runs: readonly DocumentArtifactTextRun[];\n style: DocumentArtifactParagraphStyle;\n }>\n | Readonly<{\n kind: \"paragraph.edit\";\n id: DocumentArtifactId;\n range: DocumentArtifactTextRange;\n replacement: string;\n style: DocumentArtifactTextStyle | null;\n }>\n | Readonly<{\n kind: \"paragraph.format\";\n id: DocumentArtifactId;\n range: DocumentArtifactTextRange;\n style: DocumentArtifactTextStylePatch;\n }>\n | Readonly<{\n kind: \"paragraph.style.set\";\n id: DocumentArtifactId;\n style: DocumentArtifactParagraphStyle;\n }>\n | Readonly<{\n kind: \"table.add\";\n target: DocumentArtifactStoryTarget;\n id: DocumentArtifactId;\n rows: readonly (readonly (readonly DocumentArtifactTextRun[])[])[];\n style: DocumentArtifactTableStyle;\n }>\n | Readonly<{ kind: \"table.style.set\"; id: DocumentArtifactId; style: DocumentArtifactTableStyle }>\n | Readonly<{ kind: \"page-break.add\"; id: DocumentArtifactId }>\n | Readonly<{\n kind: \"section.add\";\n ids: Readonly<{\n section: DocumentArtifactId;\n headerDefault: DocumentArtifactId;\n headerFirst: DocumentArtifactId;\n headerEven: DocumentArtifactId;\n footerDefault: DocumentArtifactId;\n footerFirst: DocumentArtifactId;\n footerEven: DocumentArtifactId;\n }>;\n page: DocumentArtifactPageGeometry;\n titlePage: boolean | null;\n }>\n | Readonly<{ kind: \"section.title-page.set\"; id: DocumentArtifactId; titlePage: boolean | null }>\n | Readonly<{\n kind: \"section.page.set\";\n id: DocumentArtifactId;\n page: DocumentArtifactPageGeometry;\n }>\n | Readonly<{\n kind: \"comment.add\";\n id: DocumentArtifactId;\n paragraphId: DocumentArtifactId;\n range: DocumentArtifactTextRange;\n resolved: boolean;\n root: DocumentArtifactCommentReply;\n }>\n | Readonly<{\n kind: \"comment.reply.add\";\n id: DocumentArtifactId;\n reply: DocumentArtifactCommentReply;\n }>\n | Readonly<{ kind: \"comment.resolved.set\"; id: DocumentArtifactId; resolved: boolean }>\n | Readonly<{\n kind: \"tracked-change.add\";\n id: DocumentArtifactId;\n paragraphId: DocumentArtifactId;\n range: DocumentArtifactTextRange;\n changeKind: \"insert\" | \"delete\";\n author: string;\n createdAt: string;\n }>;\n\nexport type DocumentArtifactCommandBatch = Readonly<{\n version: typeof DOCUMENT_ARTIFACT_COMMAND_VERSION;\n commands: readonly DocumentArtifactCommand[];\n}>;\n\ntype CodecState = { runs: number; textUtf16: number; tableCells: number };\n\nexport function encodeDocumentArtifactCommandBatch(\n input: DocumentArtifactCommandBatch,\n): Uint8Array {\n if (input?.version !== DOCUMENT_ARTIFACT_COMMAND_VERSION || !Array.isArray(input.commands)) {\n throw new TypeError(\"document command batch is invalid\");\n }\n if (input.commands.length > DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS) {\n throw new RangeError(\"document command count exceeds its limit\");\n }\n const payload = new ArtifactBinaryWriter(DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES - 32);\n const state: CodecState = { runs: 0, textUtf16: 0, tableCells: 0 };\n for (const command of input.commands) encodeCommand(payload, command, state);\n return encodeCountedEnvelope(\n MAGIC,\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n input.commands.length,\n payload.finish(),\n DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,\n );\n}\n\nexport function decodeDocumentArtifactCommandBatch(\n bytes: Uint8Array,\n): DocumentArtifactCommandBatch {\n const { count, payload } = decodeCountedEnvelope(\n bytes,\n MAGIC,\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,\n DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,\n );\n const reader = new ArtifactBinaryReader(payload);\n const state: CodecState = { runs: 0, textUtf16: 0, tableCells: 0 };\n const commands: DocumentArtifactCommand[] = [];\n for (let index = 0; index < count; index += 1) commands.push(decodeCommand(reader, state));\n reader.done(\"document command payload contains trailing bytes\");\n return Object.freeze({\n version: DOCUMENT_ARTIFACT_COMMAND_VERSION,\n commands: Object.freeze(commands),\n });\n}\n\nexport function assertCanonicalDocumentArtifactCommandBytes(bytes: Uint8Array): void {\n if (\n !equalBytes(\n bytes,\n encodeDocumentArtifactCommandBatch(decodeDocumentArtifactCommandBatch(bytes)),\n )\n ) {\n throw new TypeError(\"document command batch is not canonically encoded\");\n }\n}\n\nfunction encodeCommand(\n writer: ArtifactBinaryWriter,\n command: DocumentArtifactCommand,\n state: CodecState,\n): void {\n switch (command.kind) {\n case \"document.flags.set\":\n writer.u8(0);\n writePatchBool(writer, command.evenAndOddHeaders);\n writePatchBool(writer, command.trackRevisions);\n return;\n case \"paragraph.add\":\n writer.u8(1);\n writeTarget(writer, command.target);\n writeDocumentId(writer, command.id, \"paragraph\");\n writeRuns(writer, command.runs, state);\n writeParagraphStyle(writer, command.style);\n return;\n case \"paragraph.edit\":\n writer.u8(2);\n writeDocumentId(writer, command.id, \"paragraph\");\n writeRange(writer, command.range);\n writeDocumentString(writer, command.replacement, state, true);\n writer.bool(command.style !== null);\n if (command.style !== null) writeTextStyle(writer, command.style);\n return;\n case \"paragraph.format\":\n writer.u8(3);\n writeDocumentId(writer, command.id, \"paragraph\");\n writeRange(writer, command.range);\n writeTextStylePatch(writer, command.style);\n return;\n case \"paragraph.style.set\":\n writer.u8(4);\n writeDocumentId(writer, command.id, \"paragraph\");\n writeParagraphStyle(writer, command.style);\n return;\n case \"table.add\":\n writer.u8(5);\n writeTarget(writer, command.target);\n writeDocumentId(writer, command.id, \"table\");\n writeTableRows(writer, command.rows, state);\n writeTableStyle(writer, command.style);\n return;\n case \"table.style.set\":\n writer.u8(6);\n writeDocumentId(writer, command.id, \"table\");\n writeTableStyle(writer, command.style);\n return;\n case \"page-break.add\":\n writer.u8(7);\n writeDocumentId(writer, command.id, \"page-break\");\n return;\n case \"section.add\": {\n assertDefaultPageExtras(command.page);\n writer.u8(8);\n const ordered: readonly [DocumentArtifactId, DocumentArtifactIdKind][] = [\n [command.ids.section, \"section\"],\n [command.ids.headerDefault, \"header\"],\n [command.ids.headerFirst, \"header\"],\n [command.ids.headerEven, \"header\"],\n [command.ids.footerDefault, \"footer\"],\n [command.ids.footerFirst, \"footer\"],\n [command.ids.footerEven, \"footer\"],\n ];\n for (const [id, kind] of ordered) writeDocumentId(writer, id, kind);\n writePage(writer, command.page);\n writeOptionalBool(writer, command.titlePage);\n return;\n }\n case \"section.title-page.set\":\n writer.u8(9);\n writeDocumentId(writer, command.id, \"section\");\n writeOptionalBool(writer, command.titlePage);\n return;\n case \"comment.add\":\n writer.u8(10);\n writeDocumentId(writer, command.id, \"comment\");\n writeDocumentId(writer, command.paragraphId, \"paragraph\");\n writeRange(writer, command.range);\n writer.bool(command.resolved);\n writeCommentReply(writer, command.root, state);\n return;\n case \"comment.reply.add\":\n writer.u8(11);\n writeDocumentId(writer, command.id, \"comment\");\n writeCommentReply(writer, command.reply, state);\n return;\n case \"comment.resolved.set\":\n writer.u8(12);\n writeDocumentId(writer, command.id, \"comment\");\n writer.bool(command.resolved);\n return;\n case \"tracked-change.add\":\n writer.u8(13);\n writeDocumentId(writer, command.id, \"tracked-change\");\n writeDocumentId(writer, command.paragraphId, \"paragraph\");\n writeRange(writer, command.range);\n writer.u8(\n command.changeKind === \"insert\"\n ? 1\n : command.changeKind === \"delete\"\n ? 2\n : invalidTag(\"tracked change kind\"),\n );\n writeDocumentString(writer, command.author, state, false);\n writeDocumentString(writer, command.createdAt, state, false);\n return;\n case \"section.page.set\":\n writer.u8(14);\n writeDocumentId(writer, command.id, \"section\");\n writePageWithExtras(writer, command.page);\n return;\n default:\n throw new TypeError(\"invalid document command kind\");\n }\n}\n\nfunction decodeCommand(reader: ArtifactBinaryReader, state: CodecState): DocumentArtifactCommand {\n switch (reader.u8()) {\n case 0: {\n const evenAndOddHeaders = readPatchBool(reader);\n const trackRevisions = readPatchBool(reader);\n return freezeOptional(\n { kind: \"document.flags.set\" as const },\n { evenAndOddHeaders, trackRevisions },\n ) as DocumentArtifactCommand;\n }\n case 1:\n return Object.freeze({\n kind: \"paragraph.add\",\n target: readTarget(reader),\n id: readDocumentId(reader, \"paragraph\"),\n runs: readRuns(reader, state),\n style: readParagraphStyle(reader),\n });\n case 2:\n return Object.freeze({\n kind: \"paragraph.edit\",\n id: readDocumentId(reader, \"paragraph\"),\n range: readRange(reader),\n replacement: readDocumentString(reader, state, true),\n style: reader.bool(\"optional document text style\") ? readTextStyle(reader) : null,\n });\n case 3:\n return Object.freeze({\n kind: \"paragraph.format\",\n id: readDocumentId(reader, \"paragraph\"),\n range: readRange(reader),\n style: readTextStylePatch(reader),\n });\n case 4:\n return Object.freeze({\n kind: \"paragraph.style.set\",\n id: readDocumentId(reader, \"paragraph\"),\n style: readParagraphStyle(reader),\n });\n case 5:\n return Object.freeze({\n kind: \"table.add\",\n target: readTarget(reader),\n id: readDocumentId(reader, \"table\"),\n rows: readTableRows(reader, state),\n style: readTableStyle(reader),\n });\n case 6:\n return Object.freeze({\n kind: \"table.style.set\",\n id: readDocumentId(reader, \"table\"),\n style: readTableStyle(reader),\n });\n case 7:\n return Object.freeze({ kind: \"page-break.add\", id: readDocumentId(reader, \"page-break\") });\n case 8:\n return Object.freeze({\n kind: \"section.add\",\n ids: Object.freeze({\n section: readDocumentId(reader, \"section\"),\n headerDefault: readDocumentId(reader, \"header\"),\n headerFirst: readDocumentId(reader, \"header\"),\n headerEven: readDocumentId(reader, \"header\"),\n footerDefault: readDocumentId(reader, \"footer\"),\n footerFirst: readDocumentId(reader, \"footer\"),\n footerEven: readDocumentId(reader, \"footer\"),\n }),\n page: readPage(reader),\n titlePage: readOptionalBool(reader),\n });\n case 9:\n return Object.freeze({\n kind: \"section.title-page.set\",\n id: readDocumentId(reader, \"section\"),\n titlePage: readOptionalBool(reader),\n });\n case 10:\n return Object.freeze({\n kind: \"comment.add\",\n id: readDocumentId(reader, \"comment\"),\n paragraphId: readDocumentId(reader, \"paragraph\"),\n range: readRange(reader),\n resolved: reader.bool(\"document boolean\"),\n root: readCommentReply(reader, state),\n });\n case 11:\n return Object.freeze({\n kind: \"comment.reply.add\",\n id: readDocumentId(reader, \"comment\"),\n reply: readCommentReply(reader, state),\n });\n case 12:\n return Object.freeze({\n kind: \"comment.resolved.set\",\n id: readDocumentId(reader, \"comment\"),\n resolved: reader.bool(\"document boolean\"),\n });\n case 13: {\n const id = readDocumentId(reader, \"tracked-change\");\n const paragraphId = readDocumentId(reader, \"paragraph\");\n const range = readRange(reader);\n const tag = reader.u8();\n if (tag !== 1 && tag !== 2) throw new TypeError(\"invalid tracked change kind\");\n return Object.freeze({\n kind: \"tracked-change.add\",\n id,\n paragraphId,\n range,\n changeKind: tag === 1 ? \"insert\" : \"delete\",\n author: readDocumentString(reader, state, false),\n createdAt: readDocumentString(reader, state, false),\n });\n }\n case 14:\n return Object.freeze({\n kind: \"section.page.set\",\n id: readDocumentId(reader, \"section\"),\n page: readPageWithExtras(reader),\n });\n default:\n throw new TypeError(\"invalid document command tag\");\n }\n}\n\nconst ID_PREFIX: Record<DocumentArtifactIdKind, { prefix: string; tag: number }> = {\n paragraph: { prefix: \"p\", tag: 1 },\n table: { prefix: \"dt\", tag: 2 },\n \"page-break\": { prefix: \"pb\", tag: 3 },\n section: { prefix: \"sec\", tag: 4 },\n header: { prefix: \"hdr\", tag: 5 },\n footer: { prefix: \"ftr\", tag: 6 },\n comment: { prefix: \"dc\", tag: 7 },\n \"tracked-change\": { prefix: \"chg\", tag: 8 },\n};\n\nfunction writeDocumentId(\n writer: ArtifactBinaryWriter,\n id: DocumentArtifactId,\n kind: DocumentArtifactIdKind,\n): void {\n const expected = ID_PREFIX[kind];\n const match = new RegExp(`^${expected.prefix}/([0-9a-f]{16})([0-9a-f]{16})$`, \"u\").exec(id);\n if (!match) throw new TypeError(`document ${kind} id is invalid`);\n const counter = BigInt(`0x${match[2]}`);\n if (counter === 0n || counter > BigInt(DOCUMENT_ARTIFACT_MAX_STRUCTURAL_COUNTER)) {\n throw new TypeError(`document ${kind} id counter is invalid`);\n }\n writer.u8(expected.tag);\n writer.u64(BigInt(`0x${match[1]}`));\n writer.u64(counter);\n}\n\nfunction readDocumentId(\n reader: ArtifactBinaryReader,\n kind: DocumentArtifactIdKind,\n): DocumentArtifactId {\n const expected = ID_PREFIX[kind];\n if (reader.u8() !== expected.tag) throw new TypeError(\"document id kind mismatch\");\n const namespace = reader.u64BigInt().toString(16).padStart(16, \"0\");\n const counterValue = reader.u64BigInt();\n if (counterValue === 0n || counterValue > BigInt(DOCUMENT_ARTIFACT_MAX_STRUCTURAL_COUNTER)) {\n throw new TypeError(\"document id counter is invalid\");\n }\n return `${expected.prefix}/${namespace}${counterValue.toString(16).padStart(16, \"0\")}`;\n}\n\nfunction writeDocumentString(\n writer: ArtifactBinaryWriter,\n value: string,\n state: CodecState,\n content: boolean,\n): void {\n const bytes = strictUtf8(value, \"document string\");\n const utf16 = value.length;\n if (\n bytes.byteLength > DOCUMENT_ARTIFACT_COMMAND_MAX_STRING_BYTES ||\n utf16 > DOCUMENT_ARTIFACT_MAX_TEXT_UTF16\n ) {\n throw new RangeError(\"document string exceeds its limit\");\n }\n if (content) {\n state.textUtf16 += utf16;\n if (state.textUtf16 > DOCUMENT_ARTIFACT_MAX_TEXT_UTF16)\n throw new RangeError(\"document text exceeds its UTF-16 limit\");\n }\n writer.u32(bytes.byteLength);\n writer.bytes(bytes);\n}\n\nfunction readDocumentString(\n reader: ArtifactBinaryReader,\n state: CodecState,\n content: boolean,\n): string {\n const value = reader.string(DOCUMENT_ARTIFACT_COMMAND_MAX_STRING_BYTES, \"document string\");\n if (value.length > DOCUMENT_ARTIFACT_MAX_TEXT_UTF16)\n throw new RangeError(\"document string exceeds its UTF-16 limit\");\n if (content) {\n state.textUtf16 += value.length;\n if (state.textUtf16 > DOCUMENT_ARTIFACT_MAX_TEXT_UTF16)\n throw new RangeError(\"document text exceeds its UTF-16 limit\");\n }\n return value;\n}\n\nfunction writeRuns(\n writer: ArtifactBinaryWriter,\n runs: readonly DocumentArtifactTextRun[],\n state: CodecState,\n): void {\n if (!Array.isArray(runs)) throw new TypeError(\"document runs must be an array\");\n state.runs += runs.length;\n if (state.runs > DOCUMENT_ARTIFACT_MAX_TEXT_RUNS)\n throw new RangeError(\"document text runs exceed their limit\");\n writer.count(runs.length, DOCUMENT_ARTIFACT_MAX_TEXT_RUNS, \"document runs\");\n for (const run of runs) {\n writeDocumentString(writer, run.text, state, true);\n writeTextStyle(writer, run.style);\n }\n}\n\nfunction readRuns(\n reader: ArtifactBinaryReader,\n state: CodecState,\n): readonly DocumentArtifactTextRun[] {\n const count = reader.count(DOCUMENT_ARTIFACT_MAX_TEXT_RUNS, \"document runs\");\n state.runs += count;\n if (state.runs > DOCUMENT_ARTIFACT_MAX_TEXT_RUNS)\n throw new RangeError(\"document text runs exceed their limit\");\n const runs: DocumentArtifactTextRun[] = [];\n for (let index = 0; index < count; index += 1)\n runs.push(\n Object.freeze({\n text: readDocumentString(reader, state, true),\n style: readTextStyle(reader),\n }),\n );\n return Object.freeze(runs);\n}\n\nfunction writeTextStyle(writer: ArtifactBinaryWriter, style: DocumentArtifactTextStyle): void {\n const mask =\n Number(style.fontFamily !== undefined) |\n (Number(style.fontSizePt !== undefined) << 1) |\n (Number(style.color !== undefined) << 2) |\n (Number(style.bold !== undefined) << 3) |\n (Number(style.italic !== undefined) << 4) |\n (Number(style.underline !== undefined) << 5) |\n (Number(style.strike !== undefined) << 6);\n writer.u8(mask);\n const dummy: CodecState = { runs: 0, textUtf16: 0, tableCells: 0 };\n if (style.fontFamily !== undefined) writeDocumentString(writer, style.fontFamily, dummy, false);\n if (style.fontSizePt !== undefined) writer.f64(style.fontSizePt, \"document font size\");\n if (style.color !== undefined) writeDocumentString(writer, style.color, dummy, false);\n for (const value of [style.bold, style.italic, style.underline, style.strike])\n if (value !== undefined) writer.bool(value);\n}\n\nfunction readTextStyle(reader: ArtifactBinaryReader): DocumentArtifactTextStyle {\n const mask = reader.u8();\n if ((mask & ~0x7f) !== 0) throw new TypeError(\"unknown document text-style bits\");\n const state: CodecState = { runs: 0, textUtf16: 0, tableCells: 0 };\n return Object.freeze({\n ...(mask & 1 ? { fontFamily: readDocumentString(reader, state, false) } : {}),\n ...(mask & 2 ? { fontSizePt: reader.f64(\"document font size\") } : {}),\n ...(mask & 4 ? { color: readDocumentString(reader, state, false) } : {}),\n ...(mask & 8 ? { bold: reader.bool(\"document boolean\") } : {}),\n ...(mask & 16 ? { italic: reader.bool(\"document boolean\") } : {}),\n ...(mask & 32 ? { underline: reader.bool(\"document boolean\") } : {}),\n ...(mask & 64 ? { strike: reader.bool(\"document boolean\") } : {}),\n });\n}\n\nfunction writeTextStylePatch(\n writer: ArtifactBinaryWriter,\n patch: DocumentArtifactTextStylePatch,\n): void {\n writePatchString(writer, patch.fontFamily);\n writePatchNumber(writer, patch.fontSizePt);\n writePatchString(writer, patch.color);\n writePatchBool(writer, patch.bold);\n writePatchBool(writer, patch.italic);\n writePatchBool(writer, patch.underline);\n writePatchBool(writer, patch.strike);\n}\n\nfunction readTextStylePatch(reader: ArtifactBinaryReader): DocumentArtifactTextStylePatch {\n const fontFamily = readPatchString(reader);\n const fontSizePt = readPatchNumber(reader);\n const color = readPatchString(reader);\n const bold = readPatchBool(reader);\n const italic = readPatchBool(reader);\n const underline = readPatchBool(reader);\n const strike = readPatchBool(reader);\n return freezeOptional(\n {},\n { fontFamily, fontSizePt, color, bold, italic, underline, strike },\n ) as DocumentArtifactTextStylePatch;\n}\n\nfunction writePatchString(writer: ArtifactBinaryWriter, value: string | null | undefined): void {\n if (value === undefined) writer.u8(0);\n else if (value === null) writer.u8(1);\n else {\n writer.u8(2);\n writeDocumentString(writer, value, { runs: 0, textUtf16: 0, tableCells: 0 }, false);\n }\n}\n\nfunction readPatchString(reader: ArtifactBinaryReader): string | null | undefined {\n const tag = reader.u8();\n if (tag === 0) return undefined;\n if (tag === 1) return null;\n if (tag === 2) return readDocumentString(reader, { runs: 0, textUtf16: 0, tableCells: 0 }, false);\n throw new TypeError(\"invalid document string patch\");\n}\n\nfunction writePatchNumber(writer: ArtifactBinaryWriter, value: number | null | undefined): void {\n if (value === undefined) writer.u8(0);\n else if (value === null) writer.u8(1);\n else {\n writer.u8(2);\n writer.f64(value, \"document number patch\");\n }\n}\n\nfunction readPatchNumber(reader: ArtifactBinaryReader): number | null | undefined {\n const tag = reader.u8();\n if (tag === 0) return undefined;\n if (tag === 1) return null;\n if (tag === 2) return reader.f64(\"document number patch\");\n throw new TypeError(\"invalid document number patch\");\n}\n\nfunction writePatchBool(writer: ArtifactBinaryWriter, value: boolean | null | undefined): void {\n writer.u8(value === undefined ? 0 : value === null ? 1 : value ? 3 : 2);\n}\n\nfunction readPatchBool(reader: ArtifactBinaryReader): boolean | null | undefined {\n const tag = reader.u8();\n if (tag === 0) return undefined;\n if (tag === 1) return null;\n if (tag === 2) return false;\n if (tag === 3) return true;\n throw new TypeError(\"invalid document boolean patch\");\n}\n\nfunction writeOptionalBool(writer: ArtifactBinaryWriter, value: boolean | null): void {\n writer.u8(value === null ? 0 : value ? 2 : 1);\n}\n\nfunction readOptionalBool(reader: ArtifactBinaryReader): boolean | null {\n const tag = reader.u8();\n if (tag === 0) return null;\n if (tag === 1) return false;\n if (tag === 2) return true;\n throw new TypeError(\"invalid optional document boolean\");\n}\n\nfunction writeParagraphStyle(\n writer: ArtifactBinaryWriter,\n style: DocumentArtifactParagraphStyle,\n): void {\n const mask =\n Number(style.headingLevel !== undefined) |\n (Number(style.alignment !== undefined) << 1) |\n (Number(style.spaceBeforePt !== undefined) << 2) |\n (Number(style.spaceAfterPt !== undefined) << 3) |\n (Number(style.lineHeight !== undefined) << 4) |\n (Number(style.keepNext !== undefined) << 5) |\n (Number(style.pageBreakBefore !== undefined) << 6) |\n (Number(style.list !== undefined) << 7);\n writer.u16(mask);\n if (style.headingLevel !== undefined) writer.u8(style.headingLevel);\n if (style.alignment !== undefined)\n writer.u8(\n ({ left: 1, center: 2, right: 3, justify: 4 } as const)[style.alignment] ??\n invalidTag(\"paragraph alignment\"),\n );\n if (style.spaceBeforePt !== undefined)\n writer.f64(style.spaceBeforePt, \"document paragraph spacing\");\n if (style.spaceAfterPt !== undefined)\n writer.f64(style.spaceAfterPt, \"document paragraph spacing\");\n if (style.lineHeight !== undefined) writer.f64(style.lineHeight, \"document line height\");\n if (style.keepNext !== undefined) writer.bool(style.keepNext);\n if (style.pageBreakBefore !== undefined) writer.bool(style.pageBreakBefore);\n if (style.list !== undefined) {\n writer.u8(\n style.list.kind === \"bullet\" ? 1 : style.list.kind === \"number\" ? 2 : invalidTag(\"list kind\"),\n );\n writer.bool(style.list.level !== null);\n if (style.list.level !== null) writer.u8(style.list.level);\n writer.bool(style.list.instanceId !== null);\n if (style.list.instanceId !== null)\n writeDocumentString(\n writer,\n style.list.instanceId,\n { runs: 0, textUtf16: 0, tableCells: 0 },\n false,\n );\n }\n}\n\nfunction readParagraphStyle(reader: ArtifactBinaryReader): DocumentArtifactParagraphStyle {\n const mask = reader.u16();\n if ((mask & ~0xff) !== 0) throw new TypeError(\"unknown paragraph-style bits\");\n const headingLevel = mask & 1 ? reader.u8() : undefined;\n let alignment: DocumentArtifactParagraphStyle[\"alignment\"];\n if (mask & 2) {\n const tag = reader.u8();\n alignment =\n tag === 1\n ? \"left\"\n : tag === 2\n ? \"center\"\n : tag === 3\n ? \"right\"\n : tag === 4\n ? \"justify\"\n : invalidTag(\"paragraph alignment\");\n }\n const spaceBeforePt = mask & 4 ? reader.f64(\"document paragraph spacing\") : undefined;\n const spaceAfterPt = mask & 8 ? reader.f64(\"document paragraph spacing\") : undefined;\n const lineHeight = mask & 16 ? reader.f64(\"document line height\") : undefined;\n const keepNext = mask & 32 ? reader.bool(\"document boolean\") : undefined;\n const pageBreakBefore = mask & 64 ? reader.bool(\"document boolean\") : undefined;\n let list: DocumentArtifactParagraphStyle[\"list\"];\n if (mask & 128) {\n const tag = reader.u8();\n const kind = tag === 1 ? \"bullet\" : tag === 2 ? \"number\" : invalidTag(\"list kind\");\n list = Object.freeze({\n kind,\n level: reader.bool(\"document list level presence\") ? reader.u8() : null,\n instanceId: reader.bool(\"optional document string\")\n ? readDocumentString(reader, { runs: 0, textUtf16: 0, tableCells: 0 }, false)\n : null,\n });\n }\n return Object.freeze({\n ...(headingLevel !== undefined ? { headingLevel } : {}),\n ...(alignment !== undefined ? { alignment } : {}),\n ...(spaceBeforePt !== undefined ? { spaceBeforePt } : {}),\n ...(spaceAfterPt !== undefined ? { spaceAfterPt } : {}),\n ...(lineHeight !== undefined ? { lineHeight } : {}),\n ...(keepNext !== undefined ? { keepNext } : {}),\n ...(pageBreakBefore !== undefined ? { pageBreakBefore } : {}),\n ...(list !== undefined ? { list } : {}),\n });\n}\n\nfunction writeTableStyle(writer: ArtifactBinaryWriter, style: DocumentArtifactTableStyle): void {\n const mask =\n Number(style.widthPt !== undefined) |\n (Number(style.columnWidthsPt !== undefined) << 1) |\n (Number(style.headerRows !== undefined) << 2) |\n (Number(style.cellPaddingPt !== undefined) << 3) |\n (Number(style.borderColor !== undefined) << 4) |\n (Number(style.headerFill !== undefined) << 5) |\n (Number(style.allowRowSplit !== undefined) << 6);\n writer.u8(mask);\n if (style.widthPt !== undefined) writer.f64(style.widthPt, \"document table width\");\n if (style.columnWidthsPt !== undefined) {\n writer.count(\n style.columnWidthsPt.length,\n DOCUMENT_ARTIFACT_MAX_TABLE_CELLS,\n \"document table widths\",\n );\n for (const width of style.columnWidthsPt) writer.f64(width, \"document column width\");\n }\n if (style.headerRows !== undefined) writer.u32(style.headerRows);\n if (style.cellPaddingPt !== undefined) writer.f64(style.cellPaddingPt, \"document cell padding\");\n if (style.borderColor !== undefined)\n writeDocumentString(writer, style.borderColor, { runs: 0, textUtf16: 0, tableCells: 0 }, false);\n if (style.headerFill !== undefined)\n writeDocumentString(writer, style.headerFill, { runs: 0, textUtf16: 0, tableCells: 0 }, false);\n if (style.allowRowSplit !== undefined) writer.bool(style.allowRowSplit);\n}\n\nfunction readTableStyle(reader: ArtifactBinaryReader): DocumentArtifactTableStyle {\n const mask = reader.u8();\n if ((mask & ~0x7f) !== 0) throw new TypeError(\"unknown document table-style bits\");\n const widthPt = mask & 1 ? reader.f64(\"document table width\") : undefined;\n let columnWidthsPt: readonly number[] | undefined;\n if (mask & 2) {\n const count = reader.count(DOCUMENT_ARTIFACT_MAX_TABLE_CELLS, \"document table widths\");\n const widths: number[] = [];\n for (let index = 0; index < count; index += 1) widths.push(reader.f64(\"document column width\"));\n columnWidthsPt = Object.freeze(widths);\n }\n const headerRows = mask & 4 ? reader.u32() : undefined;\n const cellPaddingPt = mask & 8 ? reader.f64(\"document cell padding\") : undefined;\n const state: CodecState = { runs: 0, textUtf16: 0, tableCells: 0 };\n const borderColor = mask & 16 ? readDocumentString(reader, state, false) : undefined;\n const headerFill = mask & 32 ? readDocumentString(reader, state, false) : undefined;\n const allowRowSplit = mask & 64 ? reader.bool(\"document boolean\") : undefined;\n return Object.freeze({\n ...(widthPt !== undefined ? { widthPt } : {}),\n ...(columnWidthsPt ? { columnWidthsPt } : {}),\n ...(headerRows !== undefined ? { headerRows } : {}),\n ...(cellPaddingPt !== undefined ? { cellPaddingPt } : {}),\n ...(borderColor !== undefined ? { borderColor } : {}),\n ...(headerFill !== undefined ? { headerFill } : {}),\n ...(allowRowSplit !== undefined ? { allowRowSplit } : {}),\n });\n}\n\nfunction writeTableRows(\n writer: ArtifactBinaryWriter,\n rows: readonly (readonly (readonly DocumentArtifactTextRun[])[])[],\n state: CodecState,\n): void {\n writer.count(rows.length, DOCUMENT_ARTIFACT_MAX_TABLE_CELLS, \"document table rows\");\n for (const row of rows) {\n state.tableCells += row.length;\n if (state.tableCells > DOCUMENT_ARTIFACT_MAX_TABLE_CELLS)\n throw new RangeError(\"document table cells exceed their limit\");\n writer.count(row.length, DOCUMENT_ARTIFACT_MAX_TABLE_CELLS, \"document table cells\");\n for (const cell of row) writeRuns(writer, cell, state);\n }\n}\n\nfunction readTableRows(\n reader: ArtifactBinaryReader,\n state: CodecState,\n): readonly (readonly (readonly DocumentArtifactTextRun[])[])[] {\n const rowCount = reader.count(DOCUMENT_ARTIFACT_MAX_TABLE_CELLS, \"document table rows\");\n const rows: (readonly (readonly DocumentArtifactTextRun[])[])[] = [];\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex += 1) {\n const columnCount = reader.count(DOCUMENT_ARTIFACT_MAX_TABLE_CELLS, \"document table cells\");\n state.tableCells += columnCount;\n if (state.tableCells > DOCUMENT_ARTIFACT_MAX_TABLE_CELLS)\n throw new RangeError(\"document table cells exceed their limit\");\n const row: (readonly DocumentArtifactTextRun[])[] = [];\n for (let columnIndex = 0; columnIndex < columnCount; columnIndex += 1)\n row.push(readRuns(reader, state));\n rows.push(Object.freeze(row));\n }\n return Object.freeze(rows);\n}\n\nfunction writeTarget(writer: ArtifactBinaryWriter, target: DocumentArtifactStoryTarget): void {\n if (target.kind === \"body\") {\n writer.u8(0);\n return;\n }\n if (target.kind !== \"section\") throw new TypeError(\"invalid document story target\");\n writer.u8(1);\n writeDocumentId(writer, target.sectionId, \"section\");\n writer.u8(\n target.storyKind === \"header\"\n ? 1\n : target.storyKind === \"footer\"\n ? 2\n : invalidTag(\"story kind\"),\n );\n writer.u8(\n target.variant === \"default\"\n ? 1\n : target.variant === \"first\"\n ? 2\n : target.variant === \"even\"\n ? 3\n : invalidTag(\"story variant\"),\n );\n}\n\nfunction readTarget(reader: ArtifactBinaryReader): DocumentArtifactStoryTarget {\n const tag = reader.u8();\n if (tag === 0) return Object.freeze({ kind: \"body\" });\n if (tag !== 1) throw new TypeError(\"invalid document story target\");\n const sectionId = readDocumentId(reader, \"section\");\n const kindTag = reader.u8();\n const storyKind = kindTag === 1 ? \"header\" : kindTag === 2 ? \"footer\" : invalidTag(\"story kind\");\n const variantTag = reader.u8();\n const variant =\n variantTag === 1\n ? \"default\"\n : variantTag === 2\n ? \"first\"\n : variantTag === 3\n ? \"even\"\n : invalidTag(\"story variant\");\n return Object.freeze({ kind: \"section\", sectionId, storyKind, variant });\n}\n\nfunction writeRange(writer: ArtifactBinaryWriter, range: DocumentArtifactTextRange): void {\n if (range.end < range.start) throw new TypeError(\"document text range is invalid\");\n writer.u32(range.start);\n writer.u32(range.end);\n}\n\nfunction readRange(reader: ArtifactBinaryReader): DocumentArtifactTextRange {\n const start = reader.u32();\n const end = reader.u32();\n if (end < start) throw new TypeError(\"document text range is invalid\");\n return Object.freeze({ start, end });\n}\n\nfunction writePage(writer: ArtifactBinaryWriter, page: DocumentArtifactPageGeometry): void {\n for (const [value, label] of [\n [page.widthPt, \"width\"],\n [page.heightPt, \"height\"],\n [page.marginTopPt, \"top margin\"],\n [page.marginRightPt, \"right margin\"],\n [page.marginBottomPt, \"bottom margin\"],\n [page.marginLeftPt, \"left margin\"],\n ] as const)\n writer.f64(value, `document ${label}`);\n}\n\nfunction writePageWithExtras(\n writer: ArtifactBinaryWriter,\n page: DocumentArtifactPageGeometry,\n): void {\n writePage(writer, page);\n writer.f64(page.headerPt ?? 36, \"document header distance\");\n writer.f64(page.footerPt ?? 36, \"document footer distance\");\n writer.f64(page.gutterPt ?? 0, \"document gutter\");\n}\n\nfunction assertDefaultPageExtras(page: DocumentArtifactPageGeometry): void {\n if ((page.headerPt ?? 36) !== 36 || (page.footerPt ?? 36) !== 36 || (page.gutterPt ?? 0) !== 0) {\n throw new TypeError(\"section.add page extras require section.page.set\");\n }\n}\n\nfunction readPage(reader: ArtifactBinaryReader): DocumentArtifactPageGeometry {\n return Object.freeze({\n widthPt: reader.f64(\"document width\"),\n heightPt: reader.f64(\"document height\"),\n marginTopPt: reader.f64(\"document top margin\"),\n marginRightPt: reader.f64(\"document right margin\"),\n marginBottomPt: reader.f64(\"document bottom margin\"),\n marginLeftPt: reader.f64(\"document left margin\"),\n });\n}\n\nfunction readPageWithExtras(reader: ArtifactBinaryReader): DocumentArtifactPageGeometry {\n return Object.freeze({\n ...readPage(reader),\n headerPt: reader.f64(\"document header distance\"),\n footerPt: reader.f64(\"document footer distance\"),\n gutterPt: reader.f64(\"document gutter\"),\n });\n}\n\nfunction writeCommentReply(\n writer: ArtifactBinaryWriter,\n reply: DocumentArtifactCommentReply,\n state: CodecState,\n): void {\n writeDocumentString(writer, reply.author, state, false);\n writeDocumentString(writer, reply.text, state, true);\n writeDocumentString(writer, reply.createdAt, state, false);\n}\n\nfunction readCommentReply(\n reader: ArtifactBinaryReader,\n state: CodecState,\n): DocumentArtifactCommentReply {\n return Object.freeze({\n author: readDocumentString(reader, state, false),\n text: readDocumentString(reader, state, true),\n createdAt: readDocumentString(reader, state, false),\n });\n}\n\nexport type DocumentArtifactQueryLimits = Readonly<{\n maxItems: number;\n maxTextUtf16: number;\n maxTableCells: number;\n}>;\n\nexport type DocumentArtifactQuery =\n | Readonly<{ kind: \"summary\" }>\n | Readonly<{ kind: \"body\"; startBlock: number; limits: DocumentArtifactQueryLimits }>\n | Readonly<{\n kind: \"story\";\n sectionId: DocumentArtifactId;\n storyKind: \"header\" | \"footer\";\n variant: \"default\" | \"first\" | \"even\";\n startBlock: number;\n limits: DocumentArtifactQueryLimits;\n }>\n | Readonly<{ kind: \"sections\"; startSection: number; limits: DocumentArtifactQueryLimits }>\n | Readonly<{ kind: \"review\"; startItem: number; limits: DocumentArtifactQueryLimits }>;\n\nexport type DocumentArtifactPageGeometryProjection = Readonly<{\n widthMillipoints: bigint;\n heightMillipoints: bigint;\n marginTopMillipoints: bigint;\n marginRightMillipoints: bigint;\n marginBottomMillipoints: bigint;\n marginLeftMillipoints: bigint;\n headerMillipoints: bigint;\n footerMillipoints: bigint;\n gutterMillipoints: bigint;\n}>;\n\nexport type DocumentArtifactProjectionItem =\n | Readonly<{\n kind: \"summary\";\n idNamespace: bigint;\n revision: bigint;\n nextIdCounter: bigint;\n blockCount: number;\n sectionCount: number;\n commentCount: number;\n trackedChangeCount: number;\n evenAndOddHeaders: boolean;\n trackRevisions: boolean;\n page: DocumentArtifactPageGeometryProjection;\n }>\n | Readonly<{\n kind: \"section\";\n id: DocumentArtifactId;\n startBlockIndex: number;\n titlePage: boolean;\n page: DocumentArtifactPageGeometryProjection;\n headerBlockCounts: readonly [number, number, number];\n footerBlockCounts: readonly [number, number, number];\n }>\n | Readonly<{\n kind: \"paragraph\";\n id: DocumentArtifactId;\n runs: readonly DocumentArtifactTextRun[];\n style: DocumentArtifactParagraphStyle;\n }>\n | Readonly<{\n kind: \"table\";\n id: DocumentArtifactId;\n rows: readonly (readonly (readonly DocumentArtifactTextRun[])[])[];\n style: DocumentArtifactTableStyle;\n }>\n | Readonly<{ kind: \"page-break\"; id: DocumentArtifactId }>\n | Readonly<{\n kind: \"comment\";\n id: DocumentArtifactId;\n paragraphId: DocumentArtifactId;\n range: DocumentArtifactTextRange;\n resolved: boolean;\n replies: readonly DocumentArtifactCommentReply[];\n }>\n | Readonly<{\n kind: \"tracked-change\";\n id: DocumentArtifactId;\n paragraphId: DocumentArtifactId;\n changeKind: \"insert\" | \"delete\";\n range: DocumentArtifactTextRange;\n author: string;\n createdAt: string;\n }>;\n\nexport type DocumentArtifactProjection = Readonly<{\n revision: bigint;\n items: readonly DocumentArtifactProjectionItem[];\n nextCursor: number | null;\n truncated: boolean;\n projectedTextUtf16: number;\n projectedTableCells: number;\n}>;\n\nexport function encodeDocumentArtifactQuery(query: DocumentArtifactQuery): Uint8Array {\n const payload = new ArtifactBinaryWriter(DOCUMENT_ARTIFACT_QUERY_MAX_BYTES - 32);\n switch (query.kind) {\n case \"summary\":\n payload.u8(0);\n break;\n case \"body\":\n validateDocumentQueryLimits(query.limits);\n payload.u8(1);\n payload.u64(query.startBlock);\n writeQueryLimits(payload, query.limits);\n break;\n case \"story\":\n validateDocumentQueryLimits(query.limits);\n payload.u8(2);\n writeDocumentId(payload, query.sectionId, \"section\");\n payload.u8(\n query.storyKind === \"header\"\n ? 1\n : query.storyKind === \"footer\"\n ? 2\n : invalidTag(\"story kind\"),\n );\n payload.u8(\n query.variant === \"default\"\n ? 1\n : query.variant === \"first\"\n ? 2\n : query.variant === \"even\"\n ? 3\n : invalidTag(\"story variant\"),\n );\n payload.u64(query.startBlock);\n writeQueryLimits(payload, query.limits);\n break;\n case \"sections\":\n validateDocumentQueryLimits(query.limits);\n payload.u8(3);\n payload.u64(query.startSection);\n writeQueryLimits(payload, query.limits);\n break;\n case \"review\":\n validateDocumentQueryLimits(query.limits);\n payload.u8(4);\n payload.u64(query.startItem);\n writeQueryLimits(payload, query.limits);\n break;\n default:\n throw new TypeError(\"invalid document query kind\");\n }\n return encodeCountedEnvelope(\n QUERY_MAGIC,\n DOCUMENT_ARTIFACT_QUERY_VERSION,\n 1,\n payload.finish(),\n DOCUMENT_ARTIFACT_QUERY_MAX_BYTES,\n );\n}\n\nexport function decodeDocumentArtifactQuery(bytes: Uint8Array): DocumentArtifactQuery {\n const { count, payload } = decodeCountedEnvelope(\n bytes,\n QUERY_MAGIC,\n DOCUMENT_ARTIFACT_QUERY_VERSION,\n DOCUMENT_ARTIFACT_QUERY_MAX_BYTES,\n 1,\n );\n if (count !== 1) throw new TypeError(\"document query envelope must contain exactly one query\");\n const reader = new ArtifactBinaryReader(payload);\n const tag = reader.u8();\n let query: DocumentArtifactQuery;\n if (tag === 0) query = Object.freeze({ kind: \"summary\" });\n else if (tag === 1)\n query = Object.freeze({\n kind: \"body\",\n startBlock: reader.u64Safe(\"document body cursor\"),\n limits: readQueryLimits(reader),\n });\n else if (tag === 2) {\n const sectionId = readDocumentId(reader, \"section\");\n const storyKindTag = reader.u8();\n const variantTag = reader.u8();\n query = Object.freeze({\n kind: \"story\",\n sectionId,\n storyKind:\n storyKindTag === 1 ? \"header\" : storyKindTag === 2 ? \"footer\" : invalidTag(\"story kind\"),\n variant:\n variantTag === 1\n ? \"default\"\n : variantTag === 2\n ? \"first\"\n : variantTag === 3\n ? \"even\"\n : invalidTag(\"story variant\"),\n startBlock: reader.u64Safe(\"document story cursor\"),\n limits: readQueryLimits(reader),\n });\n } else if (tag === 3)\n query = Object.freeze({\n kind: \"sections\",\n startSection: reader.u64Safe(\"document section cursor\"),\n limits: readQueryLimits(reader),\n });\n else if (tag === 4)\n query = Object.freeze({\n kind: \"review\",\n startItem: reader.u64Safe(\"document review cursor\"),\n limits: readQueryLimits(reader),\n });\n else throw new TypeError(\"invalid document query tag\");\n reader.done(\"document query contains trailing bytes\");\n return query;\n}\n\nexport function assertCanonicalDocumentArtifactQueryBytes(bytes: Uint8Array): void {\n if (!equalBytes(bytes, encodeDocumentArtifactQuery(decodeDocumentArtifactQuery(bytes)))) {\n throw new TypeError(\"document query is not canonically encoded\");\n }\n}\n\nexport function encodeDocumentArtifactQueryResponse(\n projection: DocumentArtifactProjection,\n): Uint8Array {\n if (projection.items.length > DOCUMENT_ARTIFACT_QUERY_MAX_ITEMS)\n throw new RangeError(\"document query response has too many items\");\n if (projection.truncated !== (projection.nextCursor !== null))\n throw new TypeError(\"document query cursor and truncation flag disagree\");\n const metrics = measureProjection(projection.items);\n if (\n metrics.text !== projection.projectedTextUtf16 ||\n metrics.cells !== projection.projectedTableCells\n ) {\n throw new TypeError(\"document query response metrics do not match its items\");\n }\n const payload = new ArtifactBinaryWriter(DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES - 32);\n payload.u64(projection.revision);\n payload.bool(projection.nextCursor !== null);\n if (projection.nextCursor !== null) payload.u64(projection.nextCursor);\n payload.bool(projection.truncated);\n payload.u64(projection.projectedTextUtf16);\n payload.u64(projection.projectedTableCells);\n const state: CodecState = { runs: 0, textUtf16: 0, tableCells: 0 };\n for (const item of projection.items) writeProjectionItem(payload, item, state);\n const pageExtras = projection.items\n .map((item, index) => ({ index, page: projectionPage(item) }))\n .filter(\n (entry): entry is { index: number; page: DocumentArtifactPageGeometryProjection } =>\n entry.page !== null && hasNonDefaultProjectionPageExtras(entry.page),\n );\n if (pageExtras.length > 0) {\n payload.u8(QUERY_RESPONSE_EXTENSION_MARKER);\n payload.u8(PAGE_EXTRAS_EXTENSION_VERSION);\n payload.count(pageExtras.length, DOCUMENT_ARTIFACT_QUERY_MAX_ITEMS, \"document page extras\");\n for (const { index, page } of pageExtras) {\n payload.count(index, DOCUMENT_ARTIFACT_QUERY_MAX_ITEMS - 1, \"document page item index\");\n payload.i64(page.headerMillipoints);\n payload.i64(page.footerMillipoints);\n payload.i64(page.gutterMillipoints);\n }\n }\n return encodeCountedEnvelope(\n QUERY_RESPONSE_MAGIC,\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_VERSION,\n projection.items.length,\n payload.finish(),\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n );\n}\n\nexport function decodeDocumentArtifactQueryResponse(bytes: Uint8Array): DocumentArtifactProjection {\n const { count, payload } = decodeCountedEnvelope(\n bytes,\n QUERY_RESPONSE_MAGIC,\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_VERSION,\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n DOCUMENT_ARTIFACT_QUERY_MAX_ITEMS,\n );\n const reader = new ArtifactBinaryReader(payload);\n const revision = reader.u64BigInt();\n const nextCursor = reader.bool(\"optional document cursor\")\n ? reader.u64Safe(\"document query cursor\")\n : null;\n const truncated = reader.bool(\"document truncation flag\");\n if (truncated !== (nextCursor !== null))\n throw new TypeError(\"document query cursor and truncation flag disagree\");\n const projectedTextUtf16 = reader.u64Safe(\"document projected text\");\n const projectedTableCells = reader.u64Safe(\"document projected table cells\");\n if (\n projectedTextUtf16 > DOCUMENT_ARTIFACT_QUERY_MAX_TEXT_UTF16 ||\n projectedTableCells > DOCUMENT_ARTIFACT_QUERY_MAX_TABLE_CELLS\n ) {\n throw new RangeError(\"document query response metrics exceed their limits\");\n }\n const state: CodecState = { runs: 0, textUtf16: 0, tableCells: 0 };\n let items: DocumentArtifactProjectionItem[] = [];\n for (let index = 0; index < count; index += 1) items.push(readProjectionItem(reader, state));\n if (reader.remaining > 0) items = readProjectionPageExtras(reader, items);\n reader.done(\"document query response contains trailing bytes\");\n const measured = measureProjection(items);\n if (measured.text !== projectedTextUtf16 || measured.cells !== projectedTableCells) {\n throw new TypeError(\"document query response metrics do not match its items\");\n }\n const projection = Object.freeze({\n revision,\n items: Object.freeze(items),\n nextCursor,\n truncated,\n projectedTextUtf16,\n projectedTableCells,\n });\n if (!equalBytes(bytes, encodeDocumentArtifactQueryResponse(projection))) {\n throw new TypeError(\"document query response is not canonically encoded\");\n }\n return projection;\n}\n\nexport function assertCanonicalDocumentArtifactQueryResponseBytes(bytes: Uint8Array): void {\n decodeDocumentArtifactQueryResponse(bytes);\n}\n\nfunction writeQueryLimits(writer: ArtifactBinaryWriter, limits: DocumentArtifactQueryLimits): void {\n validateDocumentQueryLimits(limits);\n writer.u32(limits.maxItems);\n writer.u32(limits.maxTextUtf16);\n writer.u32(limits.maxTableCells);\n}\n\nfunction readQueryLimits(reader: ArtifactBinaryReader): DocumentArtifactQueryLimits {\n const limits = Object.freeze({\n maxItems: reader.u32(),\n maxTextUtf16: reader.u32(),\n maxTableCells: reader.u32(),\n });\n validateDocumentQueryLimits(limits);\n return limits;\n}\n\nfunction validateDocumentQueryLimits(limits: DocumentArtifactQueryLimits): void {\n if (\n !Number.isInteger(limits.maxItems) ||\n limits.maxItems < 1 ||\n limits.maxItems > DOCUMENT_ARTIFACT_QUERY_MAX_ITEMS ||\n !Number.isInteger(limits.maxTextUtf16) ||\n limits.maxTextUtf16 < 1 ||\n limits.maxTextUtf16 > DOCUMENT_ARTIFACT_QUERY_MAX_TEXT_UTF16 ||\n !Number.isInteger(limits.maxTableCells) ||\n limits.maxTableCells < 1 ||\n limits.maxTableCells > DOCUMENT_ARTIFACT_QUERY_MAX_TABLE_CELLS\n ) {\n throw new RangeError(\"invalid document query limits\");\n }\n}\n\nfunction writePageProjection(\n writer: ArtifactBinaryWriter,\n page: DocumentArtifactPageGeometryProjection,\n): void {\n writer.i64(page.widthMillipoints);\n writer.i64(page.heightMillipoints);\n writer.i64(page.marginTopMillipoints);\n writer.i64(page.marginRightMillipoints);\n writer.i64(page.marginBottomMillipoints);\n writer.i64(page.marginLeftMillipoints);\n}\n\nfunction projectionPage(\n item: DocumentArtifactProjectionItem,\n): DocumentArtifactPageGeometryProjection | null {\n return item.kind === \"summary\" || item.kind === \"section\" ? item.page : null;\n}\n\nfunction hasNonDefaultProjectionPageExtras(page: DocumentArtifactPageGeometryProjection): boolean {\n return (\n page.headerMillipoints !== 36_000n ||\n page.footerMillipoints !== 36_000n ||\n page.gutterMillipoints !== 0n\n );\n}\n\nfunction readPageProjection(reader: ArtifactBinaryReader): DocumentArtifactPageGeometryProjection {\n return Object.freeze({\n widthMillipoints: reader.i64BigInt(),\n heightMillipoints: reader.i64BigInt(),\n marginTopMillipoints: reader.i64BigInt(),\n marginRightMillipoints: reader.i64BigInt(),\n marginBottomMillipoints: reader.i64BigInt(),\n marginLeftMillipoints: reader.i64BigInt(),\n headerMillipoints: 36_000n,\n footerMillipoints: 36_000n,\n gutterMillipoints: 0n,\n });\n}\n\nfunction readProjectionPageExtras(\n reader: ArtifactBinaryReader,\n source: readonly DocumentArtifactProjectionItem[],\n): DocumentArtifactProjectionItem[] {\n if (source.length === 0) throw new TypeError(\"document page extras require a page item\");\n if (reader.u8() !== QUERY_RESPONSE_EXTENSION_MARKER) {\n throw new TypeError(\"unknown document query response extension\");\n }\n if (reader.u8() !== PAGE_EXTRAS_EXTENSION_VERSION) {\n throw new TypeError(\"unsupported document page extras extension version\");\n }\n const count = reader.count(source.length, \"document page extras\", 28);\n if (count === 0) throw new TypeError(\"empty document page extras extension\");\n const items = [...source];\n let previousIndex = -1;\n for (let offset = 0; offset < count; offset += 1) {\n const index = reader.count(source.length - 1, \"document page item index\", 24);\n if (index <= previousIndex)\n throw new TypeError(\"document page extras are not strictly ordered\");\n previousIndex = index;\n const item = items[index];\n if (!item || (item.kind !== \"summary\" && item.kind !== \"section\")) {\n throw new TypeError(\"document page extras reference a non-page item\");\n }\n const page = Object.freeze({\n ...item.page,\n headerMillipoints: reader.i64BigInt(),\n footerMillipoints: reader.i64BigInt(),\n gutterMillipoints: reader.i64BigInt(),\n });\n if (!hasNonDefaultProjectionPageExtras(page)) {\n throw new TypeError(\"redundant document page extras\");\n }\n items[index] = Object.freeze({ ...item, page });\n }\n return items;\n}\n\nfunction writeProjectionItem(\n writer: ArtifactBinaryWriter,\n item: DocumentArtifactProjectionItem,\n state: CodecState,\n): void {\n switch (item.kind) {\n case \"summary\":\n writer.u8(0);\n writer.u64(item.idNamespace);\n writer.u64(item.revision);\n writer.u64(item.nextIdCounter);\n writer.u64(item.blockCount);\n writer.u64(item.sectionCount);\n writer.u64(item.commentCount);\n writer.u64(item.trackedChangeCount);\n writer.bool(item.evenAndOddHeaders);\n writer.bool(item.trackRevisions);\n writePageProjection(writer, item.page);\n return;\n case \"section\":\n writer.u8(1);\n writeDocumentId(writer, item.id, \"section\");\n writer.u64(item.startBlockIndex);\n writer.bool(item.titlePage);\n writePageProjection(writer, item.page);\n for (const count of item.headerBlockCounts) writer.u64(count);\n for (const count of item.footerBlockCounts) writer.u64(count);\n return;\n case \"paragraph\":\n writer.u8(2);\n writeDocumentId(writer, item.id, \"paragraph\");\n writeRuns(writer, item.runs, state);\n writeParagraphStyle(writer, item.style);\n return;\n case \"table\":\n writer.u8(3);\n writeDocumentId(writer, item.id, \"table\");\n writeTableRows(writer, item.rows, state);\n writeTableStyle(writer, item.style);\n return;\n case \"page-break\":\n writer.u8(4);\n writeDocumentId(writer, item.id, \"page-break\");\n return;\n case \"comment\":\n writer.u8(5);\n writeDocumentId(writer, item.id, \"comment\");\n writeDocumentId(writer, item.paragraphId, \"paragraph\");\n writeRange(writer, item.range);\n writer.bool(item.resolved);\n writer.count(item.replies.length, 100_000, \"document comment replies\");\n for (const reply of item.replies) writeCommentReply(writer, reply, state);\n return;\n case \"tracked-change\":\n writer.u8(6);\n writeDocumentId(writer, item.id, \"tracked-change\");\n writeDocumentId(writer, item.paragraphId, \"paragraph\");\n writer.u8(\n item.changeKind === \"insert\"\n ? 1\n : item.changeKind === \"delete\"\n ? 2\n : invalidTag(\"tracked change kind\"),\n );\n writeRange(writer, item.range);\n writeDocumentString(writer, item.author, state, false);\n writeDocumentString(writer, item.createdAt, state, false);\n return;\n default:\n throw new TypeError(\"invalid document projection item kind\");\n }\n}\n\nfunction readProjectionItem(\n reader: ArtifactBinaryReader,\n state: CodecState,\n): DocumentArtifactProjectionItem {\n const tag = reader.u8();\n if (tag === 0) {\n const item = Object.freeze({\n kind: \"summary\" as const,\n idNamespace: reader.u64BigInt(),\n revision: reader.u64BigInt(),\n nextIdCounter: reader.u64BigInt(),\n blockCount: boundedProjectionCount(reader, 100_000, \"document block count\"),\n sectionCount: boundedProjectionCount(reader, 10_000, \"document section count\"),\n commentCount: boundedProjectionCount(reader, 100_000, \"document comment count\"),\n trackedChangeCount: boundedProjectionCount(reader, 100_000, \"document tracked-change count\"),\n evenAndOddHeaders: reader.bool(\"document boolean\"),\n trackRevisions: reader.bool(\"document boolean\"),\n page: readPageProjection(reader),\n });\n return item;\n }\n if (tag === 1) {\n const id = readDocumentId(reader, \"section\");\n const startBlockIndex = boundedProjectionCount(reader, 100_000, \"document section block index\");\n const titlePage = reader.bool(\"document boolean\");\n const page = readPageProjection(reader);\n const headerBlockCounts = Object.freeze([\n boundedProjectionCount(reader, 100_000, \"document header blocks\"),\n boundedProjectionCount(reader, 100_000, \"document header blocks\"),\n boundedProjectionCount(reader, 100_000, \"document header blocks\"),\n ]) as readonly [number, number, number];\n const footerBlockCounts = Object.freeze([\n boundedProjectionCount(reader, 100_000, \"document footer blocks\"),\n boundedProjectionCount(reader, 100_000, \"document footer blocks\"),\n boundedProjectionCount(reader, 100_000, \"document footer blocks\"),\n ]) as readonly [number, number, number];\n return Object.freeze({\n kind: \"section\",\n id,\n startBlockIndex,\n titlePage,\n page,\n headerBlockCounts,\n footerBlockCounts,\n });\n }\n if (tag === 2)\n return Object.freeze({\n kind: \"paragraph\",\n id: readDocumentId(reader, \"paragraph\"),\n runs: readRuns(reader, state),\n style: readParagraphStyle(reader),\n });\n if (tag === 3)\n return Object.freeze({\n kind: \"table\",\n id: readDocumentId(reader, \"table\"),\n rows: readTableRows(reader, state),\n style: readTableStyle(reader),\n });\n if (tag === 4)\n return Object.freeze({ kind: \"page-break\", id: readDocumentId(reader, \"page-break\") });\n if (tag === 5) {\n const id = readDocumentId(reader, \"comment\");\n const paragraphId = readDocumentId(reader, \"paragraph\");\n const range = readRange(reader);\n const resolved = reader.bool(\"document boolean\");\n const count = reader.count(100_000, \"document comment replies\");\n const replies: DocumentArtifactCommentReply[] = [];\n for (let index = 0; index < count; index += 1) replies.push(readCommentReply(reader, state));\n return Object.freeze({\n kind: \"comment\",\n id,\n paragraphId,\n range,\n resolved,\n replies: Object.freeze(replies),\n });\n }\n if (tag === 6) {\n const id = readDocumentId(reader, \"tracked-change\");\n const paragraphId = readDocumentId(reader, \"paragraph\");\n const kindTag = reader.u8();\n if (kindTag !== 1 && kindTag !== 2) throw new TypeError(\"invalid tracked change kind\");\n return Object.freeze({\n kind: \"tracked-change\",\n id,\n paragraphId,\n changeKind: kindTag === 1 ? \"insert\" : \"delete\",\n range: readRange(reader),\n author: readDocumentString(reader, state, false),\n createdAt: readDocumentString(reader, state, false),\n });\n }\n throw new TypeError(\"invalid document projection item tag\");\n}\n\nfunction boundedProjectionCount(\n reader: ArtifactBinaryReader,\n maximum: number,\n label: string,\n): number {\n const value = reader.u64Safe(label);\n if (value > maximum) throw new RangeError(`${label} exceeds its limit`);\n return value;\n}\n\nfunction measureProjection(items: readonly DocumentArtifactProjectionItem[]): {\n text: number;\n cells: number;\n} {\n let text = 0;\n let cells = 0;\n const add = (value: string): void => {\n text += value.length;\n };\n for (const item of items) {\n if (item.kind === \"paragraph\") for (const run of item.runs) add(run.text);\n else if (item.kind === \"table\")\n for (const row of item.rows) {\n cells += row.length;\n for (const cell of row) for (const run of cell) add(run.text);\n }\n else if (item.kind === \"comment\")\n for (const reply of item.replies) {\n add(reply.author);\n add(reply.text);\n add(reply.createdAt);\n }\n else if (item.kind === \"tracked-change\") {\n add(item.author);\n add(item.createdAt);\n }\n if (\n text > DOCUMENT_ARTIFACT_QUERY_MAX_TEXT_UTF16 ||\n cells > DOCUMENT_ARTIFACT_QUERY_MAX_TABLE_CELLS\n )\n throw new RangeError(\"document query response metrics exceed their limits\");\n }\n return { text, cells };\n}\n\nfunction freezeOptional<T extends object, V extends Record<string, unknown>>(\n base: T,\n values: V,\n): Readonly<Record<string, unknown>> {\n const output: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n for (const [key, value] of Object.entries(values)) if (value !== undefined) output[key] = value;\n return Object.freeze(output);\n}\n\nfunction invalidTag(label: string): never {\n throw new TypeError(`invalid ${label}`);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,386 @@
1
+ // src/editable-artifacts.ts
2
+ import { sha256 } from "@noble/hashes/sha256";
3
+ import { bytesToHex } from "@noble/hashes/utils";
4
+ var EDITABLE_ARTIFACT_INTENT_VERSION = 1;
5
+ var EDITABLE_ARTIFACT_INTENT_MAX_BYTES = 5 * 1024 * 1024;
6
+ var EDITABLE_ARTIFACT_COMMAND_MAX_BYTES = 4 * 1024 * 1024;
7
+ var EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES = 512;
8
+ var EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES = 64 * 1024 * 1024;
9
+ var EDITABLE_ARTIFACT_INTENT_MAX_CAUSAL_ACTORS = 1024;
10
+ var EDITABLE_ARTIFACT_INTENT_MAX_UNDO_TARGETS = 1e4;
11
+ var MAGIC = new TextEncoder().encode("OGATX001");
12
+ var textEncoder = new TextEncoder();
13
+ var textDecoder = new TextDecoder("utf-8", { fatal: true });
14
+ var STABLE_ID = /^[0-9a-f]{32}$/u;
15
+ var REPLICA_ID = /^[0-9a-f]{16}$/u;
16
+ var CLIENT_TRANSACTION_ID = /^[A-Za-z0-9._:-]{1,200}$/u;
17
+ var REQUEST_HASH = /^sha256:[0-9a-f]{64}$/u;
18
+ function encodeEditableArtifactMutationIntent(input) {
19
+ const intent = normalizeIntent(input, false);
20
+ const writer = new BinaryWriter(EDITABLE_ARTIFACT_INTENT_MAX_BYTES);
21
+ writer.bytes(MAGIC);
22
+ writer.u16(intent.envelopeVersion);
23
+ writer.u16(intent.protocolVersion);
24
+ writer.u16(intent.modelSchemaVersion);
25
+ writer.u16(intent.commandProtocolVersion);
26
+ writer.string(intent.artifactId);
27
+ writer.string(intent.clientTransactionId);
28
+ writer.string(intent.replicaId);
29
+ writer.u64(intent.replicaCounter);
30
+ writer.u8(intent.previousLocalTransactionId === null ? 0 : 1);
31
+ if (intent.previousLocalTransactionId !== null) {
32
+ writer.string(intent.previousLocalTransactionId);
33
+ }
34
+ writer.u64(intent.observedHeadSequence);
35
+ writer.u16(intent.causalBase.length);
36
+ for (const entry of intent.causalBase) {
37
+ writer.string(entry.replicaId);
38
+ writer.u64(entry.counter);
39
+ }
40
+ writer.u16(intent.selectiveUndoOperationIds.length);
41
+ for (const operationId of intent.selectiveUndoOperationIds) writer.string(operationId);
42
+ writer.byteBlock(intent.commandBytes);
43
+ return writer.finish();
44
+ }
45
+ function decodeEditableArtifactMutationIntent(bytes) {
46
+ return parseEditableArtifactMutationIntent(bytes, true);
47
+ }
48
+ function parseEditableArtifactMutationIntent(bytes, copyCommandBytes) {
49
+ if (!(bytes instanceof Uint8Array)) throw new TypeError("intent bytes must be a Uint8Array");
50
+ if (bytes.byteLength > EDITABLE_ARTIFACT_INTENT_MAX_BYTES) {
51
+ throw new RangeError("editable artifact intent exceeds its byte limit");
52
+ }
53
+ const reader = new BinaryReader(bytes);
54
+ const magic = reader.bytes(MAGIC.byteLength);
55
+ if (!equalBytes(magic, MAGIC)) throw new TypeError("invalid editable artifact intent magic");
56
+ const envelopeVersion = reader.u16();
57
+ if (envelopeVersion !== EDITABLE_ARTIFACT_INTENT_VERSION) {
58
+ throw new TypeError(`unsupported editable artifact intent version: ${envelopeVersion}`);
59
+ }
60
+ const protocolVersion = reader.u16();
61
+ const modelSchemaVersion = reader.u16();
62
+ const commandProtocolVersion = reader.u16();
63
+ const artifactId = reader.string();
64
+ const clientTransactionId = reader.string();
65
+ const replicaId = reader.string();
66
+ const replicaCounter = reader.u64();
67
+ const predecessorFlag = reader.u8();
68
+ if (predecessorFlag > 1) throw new TypeError("invalid predecessor presence flag");
69
+ const previousLocalTransactionId = predecessorFlag === 1 ? reader.string() : null;
70
+ const observedHeadSequence = reader.u64();
71
+ const causalCount = reader.u16();
72
+ if (causalCount > EDITABLE_ARTIFACT_INTENT_MAX_CAUSAL_ACTORS) {
73
+ throw new RangeError("editable artifact causal base exceeds its actor limit");
74
+ }
75
+ const causalBase = [];
76
+ let previousReplicaId = "";
77
+ for (let index = 0; index < causalCount; index += 1) {
78
+ const causalReplicaId = reader.string();
79
+ if (causalReplicaId <= previousReplicaId) {
80
+ throw new TypeError("causal base replica ids must be unique and canonically sorted");
81
+ }
82
+ previousReplicaId = causalReplicaId;
83
+ causalBase.push(Object.freeze({ replicaId: causalReplicaId, counter: reader.u64() }));
84
+ }
85
+ const undoCount = reader.u16();
86
+ if (undoCount > EDITABLE_ARTIFACT_INTENT_MAX_UNDO_TARGETS) {
87
+ throw new RangeError("editable artifact undo targets exceed their limit");
88
+ }
89
+ const selectiveUndoOperationIds = [];
90
+ let previousOperationId = "";
91
+ for (let index = 0; index < undoCount; index += 1) {
92
+ const operationId = reader.string();
93
+ if (operationId <= previousOperationId) {
94
+ throw new TypeError("undo operation ids must be unique and canonically sorted");
95
+ }
96
+ previousOperationId = operationId;
97
+ selectiveUndoOperationIds.push(operationId);
98
+ }
99
+ const commandBytes = reader.byteBlock(EDITABLE_ARTIFACT_COMMAND_MAX_BYTES);
100
+ reader.done();
101
+ return normalizeIntent(
102
+ {
103
+ envelopeVersion: EDITABLE_ARTIFACT_INTENT_VERSION,
104
+ protocolVersion,
105
+ modelSchemaVersion,
106
+ commandProtocolVersion,
107
+ artifactId,
108
+ clientTransactionId,
109
+ replicaId,
110
+ replicaCounter,
111
+ previousLocalTransactionId,
112
+ observedHeadSequence,
113
+ causalBase,
114
+ selectiveUndoOperationIds,
115
+ commandBytes
116
+ },
117
+ copyCommandBytes
118
+ );
119
+ }
120
+ function hashEditableArtifactMutationIntentBytes(bytes) {
121
+ parseEditableArtifactMutationIntent(bytes, false);
122
+ return `sha256:${bytesToHex(sha256(bytes))}`;
123
+ }
124
+ function hashEditableArtifactMutationIntent(intent) {
125
+ const bytes = encodeEditableArtifactMutationIntent(intent);
126
+ return { bytes, requestHash: `sha256:${bytesToHex(sha256(bytes))}` };
127
+ }
128
+ function assertEditableArtifactRequestHash(value) {
129
+ if (!REQUEST_HASH.test(value)) {
130
+ throw new TypeError("editable artifact request hash must be canonical sha256 text");
131
+ }
132
+ return value;
133
+ }
134
+ function normalizeIntent(input, copyCommandBytes = true) {
135
+ if (!isPlainRecord(input)) throw new TypeError("editable artifact intent must be a plain record");
136
+ if (input.envelopeVersion !== EDITABLE_ARTIFACT_INTENT_VERSION) {
137
+ throw new TypeError("editable artifact intent envelope version must be 1");
138
+ }
139
+ const protocolVersion = positiveU16(input.protocolVersion, "protocolVersion");
140
+ const modelSchemaVersion = positiveU16(input.modelSchemaVersion, "modelSchemaVersion");
141
+ const commandProtocolVersion = positiveU16(
142
+ input.commandProtocolVersion,
143
+ "commandProtocolVersion"
144
+ );
145
+ const artifactId = stableId(input.artifactId, "artifactId");
146
+ const clientTransactionId = portableTransactionId(
147
+ input.clientTransactionId,
148
+ "clientTransactionId"
149
+ );
150
+ const replicaId = replicaIdentity(input.replicaId, "replicaId");
151
+ const replicaCounter = positiveSafeInteger(input.replicaCounter, "replicaCounter");
152
+ const previousLocalTransactionId = input.previousLocalTransactionId === null ? null : portableTransactionId(input.previousLocalTransactionId, "previousLocalTransactionId");
153
+ const observedHeadSequence = nonnegativeSafeInteger(
154
+ input.observedHeadSequence,
155
+ "observedHeadSequence"
156
+ );
157
+ if (!Array.isArray(input.causalBase)) throw new TypeError("causalBase must be an array");
158
+ if (input.causalBase.length > EDITABLE_ARTIFACT_INTENT_MAX_CAUSAL_ACTORS) {
159
+ throw new RangeError("editable artifact causal base exceeds its actor limit");
160
+ }
161
+ const causalByReplica = /* @__PURE__ */ new Map();
162
+ for (const entry of input.causalBase) {
163
+ if (!isPlainRecord(entry)) throw new TypeError("causal entries must be plain records");
164
+ const causalReplicaId = replicaIdentity(entry.replicaId, "causal replicaId");
165
+ if (causalByReplica.has(causalReplicaId)) throw new TypeError("duplicate causal replicaId");
166
+ causalByReplica.set(
167
+ causalReplicaId,
168
+ positiveSafeInteger(entry.counter, `causal counter for ${causalReplicaId}`)
169
+ );
170
+ }
171
+ const causalBase = [...causalByReplica].sort(([left], [right]) => compareCodeUnits(left, right)).map(([causalReplicaId, counter]) => Object.freeze({ replicaId: causalReplicaId, counter }));
172
+ if (!Array.isArray(input.selectiveUndoOperationIds)) {
173
+ throw new TypeError("selectiveUndoOperationIds must be an array");
174
+ }
175
+ if (input.selectiveUndoOperationIds.length > EDITABLE_ARTIFACT_INTENT_MAX_UNDO_TARGETS) {
176
+ throw new RangeError("editable artifact undo targets exceed their limit");
177
+ }
178
+ const undoSet = /* @__PURE__ */ new Set();
179
+ for (const value of input.selectiveUndoOperationIds) {
180
+ const operationId = stableId(value, "selective undo operation id");
181
+ if (undoSet.has(operationId)) throw new TypeError("duplicate selective undo operation id");
182
+ undoSet.add(operationId);
183
+ }
184
+ const selectiveUndoOperationIds = [...undoSet].sort(compareCodeUnits);
185
+ if (!(input.commandBytes instanceof Uint8Array)) {
186
+ throw new TypeError("commandBytes must be a Uint8Array");
187
+ }
188
+ if (input.commandBytes.byteLength < 1) throw new TypeError("commandBytes must not be empty");
189
+ if (input.commandBytes.byteLength > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES) {
190
+ throw new RangeError("commandBytes exceeds its byte limit");
191
+ }
192
+ return Object.freeze({
193
+ envelopeVersion: EDITABLE_ARTIFACT_INTENT_VERSION,
194
+ protocolVersion,
195
+ modelSchemaVersion,
196
+ commandProtocolVersion,
197
+ artifactId,
198
+ clientTransactionId,
199
+ replicaId,
200
+ replicaCounter,
201
+ previousLocalTransactionId,
202
+ observedHeadSequence,
203
+ causalBase: Object.freeze(causalBase),
204
+ selectiveUndoOperationIds: Object.freeze(selectiveUndoOperationIds),
205
+ commandBytes: copyCommandBytes ? input.commandBytes.slice() : input.commandBytes
206
+ });
207
+ }
208
+ function isPlainRecord(value) {
209
+ return typeof value === "object" && value !== null && Object.getPrototypeOf(value) === Object.prototype;
210
+ }
211
+ function stableId(value, label) {
212
+ if (typeof value !== "string" || !STABLE_ID.test(value) || /^0+$/u.test(value)) {
213
+ throw new TypeError(`${label} must be nonzero fixed-width lowercase hexadecimal text`);
214
+ }
215
+ return value;
216
+ }
217
+ function replicaIdentity(value, label) {
218
+ if (typeof value !== "string" || !REPLICA_ID.test(value) || /^0+$/u.test(value)) {
219
+ throw new TypeError(`${label} must be nonzero 64-bit lowercase hexadecimal text`);
220
+ }
221
+ return value;
222
+ }
223
+ function portableTransactionId(value, label) {
224
+ if (typeof value !== "string" || !CLIENT_TRANSACTION_ID.test(value)) {
225
+ throw new TypeError(`${label} must contain 1-200 portable identifier characters`);
226
+ }
227
+ return value;
228
+ }
229
+ function positiveU16(value, label) {
230
+ if (!Number.isInteger(value) || value < 1 || value > 65535) {
231
+ throw new TypeError(`${label} must be a positive 16-bit integer`);
232
+ }
233
+ return value;
234
+ }
235
+ function positiveSafeInteger(value, label) {
236
+ if (!Number.isSafeInteger(value) || value < 1) {
237
+ throw new TypeError(`${label} must be a positive safe integer`);
238
+ }
239
+ return value;
240
+ }
241
+ function nonnegativeSafeInteger(value, label) {
242
+ if (!Number.isSafeInteger(value) || value < 0) {
243
+ throw new TypeError(`${label} must be a nonnegative safe integer`);
244
+ }
245
+ return value;
246
+ }
247
+ function compareCodeUnits(left, right) {
248
+ return left < right ? -1 : left > right ? 1 : 0;
249
+ }
250
+ function equalBytes(left, right) {
251
+ return left.byteLength === right.byteLength && left.every((value, index) => value === right[index]);
252
+ }
253
+ var BinaryWriter = class {
254
+ constructor(maximum) {
255
+ this.maximum = maximum;
256
+ }
257
+ buffer = new Uint8Array(1024);
258
+ length = 0;
259
+ u8(value) {
260
+ this.ensure(1);
261
+ this.buffer[this.length++] = value;
262
+ }
263
+ u16(value) {
264
+ this.ensure(2);
265
+ this.buffer[this.length++] = value & 255;
266
+ this.buffer[this.length++] = value >>> 8 & 255;
267
+ }
268
+ u32(value) {
269
+ this.ensure(4);
270
+ for (let offset = 0; offset < 4; offset += 1) {
271
+ this.buffer[this.length++] = Math.floor(value / 2 ** (offset * 8)) & 255;
272
+ }
273
+ }
274
+ u64(value) {
275
+ if (!Number.isSafeInteger(value) || value < 0) throw new TypeError("u64 must be safe");
276
+ this.ensure(8);
277
+ let remaining = BigInt(value);
278
+ for (let offset = 0; offset < 8; offset += 1) {
279
+ this.buffer[this.length++] = Number(remaining & 0xffn);
280
+ remaining >>= 8n;
281
+ }
282
+ }
283
+ string(value) {
284
+ const bytes = textEncoder.encode(value);
285
+ if (bytes.byteLength > 65535) throw new RangeError("intent string exceeds 65535 bytes");
286
+ this.u16(bytes.byteLength);
287
+ this.bytes(bytes);
288
+ }
289
+ byteBlock(value) {
290
+ this.u32(value.byteLength);
291
+ this.bytes(value);
292
+ }
293
+ bytes(value) {
294
+ this.ensure(value.byteLength);
295
+ this.buffer.set(value, this.length);
296
+ this.length += value.byteLength;
297
+ }
298
+ finish() {
299
+ return this.buffer.slice(0, this.length);
300
+ }
301
+ ensure(additional) {
302
+ const needed = this.length + additional;
303
+ if (!Number.isSafeInteger(needed) || needed > this.maximum) {
304
+ throw new RangeError("editable artifact intent exceeds its byte limit");
305
+ }
306
+ if (needed <= this.buffer.byteLength) return;
307
+ let size = this.buffer.byteLength;
308
+ while (size < needed) size = Math.min(this.maximum, size * 2);
309
+ const next = new Uint8Array(size);
310
+ next.set(this.buffer.subarray(0, this.length));
311
+ this.buffer = next;
312
+ }
313
+ };
314
+ var BinaryReader = class {
315
+ constructor(input) {
316
+ this.input = input;
317
+ }
318
+ offset = 0;
319
+ u8() {
320
+ this.require(1);
321
+ return this.input[this.offset++];
322
+ }
323
+ u16() {
324
+ this.require(2);
325
+ const value = this.input[this.offset] | this.input[this.offset + 1] << 8;
326
+ this.offset += 2;
327
+ return value;
328
+ }
329
+ u32() {
330
+ this.require(4);
331
+ const value = this.input[this.offset] + this.input[this.offset + 1] * 2 ** 8 + this.input[this.offset + 2] * 2 ** 16 + this.input[this.offset + 3] * 2 ** 24;
332
+ this.offset += 4;
333
+ return value;
334
+ }
335
+ u64() {
336
+ this.require(8);
337
+ let value = 0n;
338
+ for (let offset = 0; offset < 8; offset += 1) {
339
+ value |= BigInt(this.input[this.offset + offset]) << BigInt(offset * 8);
340
+ }
341
+ this.offset += 8;
342
+ if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new RangeError("u64 exceeds safe integer");
343
+ return Number(value);
344
+ }
345
+ string() {
346
+ return textDecoder.decode(this.bytes(this.u16()));
347
+ }
348
+ byteBlock(maximum) {
349
+ const length = this.u32();
350
+ if (length < 1) throw new TypeError("commandBytes must not be empty");
351
+ if (length > maximum) throw new RangeError("commandBytes exceeds its byte limit");
352
+ return this.bytes(length);
353
+ }
354
+ bytes(length) {
355
+ this.require(length);
356
+ const output = this.input.subarray(this.offset, this.offset + length);
357
+ this.offset += length;
358
+ return output;
359
+ }
360
+ done() {
361
+ if (this.offset !== this.input.byteLength) {
362
+ throw new TypeError("editable artifact intent contains trailing bytes");
363
+ }
364
+ }
365
+ require(length) {
366
+ if (!Number.isSafeInteger(length) || length < 0 || this.offset + length > this.input.byteLength) {
367
+ throw new TypeError("truncated editable artifact intent");
368
+ }
369
+ }
370
+ };
371
+
372
+ export {
373
+ EDITABLE_ARTIFACT_INTENT_VERSION,
374
+ EDITABLE_ARTIFACT_INTENT_MAX_BYTES,
375
+ EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,
376
+ EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,
377
+ EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,
378
+ EDITABLE_ARTIFACT_INTENT_MAX_CAUSAL_ACTORS,
379
+ EDITABLE_ARTIFACT_INTENT_MAX_UNDO_TARGETS,
380
+ encodeEditableArtifactMutationIntent,
381
+ decodeEditableArtifactMutationIntent,
382
+ hashEditableArtifactMutationIntentBytes,
383
+ hashEditableArtifactMutationIntent,
384
+ assertEditableArtifactRequestHash
385
+ };
386
+ //# sourceMappingURL=chunk-TZ6YEYN4.js.map