Skip to content

Commit 4e2b29d

Browse files
committed
fix(project-files): align public sharing with current renderer contracts
1 parent 687e93f commit 4e2b29d

5 files changed

Lines changed: 32 additions & 14 deletions

File tree

‎apps/sim/lib/projects/files/__integration__/content-sharing.integration.ts‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -670,9 +670,7 @@ describe('Public file shares against PostgreSQL and private storage', () => {
670670
const { updateProjectFileShare } = await import('@/lib/projects/files/application/shares')
671671
const { authorizePublicFileShare, readPublicFileShare, readPublicFileShareContent } =
672672
await import('@/lib/public-shares/application')
673-
const { uploadWorkspaceFile } = await import(
674-
'@/lib/uploads/contexts/workspace/workspace-file-manager'
675-
)
673+
const { uploadWorkspaceFile } = await import('@/lib/uploads/contexts/workspace/file-manager')
676674
const { upsertFileShare } = await import('@/lib/public-shares/manager')
677675
const f = await fixture()
678676
const { file } = await createProjectFile.execute({

‎apps/sim/lib/public-shares/application/owner-adapters.ts‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ import { OrchestrationError } from '@/lib/core/orchestration/types'
44
import type { DbTransaction } from '@/lib/db/types'
55
import { lockProject, lockWorkspaceProject } from '@/lib/projects/membership'
66
import { requireProjectApiEnabled } from '@/lib/projects/rollout.server'
7-
import { type E2BDocFormat, resolveServableDoc } from '@/lib/uploads/documents/compile'
7+
import {
8+
type E2BDocFormat,
9+
fileDocumentCacheIdentity,
10+
resolveServableDoc,
11+
} from '@/lib/uploads/documents/compile'
812
import { loadCompiledDoc } from '@/lib/uploads/documents/compiled-store'
913
import { fileDocumentInputIdentity } from '@/lib/uploads/documents/input-identity'
1014
import { MAX_BUFFERED_TRANSFER_BYTES } from '@/lib/uploads/shared/types'
@@ -78,12 +82,17 @@ const adapters: FileOwnerAdapters<PublicFileOwnerAdapter> = {
7882
},
7983
storageContext: 'project',
8084
pageOptions: (projectId) => ({ projectId }),
81-
async readCompiled({ owner, source, format, dependencies }) {
85+
async readCompiled({ owner, source, sourceMime, format, dependencies }) {
8286
const buffer = await loadCompiledDoc(
8387
owner,
8488
source.toString('utf8'),
8589
format.ext,
86-
fileDocumentInputIdentity(owner, dependencies),
90+
fileDocumentCacheIdentity(
91+
source.toString('utf8'),
92+
format,
93+
sourceMime,
94+
fileDocumentInputIdentity(owner, dependencies)
95+
),
8796
{ maxBytes: MAX_BUFFERED_TRANSFER_BYTES }
8897
)
8998
if (!buffer)

‎apps/sim/lib/public-shares/application/read.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
import {
2222
getBoundWorkspaceFileSecretProvenanceByMetadata,
2323
mergeWorkspaceFileSecretProvenance,
24-
} from '@/lib/uploads/contexts/workspace/workspace-file-secret-provenance'
24+
} from '@/lib/uploads/contexts/workspace/file-secret-provenance'
2525
import { downloadFile, headObject } from '@/lib/uploads/core/storage-service'
2626
import {
2727
collectReferencedFileIds,
@@ -32,7 +32,7 @@ import {
3232
import { hasEmbeddedFileRef } from '@/lib/uploads/server/embedded-image-refs'
3333
import { resolveServableImageBytes } from '@/lib/uploads/server/image-derivative'
3434
import { MAX_BUFFERED_TRANSFER_BYTES } from '@/lib/uploads/shared/types'
35-
import { resolveEffectiveMimeType } from '@/lib/uploads/utils/file-utils'
35+
import { resolveEffectiveMimeType } from '@/lib/uploads/utils/file'
3636
import { sniffImageContentType } from '@/lib/uploads/utils/validation'
3737
import { reportWorkspaceFileDelivery } from '@/lib/workspace-files/application/file-delivery-observer'
3838
import { fileOwnerCondition } from '@/lib/workspace-files/ownership-query'

‎apps/sim/scripts/test-project-file-public-e2e.ts‎

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import sharp from 'sharp'
1010
import { encryptSecret } from '@/lib/core/security/encryption'
1111
import { getStorageProvider } from '@/lib/uploads/config'
1212
import { UPLOAD_DIR_SERVER } from '@/lib/uploads/core/setup.server'
13-
import { storeCompiledDoc } from '@/lib/uploads/documents/compiled-store'
13+
import { fileDocumentCacheIdentity, getE2BDocFormat } from '@/lib/uploads/documents/compile'
14+
import { compiledArtifactKey, storeCompiledDoc } from '@/lib/uploads/documents/compiled-store'
1415

1516
/** Real public wire/cookie proof; SQL and Redis only seed disposable sharing and OTP fixtures. */
1617
const base = new URL(required(process.env.PROJECT_FILE_PUBLIC_BASE_URL))
@@ -305,17 +306,25 @@ try {
305306
json(unavailable, 409).error,
306307
'This document is still being prepared. Please try again shortly.'
307308
)
308-
let key: string | undefined
309+
const format = await getE2BDocFormat('output.pptx')
310+
assert.ok(format)
311+
const cacheIdentity =
312+
owner === 'project'
313+
? fileDocumentCacheIdentity(source, format, 'text/x-pptxgenjs')
314+
: undefined
315+
const key = compiledArtifactKey(
316+
{ entityType: owner, entityId: owner === 'workspace' ? workspaceId : projectId },
317+
source,
318+
'pptx',
319+
cacheIdentity
320+
)
309321
await storeCompiledDoc(
310322
{ entityType: owner, entityId: owner === 'workspace' ? workspaceId : projectId },
311323
source,
312324
'pptx',
313325
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
314326
Buffer.from('PK\u0003\u0004output-fixture'),
315-
undefined,
316-
(writtenKey) => {
317-
key = writtenKey
318-
}
327+
cacheIdentity
319328
)
320329
const path = resolve(UPLOAD_DIR_SERVER, required(key))
321330
assert.ok(path.startsWith(`${resolve(UPLOAD_DIR_SERVER)}${sep}`))

‎knip.jsonc‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
"lib/api/contracts/file-copy-input.ts": ["exports", "types"],
6060
// API contract conventions require named boundary schemas and wire aliases before client adoption.
6161
"lib/api/contracts/project-file-downloads.ts": ["exports", "types"],
62+
"lib/api/contracts/project-file-shares.ts": ["exports", "types"],
63+
"lib/api/contracts/v2/project-file-shares.ts": ["exports", "types"],
6264
"lib/api/contracts/project-file-extraction.ts": ["exports", "types"],
6365
"lib/api/contracts/v2/project-file-downloads.ts": ["exports", "types"],
6466
"lib/api/contracts/v2/project-file-extraction.ts": ["exports", "types"],

0 commit comments

Comments
 (0)