@phtngyn/cms 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +90 -0
  3. package/dist/studio/assets/ActivityEntryRow-D--fRvWI.js +1 -0
  4. package/dist/studio/assets/ActivityView-D-XBBUHb.js +1 -0
  5. package/dist/studio/assets/CreateDocumentDialog-CH8UH1QM.js +1 -0
  6. package/dist/studio/assets/DocumentsView-CxRpmAxt.js +34 -0
  7. package/dist/studio/assets/DropdownMenu-BSb1l7fr.js +1 -0
  8. package/dist/studio/assets/Input-DVao38h7.js +3 -0
  9. package/dist/studio/assets/MediaView-BHrPIjxB.js +1 -0
  10. package/dist/studio/assets/Modal-VNrXGa5C.js +1 -0
  11. package/dist/studio/assets/OverviewView-DfP6-mLZ.js +1 -0
  12. package/dist/studio/assets/Select-BJZIs9sY.js +1 -0
  13. package/dist/studio/assets/SettingsView-CerHe-ua.js +1 -0
  14. package/dist/studio/assets/Skeleton-CWJNi3nS.js +1 -0
  15. package/dist/studio/assets/StudioPageHeader-DP9HDAF2.js +1 -0
  16. package/dist/studio/assets/UsersView-cP3REkH2.js +1 -0
  17. package/dist/studio/assets/collaboration-BLnCzfvV.js +4 -0
  18. package/dist/studio/assets/context-dY4fNbn3.js +1 -0
  19. package/dist/studio/assets/editor-CE07wW83.js +137 -0
  20. package/dist/studio/assets/gateway-BAyQgCse.js +10 -0
  21. package/dist/studio/assets/index-CjoaPLhZ.js +28 -0
  22. package/dist/studio/assets/index-s2rPqCmP.css +2 -0
  23. package/dist/studio/assets/render-BkxbK2St.js +83 -0
  24. package/dist/studio/assets/rolldown-runtime-DK3Fl9T5.js +1 -0
  25. package/dist/studio/assets/useMediaLibrary-D7qR7aBf.js +1 -0
  26. package/dist/studio/index.html +76 -0
  27. package/package.json +75 -0
  28. package/src/Authoring.d.ts +46 -0
  29. package/src/Authoring.js +1 -0
  30. package/src/AuthoringSchema-BQ5kbhVB.js +926 -0
  31. package/src/AuthoringSchema-BQ5kbhVB.js.map +1 -0
  32. package/src/Configuration-BGYFD2N1.js +150 -0
  33. package/src/Configuration-BGYFD2N1.js.map +1 -0
  34. package/src/Configuration.d.ts +44 -0
  35. package/src/Configuration.js +9 -0
  36. package/src/Configuration.js.map +1 -0
  37. package/src/DocumentEngine-Da0kWotL.js +851 -0
  38. package/src/DocumentEngine-Da0kWotL.js.map +1 -0
  39. package/src/DocumentModel.d.ts +30 -0
  40. package/src/DocumentModel.js +15 -0
  41. package/src/DocumentModel.js.map +1 -0
  42. package/src/HttpPaths-86qLGB90.js +15 -0
  43. package/src/HttpPaths-86qLGB90.js.map +1 -0
  44. package/src/Module.d.ts +12 -0
  45. package/src/Module.js +167 -0
  46. package/src/Module.js.map +1 -0
  47. package/src/StudioHttp-BTLLooh0.js +916 -0
  48. package/src/StudioHttp-BTLLooh0.js.map +1 -0
  49. package/src/connection-ZGtL54qY.js +94 -0
  50. package/src/connection-ZGtL54qY.js.map +1 -0
  51. package/src/installation-BNKaVjni.js +9128 -0
  52. package/src/installation-BNKaVjni.js.map +1 -0
  53. package/src/internal/authoring-compiler.js +120 -0
  54. package/src/internal/authoring-compiler.js.map +1 -0
  55. package/src/internal/authoring-metadata.js +163 -0
  56. package/src/internal/authoring-metadata.js.map +1 -0
  57. package/src/internal/cms-config.js +46 -0
  58. package/src/internal/cms-config.js.map +1 -0
  59. package/src/internal/component-metadata.js +37 -0
  60. package/src/internal/component-metadata.js.map +1 -0
  61. package/src/internal/configuration.js +93 -0
  62. package/src/internal/configuration.js.map +1 -0
  63. package/src/internal/document-model.js +236 -0
  64. package/src/internal/document-model.js.map +1 -0
  65. package/src/internal/field-metadata.js +6 -0
  66. package/src/internal/field-metadata.js.map +1 -0
  67. package/src/metadata-Czvi3E4K.js +190 -0
  68. package/src/metadata-Czvi3E4K.js.map +1 -0
  69. package/src/models-Citx8jBi.js +306 -0
  70. package/src/models-Citx8jBi.js.map +1 -0
  71. package/src/models-DS5ClMsH.js +153 -0
  72. package/src/models-DS5ClMsH.js.map +1 -0
  73. package/src/runtime/api.js +9 -0
  74. package/src/runtime/api.js.map +1 -0
  75. package/src/runtime/collaboration.js +40 -0
  76. package/src/runtime/collaboration.js.map +1 -0
  77. package/src/runtime/delivery/DocumentField.js +23 -0
  78. package/src/runtime/delivery/DocumentField.js.map +1 -0
  79. package/src/runtime/delivery/DocumentRenderer.js +51 -0
  80. package/src/runtime/delivery/DocumentRenderer.js.map +1 -0
  81. package/src/runtime/delivery/DocumentScope.js +41 -0
  82. package/src/runtime/delivery/DocumentScope.js.map +1 -0
  83. package/src/runtime/delivery/document-page.js +23 -0
  84. package/src/runtime/delivery/document-page.js.map +1 -0
  85. package/src/runtime/delivery/document.js +25 -0
  86. package/src/runtime/delivery/document.js.map +1 -0
  87. package/src/runtime/delivery/preview.d.ts +11 -0
  88. package/src/runtime/delivery/preview.js +6 -0
  89. package/src/runtime/delivery/preview.js.map +1 -0
  90. package/src/runtime/delivery/types.d.ts +80 -0
  91. package/src/runtime/delivery/types.js +1 -0
  92. package/src/runtime/delivery/useDocument.d.ts +6 -0
  93. package/src/runtime/delivery/useDocument.js +20 -0
  94. package/src/runtime/delivery/useDocument.js.map +1 -0
  95. package/src/runtime/delivery/useDocumentQuery.d.ts +7 -0
  96. package/src/runtime/delivery/useDocumentQuery.js +26 -0
  97. package/src/runtime/delivery/useDocumentQuery.js.map +1 -0
  98. package/src/runtime/installation.js +3 -0
  99. package/src/runtime/plugin.js +32 -0
  100. package/src/runtime/plugin.js.map +1 -0
  101. package/src/runtime/preview/CmsStudioPreviewMarker.js +15 -0
  102. package/src/runtime/preview/CmsStudioPreviewMarker.js.map +1 -0
  103. package/src/runtime/preview/comark-document.js +38 -0
  104. package/src/runtime/preview/comark-document.js.map +1 -0
  105. package/src/runtime/preview/connection.js +3 -0
  106. package/src/runtime/preview/controller.js +247 -0
  107. package/src/runtime/preview/controller.js.map +1 -0
  108. package/src/runtime/preview/plugin.client.js +70 -0
  109. package/src/runtime/preview/plugin.client.js.map +1 -0
  110. package/src/runtime/preview/preview.css +9 -0
  111. package/src/runtime/preview/protocol.d.ts +10 -0
  112. package/src/runtime/preview/protocol.js +11 -0
  113. package/src/runtime/preview/protocol.js.map +1 -0
  114. package/src/runtime/preview/store.js +4 -0
  115. package/src/runtime/preview/targets.js +102 -0
  116. package/src/runtime/preview/targets.js.map +1 -0
  117. package/src/runtime/studio-app.js +13 -0
  118. package/src/runtime/studio-app.js.map +1 -0
  119. package/src/store-Nl4uxEXx.js +221 -0
  120. package/src/store-Nl4uxEXx.js.map +1 -0
@@ -0,0 +1,916 @@
1
+ import { o as STUDIO_API_PATH } from "./HttpPaths-86qLGB90.js";
2
+ import { A as RestoreDocumentInput, B as DocumentVersion, C as MoveDocumentInput, D as PublishedDocumentQuery, E as PublishedDocumentPage, F as Locale, G as SourcePath, H as PublicPath, K as nonNegativeInt, M as UpdateDocumentInput, O as PublishedDocumentSurroundQuery, P as CollectionName, R as DocumentHistoryCursor, T as PublishedDocumentLookup, U as RevisionId, _ as DocumentSource, b as DocumentSurround, d as DocumentIssue, f as DocumentMutationResult, g as DocumentRevisionAction, i as CreateDocumentInput, j as UndeleteDocumentInput, k as RemoveDocumentInput, m as DocumentNavigationQuery, n as CmsMarkdownDocument, o as DeletedDocument, p as DocumentNavigationItem, r as CompiledDocument, s as DocumentBrowseQuery, w as PublishDocumentInput, x as DocumentValidationResult, y as DocumentSummary, z as DocumentId } from "./models-Citx8jBi.js";
3
+ import { c as PreviewSession, d as PreviewSessionInvalid, f as PreviewSessionRequest, i as PreviewDraftRequest, l as PreviewSessionAccess, m as RequestId, o as PreviewInvalidation, r as PreviewDraftNotFound } from "./models-DS5ClMsH.js";
4
+ import { n as DocumentConfiguration, r as MediaConfiguration, t as ComponentDefinition } from "./Configuration-BGYFD2N1.js";
5
+ import { Context, Schema } from "effect";
6
+ import { Multipart } from "effect/unstable/http";
7
+ import { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiMiddleware, HttpApiSchema } from "effect/unstable/httpapi";
8
+
9
+ //#region ../protocol/src/Media.ts
10
+ /**
11
+ * Media wire models. Search pages are newest-first with opaque continuation cursors; only ready
12
+ * assets are public results, and names, folders, and object keys are validated path-safe values.
13
+ */
14
+ const hasUnsafeMediaCharacter = (value) => {
15
+ for (const character of value) {
16
+ const codePoint = character.codePointAt(0);
17
+ if (character === "\\" || codePoint !== void 0 && (codePoint <= 31 || codePoint === 127)) return true;
18
+ }
19
+ return false;
20
+ };
21
+ const isSafeMediaPath = (value, allowEmpty) => {
22
+ if (value.length === 0) return allowEmpty;
23
+ if (value !== value.trim() || value.startsWith("/") || value.endsWith("/") || hasUnsafeMediaCharacter(value)) return false;
24
+ return value.split("/").every((segment) => segment.length > 0 && segment !== "." && segment !== "..");
25
+ };
26
+ const safeMediaFolder = Schema.makeFilter((value) => isSafeMediaPath(value, true), { expected: "a provider-relative media folder without traversal segments" });
27
+ const safeMediaObjectKey = Schema.makeFilter((value) => isSafeMediaPath(value, false), { expected: "a non-empty provider-relative media object key without traversal segments" });
28
+ const safeMediaName = Schema.makeFilter((value) => value.length > 0 && value.length <= 255 && value === value.trim() && value !== "." && value !== ".." && !value.includes("/") && !hasUnsafeMediaCharacter(value), { expected: "a safe media file name of at most 255 characters" });
29
+ const MediaId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand("MediaId"));
30
+ const MediaFolder = Schema.String.check(Schema.isMaxLength(512), safeMediaFolder).pipe(Schema.brand("MediaFolder"));
31
+ const MediaObjectKey = Schema.String.check(Schema.isMaxLength(1024), safeMediaObjectKey).pipe(Schema.brand("MediaObjectKey"));
32
+ const MediaName = Schema.String.check(safeMediaName).pipe(Schema.brand("MediaName"));
33
+ const MediaCursor = Schema.NonEmptyString.pipe(Schema.brand("MediaCursor"));
34
+ const ImageMimeType = Schema.Literals([
35
+ "image/avif",
36
+ "image/gif",
37
+ "image/jpeg",
38
+ "image/png",
39
+ "image/webp"
40
+ ]);
41
+ const MediaStatus = Schema.Literals([
42
+ "uploading",
43
+ "ready",
44
+ "deleting"
45
+ ]);
46
+ const MediaByteSize = Schema.Int.check(Schema.isGreaterThan(0));
47
+ const MediaAsset = Schema.Struct({
48
+ kind: Schema.tag("image"),
49
+ id: MediaId,
50
+ objectKey: MediaObjectKey,
51
+ url: Schema.NonEmptyString,
52
+ name: MediaName,
53
+ folder: MediaFolder,
54
+ mimeType: ImageMimeType,
55
+ byteSize: MediaByteSize,
56
+ createdAt: Schema.DateTimeUtcFromString,
57
+ updatedAt: Schema.DateTimeUtcFromString,
58
+ status: MediaStatus
59
+ }).annotate({ identifier: "MediaAsset" });
60
+ const MediaUpload = Schema.Struct({
61
+ name: MediaName,
62
+ folder: Schema.optionalKey(MediaFolder),
63
+ declaredMimeType: Schema.optionalKey(Schema.NonEmptyString),
64
+ declaredByteSize: MediaByteSize
65
+ }).annotate({ identifier: "MediaUpload" });
66
+ const MediaQuery = Schema.Struct({
67
+ cursor: Schema.optionalKey(MediaCursor),
68
+ folder: Schema.optionalKey(MediaFolder),
69
+ search: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(200))),
70
+ limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({
71
+ minimum: 1,
72
+ maximum: 100
73
+ })))
74
+ }).annotate({ identifier: "MediaQuery" });
75
+ const ReadyMediaAssets = Schema.Array(MediaAsset).check(Schema.makeFilter((assets) => assets.every((asset) => asset.status === "ready"), { expected: "media assets whose lifecycle status is ready" }));
76
+ const MediaPage = Schema.Struct({
77
+ assets: ReadyMediaAssets,
78
+ folders: Schema.Array(MediaFolder),
79
+ nextCursor: Schema.optionalKey(MediaCursor),
80
+ total: nonNegativeInt
81
+ }).annotate({ identifier: "MediaPage" });
82
+ const MediaReference = Schema.Struct({
83
+ documentId: DocumentId,
84
+ path: PublicPath,
85
+ sourcePath: SourcePath,
86
+ objectKey: MediaObjectKey,
87
+ nodePath: Schema.Array(nonNegativeInt)
88
+ }).annotate({ identifier: "MediaReference" });
89
+ const MediaObjectMismatch = Schema.Struct({
90
+ asset: MediaAsset,
91
+ storedByteSize: MediaByteSize,
92
+ storedMimeType: Schema.optionalKey(ImageMimeType)
93
+ }).annotate({ identifier: "MediaObjectMismatch" });
94
+ const MediaIntegrityReport = Schema.Struct({
95
+ missingAssets: Schema.Array(MediaReference),
96
+ missingObjects: Schema.Array(MediaAsset),
97
+ mismatchedObjects: Schema.Array(MediaObjectMismatch),
98
+ orphanedObjectKeys: Schema.Array(MediaObjectKey),
99
+ unusedAssets: Schema.Array(MediaAsset)
100
+ }).annotate({ identifier: "MediaIntegrityReport" });
101
+ const MediaCleanupReport = Schema.Struct({ removedObjectKeys: Schema.Array(MediaObjectKey) }).annotate({ identifier: "MediaCleanupReport" });
102
+ var MediaNotFound = class extends Schema.TaggedError()("Media.NotFound", { mediaId: MediaId }) {};
103
+ var MediaReferenced = class extends Schema.TaggedError()("Media.Referenced", {
104
+ mediaId: MediaId,
105
+ references: Schema.Array(MediaReference)
106
+ }) {};
107
+ var MediaConflict = class extends Schema.TaggedError()("Media.Conflict", { mediaId: MediaId }) {};
108
+ var MediaInvalid = class extends Schema.TaggedError()("Media.Invalid", { message: Schema.NonEmptyString }) {};
109
+ var MediaTooLarge = class extends Schema.TaggedError()("Media.TooLarge", {
110
+ declaredByteSize: MediaByteSize,
111
+ maxUploadBytes: MediaByteSize
112
+ }) {};
113
+
114
+ //#endregion
115
+ //#region ../protocol/src/internal/documents/errors.ts
116
+ var DocumentNotFound = class extends Schema.TaggedError()("Document.NotFound", {
117
+ documentId: DocumentId,
118
+ revisionId: Schema.optionalKey(RevisionId)
119
+ }) {};
120
+ var DocumentPathConflict = class extends Schema.TaggedError()("Document.PathConflict", { sourcePath: SourcePath }) {};
121
+ var DocumentVersionConflict = class extends Schema.TaggedError()("Document.VersionConflict", {
122
+ documentId: DocumentId,
123
+ expectedVersion: DocumentVersion,
124
+ actualVersion: DocumentVersion
125
+ }) {};
126
+ var DocumentMediaUnavailable = class extends Schema.TaggedError()("Document.MediaUnavailable", {
127
+ documentId: DocumentId,
128
+ mediaKeys: Schema.Array(MediaObjectKey).check(Schema.isMinLength(1))
129
+ }) {};
130
+ var DocumentValidationFailed = class extends Schema.TaggedError()("Document.ValidationFailed", { issues: Schema.Array(DocumentIssue) }) {};
131
+ var PublishedDocumentNotFound = class extends Schema.TaggedError()("PublishedDocument.NotFound", { lookup: PublishedDocumentLookup }) {};
132
+
133
+ //#endregion
134
+ //#region ../protocol/src/AccessControl.ts
135
+ /** Wire-visible Studio actors, request identity, roles, access decisions, and denials. */
136
+ const ROLES = [
137
+ "administrator",
138
+ "editor",
139
+ "viewer"
140
+ ];
141
+ const Role = Schema.Literals(ROLES);
142
+ const StudioActor = Schema.Struct({
143
+ id: Schema.NonEmptyString,
144
+ email: Schema.NonEmptyString,
145
+ name: Schema.NonEmptyString,
146
+ roles: Schema.Array(Schema.NonEmptyString)
147
+ }).annotate({ identifier: "StudioActor" });
148
+ const StudioRequestContext = Schema.Struct({
149
+ actor: StudioActor,
150
+ requestId: RequestId
151
+ }).annotate({ identifier: "StudioRequestContext" });
152
+ const DOCUMENT_ACTIONS = [
153
+ "document.browse",
154
+ "document.read",
155
+ "document.trash",
156
+ "document.validate",
157
+ "document.create",
158
+ "document.update",
159
+ "document.move",
160
+ "document.remove",
161
+ "document.restore",
162
+ "document.undelete",
163
+ "document.publish",
164
+ "document.history"
165
+ ];
166
+ const DocumentAction = Schema.Literals(DOCUMENT_ACTIONS);
167
+ const DocumentCatalogResource = Schema.Struct({ kind: Schema.tag("catalog") });
168
+ const CollectionResource = Schema.Struct({
169
+ kind: Schema.tag("collection"),
170
+ collection: CollectionName,
171
+ locale: Schema.optionalKey(Locale)
172
+ });
173
+ const DocumentResource = Schema.Struct({
174
+ kind: Schema.tag("document"),
175
+ documentId: DocumentId
176
+ });
177
+ const DocumentAccessResource = Schema.Union([
178
+ DocumentCatalogResource,
179
+ CollectionResource,
180
+ DocumentResource
181
+ ]).pipe(Schema.toTaggedUnion("kind"));
182
+ const DocumentAccessDecision = Schema.Struct({
183
+ action: DocumentAction,
184
+ resource: DocumentAccessResource
185
+ }).annotate({ identifier: "DocumentAccessDecision" });
186
+ const MEDIA_ACTIONS = [
187
+ "media.read",
188
+ "media.search",
189
+ "media.integrity",
190
+ "media.upload",
191
+ "media.replace",
192
+ "media.remove",
193
+ "media.cleanup"
194
+ ];
195
+ const MediaAction = Schema.Literals(MEDIA_ACTIONS);
196
+ const MediaCatalogResource = Schema.Struct({ kind: Schema.tag("media-catalog") });
197
+ const MediaAssetResource = Schema.Struct({
198
+ kind: Schema.tag("media-asset"),
199
+ mediaId: MediaId
200
+ });
201
+ const MediaFolderResource = Schema.Struct({
202
+ kind: Schema.tag("media-folder"),
203
+ folder: MediaFolder
204
+ });
205
+ const MediaResource = Schema.Union([
206
+ MediaCatalogResource,
207
+ MediaAssetResource,
208
+ MediaFolderResource
209
+ ]).pipe(Schema.toTaggedUnion("kind"));
210
+ const MediaAccessDecision = Schema.Struct({
211
+ action: MediaAction,
212
+ resource: MediaResource
213
+ }).annotate({ identifier: "MediaAccessDecision" });
214
+ const ActivityResource = Schema.Struct({ kind: Schema.tag("activity") });
215
+ const ActivityAccessDecision = Schema.Struct({
216
+ action: Schema.Literal("activity.read"),
217
+ resource: ActivityResource
218
+ }).annotate({ identifier: "ActivityAccessDecision" });
219
+ const STUDIO_ACTIONS = [
220
+ ...DOCUMENT_ACTIONS,
221
+ ...MEDIA_ACTIONS,
222
+ "activity.read"
223
+ ];
224
+ const StudioAction = Schema.Literals(STUDIO_ACTIONS);
225
+ const StudioResource = Schema.Union([
226
+ DocumentAccessResource,
227
+ MediaResource,
228
+ ActivityResource
229
+ ]);
230
+ const StudioAccessDecision = Schema.Union([
231
+ DocumentAccessDecision,
232
+ MediaAccessDecision,
233
+ ActivityAccessDecision
234
+ ]);
235
+ var AuthenticationRequired = class extends Schema.TaggedError()("Studio.AuthenticationRequired", {}) {};
236
+ var StudioEntryDenied = class extends Schema.TaggedError()("Studio.EntryDenied", {}) {};
237
+ var AccessDenied = class extends Schema.TaggedError()("Studio.AccessDenied", {
238
+ action: StudioAction,
239
+ actorId: StudioActor.fields.id,
240
+ resource: StudioResource
241
+ }) {};
242
+
243
+ //#endregion
244
+ //#region ../protocol/src/Activity.ts
245
+ /**
246
+ * Immutable completed Activity facts. Pages are ordered newest-first; cursors are opaque,
247
+ * stable continuation tokens and an invalid cursor is a caller-visible failure.
248
+ */
249
+ const ActivityId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand("ActivityId"));
250
+ const ActivityCursor = Schema.NonEmptyString.pipe(Schema.brand("ActivityCursor"));
251
+ const ACTIVITY_ACTIONS = [
252
+ "document.created",
253
+ "document.updated",
254
+ "document.moved",
255
+ "document.trashed",
256
+ "document.revision.restored",
257
+ "document.untrashed",
258
+ "document.published",
259
+ "media.uploaded",
260
+ "media.replaced",
261
+ "media.removed",
262
+ "media.cleaned",
263
+ "user.created",
264
+ "user.removed",
265
+ "user.role.changed",
266
+ "user.sessions.revoked",
267
+ "authentication.signed-in",
268
+ "authentication.signed-out",
269
+ "authentication.password.changed",
270
+ "authentication.password.reset"
271
+ ];
272
+ const ActivityAction = Schema.Literals(ACTIVITY_ACTIONS);
273
+ const DocumentActivityTarget = Schema.Struct({
274
+ kind: Schema.tag("document"),
275
+ documentId: DocumentId
276
+ });
277
+ const MediaActivityTarget = Schema.Struct({
278
+ kind: Schema.tag("media"),
279
+ mediaId: MediaId
280
+ });
281
+ const MediaLibraryActivityTarget = Schema.Struct({ kind: Schema.tag("media-library") });
282
+ const ActivityTarget = Schema.Union([
283
+ DocumentActivityTarget,
284
+ MediaActivityTarget,
285
+ MediaLibraryActivityTarget,
286
+ Schema.Struct({
287
+ kind: Schema.tag("user"),
288
+ userId: Schema.NonEmptyString
289
+ })
290
+ ]).pipe(Schema.toTaggedUnion("kind"));
291
+ const ActivityTargetKind = Schema.Literals([
292
+ "document",
293
+ "media",
294
+ "media-library",
295
+ "user"
296
+ ]);
297
+ const ActivityContext = Schema.Struct({
298
+ actor: StudioActor,
299
+ requestId: RequestId,
300
+ reason: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(1e3)))
301
+ }).annotate({ identifier: "ActivityContext" });
302
+ const ActivityEntry = Schema.Struct({
303
+ id: ActivityId,
304
+ action: ActivityAction,
305
+ actor: StudioActor,
306
+ requestId: RequestId,
307
+ reason: ActivityContext.fields.reason,
308
+ target: ActivityTarget,
309
+ details: Schema.JsonObject,
310
+ occurredAt: Schema.DateTimeUtcFromString
311
+ }).annotate({ identifier: "ActivityEntry" });
312
+ const ActivityEntryDraft = Schema.Struct({
313
+ action: ActivityAction,
314
+ context: ActivityContext,
315
+ target: ActivityTarget,
316
+ details: Schema.JsonObject
317
+ }).annotate({ identifier: "ActivityEntryDraft" });
318
+ const ActivityQuery = Schema.Struct({
319
+ action: Schema.optionalKey(ActivityAction),
320
+ actorId: Schema.optionalKey(StudioActor.fields.id),
321
+ cursor: Schema.optionalKey(ActivityCursor),
322
+ limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({
323
+ minimum: 1,
324
+ maximum: 100
325
+ }))),
326
+ requestId: Schema.optionalKey(RequestId),
327
+ targetId: Schema.optionalKey(Schema.NonEmptyString),
328
+ targetKind: Schema.optionalKey(ActivityTargetKind)
329
+ }).annotate({ identifier: "ActivityQuery" });
330
+ const ActivityPage = Schema.Struct({
331
+ entries: Schema.Array(ActivityEntry),
332
+ nextCursor: Schema.optionalKey(ActivityCursor),
333
+ total: nonNegativeInt
334
+ }).annotate({ identifier: "ActivityPage" });
335
+ var ActivityCursorInvalid = class extends Schema.TaggedError()("Activity.CursorInvalid", {}) {};
336
+
337
+ //#endregion
338
+ //#region ../protocol/src/internal/documents/history.ts
339
+ const DocumentRevisionSummary = Schema.Struct({
340
+ action: DocumentRevisionAction,
341
+ activity: ActivityEntry,
342
+ createdAt: Schema.DateTimeUtcFromString,
343
+ documentId: DocumentId,
344
+ revisionId: RevisionId,
345
+ sourcePath: SourcePath,
346
+ version: DocumentVersion
347
+ }).annotate({ identifier: "DocumentRevisionSummary" });
348
+ const DocumentRevision = Schema.Struct({
349
+ ...DocumentRevisionSummary.fields,
350
+ markdown: Schema.String
351
+ }).annotate({ identifier: "DocumentRevision" });
352
+ const DocumentHistoryQuery = Schema.Struct({
353
+ documentId: DocumentId,
354
+ cursor: Schema.optionalKey(DocumentHistoryCursor),
355
+ limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({
356
+ minimum: 1,
357
+ maximum: 100
358
+ })))
359
+ }).annotate({ identifier: "DocumentHistoryQuery" });
360
+ const DocumentRevisionPage = Schema.Struct({
361
+ revisions: Schema.Array(DocumentRevisionSummary),
362
+ nextCursor: Schema.optionalKey(DocumentHistoryCursor),
363
+ total: nonNegativeInt
364
+ }).annotate({ identifier: "DocumentRevisionPage" });
365
+ const LineNumber = Schema.Int.check(Schema.isGreaterThan(0));
366
+ const DocumentRevisionChange = Schema.Union([
367
+ Schema.Struct({
368
+ kind: Schema.tag("equal"),
369
+ beforeLine: LineNumber,
370
+ afterLine: LineNumber,
371
+ line: Schema.String
372
+ }),
373
+ Schema.Struct({
374
+ kind: Schema.tag("added"),
375
+ afterLine: LineNumber,
376
+ line: Schema.String
377
+ }),
378
+ Schema.Struct({
379
+ kind: Schema.tag("removed"),
380
+ beforeLine: LineNumber,
381
+ line: Schema.String
382
+ })
383
+ ]).pipe(Schema.toTaggedUnion("kind"));
384
+ const CompareDocumentRevisionsInput = Schema.Struct({
385
+ documentId: DocumentId,
386
+ fromRevisionId: RevisionId,
387
+ toRevisionId: RevisionId
388
+ }).annotate({ identifier: "CompareDocumentRevisionsInput" });
389
+ const DocumentRevisionComparison = Schema.Struct({
390
+ from: DocumentRevision,
391
+ to: DocumentRevision,
392
+ changes: Schema.Array(DocumentRevisionChange)
393
+ }).annotate({ identifier: "DocumentRevisionComparison" });
394
+ var DocumentHistoryInvalidCursor = class extends Schema.TaggedError()("DocumentHistory.InvalidCursor", {}) {};
395
+ var DocumentHistoryComparisonTooLarge = class extends Schema.TaggedError()("DocumentHistory.ComparisonTooLarge", {
396
+ maximumEditLength: Schema.Int.check(Schema.isGreaterThan(0)),
397
+ maximumLines: Schema.Int.check(Schema.isGreaterThan(0))
398
+ }) {};
399
+
400
+ //#endregion
401
+ //#region ../protocol/src/Collaboration.ts
402
+ /**
403
+ * Collaboration handshake and WebSocket envelopes. Command results correlate by RequestId;
404
+ * checkpoints carry the durable state vector needed for retry and recovery.
405
+ */
406
+ const StateVector = Schema.String.check(Schema.isBase64()).pipe(Schema.brand("StateVector"));
407
+ const HttpErrorStatus = Schema.Int.check(Schema.isBetween({
408
+ minimum: 400,
409
+ maximum: 599
410
+ }));
411
+ const CollaborationUser = Schema.Struct({
412
+ color: Schema.NonEmptyString,
413
+ id: Schema.NonEmptyString,
414
+ name: Schema.NonEmptyString
415
+ });
416
+ const CollaborationTicket = Schema.Struct({
417
+ authoredStateVector: StateVector,
418
+ documentName: Schema.NonEmptyString,
419
+ source: DocumentSource,
420
+ token: Schema.NonEmptyString,
421
+ url: Schema.NonEmptyString,
422
+ user: CollaborationUser,
423
+ workingStateVector: StateVector
424
+ }).annotate({ identifier: "CollaborationTicket" });
425
+ const CollaborationPreview = DocumentValidationResult.pipe(Schema.fieldsAssign({
426
+ markdown: Schema.String,
427
+ preview: Schema.Struct({
428
+ body: CmsMarkdownDocument,
429
+ fallbacks: Schema.Record(Schema.String, Schema.String)
430
+ })
431
+ })).annotate({ identifier: "CollaborationPreview" });
432
+ const CheckpointMessage = Schema.Struct({ type: Schema.tag("checkpoint") });
433
+ const PreviewMessage = Schema.Struct({
434
+ type: Schema.tag("preview"),
435
+ requestId: RequestId
436
+ });
437
+ const PublishMessage = Schema.Struct({
438
+ type: Schema.tag("publish"),
439
+ requestId: RequestId
440
+ });
441
+ const CollaborationClientMessage = Schema.Union([
442
+ CheckpointMessage,
443
+ PreviewMessage,
444
+ PublishMessage
445
+ ]).pipe(Schema.toTaggedUnion("type"));
446
+ const requestFailure = {
447
+ error: Schema.NonEmptyString,
448
+ statusCode: HttpErrorStatus
449
+ };
450
+ const RequestFailure = Schema.Struct({
451
+ status: Schema.tag("failure"),
452
+ ...requestFailure
453
+ });
454
+ const PreviewOutcome = Schema.Union([Schema.Struct({
455
+ status: Schema.tag("success"),
456
+ result: CollaborationPreview
457
+ }), RequestFailure]).pipe(Schema.toTaggedUnion("status"));
458
+ const PublishCheckpoint = Schema.Struct({
459
+ authoredStateVector: StateVector,
460
+ result: Schema.optionalKey(DocumentMutationResult)
461
+ });
462
+ const PublishOutcome = Schema.Union([Schema.Struct({
463
+ status: Schema.tag("success"),
464
+ authoredStateVector: StateVector,
465
+ result: DocumentMutationResult
466
+ }), Schema.Struct({
467
+ status: Schema.tag("failure"),
468
+ ...requestFailure,
469
+ checkpoint: Schema.optionalKey(PublishCheckpoint)
470
+ })]).pipe(Schema.toTaggedUnion("status"));
471
+ const WorkingSavedMessage = Schema.Struct({
472
+ type: Schema.tag("working-saved"),
473
+ workingStateVector: StateVector
474
+ });
475
+ const WorkingSaveErrorMessage = Schema.Struct({
476
+ type: Schema.tag("working-save-error"),
477
+ error: Schema.NonEmptyString
478
+ });
479
+ const PreviewResultMessage = Schema.Struct({
480
+ type: Schema.tag("preview-result"),
481
+ requestId: RequestId,
482
+ outcome: PreviewOutcome
483
+ });
484
+ const PublishResultMessage = Schema.Struct({
485
+ type: Schema.tag("publish-result"),
486
+ requestId: RequestId,
487
+ outcome: PublishOutcome
488
+ });
489
+ const CollaborationServerMessage = Schema.Union([
490
+ WorkingSavedMessage,
491
+ WorkingSaveErrorMessage,
492
+ PreviewResultMessage,
493
+ PublishResultMessage
494
+ ]).pipe(Schema.toTaggedUnion("type"));
495
+
496
+ //#endregion
497
+ //#region ../protocol/src/Users.ts
498
+ /**
499
+ * User administration inputs, offset-paginated directory results, and caller-visible command
500
+ * failures. Commands carry no idempotency key; clients resolve ambiguous outcomes by listing again.
501
+ */
502
+ const UserEmail = Schema.NonEmptyString.check(Schema.isMaxLength(320), Schema.isPattern(/^[^\s@]+@[^\s@]+\.[^\s@]+$/u)).annotate({ identifier: "UserEmail" });
503
+ const UserName = Schema.NonEmptyString.check(Schema.isMaxLength(200)).annotate({ identifier: "UserName" });
504
+ const UserPassword = Schema.NonEmptyString.check(Schema.isMinLength(8), Schema.isMaxLength(200)).annotate({ identifier: "UserPassword" });
505
+ const User = Schema.Struct({
506
+ id: Schema.NonEmptyString,
507
+ email: UserEmail,
508
+ name: UserName,
509
+ role: Role,
510
+ emailVerified: Schema.Boolean,
511
+ banned: Schema.Boolean,
512
+ createdAt: Schema.DateTimeUtcFromString,
513
+ updatedAt: Schema.DateTimeUtcFromString
514
+ }).annotate({ identifier: "User" });
515
+ const UserPage = Schema.Struct({
516
+ users: Schema.Array(User),
517
+ total: nonNegativeInt
518
+ }).annotate({ identifier: "UserPage" });
519
+ const UserQuery = Schema.Struct({
520
+ limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({
521
+ minimum: 1,
522
+ maximum: 100
523
+ }))),
524
+ offset: Schema.optionalKey(nonNegativeInt),
525
+ search: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(200)))
526
+ }).annotate({ identifier: "UserQuery" });
527
+ const CreateUserInput = Schema.Struct({
528
+ email: UserEmail,
529
+ name: UserName,
530
+ password: UserPassword,
531
+ role: Role
532
+ }).annotate({ identifier: "CreateUserInput" });
533
+ var UserAlreadyExists = class extends Schema.TaggedError()("User.AlreadyExists", { email: UserEmail }) {};
534
+ var UserNotFound = class extends Schema.TaggedError()("User.NotFound", { userId: User.fields.id }) {};
535
+ var UserSelfRemovalDenied = class extends Schema.TaggedError()("User.SelfRemovalDenied", { userId: User.fields.id }) {};
536
+ var UserSelfRoleChangeDenied = class extends Schema.TaggedError()("User.SelfRoleChangeDenied", { userId: User.fields.id }) {};
537
+ var UserAdministrationDenied = class extends Schema.TaggedError()("UserAdministration.Denied", {}) {};
538
+
539
+ //#endregion
540
+ //#region ../protocol/src/Initialization.ts
541
+ /** Exclusive first-installation claim input, state, and caller-visible rejection failures. */
542
+ const InitializationInput = Schema.Struct({
543
+ email: UserEmail,
544
+ initializationToken: Schema.NonEmptyString.check(Schema.isMaxLength(512)),
545
+ name: UserName,
546
+ password: UserPassword
547
+ }).annotate({ identifier: "InitializationInput" });
548
+ const InitializationState = Schema.Struct({ needsAdministrator: Schema.Boolean }).annotate({ identifier: "InitializationState" });
549
+ var InitializationAlreadyCompleted = class extends Schema.TaggedError()("Initialization.AlreadyCompleted", {}) {};
550
+ var InitializationProofInvalid = class extends Schema.TaggedError()("Initialization.ProofInvalid", {}) {};
551
+
552
+ //#endregion
553
+ //#region ../protocol/src/internal/http/failures.ts
554
+ var StudioInternalError = class extends Schema.TaggedError()("Studio.InternalError", { message: Schema.Literal("The request could not be completed.") }) {};
555
+ function studioInternalError() {
556
+ return new StudioInternalError({ message: "The request could not be completed." });
557
+ }
558
+
559
+ //#endregion
560
+ //#region ../protocol/src/internal/http/delivery.ts
561
+ const DeliverySurroundPayload = Schema.Struct({
562
+ lookup: PublishedDocumentLookup,
563
+ query: PublishedDocumentSurroundQuery
564
+ }).annotate({ identifier: "DeliverySurroundPayload" });
565
+ const InternalError$1 = StudioInternalError.pipe(HttpApiSchema.status(500));
566
+ const PublishedNotFound = PublishedDocumentNotFound.pipe(HttpApiSchema.status(404));
567
+ const InvalidPreviewSession$1 = PreviewSessionInvalid.pipe(HttpApiSchema.status(401));
568
+ const PreviewDraftMissing = PreviewDraftNotFound.pipe(HttpApiSchema.status(404));
569
+ const PublishedDeliveryApi = HttpApiGroup.make("delivery").add(HttpApiEndpoint.post("read", "/read", {
570
+ payload: PublishedDocumentLookup,
571
+ success: CompiledDocument,
572
+ error: [PublishedNotFound, InternalError$1]
573
+ }), HttpApiEndpoint.post("query", "/query", {
574
+ payload: PublishedDocumentQuery,
575
+ success: PublishedDocumentPage,
576
+ error: InternalError$1
577
+ }), HttpApiEndpoint.post("navigation", "/navigation", {
578
+ payload: DocumentNavigationQuery,
579
+ success: Schema.Array(DocumentNavigationItem),
580
+ error: InternalError$1
581
+ }), HttpApiEndpoint.post("surround", "/surround", {
582
+ payload: DeliverySurroundPayload,
583
+ success: DocumentSurround,
584
+ error: [PublishedNotFound, InternalError$1]
585
+ })).prefix("/delivery");
586
+ const PreviewDeliveryApi = HttpApiGroup.make("previewDelivery").add(HttpApiEndpoint.post("resolve", "/preview/resolve", {
587
+ payload: PreviewDraftRequest,
588
+ success: CompiledDocument,
589
+ error: [
590
+ InvalidPreviewSession$1,
591
+ PreviewDraftMissing,
592
+ InternalError$1
593
+ ]
594
+ }), HttpApiEndpoint.post("invalidations", "/preview/invalidations", {
595
+ payload: PreviewSessionAccess,
596
+ success: HttpApiSchema.StreamSse({ data: PreviewInvalidation }),
597
+ error: [InvalidPreviewSession$1, InternalError$1]
598
+ }));
599
+
600
+ //#endregion
601
+ //#region ../protocol/src/StudioHttp.ts
602
+ /**
603
+ * Studio HTTP paths, middleware contracts, payloads, and the composed CMS API. Every expected
604
+ * caller failure is a tagged schema with an explicit status; unclassified failures become the
605
+ * deliberately opaque `StudioInternalError`.
606
+ */
607
+ const ApiVersion = Schema.NonEmptyString.pipe(Schema.brand("ApiVersion"));
608
+ const StudioBootstrap = Schema.Struct({
609
+ basePath: PublicPath,
610
+ components: Schema.Array(ComponentDefinition),
611
+ documents: DocumentConfiguration,
612
+ media: MediaConfiguration,
613
+ version: ApiVersion
614
+ }).annotate({ identifier: "StudioBootstrap" });
615
+ var StudioBadRequest = class extends Schema.TaggedError()("Studio.BadRequest", { kind: Schema.Literals([
616
+ "Headers",
617
+ "Params",
618
+ "Payload",
619
+ "Query"
620
+ ]) }) {};
621
+ var StudioRequestConflict = class extends Schema.TaggedError()("Studio.RequestConflict", { retryable: Schema.Literal(true) }) {};
622
+ var StudioSchemaError = class extends HttpApiMiddleware.Service()("@internal/protocol/StudioSchemaError", { error: [StudioBadRequest.pipe(HttpApiSchema.status(400)), StudioInternalError.pipe(HttpApiSchema.status(500))] }) {};
623
+ var CurrentStudioRequest = class extends Context.Service()("@internal/protocol/CurrentStudioRequest") {};
624
+ var StudioAuthentication = class extends HttpApiMiddleware.Service()("@internal/protocol/StudioAuthentication", { error: [
625
+ AuthenticationRequired.pipe(HttpApiSchema.status(401)),
626
+ StudioEntryDenied.pipe(HttpApiSchema.status(403)),
627
+ StudioInternalError.pipe(HttpApiSchema.status(500))
628
+ ] }) {};
629
+ const UpdateDocumentPayload = Schema.Struct({
630
+ expectedVersion: UpdateDocumentInput.fields.expectedVersion,
631
+ markdown: UpdateDocumentInput.fields.markdown
632
+ });
633
+ const MoveDocumentPayload = Schema.Struct({
634
+ expectedVersion: MoveDocumentInput.fields.expectedVersion,
635
+ location: MoveDocumentInput.fields.location
636
+ });
637
+ const PublishDocumentPayload = Schema.Struct({ expectedVersion: PublishDocumentInput.fields.expectedVersion });
638
+ const RemoveDocumentPayload = Schema.Struct({ expectedVersion: RemoveDocumentInput.fields.expectedVersion });
639
+ const RestoreDocumentPayload = Schema.Struct({
640
+ expectedVersion: RestoreDocumentInput.fields.expectedVersion,
641
+ revisionId: RestoreDocumentInput.fields.revisionId
642
+ });
643
+ const UndeleteDocumentPayload = Schema.Struct({ expectedVersion: UndeleteDocumentInput.fields.expectedVersion });
644
+ const ChangeRolePayload = Schema.Struct({ role: Role }).annotate({ identifier: "ChangeRolePayload" });
645
+ const MediaUploadQuery = Schema.Struct({
646
+ declaredByteSize: MediaUpload.fields.declaredByteSize,
647
+ folder: Schema.optionalKey(MediaFolder)
648
+ }).annotate({ identifier: "MediaUploadQuery" });
649
+ const MediaUploadPayload = Schema.Struct({ file: Multipart.SingleFileSchema }).pipe(HttpApiSchema.asMultipartStream({ maxParts: 1 }));
650
+ const NotFound = DocumentNotFound.pipe(HttpApiSchema.status(404));
651
+ const VersionConflict = DocumentVersionConflict.pipe(HttpApiSchema.status(409));
652
+ const Conflict = Schema.Union([
653
+ DocumentMediaUnavailable,
654
+ DocumentPathConflict,
655
+ DocumentVersionConflict
656
+ ]).pipe(HttpApiSchema.status(409));
657
+ const ValidationFailed = DocumentValidationFailed.pipe(HttpApiSchema.status(422));
658
+ const RequestConflict = StudioRequestConflict.pipe(HttpApiSchema.status(409));
659
+ const InternalError = StudioInternalError.pipe(HttpApiSchema.status(500));
660
+ const Forbidden = AccessDenied.pipe(HttpApiSchema.status(403));
661
+ const MutationErrors = [
662
+ NotFound,
663
+ Conflict,
664
+ ValidationFailed,
665
+ RequestConflict,
666
+ Forbidden,
667
+ InternalError
668
+ ];
669
+ const MediaNotFoundResponse = MediaNotFound.pipe(HttpApiSchema.status(404));
670
+ const MediaInvalidQuery = MediaInvalid.pipe(HttpApiSchema.status(400));
671
+ const MediaInvalidUpload = MediaInvalid.pipe(HttpApiSchema.status(422));
672
+ const MediaTooLargeResponse = MediaTooLarge.pipe(HttpApiSchema.status(413));
673
+ const MediaReferencedResponse = MediaReferenced.pipe(HttpApiSchema.status(409));
674
+ const MediaConflictResponse = MediaConflict.pipe(HttpApiSchema.status(409));
675
+ const InvalidActivityCursor = ActivityCursorInvalid.pipe(HttpApiSchema.status(400));
676
+ const InvalidHistoryCursor = DocumentHistoryInvalidCursor.pipe(HttpApiSchema.status(400));
677
+ const HistoryComparisonTooLarge = DocumentHistoryComparisonTooLarge.pipe(HttpApiSchema.status(422));
678
+ const AlreadyInitialized = InitializationAlreadyCompleted.pipe(HttpApiSchema.status(409));
679
+ const InitializationProofRejected = InitializationProofInvalid.pipe(HttpApiSchema.status(403));
680
+ const UserAdministrationForbidden = UserAdministrationDenied.pipe(HttpApiSchema.status(403));
681
+ const UserDuplicate = UserAlreadyExists.pipe(HttpApiSchema.status(409));
682
+ const MissingUser = UserNotFound.pipe(HttpApiSchema.status(404));
683
+ const UserSelfRemoval = UserSelfRemovalDenied.pipe(HttpApiSchema.status(409));
684
+ const UserSelfRoleChange = UserSelfRoleChangeDenied.pipe(HttpApiSchema.status(409));
685
+ const InvalidPreviewSession = PreviewSessionInvalid.pipe(HttpApiSchema.status(401));
686
+ const StudioDocumentsApi = HttpApiGroup.make("documents").add(HttpApiEndpoint.get("browse", "/", {
687
+ query: DocumentBrowseQuery,
688
+ success: Schema.Array(DocumentSummary),
689
+ error: [Forbidden, InternalError]
690
+ }), HttpApiEndpoint.get("trash", "/trash", {
691
+ success: Schema.Array(DeletedDocument),
692
+ error: [Forbidden, InternalError]
693
+ }), HttpApiEndpoint.get("read", "/:documentId", {
694
+ params: { documentId: DocumentId },
695
+ success: DocumentSource,
696
+ error: [
697
+ NotFound,
698
+ Forbidden,
699
+ InternalError
700
+ ]
701
+ }), HttpApiEndpoint.post("create", "/", {
702
+ payload: CreateDocumentInput,
703
+ success: DocumentMutationResult.pipe(HttpApiSchema.status(201)),
704
+ error: MutationErrors
705
+ }), HttpApiEndpoint.put("update", "/:documentId", {
706
+ params: { documentId: DocumentId },
707
+ payload: UpdateDocumentPayload,
708
+ success: DocumentMutationResult,
709
+ error: MutationErrors
710
+ }), HttpApiEndpoint.post("validate", "/:documentId/validate", {
711
+ params: { documentId: DocumentId },
712
+ payload: UpdateDocumentPayload,
713
+ success: DocumentValidationResult,
714
+ error: [
715
+ NotFound,
716
+ VersionConflict,
717
+ Forbidden,
718
+ InternalError
719
+ ]
720
+ }), HttpApiEndpoint.post("move", "/:documentId/move", {
721
+ params: { documentId: DocumentId },
722
+ payload: MoveDocumentPayload,
723
+ success: DocumentMutationResult,
724
+ error: MutationErrors
725
+ }), HttpApiEndpoint.post("publish", "/:documentId/publish", {
726
+ params: { documentId: DocumentId },
727
+ payload: PublishDocumentPayload,
728
+ success: DocumentMutationResult,
729
+ error: MutationErrors
730
+ }), HttpApiEndpoint.post("remove", "/:documentId/remove", {
731
+ params: { documentId: DocumentId },
732
+ payload: RemoveDocumentPayload,
733
+ success: DocumentMutationResult,
734
+ error: MutationErrors
735
+ }), HttpApiEndpoint.post("restore", "/:documentId/restore", {
736
+ params: { documentId: DocumentId },
737
+ payload: RestoreDocumentPayload,
738
+ success: DocumentMutationResult,
739
+ error: MutationErrors
740
+ }), HttpApiEndpoint.post("undelete", "/:documentId/undelete", {
741
+ params: { documentId: DocumentId },
742
+ payload: UndeleteDocumentPayload,
743
+ success: DocumentMutationResult,
744
+ error: MutationErrors
745
+ })).middleware(StudioAuthentication).prefix("/documents");
746
+ const StudioMediaApi = HttpApiGroup.make("media").add(HttpApiEndpoint.get("search", "/", {
747
+ query: MediaQuery,
748
+ success: MediaPage,
749
+ error: [
750
+ MediaInvalidQuery,
751
+ Forbidden,
752
+ InternalError
753
+ ]
754
+ }), HttpApiEndpoint.post("upload", "/", {
755
+ query: MediaUploadQuery,
756
+ payload: MediaUploadPayload,
757
+ success: MediaAsset.pipe(HttpApiSchema.status(201)),
758
+ error: [
759
+ MediaInvalidUpload,
760
+ MediaTooLargeResponse,
761
+ Forbidden,
762
+ InternalError
763
+ ]
764
+ }), HttpApiEndpoint.put("replace", "/:mediaId", {
765
+ params: { mediaId: MediaId },
766
+ query: MediaUploadQuery,
767
+ payload: MediaUploadPayload,
768
+ success: MediaAsset,
769
+ error: [
770
+ MediaNotFoundResponse,
771
+ MediaConflictResponse,
772
+ MediaInvalidUpload,
773
+ MediaTooLargeResponse,
774
+ Forbidden,
775
+ InternalError
776
+ ]
777
+ }), HttpApiEndpoint.post("cleanup", "/cleanup", {
778
+ success: MediaCleanupReport,
779
+ error: [Forbidden, InternalError]
780
+ }), HttpApiEndpoint.get("integrity", "/integrity", {
781
+ success: MediaIntegrityReport,
782
+ error: [Forbidden, InternalError]
783
+ }), HttpApiEndpoint.get("get", "/:mediaId", {
784
+ params: { mediaId: MediaId },
785
+ success: MediaAsset,
786
+ error: [
787
+ MediaNotFoundResponse,
788
+ Forbidden,
789
+ InternalError
790
+ ]
791
+ }), HttpApiEndpoint.delete("remove", "/:mediaId", {
792
+ params: { mediaId: MediaId },
793
+ success: HttpApiSchema.NoContent,
794
+ error: [
795
+ MediaNotFoundResponse,
796
+ MediaConflictResponse,
797
+ MediaReferencedResponse,
798
+ Forbidden,
799
+ InternalError
800
+ ]
801
+ })).middleware(StudioAuthentication).prefix("/media");
802
+ const StudioConfigurationApi = HttpApiGroup.make("configuration").add(HttpApiEndpoint.get("bootstrap", "/bootstrap", { success: StudioBootstrap })).middleware(StudioAuthentication);
803
+ const StudioSessionApi = HttpApiGroup.make("session").add(HttpApiEndpoint.get("current", "/session", { success: StudioActor })).middleware(StudioAuthentication);
804
+ const InitializationApi = HttpApiGroup.make("initialization").add(HttpApiEndpoint.get("status", "/initialization", {
805
+ success: InitializationState,
806
+ error: InternalError
807
+ }), HttpApiEndpoint.post("claim", "/initialization", {
808
+ payload: InitializationInput,
809
+ success: User.pipe(HttpApiSchema.status(201)),
810
+ error: [
811
+ AlreadyInitialized,
812
+ InitializationProofRejected,
813
+ InternalError
814
+ ]
815
+ }));
816
+ const StudioDiagnosticsApi = HttpApiGroup.make("diagnostics").add(HttpApiEndpoint.get("documents", "/diagnostics/documents", {
817
+ success: Schema.Array(DocumentIssue),
818
+ error: [Forbidden, InternalError]
819
+ })).middleware(StudioAuthentication);
820
+ const StudioPreviewSessionsApi = HttpApiGroup.make("previewSessions").add(HttpApiEndpoint.post("issue", "/preview/sessions", {
821
+ payload: PreviewSessionRequest,
822
+ success: PreviewSession.pipe(HttpApiSchema.status(201)),
823
+ error: [InvalidPreviewSession, InternalError]
824
+ })).middleware(StudioAuthentication);
825
+ const StudioHistoryApi = HttpApiGroup.make("history").add(HttpApiEndpoint.get("list", "/", {
826
+ query: DocumentHistoryQuery,
827
+ success: DocumentRevisionPage,
828
+ error: [
829
+ InvalidHistoryCursor,
830
+ Forbidden,
831
+ InternalError
832
+ ]
833
+ }), HttpApiEndpoint.get("read", "/:documentId/:revisionId", {
834
+ params: {
835
+ documentId: DocumentId,
836
+ revisionId: DocumentRevision.fields.revisionId
837
+ },
838
+ success: DocumentRevision,
839
+ error: [
840
+ NotFound,
841
+ Forbidden,
842
+ InternalError
843
+ ]
844
+ }), HttpApiEndpoint.post("compare", "/compare", {
845
+ payload: CompareDocumentRevisionsInput,
846
+ success: DocumentRevisionComparison,
847
+ error: [
848
+ NotFound,
849
+ HistoryComparisonTooLarge,
850
+ Forbidden,
851
+ InternalError
852
+ ]
853
+ })).middleware(StudioAuthentication).prefix("/history");
854
+ const StudioActivityApi = HttpApiGroup.make("activity").add(HttpApiEndpoint.get("list", "/", {
855
+ query: ActivityQuery,
856
+ success: ActivityPage,
857
+ error: [
858
+ InvalidActivityCursor,
859
+ Forbidden,
860
+ InternalError
861
+ ]
862
+ })).middleware(StudioAuthentication).prefix("/activity");
863
+ const StudioUserAdministrationApi = HttpApiGroup.make("users").add(HttpApiEndpoint.get("list", "/", {
864
+ query: UserQuery,
865
+ success: UserPage,
866
+ error: [UserAdministrationForbidden, InternalError]
867
+ }), HttpApiEndpoint.post("create", "/", {
868
+ payload: CreateUserInput,
869
+ success: User.pipe(HttpApiSchema.status(201)),
870
+ error: [
871
+ UserDuplicate,
872
+ UserAdministrationForbidden,
873
+ InternalError
874
+ ]
875
+ }), HttpApiEndpoint.post("changeRole", "/:userId/role", {
876
+ params: { userId: User.fields.id },
877
+ payload: ChangeRolePayload,
878
+ success: User,
879
+ error: [
880
+ MissingUser,
881
+ UserSelfRoleChange,
882
+ UserAdministrationForbidden,
883
+ InternalError
884
+ ]
885
+ }), HttpApiEndpoint.post("revokeSessions", "/:userId/sessions/revoke", {
886
+ params: { userId: User.fields.id },
887
+ success: User,
888
+ error: [
889
+ MissingUser,
890
+ UserAdministrationForbidden,
891
+ InternalError
892
+ ]
893
+ }), HttpApiEndpoint.delete("remove", "/:userId", {
894
+ params: { userId: User.fields.id },
895
+ success: User,
896
+ error: [
897
+ MissingUser,
898
+ UserSelfRemoval,
899
+ UserAdministrationForbidden,
900
+ InternalError
901
+ ]
902
+ })).middleware(StudioAuthentication).prefix("/users");
903
+ const StudioCollaborationApi = HttpApiGroup.make("collaboration").add(HttpApiEndpoint.post("ticket", "/:documentId/ticket", {
904
+ params: { documentId: DocumentId },
905
+ success: CollaborationTicket,
906
+ error: [
907
+ NotFound,
908
+ Forbidden,
909
+ InternalError
910
+ ]
911
+ })).middleware(StudioAuthentication).prefix("/collaboration");
912
+ var StudioApi = class extends HttpApi.make("StudioApi").add(InitializationApi, PublishedDeliveryApi, StudioConfigurationApi, StudioSessionApi, StudioDiagnosticsApi, StudioPreviewSessionsApi, PreviewDeliveryApi, StudioDocumentsApi, StudioHistoryApi, StudioActivityApi, StudioUserAdministrationApi, StudioMediaApi, StudioCollaborationApi).middleware(StudioSchemaError).prefix(STUDIO_API_PATH) {};
913
+
914
+ //#endregion
915
+ export { DocumentVersionConflict as $, ACTIVITY_ACTIONS as A, ActivityTargetKind as B, CollaborationTicket as C, DocumentRevision as D, DocumentHistoryInvalidCursor as E, ActivityEntry as F, Role as G, AuthenticationRequired as H, ActivityEntryDraft as I, StudioRequestContext as J, StudioActor as K, ActivityId as L, ActivityContext as M, ActivityCursor as N, DocumentRevisionComparison as O, ActivityCursorInvalid as P, DocumentValidationFailed as Q, ActivityPage as R, CollaborationServerMessage as S, DocumentHistoryComparisonTooLarge as T, DOCUMENT_ACTIONS as U, AccessDenied as V, MEDIA_ACTIONS as W, DocumentNotFound as X, DocumentMediaUnavailable as Y, DocumentPathConflict as Z, UserNotFound as _, MediaStatus as _t, StudioBootstrap as a, MediaConflict as at, UserSelfRoleChangeDenied as b, StudioInternalError as c, MediaId as ct, InitializationProofInvalid as d, MediaName as dt, PublishedDocumentNotFound as et, InitializationState as f, MediaNotFound as ft, UserAlreadyExists as g, MediaReferenced as gt, UserAdministrationDenied as h, MediaReference as ht, StudioBadRequest as i, MediaCleanupReport as it, ActivityAction as j, DocumentRevisionPage as k, studioInternalError as l, MediaIntegrityReport as lt, User as m, MediaPage as mt, StudioApi as n, MediaAsset as nt, StudioRequestConflict as o, MediaCursor as ot, CreateUserInput as p, MediaObjectKey as pt, StudioEntryDenied as q, StudioAuthentication as r, MediaByteSize as rt, StudioSchemaError as s, MediaFolder as st, CurrentStudioRequest as t, ImageMimeType as tt, InitializationAlreadyCompleted as u, MediaInvalid as ut, UserPage as v, MediaTooLarge as vt, StateVector as w, CollaborationClientMessage as x, UserSelfRemovalDenied as y, MediaUpload as yt, ActivityTarget as z };
916
+ //# sourceMappingURL=StudioHttp-BTLLooh0.js.map