@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 @@
1
+ {"version":3,"file":"StudioHttp-BTLLooh0.js","names":["InternalError","InvalidPreviewSession"],"sources":["../../../../protocol/src/Media.ts","../../../../protocol/src/internal/documents/errors.ts","../../../../protocol/src/AccessControl.ts","../../../../protocol/src/Activity.ts","../../../../protocol/src/internal/documents/history.ts","../../../../protocol/src/Collaboration.ts","../../../../protocol/src/Users.ts","../../../../protocol/src/Initialization.ts","../../../../protocol/src/internal/http/failures.ts","../../../../protocol/src/internal/http/delivery.ts","../../../../protocol/src/StudioHttp.ts"],"sourcesContent":["/**\n * Media wire models. Search pages are newest-first with opaque continuation cursors; only ready\n * assets are public results, and names, folders, and object keys are validated path-safe values.\n */\nimport { Schema } from 'effect'\nimport { DocumentId, PublicPath, SourcePath } from './internal/documents/scalars'\nimport { nonNegativeInt } from './internal/scalars'\n\nconst hasUnsafeMediaCharacter = (value: string): boolean => {\n for (const character of value) {\n const codePoint = character.codePointAt(0)\n if (character === '\\\\' || (codePoint !== undefined && (codePoint <= 31 || codePoint === 127))) return true\n }\n return false\n}\n\nconst isSafeMediaPath = (value: string, allowEmpty: boolean): boolean => {\n if (value.length === 0) return allowEmpty\n if (value !== value.trim() || value.startsWith('/') || value.endsWith('/') || hasUnsafeMediaCharacter(value)) {\n return false\n }\n return value.split('/').every((segment) => segment.length > 0 && segment !== '.' && segment !== '..')\n}\n\nconst safeMediaFolder = Schema.makeFilter<string>((value) => isSafeMediaPath(value, true), {\n expected: 'a provider-relative media folder without traversal segments',\n})\n\nconst safeMediaObjectKey = Schema.makeFilter<string>((value) => isSafeMediaPath(value, false), {\n expected: 'a non-empty provider-relative media object key without traversal segments',\n})\n\nconst safeMediaName = Schema.makeFilter<string>(\n (value) =>\n value.length > 0 &&\n value.length <= 255 &&\n value === value.trim() &&\n value !== '.' &&\n value !== '..' &&\n !value.includes('/') &&\n !hasUnsafeMediaCharacter(value),\n { expected: 'a safe media file name of at most 255 characters' },\n)\n\nexport const MediaId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('MediaId'))\nexport type MediaId = typeof MediaId.Type\n\nexport const MediaFolder = Schema.String.check(Schema.isMaxLength(512), safeMediaFolder).pipe(\n Schema.brand('MediaFolder'),\n)\nexport type MediaFolder = typeof MediaFolder.Type\n\nexport const MediaObjectKey = Schema.String.check(Schema.isMaxLength(1024), safeMediaObjectKey).pipe(\n Schema.brand('MediaObjectKey'),\n)\nexport type MediaObjectKey = typeof MediaObjectKey.Type\n\nexport const MediaName = Schema.String.check(safeMediaName).pipe(Schema.brand('MediaName'))\nexport type MediaName = typeof MediaName.Type\n\nexport const MediaCursor = Schema.NonEmptyString.pipe(Schema.brand('MediaCursor'))\nexport type MediaCursor = typeof MediaCursor.Type\n\nexport const ImageMimeType = Schema.Literals(['image/avif', 'image/gif', 'image/jpeg', 'image/png', 'image/webp'])\nexport type ImageMimeType = typeof ImageMimeType.Type\n\nexport const MediaStatus = Schema.Literals(['uploading', 'ready', 'deleting'])\nexport type MediaStatus = typeof MediaStatus.Type\n\nexport const MediaByteSize = Schema.Int.check(Schema.isGreaterThan(0))\nexport type MediaByteSize = typeof MediaByteSize.Type\n\nexport const MediaAsset = Schema.Struct({\n kind: Schema.tag('image'),\n id: MediaId,\n objectKey: MediaObjectKey,\n url: Schema.NonEmptyString,\n name: MediaName,\n folder: MediaFolder,\n mimeType: ImageMimeType,\n byteSize: MediaByteSize,\n createdAt: Schema.DateTimeUtcFromString,\n updatedAt: Schema.DateTimeUtcFromString,\n status: MediaStatus,\n}).annotate({ identifier: 'MediaAsset' })\nexport interface MediaAsset extends Schema.Schema.Type<typeof MediaAsset> {}\n\nexport const MediaUpload = Schema.Struct({\n name: MediaName,\n folder: Schema.optionalKey(MediaFolder),\n declaredMimeType: Schema.optionalKey(Schema.NonEmptyString),\n declaredByteSize: MediaByteSize,\n}).annotate({ identifier: 'MediaUpload' })\nexport interface MediaUpload extends Schema.Schema.Type<typeof MediaUpload> {}\n\nexport const MediaQuery = Schema.Struct({\n cursor: Schema.optionalKey(MediaCursor),\n folder: Schema.optionalKey(MediaFolder),\n search: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(200))),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n}).annotate({ identifier: 'MediaQuery' })\nexport interface MediaQuery extends Schema.Schema.Type<typeof MediaQuery> {}\n\nconst ReadyMediaAssets = Schema.Array(MediaAsset).check(\n Schema.makeFilter((assets) => assets.every((asset) => asset.status === 'ready'), {\n expected: 'media assets whose lifecycle status is ready',\n }),\n)\n\nexport const MediaPage = Schema.Struct({\n assets: ReadyMediaAssets,\n folders: Schema.Array(MediaFolder),\n nextCursor: Schema.optionalKey(MediaCursor),\n total: nonNegativeInt,\n}).annotate({ identifier: 'MediaPage' })\nexport interface MediaPage extends Schema.Schema.Type<typeof MediaPage> {}\n\nexport const MediaReference = Schema.Struct({\n documentId: DocumentId,\n path: PublicPath,\n sourcePath: SourcePath,\n objectKey: MediaObjectKey,\n nodePath: Schema.Array(nonNegativeInt),\n}).annotate({ identifier: 'MediaReference' })\nexport interface MediaReference extends Schema.Schema.Type<typeof MediaReference> {}\n\nconst MediaObjectMismatch = Schema.Struct({\n asset: MediaAsset,\n storedByteSize: MediaByteSize,\n storedMimeType: Schema.optionalKey(ImageMimeType),\n}).annotate({ identifier: 'MediaObjectMismatch' })\n\nexport const MediaIntegrityReport = Schema.Struct({\n missingAssets: Schema.Array(MediaReference),\n missingObjects: Schema.Array(MediaAsset),\n mismatchedObjects: Schema.Array(MediaObjectMismatch),\n orphanedObjectKeys: Schema.Array(MediaObjectKey),\n unusedAssets: Schema.Array(MediaAsset),\n}).annotate({ identifier: 'MediaIntegrityReport' })\nexport interface MediaIntegrityReport extends Schema.Schema.Type<typeof MediaIntegrityReport> {}\n\nexport const MediaCleanupReport = Schema.Struct({\n removedObjectKeys: Schema.Array(MediaObjectKey),\n}).annotate({ identifier: 'MediaCleanupReport' })\nexport interface MediaCleanupReport extends Schema.Schema.Type<typeof MediaCleanupReport> {}\n\nexport class MediaNotFound extends Schema.TaggedError<MediaNotFound>()('Media.NotFound', {\n mediaId: MediaId,\n}) {}\n\nexport class MediaReferenced extends Schema.TaggedError<MediaReferenced>()('Media.Referenced', {\n mediaId: MediaId,\n references: Schema.Array(MediaReference),\n}) {}\n\nexport class MediaConflict extends Schema.TaggedError<MediaConflict>()('Media.Conflict', {\n mediaId: MediaId,\n}) {}\n\nexport class MediaInvalid extends Schema.TaggedError<MediaInvalid>()('Media.Invalid', {\n message: Schema.NonEmptyString,\n}) {}\n\nexport class MediaTooLarge extends Schema.TaggedError<MediaTooLarge>()('Media.TooLarge', {\n declaredByteSize: MediaByteSize,\n maxUploadBytes: MediaByteSize,\n}) {}\n","import { Schema } from 'effect'\nimport { DocumentIssue, PublishedDocumentLookup } from './models'\nimport { DocumentId, DocumentVersion, RevisionId, SourcePath } from './scalars'\nimport { MediaObjectKey } from '../../Media'\n\nexport class DocumentNotFound extends Schema.TaggedError<DocumentNotFound>()('Document.NotFound', {\n documentId: DocumentId,\n revisionId: Schema.optionalKey(RevisionId),\n}) {}\n\nexport class DocumentPathConflict extends Schema.TaggedError<DocumentPathConflict>()('Document.PathConflict', {\n sourcePath: SourcePath,\n}) {}\n\nexport class DocumentVersionConflict extends Schema.TaggedError<DocumentVersionConflict>()('Document.VersionConflict', {\n documentId: DocumentId,\n expectedVersion: DocumentVersion,\n actualVersion: DocumentVersion,\n}) {}\n\nexport class DocumentMediaUnavailable extends Schema.TaggedError<DocumentMediaUnavailable>()(\n 'Document.MediaUnavailable',\n {\n documentId: DocumentId,\n mediaKeys: Schema.Array(MediaObjectKey).check(Schema.isMinLength(1)),\n },\n) {}\n\nexport class DocumentValidationFailed extends Schema.TaggedError<DocumentValidationFailed>()(\n 'Document.ValidationFailed',\n {\n issues: Schema.Array(DocumentIssue),\n },\n) {}\n\nexport class PublishedDocumentNotFound extends Schema.TaggedError<PublishedDocumentNotFound>()(\n 'PublishedDocument.NotFound',\n { lookup: PublishedDocumentLookup },\n) {}\n","/** Wire-visible Studio actors, request identity, roles, access decisions, and denials. */\nimport { Schema } from 'effect'\nimport { RequestId } from './Identity'\nimport { CollectionName, Locale } from './internal/configuration/scalars'\nimport { DocumentId } from './internal/documents/scalars'\nimport { MediaFolder, MediaId } from './Media'\n\nexport const ROLES = ['administrator', 'editor', 'viewer'] as const\n\nexport const Role = Schema.Literals(ROLES)\nexport type Role = typeof Role.Type\n\nexport const StudioActor = Schema.Struct({\n id: Schema.NonEmptyString,\n email: Schema.NonEmptyString,\n name: Schema.NonEmptyString,\n // Provider roles remain visible, while access control recognizes only Role values.\n roles: Schema.Array(Schema.NonEmptyString),\n}).annotate({ identifier: 'StudioActor' })\nexport interface StudioActor extends Schema.Schema.Type<typeof StudioActor> {}\n\nexport const StudioRequestContext = Schema.Struct({\n actor: StudioActor,\n requestId: RequestId,\n}).annotate({ identifier: 'StudioRequestContext' })\nexport interface StudioRequestContext extends Schema.Schema.Type<typeof StudioRequestContext> {}\n\nexport const DOCUMENT_ACTIONS = [\n 'document.browse',\n 'document.read',\n 'document.trash',\n 'document.validate',\n 'document.create',\n 'document.update',\n 'document.move',\n 'document.remove',\n 'document.restore',\n 'document.undelete',\n 'document.publish',\n 'document.history',\n] as const\n\nconst DocumentAction = Schema.Literals(DOCUMENT_ACTIONS)\n\nconst DocumentCatalogResource = Schema.Struct({\n kind: Schema.tag('catalog'),\n})\n\nconst CollectionResource = Schema.Struct({\n kind: Schema.tag('collection'),\n collection: CollectionName,\n locale: Schema.optionalKey(Locale),\n})\n\nconst DocumentResource = Schema.Struct({\n kind: Schema.tag('document'),\n documentId: DocumentId,\n})\n\nconst DocumentAccessResource = Schema.Union([DocumentCatalogResource, CollectionResource, DocumentResource]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport const DocumentAccessDecision = Schema.Struct({\n action: DocumentAction,\n resource: DocumentAccessResource,\n}).annotate({ identifier: 'DocumentAccessDecision' })\nexport interface DocumentAccessDecision extends Schema.Schema.Type<typeof DocumentAccessDecision> {}\n\nexport const MEDIA_ACTIONS = [\n 'media.read',\n 'media.search',\n 'media.integrity',\n 'media.upload',\n 'media.replace',\n 'media.remove',\n 'media.cleanup',\n] as const\n\nconst MediaAction = Schema.Literals(MEDIA_ACTIONS)\n\nconst MediaCatalogResource = Schema.Struct({\n kind: Schema.tag('media-catalog'),\n})\n\nconst MediaAssetResource = Schema.Struct({\n kind: Schema.tag('media-asset'),\n mediaId: MediaId,\n})\n\nconst MediaFolderResource = Schema.Struct({\n kind: Schema.tag('media-folder'),\n folder: MediaFolder,\n})\n\nconst MediaResource = Schema.Union([MediaCatalogResource, MediaAssetResource, MediaFolderResource]).pipe(\n Schema.toTaggedUnion('kind'),\n)\n\nexport const MediaAccessDecision = Schema.Struct({\n action: MediaAction,\n resource: MediaResource,\n}).annotate({ identifier: 'MediaAccessDecision' })\nexport interface MediaAccessDecision extends Schema.Schema.Type<typeof MediaAccessDecision> {}\n\nconst ActivityResource = Schema.Struct({\n kind: Schema.tag('activity'),\n})\n\nconst ActivityAccessDecision = Schema.Struct({\n action: Schema.Literal('activity.read'),\n resource: ActivityResource,\n}).annotate({ identifier: 'ActivityAccessDecision' })\n\nconst STUDIO_ACTIONS = [...DOCUMENT_ACTIONS, ...MEDIA_ACTIONS, 'activity.read'] as const\n\nexport const StudioAction = Schema.Literals(STUDIO_ACTIONS)\nexport type StudioAction = typeof StudioAction.Type\n\nconst StudioResource = Schema.Union([DocumentAccessResource, MediaResource, ActivityResource])\n\nexport const StudioAccessDecision = Schema.Union([DocumentAccessDecision, MediaAccessDecision, ActivityAccessDecision])\nexport type StudioAccessDecision = typeof StudioAccessDecision.Type\n\nexport class AuthenticationRequired extends Schema.TaggedError<AuthenticationRequired>()(\n 'Studio.AuthenticationRequired',\n {},\n) {}\n\nexport class StudioEntryDenied extends Schema.TaggedError<StudioEntryDenied>()('Studio.EntryDenied', {}) {}\n\nexport class AccessDenied extends Schema.TaggedError<AccessDenied>()('Studio.AccessDenied', {\n action: StudioAction,\n actorId: StudioActor.fields.id,\n resource: StudioResource,\n}) {}\n","/**\n * Immutable completed Activity facts. Pages are ordered newest-first; cursors are opaque,\n * stable continuation tokens and an invalid cursor is a caller-visible failure.\n */\nimport { Schema } from 'effect'\nimport { StudioActor } from './AccessControl'\nimport { DocumentId } from './internal/documents/scalars'\nimport { nonNegativeInt } from './internal/scalars'\nimport { RequestId } from './Identity'\nimport { MediaId } from './Media'\n\nexport const ActivityId = Schema.String.check(Schema.isUUID()).pipe(Schema.brand('ActivityId'))\nexport type ActivityId = typeof ActivityId.Type\n\nexport const ActivityCursor = Schema.NonEmptyString.pipe(Schema.brand('ActivityCursor'))\nexport type ActivityCursor = typeof ActivityCursor.Type\n\nexport const ACTIVITY_ACTIONS = [\n 'document.created',\n 'document.updated',\n 'document.moved',\n 'document.trashed',\n 'document.revision.restored',\n 'document.untrashed',\n 'document.published',\n 'media.uploaded',\n 'media.replaced',\n 'media.removed',\n 'media.cleaned',\n 'user.created',\n 'user.removed',\n 'user.role.changed',\n 'user.sessions.revoked',\n 'authentication.signed-in',\n 'authentication.signed-out',\n 'authentication.password.changed',\n 'authentication.password.reset',\n] as const\n\nexport const ActivityAction = Schema.Literals(ACTIVITY_ACTIONS)\nexport type ActivityAction = typeof ActivityAction.Type\n\nconst DocumentActivityTarget = Schema.Struct({\n kind: Schema.tag('document'),\n documentId: DocumentId,\n})\n\nconst MediaActivityTarget = Schema.Struct({\n kind: Schema.tag('media'),\n mediaId: MediaId,\n})\n\nconst MediaLibraryActivityTarget = Schema.Struct({ kind: Schema.tag('media-library') })\n\nexport const ActivityTarget = Schema.Union([\n DocumentActivityTarget,\n MediaActivityTarget,\n MediaLibraryActivityTarget,\n Schema.Struct({ kind: Schema.tag('user'), userId: Schema.NonEmptyString }),\n]).pipe(Schema.toTaggedUnion('kind'))\nexport type ActivityTarget = typeof ActivityTarget.Type\n\nexport const ActivityTargetKind = Schema.Literals(['document', 'media', 'media-library', 'user'])\nexport type ActivityTargetKind = typeof ActivityTargetKind.Type\n\nexport const ActivityContext = Schema.Struct({\n actor: StudioActor,\n requestId: RequestId,\n reason: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(1_000))),\n}).annotate({ identifier: 'ActivityContext' })\nexport interface ActivityContext extends Schema.Schema.Type<typeof ActivityContext> {}\n\nexport const ActivityEntry = Schema.Struct({\n id: ActivityId,\n action: ActivityAction,\n actor: StudioActor,\n requestId: RequestId,\n reason: ActivityContext.fields.reason,\n target: ActivityTarget,\n details: Schema.JsonObject,\n occurredAt: Schema.DateTimeUtcFromString,\n}).annotate({ identifier: 'ActivityEntry' })\nexport interface ActivityEntry extends Schema.Schema.Type<typeof ActivityEntry> {}\n\nexport const ActivityEntryDraft = Schema.Struct({\n action: ActivityAction,\n context: ActivityContext,\n target: ActivityTarget,\n details: Schema.JsonObject,\n}).annotate({ identifier: 'ActivityEntryDraft' })\nexport interface ActivityEntryDraft extends Schema.Schema.Type<typeof ActivityEntryDraft> {}\n\nexport const ActivityQuery = Schema.Struct({\n action: Schema.optionalKey(ActivityAction),\n actorId: Schema.optionalKey(StudioActor.fields.id),\n cursor: Schema.optionalKey(ActivityCursor),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n requestId: Schema.optionalKey(RequestId),\n targetId: Schema.optionalKey(Schema.NonEmptyString),\n targetKind: Schema.optionalKey(ActivityTargetKind),\n}).annotate({ identifier: 'ActivityQuery' })\nexport interface ActivityQuery extends Schema.Schema.Type<typeof ActivityQuery> {}\n\nexport const ActivityPage = Schema.Struct({\n entries: Schema.Array(ActivityEntry),\n nextCursor: Schema.optionalKey(ActivityCursor),\n total: nonNegativeInt,\n}).annotate({ identifier: 'ActivityPage' })\nexport interface ActivityPage extends Schema.Schema.Type<typeof ActivityPage> {}\n\nexport class ActivityCursorInvalid extends Schema.TaggedError<ActivityCursorInvalid>()('Activity.CursorInvalid', {}) {}\n","import { Schema } from 'effect'\nimport { ActivityEntry } from '../../Activity'\nimport { nonNegativeInt } from '../scalars'\nimport { DocumentRevisionAction } from './models'\nimport { DocumentHistoryCursor, DocumentVersion, DocumentId, RevisionId, SourcePath } from './scalars'\n\nexport const DocumentRevisionSummary = Schema.Struct({\n action: DocumentRevisionAction,\n activity: ActivityEntry,\n createdAt: Schema.DateTimeUtcFromString,\n documentId: DocumentId,\n revisionId: RevisionId,\n sourcePath: SourcePath,\n version: DocumentVersion,\n}).annotate({\n identifier: 'DocumentRevisionSummary',\n})\nexport interface DocumentRevisionSummary extends Schema.Schema.Type<typeof DocumentRevisionSummary> {}\n\nexport const DocumentRevision = Schema.Struct({\n ...DocumentRevisionSummary.fields,\n markdown: Schema.String,\n}).annotate({ identifier: 'DocumentRevision' })\nexport interface DocumentRevision extends Schema.Schema.Type<typeof DocumentRevision> {}\n\nexport const DocumentHistoryQuery = Schema.Struct({\n documentId: DocumentId,\n cursor: Schema.optionalKey(DocumentHistoryCursor),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n}).annotate({ identifier: 'DocumentHistoryQuery' })\nexport interface DocumentHistoryQuery extends Schema.Schema.Type<typeof DocumentHistoryQuery> {}\n\nexport const DocumentRevisionPage = Schema.Struct({\n revisions: Schema.Array(DocumentRevisionSummary),\n nextCursor: Schema.optionalKey(DocumentHistoryCursor),\n total: nonNegativeInt,\n}).annotate({ identifier: 'DocumentRevisionPage' })\nexport interface DocumentRevisionPage extends Schema.Schema.Type<typeof DocumentRevisionPage> {}\n\nconst LineNumber = Schema.Int.check(Schema.isGreaterThan(0))\n\nexport const DocumentRevisionChange = Schema.Union([\n Schema.Struct({ kind: Schema.tag('equal'), beforeLine: LineNumber, afterLine: LineNumber, line: Schema.String }),\n Schema.Struct({ kind: Schema.tag('added'), afterLine: LineNumber, line: Schema.String }),\n Schema.Struct({ kind: Schema.tag('removed'), beforeLine: LineNumber, line: Schema.String }),\n]).pipe(Schema.toTaggedUnion('kind'))\nexport type DocumentRevisionChange = typeof DocumentRevisionChange.Type\n\nexport const CompareDocumentRevisionsInput = Schema.Struct({\n documentId: DocumentId,\n fromRevisionId: RevisionId,\n toRevisionId: RevisionId,\n}).annotate({ identifier: 'CompareDocumentRevisionsInput' })\nexport interface CompareDocumentRevisionsInput extends Schema.Schema.Type<typeof CompareDocumentRevisionsInput> {}\n\nexport const DocumentRevisionComparison = Schema.Struct({\n from: DocumentRevision,\n to: DocumentRevision,\n changes: Schema.Array(DocumentRevisionChange),\n}).annotate({ identifier: 'DocumentRevisionComparison' })\nexport interface DocumentRevisionComparison extends Schema.Schema.Type<typeof DocumentRevisionComparison> {}\n\nexport class DocumentHistoryInvalidCursor extends Schema.TaggedError<DocumentHistoryInvalidCursor>()(\n 'DocumentHistory.InvalidCursor',\n {},\n) {}\n\nexport class DocumentHistoryComparisonTooLarge extends Schema.TaggedError<DocumentHistoryComparisonTooLarge>()(\n 'DocumentHistory.ComparisonTooLarge',\n {\n maximumEditLength: Schema.Int.check(Schema.isGreaterThan(0)),\n maximumLines: Schema.Int.check(Schema.isGreaterThan(0)),\n },\n) {}\n","/**\n * Collaboration handshake and WebSocket envelopes. Command results correlate by RequestId;\n * checkpoints carry the durable state vector needed for retry and recovery.\n */\nimport { DocumentMutationResult, DocumentSource, DocumentValidationResult, CmsMarkdownDocument } from './Documents'\nimport { RequestId } from './Identity'\nimport { Schema } from 'effect'\n\nexport const StateVector = Schema.String.check(Schema.isBase64()).pipe(Schema.brand('StateVector'))\nexport type StateVector = typeof StateVector.Type\n\nconst HttpErrorStatus = Schema.Int.check(Schema.isBetween({ minimum: 400, maximum: 599 }))\n\nexport const CollaborationUser = Schema.Struct({\n color: Schema.NonEmptyString,\n id: Schema.NonEmptyString,\n name: Schema.NonEmptyString,\n})\nexport interface CollaborationUser extends Schema.Schema.Type<typeof CollaborationUser> {}\n\nexport const CollaborationTicket = Schema.Struct({\n authoredStateVector: StateVector,\n documentName: Schema.NonEmptyString,\n source: DocumentSource,\n token: Schema.NonEmptyString,\n url: Schema.NonEmptyString,\n user: CollaborationUser,\n workingStateVector: StateVector,\n}).annotate({ identifier: 'CollaborationTicket' })\nexport interface CollaborationTicket extends Schema.Schema.Type<typeof CollaborationTicket> {}\n\nexport const CollaborationPreview = DocumentValidationResult.pipe(\n Schema.fieldsAssign({\n markdown: Schema.String,\n preview: Schema.Struct({\n body: CmsMarkdownDocument,\n fallbacks: Schema.Record(Schema.String, Schema.String),\n }),\n }),\n).annotate({ identifier: 'CollaborationPreview' })\nexport interface CollaborationPreview extends Schema.Schema.Type<typeof CollaborationPreview> {}\n\nconst CheckpointMessage = Schema.Struct({\n type: Schema.tag('checkpoint'),\n})\n\nconst PreviewMessage = Schema.Struct({\n type: Schema.tag('preview'),\n requestId: RequestId,\n})\n\nconst PublishMessage = Schema.Struct({\n type: Schema.tag('publish'),\n requestId: RequestId,\n})\n\nexport const CollaborationClientMessage = Schema.Union([CheckpointMessage, PreviewMessage, PublishMessage]).pipe(\n Schema.toTaggedUnion('type'),\n)\nexport type CollaborationClientMessage = typeof CollaborationClientMessage.Type\n\nconst requestFailure = {\n error: Schema.NonEmptyString,\n statusCode: HttpErrorStatus,\n}\n\nconst RequestFailure = Schema.Struct({\n status: Schema.tag('failure'),\n ...requestFailure,\n})\n\nconst PreviewOutcome = Schema.Union([\n Schema.Struct({\n status: Schema.tag('success'),\n result: CollaborationPreview,\n }),\n RequestFailure,\n]).pipe(Schema.toTaggedUnion('status'))\n\nconst PublishCheckpoint = Schema.Struct({\n authoredStateVector: StateVector,\n result: Schema.optionalKey(DocumentMutationResult),\n})\n\nconst PublishOutcome = Schema.Union([\n Schema.Struct({\n status: Schema.tag('success'),\n authoredStateVector: StateVector,\n result: DocumentMutationResult,\n }),\n Schema.Struct({\n status: Schema.tag('failure'),\n ...requestFailure,\n checkpoint: Schema.optionalKey(PublishCheckpoint),\n }),\n]).pipe(Schema.toTaggedUnion('status'))\n\nconst WorkingSavedMessage = Schema.Struct({\n type: Schema.tag('working-saved'),\n workingStateVector: StateVector,\n})\n\nconst WorkingSaveErrorMessage = Schema.Struct({\n type: Schema.tag('working-save-error'),\n error: Schema.NonEmptyString,\n})\n\nconst PreviewResultMessage = Schema.Struct({\n type: Schema.tag('preview-result'),\n requestId: RequestId,\n outcome: PreviewOutcome,\n})\n\nconst PublishResultMessage = Schema.Struct({\n type: Schema.tag('publish-result'),\n requestId: RequestId,\n outcome: PublishOutcome,\n})\n\nexport const CollaborationServerMessage = Schema.Union([\n WorkingSavedMessage,\n WorkingSaveErrorMessage,\n PreviewResultMessage,\n PublishResultMessage,\n]).pipe(Schema.toTaggedUnion('type'))\nexport type CollaborationServerMessage = typeof CollaborationServerMessage.Type\n","/**\n * User administration inputs, offset-paginated directory results, and caller-visible command\n * failures. Commands carry no idempotency key; clients resolve ambiguous outcomes by listing again.\n */\nimport { Schema } from 'effect'\nimport { Role } from './AccessControl'\nimport { nonNegativeInt } from './internal/scalars'\n\nexport const UserEmail = Schema.NonEmptyString.check(\n Schema.isMaxLength(320),\n Schema.isPattern(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u),\n).annotate({ identifier: 'UserEmail' })\nexport type UserEmail = typeof UserEmail.Type\n\nexport const UserName = Schema.NonEmptyString.check(Schema.isMaxLength(200)).annotate({\n identifier: 'UserName',\n})\nexport type UserName = typeof UserName.Type\n\nexport const UserPassword = Schema.NonEmptyString.check(Schema.isMinLength(8), Schema.isMaxLength(200)).annotate({\n identifier: 'UserPassword',\n})\nexport type UserPassword = typeof UserPassword.Type\n\nexport const User = Schema.Struct({\n id: Schema.NonEmptyString,\n email: UserEmail,\n name: UserName,\n role: Role,\n emailVerified: Schema.Boolean,\n banned: Schema.Boolean,\n createdAt: Schema.DateTimeUtcFromString,\n updatedAt: Schema.DateTimeUtcFromString,\n}).annotate({ identifier: 'User' })\nexport interface User extends Schema.Schema.Type<typeof User> {}\n\nexport const UserPage = Schema.Struct({\n users: Schema.Array(User),\n total: nonNegativeInt,\n}).annotate({ identifier: 'UserPage' })\nexport interface UserPage extends Schema.Schema.Type<typeof UserPage> {}\n\nexport const UserQuery = Schema.Struct({\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n offset: Schema.optionalKey(nonNegativeInt),\n search: Schema.optionalKey(Schema.NonEmptyString.check(Schema.isMaxLength(200))),\n}).annotate({ identifier: 'UserQuery' })\nexport interface UserQuery extends Schema.Schema.Type<typeof UserQuery> {}\n\nexport const CreateUserInput = Schema.Struct({\n email: UserEmail,\n name: UserName,\n password: UserPassword,\n role: Role,\n}).annotate({ identifier: 'CreateUserInput' })\nexport interface CreateUserInput extends Schema.Schema.Type<typeof CreateUserInput> {}\n\nexport class UserAlreadyExists extends Schema.TaggedError<UserAlreadyExists>()('User.AlreadyExists', {\n email: UserEmail,\n}) {}\n\nexport class UserNotFound extends Schema.TaggedError<UserNotFound>()('User.NotFound', {\n userId: User.fields.id,\n}) {}\n\nexport class UserSelfRemovalDenied extends Schema.TaggedError<UserSelfRemovalDenied>()('User.SelfRemovalDenied', {\n userId: User.fields.id,\n}) {}\n\nexport class UserSelfRoleChangeDenied extends Schema.TaggedError<UserSelfRoleChangeDenied>()(\n 'User.SelfRoleChangeDenied',\n { userId: User.fields.id },\n) {}\n\nexport class UserAdministrationDenied extends Schema.TaggedError<UserAdministrationDenied>()(\n 'UserAdministration.Denied',\n {},\n) {}\n","/** Exclusive first-installation claim input, state, and caller-visible rejection failures. */\nimport { Schema } from 'effect'\nimport { UserEmail, UserName, UserPassword } from './Users'\n\nexport const InitializationInput = Schema.Struct({\n email: UserEmail,\n initializationToken: Schema.NonEmptyString.check(Schema.isMaxLength(512)),\n name: UserName,\n password: UserPassword,\n}).annotate({ identifier: 'InitializationInput' })\nexport interface InitializationInput extends Schema.Schema.Type<typeof InitializationInput> {}\n\nexport const InitializationState = Schema.Struct({\n needsAdministrator: Schema.Boolean,\n}).annotate({ identifier: 'InitializationState' })\nexport interface InitializationState extends Schema.Schema.Type<typeof InitializationState> {}\n\nexport class InitializationAlreadyCompleted extends Schema.TaggedError<InitializationAlreadyCompleted>()(\n 'Initialization.AlreadyCompleted',\n {},\n) {}\n\nexport class InitializationProofInvalid extends Schema.TaggedError<InitializationProofInvalid>()(\n 'Initialization.ProofInvalid',\n {},\n) {}\n","import { Schema } from 'effect'\n\nexport class StudioInternalError extends Schema.TaggedError<StudioInternalError>()('Studio.InternalError', {\n message: Schema.Literal('The request could not be completed.'),\n}) {}\n\nexport function studioInternalError(): StudioInternalError {\n return new StudioInternalError({ message: 'The request could not be completed.' })\n}\n","import {\n CompiledDocument,\n DocumentNavigationItem,\n DocumentNavigationQuery,\n DocumentSurround,\n PublishedDocumentLookup,\n PublishedDocumentNotFound,\n PublishedDocumentPage,\n PublishedDocumentQuery,\n PublishedDocumentSurroundQuery,\n} from '../../Documents'\nimport {\n PreviewDraftNotFound,\n PreviewDraftRequest,\n PreviewInvalidation,\n PreviewSessionAccess,\n PreviewSessionInvalid,\n} from '../../Preview'\nimport { Schema } from 'effect'\nimport { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from 'effect/unstable/httpapi'\nimport { StudioInternalError } from './failures'\n\nconst DeliverySurroundPayload = Schema.Struct({\n lookup: PublishedDocumentLookup,\n query: PublishedDocumentSurroundQuery,\n}).annotate({ identifier: 'DeliverySurroundPayload' })\n\nconst InternalError = StudioInternalError.pipe(HttpApiSchema.status(500))\nconst PublishedNotFound = PublishedDocumentNotFound.pipe(HttpApiSchema.status(404))\nconst InvalidPreviewSession = PreviewSessionInvalid.pipe(HttpApiSchema.status(401))\nconst PreviewDraftMissing = PreviewDraftNotFound.pipe(HttpApiSchema.status(404))\n\nexport const PublishedDeliveryApi = HttpApiGroup.make('delivery')\n .add(\n HttpApiEndpoint.post('read', '/read', {\n payload: PublishedDocumentLookup,\n success: CompiledDocument,\n error: [PublishedNotFound, InternalError],\n }),\n HttpApiEndpoint.post('query', '/query', {\n payload: PublishedDocumentQuery,\n success: PublishedDocumentPage,\n error: InternalError,\n }),\n HttpApiEndpoint.post('navigation', '/navigation', {\n payload: DocumentNavigationQuery,\n success: Schema.Array(DocumentNavigationItem),\n error: InternalError,\n }),\n HttpApiEndpoint.post('surround', '/surround', {\n payload: DeliverySurroundPayload,\n success: DocumentSurround,\n error: [PublishedNotFound, InternalError],\n }),\n )\n .prefix('/delivery')\n\nexport const PreviewDeliveryApi = HttpApiGroup.make('previewDelivery').add(\n HttpApiEndpoint.post('resolve', '/preview/resolve', {\n payload: PreviewDraftRequest,\n success: CompiledDocument,\n error: [InvalidPreviewSession, PreviewDraftMissing, InternalError],\n }),\n HttpApiEndpoint.post('invalidations', '/preview/invalidations', {\n payload: PreviewSessionAccess,\n success: HttpApiSchema.StreamSse({ data: PreviewInvalidation }),\n error: [InvalidPreviewSession, InternalError],\n }),\n)\n","/**\n * Studio HTTP paths, middleware contracts, payloads, and the composed CMS API. Every expected\n * caller failure is a tagged schema with an explicit status; unclassified failures become the\n * deliberately opaque `StudioInternalError`.\n */\nimport {\n AccessDenied,\n AuthenticationRequired,\n Role,\n StudioActor,\n StudioEntryDenied,\n StudioRequestContext,\n} from './AccessControl'\nimport { ActivityCursorInvalid, ActivityPage, ActivityQuery } from './Activity'\nimport { CollaborationTicket } from './Collaboration'\nimport { ComponentDefinition, DocumentConfiguration, MediaConfiguration } from './Configuration'\nimport {\n CompareDocumentRevisionsInput,\n CreateDocumentInput,\n DeletedDocument,\n DocumentBrowseQuery,\n DocumentHistoryComparisonTooLarge,\n DocumentHistoryInvalidCursor,\n DocumentHistoryQuery,\n DocumentId,\n DocumentIssue,\n DocumentMediaUnavailable,\n DocumentMutationResult,\n DocumentNotFound,\n DocumentPathConflict,\n DocumentRevision,\n DocumentRevisionComparison,\n DocumentRevisionPage,\n DocumentSource,\n DocumentSummary,\n DocumentValidationFailed,\n DocumentValidationResult,\n DocumentVersionConflict,\n MoveDocumentInput,\n PublishDocumentInput,\n RemoveDocumentInput,\n RestoreDocumentInput,\n PublicPath,\n UndeleteDocumentInput,\n UpdateDocumentInput,\n} from './Documents'\nimport {\n InitializationAlreadyCompleted,\n InitializationInput,\n InitializationProofInvalid,\n InitializationState,\n} from './Initialization'\nimport {\n MediaAsset,\n MediaCleanupReport,\n MediaConflict,\n MediaFolder,\n MediaId,\n MediaIntegrityReport,\n MediaInvalid,\n MediaNotFound,\n MediaPage,\n MediaQuery,\n MediaReferenced,\n MediaTooLarge,\n MediaUpload,\n} from './Media'\nimport { PreviewSession, PreviewSessionInvalid, PreviewSessionRequest } from './Preview'\nimport {\n CreateUserInput,\n User,\n UserAdministrationDenied,\n UserAlreadyExists,\n UserNotFound,\n UserPage,\n UserQuery,\n UserSelfRemovalDenied,\n UserSelfRoleChangeDenied,\n} from './Users'\nimport { Context, Schema } from 'effect'\nimport { Multipart } from 'effect/unstable/http'\nimport { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiMiddleware, HttpApiSchema } from 'effect/unstable/httpapi'\nimport { PreviewDeliveryApi, PublishedDeliveryApi } from './internal/http/delivery'\nimport { StudioInternalError } from './internal/http/failures'\nimport { STUDIO_API_PATH } from './HttpPaths'\n\nexport { StudioInternalError, studioInternalError } from './internal/http/failures'\nexport {\n CMS_AUTHENTICATION_PATH,\n CMS_LIVENESS_PATH,\n CMS_READINESS_PATH,\n STUDIO_API_PATH,\n STUDIO_APP_PATH,\n STUDIO_BASE_PATH,\n STUDIO_COLLABORATION_PATH,\n} from './HttpPaths'\n\nconst ApiVersion = Schema.NonEmptyString.pipe(Schema.brand('ApiVersion'))\n\nexport const StudioBootstrap = Schema.Struct({\n basePath: PublicPath,\n components: Schema.Array(ComponentDefinition),\n documents: DocumentConfiguration,\n media: MediaConfiguration,\n version: ApiVersion,\n}).annotate({ identifier: 'StudioBootstrap' })\nexport interface StudioBootstrap extends Schema.Schema.Type<typeof StudioBootstrap> {}\n\nexport class StudioBadRequest extends Schema.TaggedError<StudioBadRequest>()('Studio.BadRequest', {\n kind: Schema.Literals(['Headers', 'Params', 'Payload', 'Query']),\n}) {}\n\nexport class StudioRequestConflict extends Schema.TaggedError<StudioRequestConflict>()('Studio.RequestConflict', {\n retryable: Schema.Literal(true),\n}) {}\n\nexport class StudioSchemaError extends HttpApiMiddleware.Service<StudioSchemaError>()(\n '@internal/protocol/StudioSchemaError',\n {\n error: [StudioBadRequest.pipe(HttpApiSchema.status(400)), StudioInternalError.pipe(HttpApiSchema.status(500))],\n },\n) {}\n\nexport class CurrentStudioRequest extends Context.Service<CurrentStudioRequest, StudioRequestContext>()(\n '@internal/protocol/CurrentStudioRequest',\n) {}\n\nexport class StudioAuthentication extends HttpApiMiddleware.Service<\n StudioAuthentication,\n { provides: CurrentStudioRequest }\n>()('@internal/protocol/StudioAuthentication', {\n error: [\n AuthenticationRequired.pipe(HttpApiSchema.status(401)),\n StudioEntryDenied.pipe(HttpApiSchema.status(403)),\n StudioInternalError.pipe(HttpApiSchema.status(500)),\n ],\n}) {}\n\nconst UpdateDocumentPayload = Schema.Struct({\n expectedVersion: UpdateDocumentInput.fields.expectedVersion,\n markdown: UpdateDocumentInput.fields.markdown,\n})\n\nconst MoveDocumentPayload = Schema.Struct({\n expectedVersion: MoveDocumentInput.fields.expectedVersion,\n location: MoveDocumentInput.fields.location,\n})\n\nconst PublishDocumentPayload = Schema.Struct({\n expectedVersion: PublishDocumentInput.fields.expectedVersion,\n})\n\nconst RemoveDocumentPayload = Schema.Struct({\n expectedVersion: RemoveDocumentInput.fields.expectedVersion,\n})\n\nconst RestoreDocumentPayload = Schema.Struct({\n expectedVersion: RestoreDocumentInput.fields.expectedVersion,\n revisionId: RestoreDocumentInput.fields.revisionId,\n})\n\nconst UndeleteDocumentPayload = Schema.Struct({\n expectedVersion: UndeleteDocumentInput.fields.expectedVersion,\n})\n\nconst ChangeRolePayload = Schema.Struct({ role: Role }).annotate({\n identifier: 'ChangeRolePayload',\n})\n\nexport const MediaUploadQuery = Schema.Struct({\n declaredByteSize: MediaUpload.fields.declaredByteSize,\n folder: Schema.optionalKey(MediaFolder),\n}).annotate({ identifier: 'MediaUploadQuery' })\nexport interface MediaUploadQuery extends Schema.Schema.Type<typeof MediaUploadQuery> {}\n\nconst MediaUploadPayload = Schema.Struct({\n file: Multipart.SingleFileSchema,\n}).pipe(HttpApiSchema.asMultipartStream({ maxParts: 1 }))\n\nconst NotFound = DocumentNotFound.pipe(HttpApiSchema.status(404))\nconst VersionConflict = DocumentVersionConflict.pipe(HttpApiSchema.status(409))\nconst Conflict = Schema.Union([DocumentMediaUnavailable, DocumentPathConflict, DocumentVersionConflict]).pipe(\n HttpApiSchema.status(409),\n)\nconst ValidationFailed = DocumentValidationFailed.pipe(HttpApiSchema.status(422))\nconst RequestConflict = StudioRequestConflict.pipe(HttpApiSchema.status(409))\nconst InternalError = StudioInternalError.pipe(HttpApiSchema.status(500))\nconst Forbidden = AccessDenied.pipe(HttpApiSchema.status(403))\nconst MutationErrors = [NotFound, Conflict, ValidationFailed, RequestConflict, Forbidden, InternalError] as const\n\nconst MediaNotFoundResponse = MediaNotFound.pipe(HttpApiSchema.status(404))\nconst MediaInvalidQuery = MediaInvalid.pipe(HttpApiSchema.status(400))\nconst MediaInvalidUpload = MediaInvalid.pipe(HttpApiSchema.status(422))\nconst MediaTooLargeResponse = MediaTooLarge.pipe(HttpApiSchema.status(413))\nconst MediaReferencedResponse = MediaReferenced.pipe(HttpApiSchema.status(409))\nconst MediaConflictResponse = MediaConflict.pipe(HttpApiSchema.status(409))\nconst InvalidActivityCursor = ActivityCursorInvalid.pipe(HttpApiSchema.status(400))\nconst InvalidHistoryCursor = DocumentHistoryInvalidCursor.pipe(HttpApiSchema.status(400))\nconst HistoryComparisonTooLarge = DocumentHistoryComparisonTooLarge.pipe(HttpApiSchema.status(422))\nconst AlreadyInitialized = InitializationAlreadyCompleted.pipe(HttpApiSchema.status(409))\nconst InitializationProofRejected = InitializationProofInvalid.pipe(HttpApiSchema.status(403))\nconst UserAdministrationForbidden = UserAdministrationDenied.pipe(HttpApiSchema.status(403))\nconst UserDuplicate = UserAlreadyExists.pipe(HttpApiSchema.status(409))\nconst MissingUser = UserNotFound.pipe(HttpApiSchema.status(404))\nconst UserSelfRemoval = UserSelfRemovalDenied.pipe(HttpApiSchema.status(409))\nconst UserSelfRoleChange = UserSelfRoleChangeDenied.pipe(HttpApiSchema.status(409))\nconst InvalidPreviewSession = PreviewSessionInvalid.pipe(HttpApiSchema.status(401))\n\nconst StudioDocumentsApi = HttpApiGroup.make('documents')\n .add(\n HttpApiEndpoint.get('browse', '/', {\n query: DocumentBrowseQuery,\n success: Schema.Array(DocumentSummary),\n error: [Forbidden, InternalError],\n }),\n HttpApiEndpoint.get('trash', '/trash', {\n success: Schema.Array(DeletedDocument),\n error: [Forbidden, InternalError],\n }),\n HttpApiEndpoint.get('read', '/:documentId', {\n params: { documentId: DocumentId },\n success: DocumentSource,\n error: [NotFound, Forbidden, InternalError],\n }),\n HttpApiEndpoint.post('create', '/', {\n payload: CreateDocumentInput,\n success: DocumentMutationResult.pipe(HttpApiSchema.status(201)),\n error: MutationErrors,\n }),\n HttpApiEndpoint.put('update', '/:documentId', {\n params: { documentId: DocumentId },\n payload: UpdateDocumentPayload,\n success: DocumentMutationResult,\n error: MutationErrors,\n }),\n HttpApiEndpoint.post('validate', '/:documentId/validate', {\n params: { documentId: DocumentId },\n payload: UpdateDocumentPayload,\n success: DocumentValidationResult,\n error: [NotFound, VersionConflict, Forbidden, InternalError],\n }),\n HttpApiEndpoint.post('move', '/:documentId/move', {\n params: { documentId: DocumentId },\n payload: MoveDocumentPayload,\n success: DocumentMutationResult,\n error: MutationErrors,\n }),\n HttpApiEndpoint.post('publish', '/:documentId/publish', {\n params: { documentId: DocumentId },\n payload: PublishDocumentPayload,\n success: DocumentMutationResult,\n error: MutationErrors,\n }),\n HttpApiEndpoint.post('remove', '/:documentId/remove', {\n params: { documentId: DocumentId },\n payload: RemoveDocumentPayload,\n success: DocumentMutationResult,\n error: MutationErrors,\n }),\n HttpApiEndpoint.post('restore', '/:documentId/restore', {\n params: { documentId: DocumentId },\n payload: RestoreDocumentPayload,\n success: DocumentMutationResult,\n error: MutationErrors,\n }),\n HttpApiEndpoint.post('undelete', '/:documentId/undelete', {\n params: { documentId: DocumentId },\n payload: UndeleteDocumentPayload,\n success: DocumentMutationResult,\n error: MutationErrors,\n }),\n )\n .middleware(StudioAuthentication)\n .prefix('/documents')\n\nconst StudioMediaApi = HttpApiGroup.make('media')\n .add(\n HttpApiEndpoint.get('search', '/', {\n query: MediaQuery,\n success: MediaPage,\n error: [MediaInvalidQuery, Forbidden, InternalError],\n }),\n HttpApiEndpoint.post('upload', '/', {\n query: MediaUploadQuery,\n payload: MediaUploadPayload,\n success: MediaAsset.pipe(HttpApiSchema.status(201)),\n error: [MediaInvalidUpload, MediaTooLargeResponse, Forbidden, InternalError],\n }),\n HttpApiEndpoint.put('replace', '/:mediaId', {\n params: { mediaId: MediaId },\n query: MediaUploadQuery,\n payload: MediaUploadPayload,\n success: MediaAsset,\n error: [\n MediaNotFoundResponse,\n MediaConflictResponse,\n MediaInvalidUpload,\n MediaTooLargeResponse,\n Forbidden,\n InternalError,\n ],\n }),\n HttpApiEndpoint.post('cleanup', '/cleanup', {\n success: MediaCleanupReport,\n error: [Forbidden, InternalError],\n }),\n HttpApiEndpoint.get('integrity', '/integrity', {\n success: MediaIntegrityReport,\n error: [Forbidden, InternalError],\n }),\n HttpApiEndpoint.get('get', '/:mediaId', {\n params: { mediaId: MediaId },\n success: MediaAsset,\n error: [MediaNotFoundResponse, Forbidden, InternalError],\n }),\n HttpApiEndpoint.delete('remove', '/:mediaId', {\n params: { mediaId: MediaId },\n success: HttpApiSchema.NoContent,\n error: [MediaNotFoundResponse, MediaConflictResponse, MediaReferencedResponse, Forbidden, InternalError],\n }),\n )\n .middleware(StudioAuthentication)\n .prefix('/media')\n\nconst StudioConfigurationApi = HttpApiGroup.make('configuration')\n .add(\n HttpApiEndpoint.get('bootstrap', '/bootstrap', {\n success: StudioBootstrap,\n }),\n )\n .middleware(StudioAuthentication)\n\nconst StudioSessionApi = HttpApiGroup.make('session')\n .add(HttpApiEndpoint.get('current', '/session', { success: StudioActor }))\n .middleware(StudioAuthentication)\n\nconst InitializationApi = HttpApiGroup.make('initialization').add(\n HttpApiEndpoint.get('status', '/initialization', {\n success: InitializationState,\n error: InternalError,\n }),\n HttpApiEndpoint.post('claim', '/initialization', {\n payload: InitializationInput,\n success: User.pipe(HttpApiSchema.status(201)),\n error: [AlreadyInitialized, InitializationProofRejected, InternalError],\n }),\n)\n\nconst StudioDiagnosticsApi = HttpApiGroup.make('diagnostics')\n .add(\n HttpApiEndpoint.get('documents', '/diagnostics/documents', {\n success: Schema.Array(DocumentIssue),\n error: [Forbidden, InternalError],\n }),\n )\n .middleware(StudioAuthentication)\n\nconst StudioPreviewSessionsApi = HttpApiGroup.make('previewSessions')\n .add(\n HttpApiEndpoint.post('issue', '/preview/sessions', {\n payload: PreviewSessionRequest,\n success: PreviewSession.pipe(HttpApiSchema.status(201)),\n error: [InvalidPreviewSession, InternalError],\n }),\n )\n .middleware(StudioAuthentication)\n\nconst StudioHistoryApi = HttpApiGroup.make('history')\n .add(\n HttpApiEndpoint.get('list', '/', {\n query: DocumentHistoryQuery,\n success: DocumentRevisionPage,\n error: [InvalidHistoryCursor, Forbidden, InternalError],\n }),\n HttpApiEndpoint.get('read', '/:documentId/:revisionId', {\n params: { documentId: DocumentId, revisionId: DocumentRevision.fields.revisionId },\n success: DocumentRevision,\n error: [NotFound, Forbidden, InternalError],\n }),\n HttpApiEndpoint.post('compare', '/compare', {\n payload: CompareDocumentRevisionsInput,\n success: DocumentRevisionComparison,\n error: [NotFound, HistoryComparisonTooLarge, Forbidden, InternalError],\n }),\n )\n .middleware(StudioAuthentication)\n .prefix('/history')\n\nconst StudioActivityApi = HttpApiGroup.make('activity')\n .add(\n HttpApiEndpoint.get('list', '/', {\n query: ActivityQuery,\n success: ActivityPage,\n error: [InvalidActivityCursor, Forbidden, InternalError],\n }),\n )\n .middleware(StudioAuthentication)\n .prefix('/activity')\n\nconst StudioUserAdministrationApi = HttpApiGroup.make('users')\n .add(\n HttpApiEndpoint.get('list', '/', {\n query: UserQuery,\n success: UserPage,\n error: [UserAdministrationForbidden, InternalError],\n }),\n HttpApiEndpoint.post('create', '/', {\n payload: CreateUserInput,\n success: User.pipe(HttpApiSchema.status(201)),\n error: [UserDuplicate, UserAdministrationForbidden, InternalError],\n }),\n HttpApiEndpoint.post('changeRole', '/:userId/role', {\n params: { userId: User.fields.id },\n payload: ChangeRolePayload,\n success: User,\n error: [MissingUser, UserSelfRoleChange, UserAdministrationForbidden, InternalError],\n }),\n HttpApiEndpoint.post('revokeSessions', '/:userId/sessions/revoke', {\n params: { userId: User.fields.id },\n success: User,\n error: [MissingUser, UserAdministrationForbidden, InternalError],\n }),\n HttpApiEndpoint.delete('remove', '/:userId', {\n params: { userId: User.fields.id },\n success: User,\n error: [MissingUser, UserSelfRemoval, UserAdministrationForbidden, InternalError],\n }),\n )\n .middleware(StudioAuthentication)\n .prefix('/users')\n\nconst StudioCollaborationApi = HttpApiGroup.make('collaboration')\n .add(\n HttpApiEndpoint.post('ticket', '/:documentId/ticket', {\n params: { documentId: DocumentId },\n success: CollaborationTicket,\n error: [NotFound, Forbidden, InternalError],\n }),\n )\n .middleware(StudioAuthentication)\n .prefix('/collaboration')\n\nexport class StudioApi extends HttpApi.make('StudioApi')\n .add(\n InitializationApi,\n PublishedDeliveryApi,\n StudioConfigurationApi,\n StudioSessionApi,\n StudioDiagnosticsApi,\n StudioPreviewSessionsApi,\n PreviewDeliveryApi,\n StudioDocumentsApi,\n StudioHistoryApi,\n StudioActivityApi,\n StudioUserAdministrationApi,\n StudioMediaApi,\n StudioCollaborationApi,\n )\n .middleware(StudioSchemaError)\n .prefix(STUDIO_API_PATH) {}\n"],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { n as DocumentPreviewMessage, p as isDocumentPreviewMessage, t as DOCUMENT_PREVIEW_CHANNEL } from "./models-DS5ClMsH.js";
2
+ import { Effect, Exit, Schedule, Schema, Scope } from "effect";
3
+
4
+ //#region ../protocol/src/internal/preview/bridge.ts
5
+ /** Owns the preview-site side of the authenticated session handshake. */
6
+ function makePreviewSiteBridge(options) {
7
+ return Effect.acquireRelease(Effect.sync(() => createPreviewSiteBridge(options)), (bridge) => Effect.sync(() => bridge.close())).pipe(Effect.map(({ close: _close, ...bridge }) => bridge));
8
+ }
9
+ function createPreviewSiteBridge(options) {
10
+ const listeners = /* @__PURE__ */ new Set();
11
+ let active = false;
12
+ let closed = false;
13
+ const post = (payload) => {
14
+ if (!active || closed) return false;
15
+ options.parent.postMessage(envelope(options.sessionId, payload), options.parentOrigin);
16
+ return true;
17
+ };
18
+ const receive = (event) => {
19
+ if (closed) return;
20
+ const message = receivePreviewMessage(event, options.parent, options.parentOrigin, options.sessionId);
21
+ if (!message || !isStudioPreviewMessage(message)) return;
22
+ if (message.type === "studio:connect") {
23
+ active = true;
24
+ post(options.route);
25
+ }
26
+ for (const listener of listeners) listener(message);
27
+ };
28
+ const close = () => {
29
+ if (closed) return;
30
+ closed = true;
31
+ active = false;
32
+ options.view.removeEventListener("message", receive);
33
+ listeners.clear();
34
+ };
35
+ options.view.addEventListener("message", receive);
36
+ return {
37
+ close,
38
+ send: post,
39
+ subscribe: (listener) => {
40
+ listeners.add(listener);
41
+ return () => listeners.delete(listener);
42
+ }
43
+ };
44
+ }
45
+ function envelope(sessionId, payload) {
46
+ return Schema.decodeSync(DocumentPreviewMessage)({
47
+ channel: DOCUMENT_PREVIEW_CHANNEL,
48
+ sessionId,
49
+ ...payload
50
+ });
51
+ }
52
+ function receivePreviewMessage(event, source, origin, sessionId) {
53
+ if (event.origin !== origin || event.source !== source || !isDocumentPreviewMessage(event.data)) return void 0;
54
+ return event.data.sessionId === sessionId ? event.data : void 0;
55
+ }
56
+ function isStudioPreviewMessage(message) {
57
+ return message.type.startsWith("studio:");
58
+ }
59
+
60
+ //#endregion
61
+ //#region src/runtime/preview/connection.ts
62
+ /** Owns the site-side Effect scope and authenticated parent-window bridge. */
63
+ async function openSitePreviewConnection(options) {
64
+ const scope = await Effect.runPromise(Scope.make());
65
+ try {
66
+ const bridge = await Effect.runPromise(makePreviewSiteBridge({
67
+ parent: window.parent,
68
+ parentOrigin: options.editorOrigin,
69
+ route: {
70
+ path: options.route,
71
+ type: "preview:ready"
72
+ },
73
+ sessionId: options.sessionId,
74
+ view: window
75
+ }).pipe(Effect.provideService(Scope.Scope, scope)));
76
+ let closed = false;
77
+ return {
78
+ async close() {
79
+ if (closed) return;
80
+ closed = true;
81
+ await Effect.runPromise(Scope.close(scope, Exit.void));
82
+ },
83
+ send: bridge.send,
84
+ subscribe: bridge.subscribe
85
+ };
86
+ } catch (cause) {
87
+ await Effect.runPromise(Scope.close(scope, Exit.fail(cause)));
88
+ throw cause;
89
+ }
90
+ }
91
+
92
+ //#endregion
93
+ export { openSitePreviewConnection as t };
94
+ //# sourceMappingURL=connection-ZGtL54qY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-ZGtL54qY.js","names":["DocumentPreviewMessageSchema"],"sources":["../../../../protocol/src/internal/preview/bridge.ts","../../../src/runtime/preview/connection.ts"],"sourcesContent":["import type {\n DocumentPreviewMessage,\n PreviewOrigin,\n PreviewSessionId,\n PreviewSitePayload,\n StudioPreviewPayload,\n} from './models'\nimport type { Scope } from 'effect'\nimport { Effect, Schedule, Schema } from 'effect'\nimport {\n DOCUMENT_PREVIEW_CHANNEL,\n DocumentPreviewMessage as DocumentPreviewMessageSchema,\n isDocumentPreviewMessage,\n} from './models'\n\nexport interface PreviewMessageEvent {\n readonly data: unknown\n readonly origin: string\n readonly source: object | null\n}\n\nexport interface PreviewMessageSource {\n readonly addEventListener: (type: 'message', listener: (event: PreviewMessageEvent) => void) => void\n readonly removeEventListener: (type: 'message', listener: (event: PreviewMessageEvent) => void) => void\n}\n\nexport interface PreviewMessageTarget {\n readonly postMessage: (message: DocumentPreviewMessage, targetOrigin: string) => void\n}\n\nexport type PreviewBridgeState = 'closed' | 'connecting' | 'ready'\n\nexport interface PreviewHostBridge {\n readonly reconnect: () => void\n readonly send: (payload: Exclude<StudioPreviewPayload, { readonly type: 'studio:connect' }>) => boolean\n readonly state: () => PreviewBridgeState\n readonly subscribe: (listener: (message: PreviewSitePayload) => void) => () => void\n}\n\nexport interface PreviewSiteBridge {\n readonly send: (payload: Exclude<PreviewSitePayload, { readonly type: 'preview:ready' }>) => boolean\n readonly subscribe: (listener: (message: StudioPreviewPayload) => void) => () => void\n}\n\nexport interface PreviewHostBridgeOptions {\n readonly handshakeIntervalMs?: number\n readonly sessionId: PreviewSessionId\n readonly target: () => PreviewMessageTarget | undefined\n readonly targetOrigin: PreviewOrigin\n readonly view: PreviewMessageSource\n}\n\nexport interface PreviewSiteBridgeOptions {\n readonly parent: PreviewMessageTarget\n readonly parentOrigin: PreviewOrigin\n readonly route: PreviewSitePayload & { readonly type: 'preview:ready' }\n readonly sessionId: PreviewSessionId\n readonly view: PreviewMessageSource\n}\n\n/** Owns the editor-side postMessage handshake and strict origin/source filtering. */\nexport function makePreviewHostBridge(\n options: PreviewHostBridgeOptions,\n): Effect.Effect<PreviewHostBridge, never, Scope.Scope> {\n return Effect.acquireRelease(\n Effect.context<never>().pipe(\n Effect.map((context) => createPreviewHostBridge(options, Effect.runForkWith(context))),\n ),\n (bridge) => Effect.sync(() => bridge.close()),\n ).pipe(Effect.map(({ close: _close, ...bridge }) => bridge))\n}\n\n/** Owns the preview-site side of the authenticated session handshake. */\nexport function makePreviewSiteBridge(\n options: PreviewSiteBridgeOptions,\n): Effect.Effect<PreviewSiteBridge, never, Scope.Scope> {\n return Effect.acquireRelease(\n Effect.sync(() => createPreviewSiteBridge(options)),\n (bridge) => Effect.sync(() => bridge.close()),\n ).pipe(Effect.map(({ close: _close, ...bridge }) => bridge))\n}\n\nfunction createPreviewHostBridge(options: PreviewHostBridgeOptions, runFork: typeof Effect.runFork) {\n const listeners = new Set<(message: PreviewSitePayload) => void>()\n let retry: ReturnType<typeof Effect.runFork> | undefined\n let state: PreviewBridgeState = 'connecting'\n\n const stopRetry = (): void => {\n if (retry === undefined) return\n retry.interruptUnsafe()\n retry = undefined\n }\n const post = (payload: StudioPreviewPayload): boolean => {\n const target = options.target()\n if (!target) return false\n target.postMessage(envelope(options.sessionId, payload), options.targetOrigin)\n return true\n }\n const connect = (): void => {\n post({ type: 'studio:connect' })\n }\n const reconnect = (): void => {\n if (state === 'closed') return\n state = 'connecting'\n stopRetry()\n const interval = options.handshakeIntervalMs ?? 250\n retry = runFork(Effect.sync(connect).pipe(Effect.repeat(Schedule.spaced(interval)), Effect.delay(interval)))\n connect()\n }\n const receive = (event: PreviewMessageEvent): void => {\n const target = options.target()\n if (!target) return\n const message = receivePreviewMessage(event, target, options.targetOrigin, options.sessionId)\n if (!message || !isPreviewSiteMessage(message)) return\n if (message.type === 'preview:ready') {\n state = 'ready'\n stopRetry()\n }\n for (const listener of listeners) listener(message)\n }\n const close = (): void => {\n if (state === 'closed') return\n state = 'closed'\n stopRetry()\n options.view.removeEventListener('message', receive)\n listeners.clear()\n }\n\n options.view.addEventListener('message', receive)\n reconnect()\n return {\n close,\n reconnect,\n send: (payload: Exclude<StudioPreviewPayload, { readonly type: 'studio:connect' }>) =>\n state === 'ready' && post(payload),\n state: () => state,\n subscribe: (listener: (message: PreviewSitePayload) => void) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n}\n\nfunction createPreviewSiteBridge(options: PreviewSiteBridgeOptions) {\n const listeners = new Set<(message: StudioPreviewPayload) => void>()\n let active = false\n let closed = false\n\n const post = (payload: PreviewSitePayload): boolean => {\n if (!active || closed) return false\n options.parent.postMessage(envelope(options.sessionId, payload), options.parentOrigin)\n return true\n }\n const receive = (event: PreviewMessageEvent): void => {\n if (closed) return\n const message = receivePreviewMessage(event, options.parent, options.parentOrigin, options.sessionId)\n if (!message || !isStudioPreviewMessage(message)) return\n if (message.type === 'studio:connect') {\n active = true\n post(options.route)\n }\n for (const listener of listeners) listener(message)\n }\n const close = (): void => {\n if (closed) return\n closed = true\n active = false\n options.view.removeEventListener('message', receive)\n listeners.clear()\n }\n\n options.view.addEventListener('message', receive)\n return {\n close,\n send: post,\n subscribe: (listener: (message: StudioPreviewPayload) => void) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n}\n\nfunction envelope(\n sessionId: PreviewSessionId,\n payload: PreviewSitePayload | StudioPreviewPayload,\n): DocumentPreviewMessage {\n return Schema.decodeSync(DocumentPreviewMessageSchema)({\n channel: DOCUMENT_PREVIEW_CHANNEL,\n sessionId,\n ...payload,\n })\n}\n\nfunction receivePreviewMessage(\n event: PreviewMessageEvent,\n source: PreviewMessageTarget,\n origin: PreviewOrigin,\n sessionId: PreviewSessionId,\n): DocumentPreviewMessage | undefined {\n if (event.origin !== origin || event.source !== source || !isDocumentPreviewMessage(event.data)) return undefined\n return event.data.sessionId === sessionId ? event.data : undefined\n}\n\nfunction isPreviewSiteMessage(\n message: DocumentPreviewMessage,\n): message is Extract<DocumentPreviewMessage, { readonly type: `preview:${string}` }> {\n return message.type.startsWith('preview:')\n}\n\nfunction isStudioPreviewMessage(\n message: DocumentPreviewMessage,\n): message is Extract<DocumentPreviewMessage, { readonly type: `studio:${string}` }> {\n return message.type.startsWith('studio:')\n}\n","import type { PublicPath } from '@internal/protocol/Documents'\nimport type { PreviewOrigin, PreviewSessionId, PreviewSiteBridge } from '@internal/protocol/Preview'\nimport { makePreviewSiteBridge } from '@internal/protocol/Preview'\nimport { Effect, Exit, Scope } from 'effect'\n\nexport interface SitePreviewConnection extends PreviewSiteBridge {\n readonly close: () => Promise<void>\n}\n\n/** Owns the site-side Effect scope and authenticated parent-window bridge. */\nexport async function openSitePreviewConnection(options: {\n readonly editorOrigin: PreviewOrigin\n readonly route: PublicPath\n readonly sessionId: PreviewSessionId\n}): Promise<SitePreviewConnection> {\n const scope = await Effect.runPromise(Scope.make())\n try {\n const bridge = await Effect.runPromise(\n makePreviewSiteBridge({\n parent: window.parent,\n parentOrigin: options.editorOrigin,\n route: { path: options.route, type: 'preview:ready' },\n sessionId: options.sessionId,\n view: window,\n }).pipe(Effect.provideService(Scope.Scope, scope)),\n )\n let closed = false\n return {\n async close() {\n if (closed) return\n closed = true\n await Effect.runPromise(Scope.close(scope, Exit.void))\n },\n send: bridge.send,\n subscribe: bridge.subscribe,\n }\n } catch (cause) {\n await Effect.runPromise(Scope.close(scope, Exit.fail(cause)))\n throw cause\n }\n}\n"],"mappings":";;;;;AAyEA,SAAgB,sBACd,SACsD;CACtD,OAAO,OAAO,eACZ,OAAO,WAAW,wBAAwB,OAAO,CAAC,IACjD,WAAW,OAAO,WAAW,OAAO,MAAM,CAAC,CAC9C,CAAC,CAAC,KAAK,OAAO,KAAK,EAAE,OAAO,QAAQ,GAAG,aAAa,MAAM,CAAC;AAC7D;AA+DA,SAAS,wBAAwB,SAAmC;CAClE,MAAM,4BAAY,IAAI,IAA6C;CACnE,IAAI,SAAS;CACb,IAAI,SAAS;CAEb,MAAM,QAAQ,YAAyC;EACrD,IAAI,CAAC,UAAU,QAAQ,OAAO;EAC9B,QAAQ,OAAO,YAAY,SAAS,QAAQ,WAAW,OAAO,GAAG,QAAQ,YAAY;EACrF,OAAO;CACT;CACA,MAAM,WAAW,UAAqC;EACpD,IAAI,QAAQ;EACZ,MAAM,UAAU,sBAAsB,OAAO,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,SAAS;EACpG,IAAI,CAAC,WAAW,CAAC,uBAAuB,OAAO,GAAG;EAClD,IAAI,QAAQ,SAAS,kBAAkB;GACrC,SAAS;GACT,KAAK,QAAQ,KAAK;EACpB;EACA,KAAK,MAAM,YAAY,WAAW,SAAS,OAAO;CACpD;CACA,MAAM,cAAoB;EACxB,IAAI,QAAQ;EACZ,SAAS;EACT,SAAS;EACT,QAAQ,KAAK,oBAAoB,WAAW,OAAO;EACnD,UAAU,MAAM;CAClB;CAEA,QAAQ,KAAK,iBAAiB,WAAW,OAAO;CAChD,OAAO;EACL;EACA,MAAM;EACN,YAAY,aAAsD;GAChE,UAAU,IAAI,QAAQ;GACtB,aAAa,UAAU,OAAO,QAAQ;EACxC;CACF;AACF;AAEA,SAAS,SACP,WACA,SACwB;CACxB,OAAO,OAAO,WAAWA,sBAA4B,CAAC,CAAC;EACrD,SAAS;EACT;EACA,GAAG;CACL,CAAC;AACH;AAEA,SAAS,sBACP,OACA,QACA,QACA,WACoC;CACpC,IAAI,MAAM,WAAW,UAAU,MAAM,WAAW,UAAU,CAAC,yBAAyB,MAAM,IAAI,GAAG,OAAO;CACxG,OAAO,MAAM,KAAK,cAAc,YAAY,MAAM,OAAO;AAC3D;AAQA,SAAS,uBACP,SACmF;CACnF,OAAO,QAAQ,KAAK,WAAW,SAAS;AAC1C;;;;;AC3MA,eAAsB,0BAA0B,SAIb;CACjC,MAAM,QAAQ,MAAM,OAAO,WAAW,MAAM,KAAK,CAAC;CAClD,IAAI;EACF,MAAM,SAAS,MAAM,OAAO,WAC1B,sBAAsB;GACpB,QAAQ,OAAO;GACf,cAAc,QAAQ;GACtB,OAAO;IAAE,MAAM,QAAQ;IAAO,MAAM;GAAgB;GACpD,WAAW,QAAQ;GACnB,MAAM;EACR,CAAC,CAAC,CAAC,KAAK,OAAO,eAAe,MAAM,OAAO,KAAK,CAAC,CACnD;EACA,IAAI,SAAS;EACb,OAAO;GACL,MAAM,QAAQ;IACZ,IAAI,QAAQ;IACZ,SAAS;IACT,MAAM,OAAO,WAAW,MAAM,MAAM,OAAO,KAAK,IAAI,CAAC;GACvD;GACA,MAAM,OAAO;GACb,WAAW,OAAO;EACpB;CACF,SAAS,OAAO;EACd,MAAM,OAAO,WAAW,MAAM,MAAM,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC;EAC5D,MAAM;CACR;AACF"}