@webiny/api-file-manager 6.4.9 → 6.4.10-beta.1
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/features/settings/UpdateSettings/UpdateSettingsUseCase.js +1 -0
- package/features/settings/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
- package/graphql/filesSchema.js +1 -0
- package/graphql/filesSchema.js.map +1 -1
- package/graphql/getFileByUrl.js +5 -2
- package/graphql/getFileByUrl.js.map +1 -1
- package/graphql/index.js +1 -0
- package/graphql/index.js.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/package.json +16 -16
|
@@ -22,6 +22,7 @@ class UpdateSettingsUseCaseImpl {
|
|
|
22
22
|
}
|
|
23
23
|
const validatedInput = validationResult.data;
|
|
24
24
|
const existingResult = await this.getSettings.execute();
|
|
25
|
+
if (existingResult.isFail()) return existingResult;
|
|
25
26
|
const existing = existingResult.value;
|
|
26
27
|
const updatedSettings = {
|
|
27
28
|
...existing,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/settings/UpdateSettings/UpdateSettingsUseCase.js","sources":["../../../../src/features/settings/UpdateSettings/UpdateSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { UpdateSettingsUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { GetSettingsUseCase } from \"../GetSettings/abstractions.js\";\nimport type { FileManagerSettings } from \"~/domain/settings/types.js\";\nimport type { UpdateSettingsInput } from \"~/domain/settings/types.js\";\nimport { SettingsUpdateError } from \"~/domain/settings/errors.js\";\nimport { SettingsValidationError } from \"~/domain/settings/errors.js\";\nimport { FILE_MANAGER_GENERAL_SETTINGS } from \"~/domain/settings/constants.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { SettingsBeforeUpdateEvent, SettingsAfterUpdateEvent } from \"./events.js\";\nimport { updateSettingsValidation } from \"~/domain/settings/validation.js\";\nimport { createZodError } from \"@webiny/utils\";\n\nclass UpdateSettingsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private getSettings: GetSettingsUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n input: UpdateSettingsInput\n ): Promise<Result<FileManagerSettings, UseCaseAbstraction.Error>> {\n // Validate input\n const validationResult = await updateSettingsValidation.safeParseAsync(input);\n if (!validationResult.success) {\n const zodError = createZodError(validationResult.error);\n return Result.fail(new SettingsValidationError(zodError.data!.invalidFields));\n }\n\n const validatedInput = validationResult.data;\n\n // Get existing settings to merge with new data\n const existingResult = await this.getSettings.execute();\n const existing = existingResult.value;\n\n // Prepare merged settings\n const updatedSettings: FileManagerSettings = {\n ...existing,\n ...validatedInput\n };\n\n // Publish BeforeUpdate event\n await this.eventPublisher.publish(\n new SettingsBeforeUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n const result = await this.keyValueStore.set(FILE_MANAGER_GENERAL_SETTINGS, updatedSettings);\n\n if (result.isFail()) {\n return Result.fail(new SettingsUpdateError(result.error));\n }\n\n // Publish AfterUpdate event\n await this.eventPublisher.publish(\n new SettingsAfterUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n return Result.ok(updatedSettings);\n }\n}\n\nexport const UpdateSettingsUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdateSettingsUseCaseImpl,\n dependencies: [KeyValueStore, GetSettingsUseCase, EventPublisher]\n});\n"],"names":["UpdateSettingsUseCaseImpl","keyValueStore","getSettings","eventPublisher","input","validationResult","updateSettingsValidation","zodError","createZodError","Result","SettingsValidationError","validatedInput","existingResult","existing","updatedSettings","SettingsBeforeUpdateEvent","result","FILE_MANAGER_GENERAL_SETTINGS","SettingsUpdateError","SettingsAfterUpdateEvent","UpdateSettingsUseCase","UseCaseAbstraction","KeyValueStore","GetSettingsUseCase","EventPublisher"],"mappings":";;;;;;;;;;AAcA,MAAMA;IACF,YACYC,aAAsC,EACtCC,WAAyC,EACzCC,cAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAA0B,EACoC;QAE9D,MAAMC,mBAAmB,MAAMC,yBAAyB,cAAc,CAACF;QACvE,IAAI,CAACC,iBAAiB,OAAO,EAAE;YAC3B,MAAME,WAAWC,eAAeH,iBAAiB,KAAK;YACtD,OAAOI,OAAO,IAAI,CAAC,IAAIC,wBAAwBH,SAAS,IAAI,CAAE,aAAa;QAC/E;QAEA,MAAMI,iBAAiBN,iBAAiB,IAAI;QAG5C,MAAMO,iBAAiB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO;QACrD,MAAMC,WAAWD,eAAe,KAAK;QAGrC,MAAME,kBAAuC;YACzC,GAAGD,QAAQ;YACX,GAAGF,cAAc;QACrB;QAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAII,0BAA0B;YAC1B,UAAUF;YACV,UAAUC;YACV,OAAOH;QACX;QAGJ,MAAMK,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAACC,+BAA+BH;QAE3E,IAAIE,OAAO,MAAM,IACb,OAAOP,OAAO,IAAI,CAAC,IAAIS,oBAAoBF,OAAO,KAAK;QAI3D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,yBAAyB;YACzB,UAAUN;YACV,UAAUC;YACV,OAAOH;QACX;QAGJ,OAAOF,OAAO,EAAE,CAACK;IACrB;AACJ;AAEO,MAAMM,8CAAwBC,sBAAAA,oBAAuC,CAAC;IACzE,gBAAgBrB;IAChB,cAAc;QAACsB;QAAeC;QAAoBC;KAAe;AACrE"}
|
|
1
|
+
{"version":3,"file":"features/settings/UpdateSettings/UpdateSettingsUseCase.js","sources":["../../../../src/features/settings/UpdateSettings/UpdateSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { UpdateSettingsUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { GetSettingsUseCase } from \"../GetSettings/abstractions.js\";\nimport type { FileManagerSettings } from \"~/domain/settings/types.js\";\nimport type { UpdateSettingsInput } from \"~/domain/settings/types.js\";\nimport { SettingsUpdateError } from \"~/domain/settings/errors.js\";\nimport { SettingsValidationError } from \"~/domain/settings/errors.js\";\nimport { FILE_MANAGER_GENERAL_SETTINGS } from \"~/domain/settings/constants.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { SettingsBeforeUpdateEvent, SettingsAfterUpdateEvent } from \"./events.js\";\nimport { updateSettingsValidation } from \"~/domain/settings/validation.js\";\nimport { createZodError } from \"@webiny/utils\";\n\nclass UpdateSettingsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private getSettings: GetSettingsUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n input: UpdateSettingsInput\n ): Promise<Result<FileManagerSettings, UseCaseAbstraction.Error>> {\n // Validate input\n const validationResult = await updateSettingsValidation.safeParseAsync(input);\n if (!validationResult.success) {\n const zodError = createZodError(validationResult.error);\n return Result.fail(new SettingsValidationError(zodError.data!.invalidFields));\n }\n\n const validatedInput = validationResult.data;\n\n // Get existing settings to merge with new data\n const existingResult = await this.getSettings.execute();\n if (existingResult.isFail()) {\n return existingResult;\n }\n const existing = existingResult.value;\n\n // Prepare merged settings\n const updatedSettings: FileManagerSettings = {\n ...existing,\n ...validatedInput\n };\n\n // Publish BeforeUpdate event\n await this.eventPublisher.publish(\n new SettingsBeforeUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n const result = await this.keyValueStore.set(FILE_MANAGER_GENERAL_SETTINGS, updatedSettings);\n\n if (result.isFail()) {\n return Result.fail(new SettingsUpdateError(result.error));\n }\n\n // Publish AfterUpdate event\n await this.eventPublisher.publish(\n new SettingsAfterUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n return Result.ok(updatedSettings);\n }\n}\n\nexport const UpdateSettingsUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdateSettingsUseCaseImpl,\n dependencies: [KeyValueStore, GetSettingsUseCase, EventPublisher]\n});\n"],"names":["UpdateSettingsUseCaseImpl","keyValueStore","getSettings","eventPublisher","input","validationResult","updateSettingsValidation","zodError","createZodError","Result","SettingsValidationError","validatedInput","existingResult","existing","updatedSettings","SettingsBeforeUpdateEvent","result","FILE_MANAGER_GENERAL_SETTINGS","SettingsUpdateError","SettingsAfterUpdateEvent","UpdateSettingsUseCase","UseCaseAbstraction","KeyValueStore","GetSettingsUseCase","EventPublisher"],"mappings":";;;;;;;;;;AAcA,MAAMA;IACF,YACYC,aAAsC,EACtCC,WAAyC,EACzCC,cAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAA0B,EACoC;QAE9D,MAAMC,mBAAmB,MAAMC,yBAAyB,cAAc,CAACF;QACvE,IAAI,CAACC,iBAAiB,OAAO,EAAE;YAC3B,MAAME,WAAWC,eAAeH,iBAAiB,KAAK;YACtD,OAAOI,OAAO,IAAI,CAAC,IAAIC,wBAAwBH,SAAS,IAAI,CAAE,aAAa;QAC/E;QAEA,MAAMI,iBAAiBN,iBAAiB,IAAI;QAG5C,MAAMO,iBAAiB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO;QACrD,IAAIA,eAAe,MAAM,IACrB,OAAOA;QAEX,MAAMC,WAAWD,eAAe,KAAK;QAGrC,MAAME,kBAAuC;YACzC,GAAGD,QAAQ;YACX,GAAGF,cAAc;QACrB;QAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAII,0BAA0B;YAC1B,UAAUF;YACV,UAAUC;YACV,OAAOH;QACX;QAGJ,MAAMK,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAACC,+BAA+BH;QAE3E,IAAIE,OAAO,MAAM,IACb,OAAOP,OAAO,IAAI,CAAC,IAAIS,oBAAoBF,OAAO,KAAK;QAI3D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,yBAAyB;YACzB,UAAUN;YACV,UAAUC;YACV,OAAOH;QACX;QAGJ,OAAOF,OAAO,EAAE,CAACK;IACrB;AACJ;AAEO,MAAMM,8CAAwBC,sBAAAA,oBAAuC,CAAC;IACzE,gBAAgBrB;IAChB,cAAc;QAACsB;QAAeC;QAAoBC;KAAe;AACrE"}
|
package/graphql/filesSchema.js
CHANGED
|
@@ -25,6 +25,7 @@ const createFilesSchema = (params)=>{
|
|
|
25
25
|
async src (file, _, context) {
|
|
26
26
|
const getSettings = context.container.resolve(GetSettingsUseCase);
|
|
27
27
|
const result = await getSettings.execute();
|
|
28
|
+
if (result.isFail()) throw result.error;
|
|
28
29
|
const settings = result.value;
|
|
29
30
|
return (settings?.srcPrefix || "") + file.key;
|
|
30
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/filesSchema.js","sources":["../../src/graphql/filesSchema.ts"],"sourcesContent":["import {\n ErrorResponse,\n GraphQLSchemaPlugin,\n ListResponse,\n Response\n} from \"@webiny/handler-graphql\";\nimport { emptyResolver, resolve } from \"./utils.js\";\nimport type { CreateFilesTypeDefsParams } from \"~/graphql/createFilesTypeDefs.js\";\nimport { createFilesTypeDefs } from \"~/graphql/createFilesTypeDefs.js\";\nimport NotAuthorizedResponse from \"@webiny/api-core/graphql/security/NotAuthorizedResponse.js\";\nimport { GetFileUseCase } from \"~/features/file/GetFile/abstractions.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/abstractions.js\";\nimport { ListTagsUseCase } from \"~/features/file/ListTags/abstractions.js\";\nimport { CreateFileUseCase } from \"~/features/file/CreateFile/abstractions.js\";\nimport { CreateFilesInBatchUseCase } from \"~/features/file/CreateFilesInBatch/abstractions.js\";\nimport { UpdateFileUseCase } from \"~/features/file/UpdateFile/abstractions.js\";\nimport { DeleteFileUseCase } from \"~/features/file/DeleteFile/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\n\nexport const createFilesSchema = (params: CreateFilesTypeDefsParams) => {\n const fileManagerGraphQL = new GraphQLSchemaPlugin<ApiCoreContext>({\n typeDefs: createFilesTypeDefs(params),\n resolvers: {\n Query: {\n fileManager: emptyResolver\n },\n Mutation: {\n fileManager: emptyResolver\n },\n FmFile: {\n async src(file, _, context) {\n // TODO: create `FileUrlGenerator` service to use here\n const getSettings = context.container.resolve(GetSettingsUseCase);\n const result = await getSettings.execute();\n const settings = result.value;\n return (settings?.srcPrefix || \"\") + file.key;\n }\n },\n FmQuery: {\n getFileModel(_, __, context) {\n const identity = context.security.getIdentity();\n if (!identity) {\n return new NotAuthorizedResponse();\n }\n\n return resolve(async () => {\n return context.container.resolve(FileModel);\n });\n },\n async getFile(_, args: any, context) {\n const getFile = context.container.resolve(GetFileUseCase);\n const result = await getFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async listFiles(_, args, context) {\n const listFiles = context.container.resolve(ListFilesUseCase);\n const result = await listFiles.execute(args);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new ListResponse(result.value.items, result.value.meta);\n },\n async listTags(_, args: any, context) {\n const listTags = context.container.resolve(ListTagsUseCase);\n const result = await listTags.execute(args || {});\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n }\n },\n FmMutation: {\n async createFile(_, args: any, context) {\n const createFile = context.container.resolve(CreateFileUseCase);\n const result = await createFile.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async createFiles(_, args: any, context) {\n const createFilesInBatch = context.container.resolve(CreateFilesInBatchUseCase);\n const result = await createFilesInBatch.execute({\n files: args.data,\n meta: args.meta\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async updateFile(_, args: any, context) {\n const updateFile = context.container.resolve(UpdateFileUseCase);\n const result = await updateFile.execute({\n id: args.id,\n ...args.data\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async deleteFile(_, args: any, context) {\n const deleteFile = context.container.resolve(DeleteFileUseCase);\n const result = await deleteFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n // TODO: deletion from Cloud storage should be implemented in the `api-file-manager-s3` as an event handler\n return new Response(true);\n }\n }\n }\n });\n fileManagerGraphQL.name = \"fm.graphql.files\";\n\n return fileManagerGraphQL;\n};\n"],"names":["createFilesSchema","params","fileManagerGraphQL","GraphQLSchemaPlugin","createFilesTypeDefs","emptyResolver","file","_","context","getSettings","GetSettingsUseCase","result","settings","__","identity","NotAuthorizedResponse","resolve","FileModel","args","getFile","GetFileUseCase","ErrorResponse","Response","listFiles","ListFilesUseCase","ListResponse","listTags","ListTagsUseCase","createFile","CreateFileUseCase","createFilesInBatch","CreateFilesInBatchUseCase","updateFile","UpdateFileUseCase","deleteFile","DeleteFileUseCase"],"mappings":";;;;;;;;;;;;;AAqBO,MAAMA,oBAAoB,CAACC;IAC9B,MAAMC,qBAAqB,IAAIC,oBAAoC;QAC/D,UAAUC,oBAAoBH;QAC9B,WAAW;YACP,OAAO;gBACH,aAAaI;YACjB;YACA,UAAU;gBACN,aAAaA;YACjB;YACA,QAAQ;gBACJ,MAAM,KAAIC,IAAI,EAAEC,CAAC,EAAEC,OAAO;oBAEtB,MAAMC,cAAcD,QAAQ,SAAS,CAAC,OAAO,CAACE;oBAC9C,MAAMC,SAAS,MAAMF,YAAY,OAAO;oBACxC,
|
|
1
|
+
{"version":3,"file":"graphql/filesSchema.js","sources":["../../src/graphql/filesSchema.ts"],"sourcesContent":["import {\n ErrorResponse,\n GraphQLSchemaPlugin,\n ListResponse,\n Response\n} from \"@webiny/handler-graphql\";\nimport { emptyResolver, resolve } from \"./utils.js\";\nimport type { CreateFilesTypeDefsParams } from \"~/graphql/createFilesTypeDefs.js\";\nimport { createFilesTypeDefs } from \"~/graphql/createFilesTypeDefs.js\";\nimport NotAuthorizedResponse from \"@webiny/api-core/graphql/security/NotAuthorizedResponse.js\";\nimport { GetFileUseCase } from \"~/features/file/GetFile/abstractions.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/abstractions.js\";\nimport { ListTagsUseCase } from \"~/features/file/ListTags/abstractions.js\";\nimport { CreateFileUseCase } from \"~/features/file/CreateFile/abstractions.js\";\nimport { CreateFilesInBatchUseCase } from \"~/features/file/CreateFilesInBatch/abstractions.js\";\nimport { UpdateFileUseCase } from \"~/features/file/UpdateFile/abstractions.js\";\nimport { DeleteFileUseCase } from \"~/features/file/DeleteFile/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\n\nexport const createFilesSchema = (params: CreateFilesTypeDefsParams) => {\n const fileManagerGraphQL = new GraphQLSchemaPlugin<ApiCoreContext>({\n typeDefs: createFilesTypeDefs(params),\n resolvers: {\n Query: {\n fileManager: emptyResolver\n },\n Mutation: {\n fileManager: emptyResolver\n },\n FmFile: {\n async src(file, _, context) {\n // TODO: create `FileUrlGenerator` service to use here\n const getSettings = context.container.resolve(GetSettingsUseCase);\n const result = await getSettings.execute();\n if (result.isFail()) {\n throw result.error;\n }\n const settings = result.value;\n return (settings?.srcPrefix || \"\") + file.key;\n }\n },\n FmQuery: {\n getFileModel(_, __, context) {\n const identity = context.security.getIdentity();\n if (!identity) {\n return new NotAuthorizedResponse();\n }\n\n return resolve(async () => {\n return context.container.resolve(FileModel);\n });\n },\n async getFile(_, args: any, context) {\n const getFile = context.container.resolve(GetFileUseCase);\n const result = await getFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async listFiles(_, args, context) {\n const listFiles = context.container.resolve(ListFilesUseCase);\n const result = await listFiles.execute(args);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new ListResponse(result.value.items, result.value.meta);\n },\n async listTags(_, args: any, context) {\n const listTags = context.container.resolve(ListTagsUseCase);\n const result = await listTags.execute(args || {});\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n }\n },\n FmMutation: {\n async createFile(_, args: any, context) {\n const createFile = context.container.resolve(CreateFileUseCase);\n const result = await createFile.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async createFiles(_, args: any, context) {\n const createFilesInBatch = context.container.resolve(CreateFilesInBatchUseCase);\n const result = await createFilesInBatch.execute({\n files: args.data,\n meta: args.meta\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async updateFile(_, args: any, context) {\n const updateFile = context.container.resolve(UpdateFileUseCase);\n const result = await updateFile.execute({\n id: args.id,\n ...args.data\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n },\n async deleteFile(_, args: any, context) {\n const deleteFile = context.container.resolve(DeleteFileUseCase);\n const result = await deleteFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n // TODO: deletion from Cloud storage should be implemented in the `api-file-manager-s3` as an event handler\n return new Response(true);\n }\n }\n }\n });\n fileManagerGraphQL.name = \"fm.graphql.files\";\n\n return fileManagerGraphQL;\n};\n"],"names":["createFilesSchema","params","fileManagerGraphQL","GraphQLSchemaPlugin","createFilesTypeDefs","emptyResolver","file","_","context","getSettings","GetSettingsUseCase","result","settings","__","identity","NotAuthorizedResponse","resolve","FileModel","args","getFile","GetFileUseCase","ErrorResponse","Response","listFiles","ListFilesUseCase","ListResponse","listTags","ListTagsUseCase","createFile","CreateFileUseCase","createFilesInBatch","CreateFilesInBatchUseCase","updateFile","UpdateFileUseCase","deleteFile","DeleteFileUseCase"],"mappings":"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"}
|
package/graphql/getFileByUrl.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ErrorResponse, GraphQLSchemaPlugin, NotFoundResponse, Response } from "@webiny/handler-graphql";
|
|
2
2
|
import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/index.js";
|
|
3
3
|
import { ListFilesUseCase } from "../features/file/ListFiles/index.js";
|
|
4
|
+
import { Logger } from "@webiny/api-core/exports/api/logger";
|
|
4
5
|
const getFileByUrl = ()=>{
|
|
5
6
|
const fileManagerGraphQL = new GraphQLSchemaPlugin({
|
|
6
7
|
typeDefs: `
|
|
@@ -12,7 +13,7 @@ const getFileByUrl = ()=>{
|
|
|
12
13
|
FmQuery: {
|
|
13
14
|
async getFileByUrl (_, args, context) {
|
|
14
15
|
const { url } = args;
|
|
15
|
-
const useCase = new SecureGetFileByUrl(context.security, new GetFileByUrlUseCase(context.container.resolve(ListFilesUseCase)));
|
|
16
|
+
const useCase = new SecureGetFileByUrl(context.security, new GetFileByUrlUseCase(context.container.resolve(ListFilesUseCase), context.container.resolve(Logger)));
|
|
16
17
|
try {
|
|
17
18
|
const file = await useCase.execute(url);
|
|
18
19
|
if (file) return new Response(file);
|
|
@@ -28,8 +29,9 @@ const getFileByUrl = ()=>{
|
|
|
28
29
|
return fileManagerGraphQL;
|
|
29
30
|
};
|
|
30
31
|
class GetFileByUrlUseCase {
|
|
31
|
-
constructor(listFiles){
|
|
32
|
+
constructor(listFiles, logger){
|
|
32
33
|
this.listFiles = listFiles;
|
|
34
|
+
this.logger = logger;
|
|
33
35
|
}
|
|
34
36
|
async execute(url) {
|
|
35
37
|
const { pathname } = new URL(url);
|
|
@@ -40,6 +42,7 @@ class GetFileByUrlUseCase {
|
|
|
40
42
|
},
|
|
41
43
|
limit: 1
|
|
42
44
|
});
|
|
45
|
+
if (filesResult.isFail()) return void this.logger.error(filesResult.error);
|
|
43
46
|
const files = filesResult.value.items;
|
|
44
47
|
return files.length ? files[0] : void 0;
|
|
45
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/getFileByUrl.js","sources":["../../src/graphql/getFileByUrl.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { Response, NotFoundResponse } from \"@webiny/handler-graphql\";\nimport type { File } from \"~/domain/file/types.js\";\nimport type { Security } from \"@webiny/api-core/types/security.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/index.js\";\n\nexport const getFileByUrl = () => {\n const fileManagerGraphQL = new GraphQLSchemaPlugin<ApiCoreContext>({\n typeDefs: /* GraphQL */ `\n extend type FmQuery {\n getFileByUrl(url: String!): FmFileResponse\n }\n `,\n resolvers: {\n FmQuery: {\n async getFileByUrl(_, args, context) {\n const { url } = args as { url: string };\n const useCase = new SecureGetFileByUrl(\n context.security,\n new GetFileByUrlUseCase(context.container.resolve(ListFilesUseCase))\n );\n try {\n const file = await useCase.execute(url);\n if (file) {\n return new Response(file);\n }\n return new NotFoundResponse(\"File not found!\");\n } catch (error) {\n return new ErrorResponse(error);\n }\n }\n }\n }\n });\n fileManagerGraphQL.name = \"fm.graphql.getFileByUrl\";\n\n return fileManagerGraphQL;\n};\n\ninterface IGetFileByUrl {\n execute(url: string): Promise<File | undefined>;\n}\n\nclass GetFileByUrlUseCase implements IGetFileByUrl {\n constructor(private listFiles: ListFilesUseCase.Interface) {}\n\n async execute(url: string): Promise<File | undefined> {\n const { pathname } = new URL(url);\n const query = pathname.replace(\"/files/\", \"\").replace(\"/private/\", \"\");\n\n const filesResult = await this.listFiles.execute({\n where: {\n key: query\n },\n limit: 1\n });\n\n const files = filesResult.value.items;\n\n return files.length ? files[0] : undefined;\n }\n}\n\nclass SecureGetFileByUrl implements IGetFileByUrl {\n private security: Security;\n private useCase: IGetFileByUrl;\n\n constructor(security: Security, useCase: IGetFileByUrl) {\n this.security = security;\n this.useCase = useCase;\n }\n\n execute(url: string): Promise<File | undefined> {\n if (!this.security.getIdentity()) {\n throw new NotAuthorizedError({ message: \"You're not authorized to edit this file!\" });\n }\n\n return this.useCase.execute(url);\n }\n}\n"],"names":["getFileByUrl","fileManagerGraphQL","GraphQLSchemaPlugin","_","args","context","url","useCase","SecureGetFileByUrl","GetFileByUrlUseCase","ListFilesUseCase","file","Response","NotFoundResponse","error","ErrorResponse","listFiles","pathname","URL","query","filesResult","files","undefined","security","NotAuthorizedError"],"mappings":"
|
|
1
|
+
{"version":3,"file":"graphql/getFileByUrl.js","sources":["../../src/graphql/getFileByUrl.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { Response, NotFoundResponse } from \"@webiny/handler-graphql\";\nimport type { File } from \"~/domain/file/types.js\";\nimport type { Security } from \"@webiny/api-core/types/security.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/index.js\";\nimport { Logger } from \"@webiny/api-core/exports/api/logger\";\n\nexport const getFileByUrl = () => {\n const fileManagerGraphQL = new GraphQLSchemaPlugin<ApiCoreContext>({\n typeDefs: /* GraphQL */ `\n extend type FmQuery {\n getFileByUrl(url: String!): FmFileResponse\n }\n `,\n resolvers: {\n FmQuery: {\n async getFileByUrl(_, args, context) {\n const { url } = args as { url: string };\n const useCase = new SecureGetFileByUrl(\n context.security,\n new GetFileByUrlUseCase(\n context.container.resolve(ListFilesUseCase),\n context.container.resolve(Logger)\n )\n );\n try {\n const file = await useCase.execute(url);\n if (file) {\n return new Response(file);\n }\n return new NotFoundResponse(\"File not found!\");\n } catch (error) {\n return new ErrorResponse(error);\n }\n }\n }\n }\n });\n fileManagerGraphQL.name = \"fm.graphql.getFileByUrl\";\n\n return fileManagerGraphQL;\n};\n\ninterface IGetFileByUrl {\n execute(url: string): Promise<File | undefined>;\n}\n\nclass GetFileByUrlUseCase implements IGetFileByUrl {\n constructor(\n private readonly listFiles: ListFilesUseCase.Interface,\n private readonly logger: Logger.Interface\n ) {}\n\n async execute(url: string): Promise<File | undefined> {\n const { pathname } = new URL(url);\n const query = pathname.replace(\"/files/\", \"\").replace(\"/private/\", \"\");\n\n const filesResult = await this.listFiles.execute({\n where: {\n key: query\n },\n limit: 1\n });\n if (filesResult.isFail()) {\n this.logger.error(filesResult.error);\n return undefined;\n }\n\n const files = filesResult.value.items;\n\n return files.length ? files[0] : undefined;\n }\n}\n\nclass SecureGetFileByUrl implements IGetFileByUrl {\n private security: Security;\n private useCase: IGetFileByUrl;\n\n constructor(security: Security, useCase: IGetFileByUrl) {\n this.security = security;\n this.useCase = useCase;\n }\n\n execute(url: string): Promise<File | undefined> {\n if (!this.security.getIdentity()) {\n throw new NotAuthorizedError({ message: \"You're not authorized to edit this file!\" });\n }\n\n return this.useCase.execute(url);\n }\n}\n"],"names":["getFileByUrl","fileManagerGraphQL","GraphQLSchemaPlugin","_","args","context","url","useCase","SecureGetFileByUrl","GetFileByUrlUseCase","ListFilesUseCase","Logger","file","Response","NotFoundResponse","error","ErrorResponse","listFiles","logger","pathname","URL","query","filesResult","files","undefined","security","NotAuthorizedError"],"mappings":";;;;AASO,MAAMA,eAAe;IACxB,MAAMC,qBAAqB,IAAIC,oBAAoC;QAC/D,UAAwB,CAAC;;;;QAIzB,CAAC;QACD,WAAW;YACP,SAAS;gBACL,MAAM,cAAaC,CAAC,EAAEC,IAAI,EAAEC,OAAO;oBAC/B,MAAM,EAAEC,GAAG,EAAE,GAAGF;oBAChB,MAAMG,UAAU,IAAIC,mBAChBH,QAAQ,QAAQ,EAChB,IAAII,oBACAJ,QAAQ,SAAS,CAAC,OAAO,CAACK,mBAC1BL,QAAQ,SAAS,CAAC,OAAO,CAACM;oBAGlC,IAAI;wBACA,MAAMC,OAAO,MAAML,QAAQ,OAAO,CAACD;wBACnC,IAAIM,MACA,OAAO,IAAIC,SAASD;wBAExB,OAAO,IAAIE,iBAAiB;oBAChC,EAAE,OAAOC,OAAO;wBACZ,OAAO,IAAIC,cAAcD;oBAC7B;gBACJ;YACJ;QACJ;IACJ;IACAd,mBAAmB,IAAI,GAAG;IAE1B,OAAOA;AACX;AAMA,MAAMQ;IACF,YACqBQ,SAAqC,EACrCC,MAAwB,CAC3C;aAFmBD,SAAS,GAATA;aACAC,MAAM,GAANA;IAClB;IAEH,MAAM,QAAQZ,GAAW,EAA6B;QAClD,MAAM,EAAEa,QAAQ,EAAE,GAAG,IAAIC,IAAId;QAC7B,MAAMe,QAAQF,SAAS,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa;QAEnE,MAAMG,cAAc,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7C,OAAO;gBACH,KAAKD;YACT;YACA,OAAO;QACX;QACA,IAAIC,YAAY,MAAM,IAAI,YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAACA,YAAY,KAAK;QAIvC,MAAMC,QAAQD,YAAY,KAAK,CAAC,KAAK;QAErC,OAAOC,MAAM,MAAM,GAAGA,KAAK,CAAC,EAAE,GAAGC;IACrC;AACJ;AAEA,MAAMhB;IAIF,YAAYiB,QAAkB,EAAElB,OAAsB,CAAE;QACpD,IAAI,CAAC,QAAQ,GAAGkB;QAChB,IAAI,CAAC,OAAO,GAAGlB;IACnB;IAEA,QAAQD,GAAW,EAA6B;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,IAC1B,MAAM,IAAIoB,mBAAmB;YAAE,SAAS;QAA2C;QAGvF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAACpB;IAChC;AACJ"}
|
package/graphql/index.js
CHANGED
|
@@ -18,6 +18,7 @@ const createGraphQLSchemaPlugin = ()=>[
|
|
|
18
18
|
const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);
|
|
19
19
|
await context.security.withoutAuthorization(async ()=>{
|
|
20
20
|
const modelsResult = await listModels.execute();
|
|
21
|
+
if (modelsResult.isFail()) throw modelsResult.error;
|
|
21
22
|
const models = modelsResult.value;
|
|
22
23
|
const plugins = createGraphQLSchemaPluginFromFieldPlugins({
|
|
23
24
|
models,
|
package/graphql/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/index.js","sources":["../../src/graphql/index.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { createGraphQLSchemaPluginFromFieldPlugins } from \"@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins.js\";\nimport { createBaseSchema } from \"~/graphql/baseSchema.js\";\nimport { createFilesSchema } from \"~/graphql/filesSchema.js\";\nimport { getFileByUrl } from \"~/graphql/getFileByUrl.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\nexport const createGraphQLSchemaPlugin = () => {\n return [\n createBaseSchema(),\n // Files schema is generated dynamically, based on a CMS model, so we need to\n // register it from a ContextPlugin, to perform additional bootstrap.\n new ContextPlugin<ApiCoreContext>(async context => {\n const tenantContext = context.container.resolve(TenantContext);\n if (!tenantContext.getTenant()) {\n return;\n }\n\n const fileModel = context.container.resolve(FileModel);\n const listModels = context.container.resolve(ListModelsUseCase);\n const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n await context.security.withoutAuthorization(async () => {\n const modelsResult = await listModels.execute();\n const models = modelsResult.value;\n\n /**\n * We need to register all plugins for all the CMS fields.\n */\n const plugins = createGraphQLSchemaPluginFromFieldPlugins({\n models,\n type: \"manage\",\n fieldRegistry,\n createPlugin: ({ schema, type, fieldType }) => {\n const plugin = new GraphQLSchemaPlugin(schema);\n plugin.name = `fm.graphql.schema.${type}.field.${fieldType}`;\n return plugin;\n }\n });\n\n const graphQlPlugin = createFilesSchema({\n model: fileModel,\n models,\n fieldRegistry\n });\n\n context.plugins.register([...plugins, graphQlPlugin, getFileByUrl()]);\n });\n })\n ];\n};\n"],"names":["createGraphQLSchemaPlugin","createBaseSchema","ContextPlugin","context","tenantContext","TenantContext","fileModel","FileModel","listModels","ListModelsUseCase","fieldRegistry","CmsModelFieldToGraphQLRegistry","modelsResult","models","plugins","createGraphQLSchemaPluginFromFieldPlugins","schema","type","fieldType","plugin","GraphQLSchemaPlugin","graphQlPlugin","createFilesSchema","getFileByUrl"],"mappings":";;;;;;;;;;AAYO,MAAMA,4BAA4B,IAC9B;QACHC;QAGA,IAAIC,cAA8B,OAAMC;YACpC,MAAMC,gBAAgBD,QAAQ,SAAS,CAAC,OAAO,CAACE;YAChD,IAAI,CAACD,cAAc,SAAS,IACxB;YAGJ,MAAME,YAAYH,QAAQ,SAAS,CAAC,OAAO,CAACI;YAC5C,MAAMC,aAAaL,QAAQ,SAAS,CAAC,OAAO,CAACM;YAC7C,MAAMC,gBAAgBP,QAAQ,SAAS,CAAC,OAAO,CAACQ;YAEhD,MAAMR,QAAQ,QAAQ,CAAC,oBAAoB,CAAC;gBACxC,MAAMS,eAAe,MAAMJ,WAAW,OAAO;gBAC7C,
|
|
1
|
+
{"version":3,"file":"graphql/index.js","sources":["../../src/graphql/index.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { createGraphQLSchemaPluginFromFieldPlugins } from \"@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins.js\";\nimport { createBaseSchema } from \"~/graphql/baseSchema.js\";\nimport { createFilesSchema } from \"~/graphql/filesSchema.js\";\nimport { getFileByUrl } from \"~/graphql/getFileByUrl.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\nexport const createGraphQLSchemaPlugin = () => {\n return [\n createBaseSchema(),\n // Files schema is generated dynamically, based on a CMS model, so we need to\n // register it from a ContextPlugin, to perform additional bootstrap.\n new ContextPlugin<ApiCoreContext>(async context => {\n const tenantContext = context.container.resolve(TenantContext);\n if (!tenantContext.getTenant()) {\n return;\n }\n\n const fileModel = context.container.resolve(FileModel);\n const listModels = context.container.resolve(ListModelsUseCase);\n const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n await context.security.withoutAuthorization(async () => {\n const modelsResult = await listModels.execute();\n if (modelsResult.isFail()) {\n throw modelsResult.error;\n }\n const models = modelsResult.value;\n\n /**\n * We need to register all plugins for all the CMS fields.\n */\n const plugins = createGraphQLSchemaPluginFromFieldPlugins({\n models,\n type: \"manage\",\n fieldRegistry,\n createPlugin: ({ schema, type, fieldType }) => {\n const plugin = new GraphQLSchemaPlugin(schema);\n plugin.name = `fm.graphql.schema.${type}.field.${fieldType}`;\n return plugin;\n }\n });\n\n const graphQlPlugin = createFilesSchema({\n model: fileModel,\n models,\n fieldRegistry\n });\n\n context.plugins.register([...plugins, graphQlPlugin, getFileByUrl()]);\n });\n })\n ];\n};\n"],"names":["createGraphQLSchemaPlugin","createBaseSchema","ContextPlugin","context","tenantContext","TenantContext","fileModel","FileModel","listModels","ListModelsUseCase","fieldRegistry","CmsModelFieldToGraphQLRegistry","modelsResult","models","plugins","createGraphQLSchemaPluginFromFieldPlugins","schema","type","fieldType","plugin","GraphQLSchemaPlugin","graphQlPlugin","createFilesSchema","getFileByUrl"],"mappings":";;;;;;;;;;AAYO,MAAMA,4BAA4B,IAC9B;QACHC;QAGA,IAAIC,cAA8B,OAAMC;YACpC,MAAMC,gBAAgBD,QAAQ,SAAS,CAAC,OAAO,CAACE;YAChD,IAAI,CAACD,cAAc,SAAS,IACxB;YAGJ,MAAME,YAAYH,QAAQ,SAAS,CAAC,OAAO,CAACI;YAC5C,MAAMC,aAAaL,QAAQ,SAAS,CAAC,OAAO,CAACM;YAC7C,MAAMC,gBAAgBP,QAAQ,SAAS,CAAC,OAAO,CAACQ;YAEhD,MAAMR,QAAQ,QAAQ,CAAC,oBAAoB,CAAC;gBACxC,MAAMS,eAAe,MAAMJ,WAAW,OAAO;gBAC7C,IAAII,aAAa,MAAM,IACnB,MAAMA,aAAa,KAAK;gBAE5B,MAAMC,SAASD,aAAa,KAAK;gBAKjC,MAAME,UAAUC,0CAA0C;oBACtDF;oBACA,MAAM;oBACNH;oBACA,cAAc,CAAC,EAAEM,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAE;wBACtC,MAAMC,SAAS,IAAIC,oBAAoBJ;wBACvCG,OAAO,IAAI,GAAG,CAAC,kBAAkB,EAAEF,KAAK,OAAO,EAAEC,WAAW;wBAC5D,OAAOC;oBACX;gBACJ;gBAEA,MAAME,gBAAgBC,kBAAkB;oBACpC,OAAOhB;oBACPO;oBACAH;gBACJ;gBAEAP,QAAQ,OAAO,CAAC,QAAQ,CAAC;uBAAIW;oBAASO;oBAAeE;iBAAe;YACxE;QACJ;KACH"}
|
package/index.js
CHANGED
|
@@ -18,6 +18,7 @@ const createFileManagerContext = ()=>{
|
|
|
18
18
|
if (!tenantContext.getTenant()) return;
|
|
19
19
|
await context.security.withoutAuthorization(async ()=>{
|
|
20
20
|
const fileModel = await getModel.execute(FILE_MODEL_ID);
|
|
21
|
+
if (fileModel.isFail()) throw fileModel.error;
|
|
21
22
|
context.container.registerInstance(FileModel, fileModel.value);
|
|
22
23
|
});
|
|
23
24
|
FmPermissionsFeature.register(context.container);
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { setupAssetDelivery } from \"./delivery/setupAssetDelivery.js\";\nimport { createGraphQLSchemaPlugin } from \"./graphql/index.js\";\nimport { FileManagerFeature } from \"~/features/FileManagerFeature.js\";\nimport { FmPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FileModel as FileModelAbstraction } from \"~/domain/file/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { FileModel, FILE_MODEL_ID } from \"~/domain/file/file.model.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport { AssetDeliveryFeature } from \"~/features/assetDelivery/feature.js\";\n\nexport * from \"./modelModifier/CmsModelModifier.js\";\nexport * from \"./delivery/index.js\";\n\nexport const createFileManagerContext = () => {\n const fileManagerContextPlugin = new ContextPlugin<ApiCoreContext>(async context => {\n const tenantContext = context.container.resolve(TenantContext);\n const getModel = context.container.resolve(GetModelUseCase);\n\n if (!tenantContext.getTenant()) {\n return;\n }\n\n await context.security.withoutAuthorization(async () => {\n const fileModel = await getModel.execute(FILE_MODEL_ID);\n context.container.registerInstance(FileModelAbstraction, fileModel.value);\n });\n\n FmPermissionsFeature.register(context.container);\n FileManagerFeature.register(context.container);\n });\n\n fileManagerContextPlugin.name = \"file-manager.createContext\";\n\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(FileModel);\n });\n\n return [fileManagerContextPlugin, modelsPlugin];\n};\n\nexport const createFileManagerGraphQL = () => {\n return createGraphQLSchemaPlugin();\n};\n\nexport const createAssetDelivery = () => {\n return [\n createRegisterExtensionPlugin(context => {\n AssetDeliveryFeature.register(context.container);\n }),\n ...setupAssetDelivery()\n ];\n};\n"],"names":["createFileManagerContext","fileManagerContextPlugin","ContextPlugin","context","tenantContext","TenantContext","getModel","GetModelUseCase","fileModel","FILE_MODEL_ID","FileModelAbstraction","FmPermissionsFeature","FileManagerFeature","modelsPlugin","createRegisterExtensionPlugin","FileModel","createFileManagerGraphQL","createGraphQLSchemaPlugin","createAssetDelivery","AssetDeliveryFeature","setupAssetDelivery"],"mappings":";;;;;;;;;;;;;AAgBO,MAAMA,2BAA2B;IACpC,MAAMC,2BAA2B,IAAIC,cAA8B,OAAMC;QACrE,MAAMC,gBAAgBD,QAAQ,SAAS,CAAC,OAAO,CAACE;QAChD,MAAMC,WAAWH,QAAQ,SAAS,CAAC,OAAO,CAACI;QAE3C,IAAI,CAACH,cAAc,SAAS,IACxB;QAGJ,MAAMD,QAAQ,QAAQ,CAAC,oBAAoB,CAAC;YACxC,MAAMK,YAAY,MAAMF,SAAS,OAAO,CAACG;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { setupAssetDelivery } from \"./delivery/setupAssetDelivery.js\";\nimport { createGraphQLSchemaPlugin } from \"./graphql/index.js\";\nimport { FileManagerFeature } from \"~/features/FileManagerFeature.js\";\nimport { FmPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FileModel as FileModelAbstraction } from \"~/domain/file/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { FileModel, FILE_MODEL_ID } from \"~/domain/file/file.model.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport { AssetDeliveryFeature } from \"~/features/assetDelivery/feature.js\";\n\nexport * from \"./modelModifier/CmsModelModifier.js\";\nexport * from \"./delivery/index.js\";\n\nexport const createFileManagerContext = () => {\n const fileManagerContextPlugin = new ContextPlugin<ApiCoreContext>(async context => {\n const tenantContext = context.container.resolve(TenantContext);\n const getModel = context.container.resolve(GetModelUseCase);\n\n if (!tenantContext.getTenant()) {\n return;\n }\n\n await context.security.withoutAuthorization(async () => {\n const fileModel = await getModel.execute(FILE_MODEL_ID);\n if (fileModel.isFail()) {\n throw fileModel.error;\n }\n context.container.registerInstance(FileModelAbstraction, fileModel.value);\n });\n\n FmPermissionsFeature.register(context.container);\n FileManagerFeature.register(context.container);\n });\n\n fileManagerContextPlugin.name = \"file-manager.createContext\";\n\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(FileModel);\n });\n\n return [fileManagerContextPlugin, modelsPlugin];\n};\n\nexport const createFileManagerGraphQL = () => {\n return createGraphQLSchemaPlugin();\n};\n\nexport const createAssetDelivery = () => {\n return [\n createRegisterExtensionPlugin(context => {\n AssetDeliveryFeature.register(context.container);\n }),\n ...setupAssetDelivery()\n ];\n};\n"],"names":["createFileManagerContext","fileManagerContextPlugin","ContextPlugin","context","tenantContext","TenantContext","getModel","GetModelUseCase","fileModel","FILE_MODEL_ID","FileModelAbstraction","FmPermissionsFeature","FileManagerFeature","modelsPlugin","createRegisterExtensionPlugin","FileModel","createFileManagerGraphQL","createGraphQLSchemaPlugin","createAssetDelivery","AssetDeliveryFeature","setupAssetDelivery"],"mappings":";;;;;;;;;;;;;AAgBO,MAAMA,2BAA2B;IACpC,MAAMC,2BAA2B,IAAIC,cAA8B,OAAMC;QACrE,MAAMC,gBAAgBD,QAAQ,SAAS,CAAC,OAAO,CAACE;QAChD,MAAMC,WAAWH,QAAQ,SAAS,CAAC,OAAO,CAACI;QAE3C,IAAI,CAACH,cAAc,SAAS,IACxB;QAGJ,MAAMD,QAAQ,QAAQ,CAAC,oBAAoB,CAAC;YACxC,MAAMK,YAAY,MAAMF,SAAS,OAAO,CAACG;YACzC,IAAID,UAAU,MAAM,IAChB,MAAMA,UAAU,KAAK;YAEzBL,QAAQ,SAAS,CAAC,gBAAgB,CAACO,WAAsBF,UAAU,KAAK;QAC5E;QAEAG,qBAAqB,QAAQ,CAACR,QAAQ,SAAS;QAC/CS,mBAAmB,QAAQ,CAACT,QAAQ,SAAS;IACjD;IAEAF,yBAAyB,IAAI,GAAG;IAEhC,MAAMY,eAAeC,8BAA8BX,CAAAA;QAC/CA,QAAQ,SAAS,CAAC,QAAQ,CAACY;IAC/B;IAEA,OAAO;QAACd;QAA0BY;KAAa;AACnD;AAEO,MAAMG,2BAA2B,IAC7BC;AAGJ,MAAMC,sBAAsB,IACxB;QACHJ,8BAA8BX,CAAAA;YAC1BgB,qBAAqB,QAAQ,CAAChB,QAAQ,SAAS;QACnD;WACGiB;KACN"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-file-manager",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.10-beta.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -22,26 +22,26 @@
|
|
|
22
22
|
],
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@webiny/api": "6.4.
|
|
26
|
-
"@webiny/api-core": "6.4.
|
|
27
|
-
"@webiny/api-headless-cms": "6.4.
|
|
28
|
-
"@webiny/background-tasks": "6.4.
|
|
29
|
-
"@webiny/build-tools": "6.4.
|
|
30
|
-
"@webiny/error": "6.4.
|
|
31
|
-
"@webiny/feature": "6.4.
|
|
32
|
-
"@webiny/handler": "6.4.
|
|
33
|
-
"@webiny/handler-graphql": "6.4.
|
|
34
|
-
"@webiny/plugins": "6.4.
|
|
35
|
-
"@webiny/wcp": "6.4.
|
|
25
|
+
"@webiny/api": "6.4.10-beta.1",
|
|
26
|
+
"@webiny/api-core": "6.4.10-beta.1",
|
|
27
|
+
"@webiny/api-headless-cms": "6.4.10-beta.1",
|
|
28
|
+
"@webiny/background-tasks": "6.4.10-beta.1",
|
|
29
|
+
"@webiny/build-tools": "6.4.10-beta.1",
|
|
30
|
+
"@webiny/error": "6.4.10-beta.1",
|
|
31
|
+
"@webiny/feature": "6.4.10-beta.1",
|
|
32
|
+
"@webiny/handler": "6.4.10-beta.1",
|
|
33
|
+
"@webiny/handler-graphql": "6.4.10-beta.1",
|
|
34
|
+
"@webiny/plugins": "6.4.10-beta.1",
|
|
35
|
+
"@webiny/wcp": "6.4.10-beta.1",
|
|
36
36
|
"cache-control-parser": "2.2.0",
|
|
37
37
|
"zod": "4.4.3"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/object-hash": "3.0.6",
|
|
41
|
-
"@webiny/handler-aws": "6.4.
|
|
42
|
-
"@webiny/project-utils": "6.4.
|
|
43
|
-
"@webiny/utils": "6.4.
|
|
44
|
-
"@webiny/wcp": "6.4.
|
|
41
|
+
"@webiny/handler-aws": "6.4.10-beta.1",
|
|
42
|
+
"@webiny/project-utils": "6.4.10-beta.1",
|
|
43
|
+
"@webiny/utils": "6.4.10-beta.1",
|
|
44
|
+
"@webiny/wcp": "6.4.10-beta.1",
|
|
45
45
|
"rimraf": "6.1.3",
|
|
46
46
|
"typescript": "6.0.3"
|
|
47
47
|
},
|