@lssm/lib.files 0.0.0-canary-20251210082611 → 0.0.0-canary-20251212004227

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -162,7 +162,7 @@ const attachments = await attachmentService.list({
162
162
  This module integrates with:
163
163
 
164
164
  - `@lssm/lib.identity-rbac` - Access control
165
- - `@lssm/modules.audit-trail` - File operations audit
165
+ - `@lssm/module.audit-trail` - File operations audit
166
166
 
167
167
  ## Schema Contribution
168
168
 
@@ -0,0 +1,51 @@
1
+ import{registerDocBlocks as e}from"@lssm/lib.contracts/docs";e([{id:`docs.files.attachments`,title:`Files, Versions & Attachments`,summary:`Spec-first file management with storage adapters, versioning, presigned URLs, and polymorphic attachments for any entity.`,kind:`reference`,visibility:`public`,route:`/docs/files/attachments`,tags:[`files`,`attachments`,`storage`,`versions`],body:`## Capabilities
2
+
3
+ - **Entities**: File, FileVersion, Attachment, UploadSession with retention, checksum, ACLs.
4
+ - **Contracts**: upload/update/delete/list/get files; presigned upload/download; version create/list; attach/detach/list attachments.
5
+ - **Storage**: pluggable adapters (Local, S3 placeholder + interface), in-memory for tests.
6
+ - **Events**: file.uploaded/deleted, attachment.added/removed (see events export).
7
+
8
+ ## Usage
9
+
10
+ 1) Compose schema
11
+ - Include \`filesSchemaContribution\` in your schema composition.
12
+
13
+ 2) Register contracts/events
14
+ - Import contracts and events from \`@lssm/lib.files\` in your spec registry.
15
+
16
+ 3) Wire storage
17
+ - Provide a \`StorageAdapter\` implementation (local/in-memory or S3 via custom impl).
18
+ - Use \`createStorageAdapter\` with config to instantiate.
19
+
20
+ 4) Attach to domain entities
21
+ - Use \`attachment.attach\` with \`entityType/entityId\` to link files to deals, orders, runs, etc.
22
+
23
+ ## Example
24
+
25
+ \`\`\`ts
26
+ import {
27
+ UploadFileContract,
28
+ AttachFileContract,
29
+ InMemoryStorageAdapter,
30
+ } from '@lssm/lib.files';
31
+
32
+ // storage
33
+ const storage = new InMemoryStorageAdapter();
34
+
35
+ // upload
36
+ const file = await storage.upload({
37
+ path: 'org-1/reports/r1.pdf',
38
+ content: Buffer.from(pdfBytes),
39
+ mimeType: 'application/pdf',
40
+ });
41
+
42
+ // attach
43
+ await AttachFileContract; // register in spec to enable attach flows
44
+ \`\`\`,
45
+
46
+ ## Guardrails
47
+
48
+ - Enforce size/MIME limits in your handlers; avoid storing PII in paths.
49
+ - Keep \`orgId\` scoped for multi-tenant isolation; prefer presigned URLs for public delivery.
50
+ - Persist checksums for integrity; emit audit + events for access/retention changes.
51
+ `}]);
@@ -0,0 +1 @@
1
+ import"./files.docblock.js";
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{AttachmentAttachedEvent as e,AttachmentDetachedEvent as t,FileDeletedEvent as n,FileEvents as r,FileUpdatedEvent as i,FileUploadedEvent as a,FileVersionCreatedEvent as o,UploadSessionCompletedEvent as s,UploadSessionStartedEvent as c}from"./events.js";import{AttachmentEntity as l,FileEntity as u,FileStatusEnum as d,FileVersionEntity as f,StorageProviderEnum as p,UploadSessionEntity as m,fileEntities as h,filesSchemaContribution as g}from"./entities/index.js";import{AttachFileContract as _,AttachmentModel as v,CreatePresignedUrlContract as y,CreateVersionContract as b,DeleteFileContract as x,DetachFileContract as S,FileModel as C,FileVersionModel as w,GetDownloadUrlContract as T,GetFileContract as E,GetVersionsContract as D,ListAttachmentsContract as O,ListFilesContract as k,PresignedUrlModel as A,UpdateFileContract as j,UploadFileContract as M}from"./contracts/index.js";import{InMemoryStorageAdapter as N,LocalStorageAdapter as P,S3StorageAdapter as F,createStorageAdapter as I}from"./storage/index.js";export{_ as AttachFileContract,e as AttachmentAttachedEvent,t as AttachmentDetachedEvent,l as AttachmentEntity,v as AttachmentModel,y as CreatePresignedUrlContract,b as CreateVersionContract,x as DeleteFileContract,S as DetachFileContract,n as FileDeletedEvent,u as FileEntity,r as FileEvents,C as FileModel,d as FileStatusEnum,i as FileUpdatedEvent,a as FileUploadedEvent,o as FileVersionCreatedEvent,f as FileVersionEntity,w as FileVersionModel,T as GetDownloadUrlContract,E as GetFileContract,D as GetVersionsContract,N as InMemoryStorageAdapter,O as ListAttachmentsContract,k as ListFilesContract,P as LocalStorageAdapter,A as PresignedUrlModel,F as S3StorageAdapter,p as StorageProviderEnum,j as UpdateFileContract,M as UploadFileContract,s as UploadSessionCompletedEvent,m as UploadSessionEntity,c as UploadSessionStartedEvent,I as createStorageAdapter,h as fileEntities,g as filesSchemaContribution};
1
+ import{AttachmentAttachedEvent as e,AttachmentDetachedEvent as t,FileDeletedEvent as n,FileEvents as r,FileUpdatedEvent as i,FileUploadedEvent as a,FileVersionCreatedEvent as o,UploadSessionCompletedEvent as s,UploadSessionStartedEvent as c}from"./events.js";import{AttachmentEntity as l,FileEntity as u,FileStatusEnum as d,FileVersionEntity as f,StorageProviderEnum as p,UploadSessionEntity as m,fileEntities as h,filesSchemaContribution as g}from"./entities/index.js";import{AttachFileContract as _,AttachmentModel as v,CreatePresignedUrlContract as y,CreateVersionContract as b,DeleteFileContract as x,DetachFileContract as S,FileModel as C,FileVersionModel as w,GetDownloadUrlContract as T,GetFileContract as E,GetVersionsContract as D,ListAttachmentsContract as O,ListFilesContract as k,PresignedUrlModel as A,UpdateFileContract as j,UploadFileContract as M}from"./contracts/index.js";import{InMemoryStorageAdapter as N,LocalStorageAdapter as P,S3StorageAdapter as F,createStorageAdapter as I}from"./storage/index.js";import"./docs/index.js";export{_ as AttachFileContract,e as AttachmentAttachedEvent,t as AttachmentDetachedEvent,l as AttachmentEntity,v as AttachmentModel,y as CreatePresignedUrlContract,b as CreateVersionContract,x as DeleteFileContract,S as DetachFileContract,n as FileDeletedEvent,u as FileEntity,r as FileEvents,C as FileModel,d as FileStatusEnum,i as FileUpdatedEvent,a as FileUploadedEvent,o as FileVersionCreatedEvent,f as FileVersionEntity,w as FileVersionModel,T as GetDownloadUrlContract,E as GetFileContract,D as GetVersionsContract,N as InMemoryStorageAdapter,O as ListAttachmentsContract,k as ListFilesContract,P as LocalStorageAdapter,A as PresignedUrlModel,F as S3StorageAdapter,p as StorageProviderEnum,j as UpdateFileContract,M as UploadFileContract,s as UploadSessionCompletedEvent,m as UploadSessionEntity,c as UploadSessionStartedEvent,I as createStorageAdapter,h as fileEntities,g as filesSchemaContribution};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/lib.files",
3
- "version": "0.0.0-canary-20251210082611",
3
+ "version": "0.0.0-canary-20251212004227",
4
4
  "description": "Files, documents and attachments module for ContractSpec applications",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -29,6 +29,8 @@
29
29
  "exports": {
30
30
  ".": "./src/index.ts",
31
31
  "./contracts": "./src/contracts/index.ts",
32
+ "./docs": "./src/docs/index.ts",
33
+ "./docs/files.docblock": "./src/docs/files.docblock.ts",
32
34
  "./entities": "./src/entities/index.ts",
33
35
  "./events": "./src/events.ts",
34
36
  "./storage": "./src/storage/index.ts",
@@ -44,6 +46,8 @@
44
46
  "exports": {
45
47
  ".": "./dist/index.js",
46
48
  "./contracts": "./dist/contracts/index.js",
49
+ "./docs": "./dist/docs/index.js",
50
+ "./docs/files.docblock": "./dist/docs/files.docblock.js",
47
51
  "./entities": "./dist/entities/index.js",
48
52
  "./events": "./dist/events.js",
49
53
  "./storage": "./dist/storage/index.js",