{"factsVersion":1,"extractor":{"engine":"@open-mercato/cli@0.9.0 extractModuleFacts","factsContractVersion":2,"catalog":"om-modules rentgen 1","durationMs":113},"package":{"locator":"npm:@open-mercato/storage-s3","name":"@open-mercato/storage-s3","version":"0.9.0","integrity":"sha512-NUs20ShVghtlKLTcxbvOb1sRcIzxYCrmcYbH3AdeLr6pCJEt6GSX2tREzzyebWkhdsOWAxSIAadWuhcSEyZFNw==","source":"npm-tarball","gitRef":null},"gate":{"installable":true,"needsModuleFlag":false,"reason":null,"modules":[{"id":"storage_s3","src":true,"dist":true}]},"kind":"module","license":{"value":"MIT","kind":"osi","mismatch":false,"sources":{"packageJson":"MIT","licenseFile":null,"moduleInfo":null,"integrationTs":"MIT"}},"omPeers":{"@open-mercato/shared":"0.9.0"},"dependencies":{"@aws-sdk/client-s3":"^3.1085.0","@aws-sdk/s3-request-presigner":"^3.1085.0","@open-mercato/core":"0.9.0","@open-mercato/queue":"0.9.0"},"agentsMd":false,"readmeExcerpt":null,"modules":[{"id":"storage_s3","title":"S3-Compatible Storage","description":"Store attachments and files in AWS S3, DigitalOcean Spaces, MinIO, or any S3-compatible object storage.","requires":[],"ejectable":null,"data":{"entities":[],"migrations":{"count":0,"first":null,"last":null},"customEntities":0},"http":{"routes":[{"method":"DELETE","path":"/api/storage-providers/s3/delete","requireAuth":true,"requireFeatures":["storage_providers.manage"],"hasOpenApi":true,"src":{"file":"src/modules/storage_s3/api/delete/storage-providers/s3/delete.ts","line":70}},{"method":"GET","path":"/api/storage-providers/s3/download","requireAuth":true,"requireFeatures":["storage_providers.manage"],"hasOpenApi":true,"src":{"file":"src/modules/storage_s3/api/get/storage-providers/s3/download.ts","line":77}},{"method":"GET","path":"/api/storage-providers/s3/list","requireAuth":true,"requireFeatures":["storage_providers.manage"],"hasOpenApi":true,"src":{"file":"src/modules/storage_s3/api/get/storage-providers/s3/list.ts","line":118}},{"method":"PUT","path":"/api/storage-providers/s3/signed-upload/[token]","requireAuth":false,"requireFeatures":[],"hasOpenApi":true,"src":{"file":"src/modules/storage_s3/api/put/storage-providers/s3/signed-upload/[token].ts","line":136}},{"method":"POST","path":"/api/storage-providers/s3/signed-url","requireAuth":true,"requireFeatures":["storage_providers.manage"],"hasOpenApi":true,"src":{"file":"src/modules/storage_s3/api/post/storage-providers/s3/signed-url.ts","line":138}},{"method":"POST","path":"/api/storage-providers/s3/upload","requireAuth":true,"requireFeatures":["storage_providers.manage"],"hasOpenApi":true,"src":{"file":"src/modules/storage_s3/api/post/storage-providers/s3/upload.ts","line":225}}],"legacyRouteFiles":6,"authResolved":1},"security":{"aclFeatures":["storage_providers.manage"],"setupDefaultRoleFeatures":true},"events":{"emits":[],"subscribes":[]},"ui":{"backendPages":[],"frontendPages":[],"widgets":0,"extensionHosts":0},"background":{"workers":[{"queue":"storage-s3-quota-recovery"}],"cli":["configure-from-env","help"]},"ai":{"tools":[],"agents":[]},"config":{"credentials":[{"key":"authMode","type":"select","required":false},{"key":"accessKeyId","type":"text","required":true},{"key":"secretAccessKey","type":"secret","required":true},{"key":"sessionToken","type":"secret","required":false},{"key":"region","type":"text","required":true},{"key":"bucket","type":"text","required":true},{"key":"endpoint","type":"url","required":false},{"key":"forcePathStyle","type":"boolean","required":false}],"env":[{"name":"OM_STORAGE_S3_ALLOW_INTERNAL_ENDPOINTS","src":{"file":"src/modules/storage_s3/lib/endpoint-safety.ts","line":173}},{"name":"LOCALSTACK_PORT","src":{"file":"src/test-helpers/s3Fixtures.ts","line":10}},{"name":"LOCALSTACK_S3_ACCESS_KEY_ID","src":{"file":"src/test-helpers/s3Fixtures.ts","line":19}},{"name":"LOCALSTACK_S3_SECRET_ACCESS_KEY","src":{"file":"src/test-helpers/s3Fixtures.ts","line":20}}]},"network":{"hosts":[],"undeclared":[]},"extends":[{"kind":"specialized-registry","target":"integration:storage_s3"}],"omImports":{"@open-mercato/core":{"modules/attachments/lib/drivers":["PrepareFilePayload","ReadFileResult","StorageDriver","StoreFilePayload","StoredFile","registerExternalCredentialEnhancer","registerExternalStorageDriver"],"modules/attachments/lib/quota-service":["AttachmentQuotaService"],"modules/attachments/lib/security":["buildAttachmentContentDisposition","canRenderInlineAttachment","detectAttachmentMimeType","hasDangerousExecutableExtension","isActiveContentAttachment","sanitizeUploadedFileName"],"modules/attachments/lib/upload-limits":["isMultipartRequestWithinUploadLimit","isMultipartUploadLimitError","parseMultipartFormDataWithinUploadLimit","resolveAttachmentMaxBytes","willExceedAttachmentTenantQuota"],"modules/directory/data/entities":["Organization"],"modules/integrations/lib/credentials-service":["CredentialsService","createCredentialsService"],"modules/integrations/lib/log-service":["IntegrationLogService","createIntegrationLogService"]},"@open-mercato/queue":{".":["JobContext","QueuedJob","WorkerMeta","createModuleQueue"]},"@open-mercato/shared":{"lib/auth/server":["getAuthFromRequest"],"lib/boolean":["parseBooleanToken","parseBooleanWithDefault"],"lib/di/container":["AppContainer","createRequestContainer"],"lib/encryption/find":["findWithDecryption"],"lib/i18n/server":["resolveTranslations"],"lib/logger":["createLogger"],"lib/openapi":["OpenApiRouteDoc"],"lib/url-safety":["HostLookup","ResolvedHostAddress","UrlSafetyReason","assertSafeOutboundUrl","assertStaticallySafeOutboundUrl","parseOutboundUrl","resolveSafeOutboundUrl"],"modules/integrations/types":["IntegrationBundle","IntegrationDefinition","IntegrationScope"],"modules/registry":["ModuleCli"],"modules/setup":["ModuleSetupConfig"]}},"collisionKeys":{"moduleId":"storage_s3","tables":[],"aclFeatures":["storage_providers.manage"],"eventIds":[],"backendRoutes":[]},"publicRoutes":1,"glyph":"0200201","lint":[{"code":"peer-exact-pin","severity":"warn","message":"Peer dependencies pin Open Mercato exactly (@open-mercato/shared 0.9.0). Use a range.","anchor":"i2 §1.4","src":null},{"code":"no-agents-md","severity":"info","message":"No AGENTS.md in the package.","anchor":"g3 §3","src":null},{"code":"public-routes","severity":"info","message":"1 of 6 routes do not require authentication.","anchor":null,"src":{"file":"src/modules/storage_s3/api/put/storage-providers/s3/signed-upload/[token].ts","line":136}},{"code":"ships-tests","severity":"info","message":"The tarball ships test files.","anchor":null,"src":null},{"code":"version-drift","severity":"info","message":"integration.ts says 1.0.0, package.json says 0.9.0.","anchor":null,"src":{"file":"src/modules/storage_s3/integration.ts","line":3}}]}],"coverage":{"routesAuthResolved":1,"integrationTs":"expanded"},"diagnostics":[]}
