@solidxai/core 0.1.12-beta.2 → 0.1.12-beta.4

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 (162) hide show
  1. package/.claude/settings.local.json +16 -0
  2. package/CLAUDE.md +26 -0
  3. package/dist/commands/seed.command.d.ts.map +1 -1
  4. package/dist/commands/seed.command.js +15 -2
  5. package/dist/commands/seed.command.js.map +1 -1
  6. package/dist/constants/media-file-types.d.ts +5 -0
  7. package/dist/constants/media-file-types.d.ts.map +1 -0
  8. package/dist/constants/media-file-types.js +27 -0
  9. package/dist/constants/media-file-types.js.map +1 -0
  10. package/dist/controllers/media.controller.d.ts +14 -11
  11. package/dist/controllers/media.controller.d.ts.map +1 -1
  12. package/dist/controllers/media.controller.js +72 -33
  13. package/dist/controllers/media.controller.js.map +1 -1
  14. package/dist/dtos/create-media.dto.d.ts +1 -0
  15. package/dist/dtos/create-media.dto.d.ts.map +1 -1
  16. package/dist/dtos/create-media.dto.js +7 -1
  17. package/dist/dtos/create-media.dto.js.map +1 -1
  18. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  19. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  20. package/dist/dtos/create-role-metadata.dto.js +3 -1
  21. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  22. package/dist/dtos/update-media.dto.d.ts +1 -0
  23. package/dist/dtos/update-media.dto.d.ts.map +1 -1
  24. package/dist/dtos/update-media.dto.js +7 -1
  25. package/dist/dtos/update-media.dto.js.map +1 -1
  26. package/dist/entities/media.entity.d.ts +1 -0
  27. package/dist/entities/media.entity.d.ts.map +1 -1
  28. package/dist/entities/media.entity.js +9 -1
  29. package/dist/entities/media.entity.js.map +1 -1
  30. package/dist/enums/auth-type.enum.d.ts +2 -1
  31. package/dist/enums/auth-type.enum.d.ts.map +1 -1
  32. package/dist/enums/auth-type.enum.js +1 -0
  33. package/dist/enums/auth-type.enum.js.map +1 -1
  34. package/dist/guards/authentication.guard.d.ts +3 -1
  35. package/dist/guards/authentication.guard.d.ts.map +1 -1
  36. package/dist/guards/authentication.guard.js +5 -1
  37. package/dist/guards/authentication.guard.js.map +1 -1
  38. package/dist/guards/media-signed-url.guard.d.ts +9 -0
  39. package/dist/guards/media-signed-url.guard.d.ts.map +1 -0
  40. package/dist/guards/media-signed-url.guard.js +49 -0
  41. package/dist/guards/media-signed-url.guard.js.map +1 -0
  42. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  43. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +10 -13
  44. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  45. package/dist/interfaces.d.ts +19 -1
  46. package/dist/interfaces.d.ts.map +1 -1
  47. package/dist/interfaces.js +2 -0
  48. package/dist/interfaces.js.map +1 -1
  49. package/dist/repository/media.repository.d.ts.map +1 -1
  50. package/dist/repository/media.repository.js +2 -0
  51. package/dist/repository/media.repository.js.map +1 -1
  52. package/dist/seeders/module-metadata-seeder.service.d.ts +7 -1
  53. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  54. package/dist/seeders/module-metadata-seeder.service.js +87 -3
  55. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  56. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -0
  57. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  58. package/dist/seeders/permission-metadata-seeder.service.js +6 -1
  59. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  60. package/dist/seeders/seed-data/solid-core-metadata.json +114 -13
  61. package/dist/services/authentication.service.d.ts +1 -0
  62. package/dist/services/authentication.service.d.ts.map +1 -1
  63. package/dist/services/authentication.service.js +19 -1
  64. package/dist/services/authentication.service.js.map +1 -1
  65. package/dist/services/media-download-url.service.d.ts +21 -0
  66. package/dist/services/media-download-url.service.d.ts.map +1 -0
  67. package/dist/services/media-download-url.service.js +67 -0
  68. package/dist/services/media-download-url.service.js.map +1 -0
  69. package/dist/services/media-storage.utils.d.ts +27 -0
  70. package/dist/services/media-storage.utils.d.ts.map +1 -0
  71. package/dist/services/media-storage.utils.js +82 -0
  72. package/dist/services/media-storage.utils.js.map +1 -0
  73. package/dist/services/media.service.d.ts +20 -4
  74. package/dist/services/media.service.d.ts.map +1 -1
  75. package/dist/services/media.service.js +157 -55
  76. package/dist/services/media.service.js.map +1 -1
  77. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +4 -4
  78. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  79. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +37 -63
  80. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  81. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +5 -5
  82. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  83. package/dist/services/mediaStorageProviders/file-storage-provider.js +37 -38
  84. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  85. package/dist/services/role-metadata.service.d.ts +1 -0
  86. package/dist/services/role-metadata.service.d.ts.map +1 -1
  87. package/dist/services/role-metadata.service.js +8 -5
  88. package/dist/services/role-metadata.service.js.map +1 -1
  89. package/dist/solid-core.module.d.ts.map +1 -1
  90. package/dist/solid-core.module.js +11 -1
  91. package/dist/solid-core.module.js.map +1 -1
  92. package/dist/subscribers/audit.subscriber.js +1 -1
  93. package/dist/subscribers/audit.subscriber.js.map +1 -1
  94. package/package.json +1 -1
  95. package/src/commands/seed.command.ts +17 -3
  96. package/src/constants/media-file-types.ts +44 -0
  97. package/src/controllers/media.controller.ts +44 -24
  98. package/src/dtos/create-media.dto.ts +8 -3
  99. package/src/dtos/create-role-metadata.dto.ts +2 -0
  100. package/src/dtos/update-media.dto.ts +8 -3
  101. package/src/entities/media.entity.ts +4 -1
  102. package/src/enums/auth-type.enum.ts +1 -0
  103. package/src/guards/authentication.guard.ts +3 -0
  104. package/src/guards/media-signed-url.guard.ts +41 -0
  105. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +12 -24
  106. package/src/interfaces.ts +20 -0
  107. package/src/repository/media.repository.ts +2 -0
  108. package/src/seeders/module-metadata-seeder.service.ts +109 -3
  109. package/src/seeders/permission-metadata-seeder.service.ts +6 -1
  110. package/src/seeders/seed-data/solid-core-metadata.json +114 -13
  111. package/src/services/1.js +6 -0
  112. package/src/services/authentication.service.ts +24 -1
  113. package/src/services/media-download-url.service.ts +67 -0
  114. package/src/services/media-storage.utils.ts +79 -0
  115. package/src/services/media.service.ts +189 -59
  116. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +52 -76
  117. package/src/services/mediaStorageProviders/file-storage-provider.ts +44 -48
  118. package/src/services/role-metadata.service.ts +17 -5
  119. package/src/solid-core.module.ts +21 -2
  120. package/src/subscribers/audit.subscriber.ts +1 -1
  121. package/dist-tests/api/authenticate.spec.js +0 -119
  122. package/dist-tests/api/authenticate.spec.js.map +0 -1
  123. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  124. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  125. package/dist-tests/api/ping.spec.js +0 -21
  126. package/dist-tests/api/ping.spec.js.map +0 -1
  127. package/dist-tests/helpers/auth.js +0 -41
  128. package/dist-tests/helpers/auth.js.map +0 -1
  129. package/dist-tests/helpers/env.js +0 -11
  130. package/dist-tests/helpers/env.js.map +0 -1
  131. package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +0 -136
  132. package/docs/agent-builder/team-ready-note-agent-builder.md +0 -305
  133. package/docs/agent-hub-grooming.md +0 -301
  134. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
  135. package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
  136. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
  137. package/docs/datasource-introspection-ddl-analysis.md +0 -326
  138. package/docs/datasource-introspection-implementation-plan.md +0 -306
  139. package/docs/grouping-enhancements.md +0 -89
  140. package/docs/java-spring/README.md +0 -3
  141. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  142. package/docs/module-package-import-handoff.md +0 -691
  143. package/docs/seed-changes.md +0 -65
  144. package/docs/test-data-workflow.md +0 -200
  145. package/docs/type-declaration-import-issue.md +0 -24
  146. package/docs/workflow/business-automation-example-notes.md +0 -309
  147. package/docs/workflow/data-engineering-pipeline-example-notes.md +0 -330
  148. package/docs/workflow/foreach-example-notes.md +0 -187
  149. package/docs/workflow/hello-world-example-notes.md +0 -271
  150. package/docs/workflow/kestra-concepts-plugins-blueprints.md +0 -315
  151. package/docs/workflow/loop-until-example-notes.md +0 -198
  152. package/docs/workflow/microservices-and-apis-example-notes.md +0 -264
  153. package/docs/workflow/samples.md +0 -25
  154. package/docs/workflow/what-is-kestra.md +0 -79
  155. package/docs/workflow/workflow-core-module-handoff-summary.md +0 -191
  156. package/docs/workflow/workflow-module-brd.md +0 -185
  157. package/docs/workflow/workflow-module-domain-model.md +0 -252
  158. package/docs/workflow/workflow-module-metadata-dsl.md +0 -302
  159. package/docs/workflow/workflow-module-technical-spec.md +0 -293
  160. package/docs/workflow/workflow-node-type-contracts.md +0 -635
  161. package/docs/workflow/workflow-node-ui-metadata-contract.md +0 -1262
  162. package/docs/workflow/workflow-solidx-model-field-spec.md +0 -284
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;AA4DA,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,wCAAwB,CAAA;IACxB,6DAA6C,CAAA;IAC7C,6DAA6C,CAAA;IAC7C,8CAA8B,CAAA;AAChC,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAmKD,IAAY,SAEX;AAFD,WAAY,SAAS;IACnB,gDAAmC,CAAA;AACrC,CAAC,EAFW,SAAS,yBAAT,SAAS,QAEpB;AAED,MAAa,YAAY;IACvB,YACS,IAAS,EACT,OAAU;QADV,SAAI,GAAJ,IAAI,CAAK;QACT,YAAO,GAAP,OAAO,CAAG;IACf,CAAC;CACN;AALD,oCAKC;AAyED,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,mCAAqB,CAAA;IACrB,mCAAqB,CAAA;IACrB,6BAAe,CAAA;AACjB,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB","sourcesContent":["import { Repository } from 'typeorm';\nimport { User } from 'src/entities/user.entity';\nimport { CreateUserDto } from 'src/dtos/create-user.dto';\nimport { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';\nimport { CreateSmsTemplateDto } from 'src/dtos/create-sms-template.dto';\nimport { SignUpDto } from 'src/dtos/sign-up.dto';\nimport { Readable } from 'stream';\nimport { CreateMediaStorageProviderMetadataDto } from './dtos/create-media-storage-provider-metadata.dto';\nimport { DatasourceType } from './dtos/create-model-metadata.dto';\nimport { CreateModuleMetadataDto } from './dtos/create-module-metadata.dto';\nimport { CreateRoleMetadataDto } from './dtos/create-role-metadata.dto';\nimport { CreateSecurityRuleDto } from './dtos/create-security-rule.dto';\nimport { FieldMetadata } from './entities/field-metadata.entity';\nimport { Media } from './entities/media.entity';\nimport { ComputedFieldMetadata } from './helpers/solid-registry';\nimport { ActiveUserData } from './interfaces/active-user-data.interface';\nimport { SecurityRuleConfig } from './dtos/security-rule-config.dto';\nimport { SecurityRule } from './entities/security-rule.entity';\n\nexport interface FieldCrudManager {\n // fieldMetadata: FieldMetadata;\n // entityManager?: EntityManager;\n // createDto: any;\n // files : Array<Express.Multer.File>;\n validate(\n dto: any,\n files: Array<Express.Multer.File>,\n ): ValidationError[] | Promise<ValidationError[]>;\n transformForCreate(dto: any, ctxt?: any): any | Promise<any>;\n}\n\nexport interface ValidationError {\n field: string;\n error: string;\n}\n\n// export interface MediaStorage\nexport interface MediaStorageProvider<T> {\n store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;\n delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void>;\n deleteByMediaRecord(media: Media): Promise<void>;\n retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;\n storeStreams(streamPairs: [Readable, string][], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;\n // delete(file: string): Promise<void>;\n}\n\nexport interface ModuleMetadataConfiguration {\n moduleMetadata?: CreateModuleMetadataDto,\n roles?: CreateRoleMetadataDto[],\n users?: SignUpDto[],\n actions?: any[],\n menus?: any[],\n views?: any[],\n emailTemplates?: CreateEmailTemplateDto[],\n smsTemplates?: CreateSmsTemplateDto[],\n mediaStorageProviders?: CreateMediaStorageProviderMetadataDto[]\n securityRules?: CreateSecurityRuleDto[],\n dashboards?: any[],\n}\n\nexport enum SettingLevel {\n SystemEnv = 'system-env',\n SystemAdminReadonly = 'system-admin-readonly',\n SystemAdminEditable = 'system-admin-editable',\n InternalUser = \"internal-user\"\n}\n\nexport type SettingControlType =\n | 'shortText'\n | 'longText'\n | 'numeric'\n | 'boolean'\n | 'date'\n | 'datetime'\n | 'mediaSingle'\n | 'selectionStatic'\n | 'custom';\n\nexport interface SettingOption {\n label: string;\n value: string | number | boolean;\n}\n\nexport interface SettingDefinition<T = any> {\n moduleName: string;\n key: string;\n value: T;\n level: SettingLevel;\n encrypted?: boolean;\n label?: string;\n description?: string;\n helpText?: string;\n placeholder?: string;\n group?: string;\n sortOrder?: number;\n controlType?: SettingControlType;\n options?: SettingOption[];\n settingsWidget?: string; // for custom controlType, specify the frontend widget to use\n}\n\nexport interface AdminSettingDefinition<T = any> extends SettingDefinition<T> {\n editable: boolean;\n}\n\nexport interface AdminSettingsResponse<T = any> {\n data: AdminSettingDefinition<T>[];\n}\n\n// solid-core/settings/settings-provider.interface.ts\nexport interface ISettingsProvider {\n getSettings(): SettingDefinition[];\n}\n\nexport interface CodeGenerationOptions {\n moduleId?: number;\n moduleUserKey?: string;\n modelId?: number;\n modelUserKey?: string;\n fieldIdsForRemoval?: number[];\n fieldNamesForRemoval?: string[];\n dryRun?: boolean;\n}\n\n\nexport interface McpResponse {\n success: boolean;\n request: string;\n response: string;\n model?: string;\n tools_invoked?: string[];\n tool_calls?: any[];\n duration_ms?: number;\n errors?: string[];\n error_trace?: string[];\n content_type?: string;\n}\n\nexport interface ISelectionProviderContext {\n limit: number;\n offset: number;\n formValues: Record<string, any>;\n //Attribute to control the validation on creating the record\n validateOnSave?: boolean;\n // query: string;\n}\n\nexport interface ISelectionProviderValues {\n label: string;\n value: string;\n}\n\nexport interface ISelectionProvider<T extends ISelectionProviderContext> {\n help(): string;\n\n name(): string;\n\n value(optionValue: string, ctxt: T): Promise<ISelectionProviderValues | any>;\n\n values(query: any, ctxt: T): Promise<readonly ISelectionProviderValues[]>;\n}\n\nexport interface IDashboardWidgetDataProviderContext<TVariables = Record<string, any>, TProviderContext = Record<string, any>> {\n moduleName: string;\n dashboardName: string;\n widgetName: string;\n variables: TVariables;\n providerContext: TProviderContext;\n activeUser?: ActiveUserData;\n}\n\nexport interface IDashboardWidgetDataResponseEnvelope<TData = any, TUiHints = Record<string, any>> {\n meta: {\n providerName: string;\n generatedAt: string;\n widgetName: string;\n durationMs: number;\n [key: string]: any;\n };\n data: TData;\n uiHints?: TUiHints;\n}\n\nexport interface IDashboardWidgetDataProvider<\n TContext extends IDashboardWidgetDataProviderContext = IDashboardWidgetDataProviderContext,\n TResponse = any,\n> {\n help(): string;\n name(): string;\n getData(\n widgetDefinition: Record<string, any>,\n ctxt: TContext,\n ): Promise<IDashboardWidgetDataResponseEnvelope<TResponse> | any>;\n}\n\n\n/**\n * @deprecated Use `IEntityComputedFieldProvider` instead.\n */\nexport interface IComputedFieldProvider<T> {\n help(): string;\n\n name(): string;\n\n valueType(): string;\n\n computeValue(dto: any, ctxt: T): Promise<string | number>; // FIXME : Improve the types to make it more specific using generics\n}\n\nexport interface IEntityComputedFieldProvider {\n help(): string;\n\n name(): string;\n}\n\nexport interface IEntityPreComputeFieldProvider<TTriggerEntity, TContext, TValue = void> extends IEntityComputedFieldProvider {\n preComputeValue(triggerEntity: TTriggerEntity, computedFieldMetadata: ComputedFieldMetadata<TContext>): Promise<TValue>;\n}\n\nexport interface IEntityPostComputeFieldProvider<TTriggerEntity, TContext> extends IEntityComputedFieldProvider {\n postComputeAndSaveValue(triggerEntity: TTriggerEntity, computedFieldMetadata: ComputedFieldMetadata<TContext>): Promise<void>;\n}\n\nexport interface ISolidDatabaseModule {\n name(): string;\n\n type(): DatasourceType;\n}\n\nexport enum EventType {\n USER_REGISTERED = 'user.registered',\n}\n\nexport class EventDetails<T> {\n constructor(\n public type: any,\n public payload: T,\n ) { }\n}\n\nexport interface IExtensionUserCreationProvider<T extends User = User, TDto extends CreateUserDto = CreateUserDto> {\n readonly repo: Repository<T>;\n buildExtensionEntity(dto: TDto): Promise<T>;\n roles(dto: TDto): string[];\n}\n\nexport interface IMail<TResponse = unknown> {\n sendEmail(\n to: string,\n subject: string,\n body: string,\n shouldQueueEmails: boolean,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string,\n ): Promise<TResponse>;\n\n sendEmailUsingTemplate(\n to: string,\n templateName: string,\n templateParams: any,\n shouldQueueEmails: boolean,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string,\n ): Promise<TResponse>;\n}\n\nexport interface ISMS {\n sendSMS(to: string, body: string, shouldQueueSms: boolean): Promise<any>;\n\n sendSMSUsingTemplate(\n to: string,\n templateName: string,\n templateParams: any,\n shouldQueueSms: boolean,\n ): Promise<any>;\n}\n\nexport interface IWhatsAppTransport {\n sendWhatsAppMessage(\n to: string,\n templateId: string,\n parameters: any,\n parentEntity?: any,\n parentEntityId?: any\n ): Promise<any>;\n}\n\nexport interface MailAttachmentWrapper {\n relativePath?: string;\n attachment?: MailAttachment;\n}\n\nexport interface MailAttachment {\n filename: string;\n templatePath?: string; // deprecated\n templateParams?: any; // deprecated\n content?: string | Buffer;\n contentType?: string;\n path?: string; //Filesystem absolute path or URL. \n}\n\nexport enum BrokerType {\n RabbitMQ = 'rabbitmq',\n Database = 'database',\n Redis = 'redis',\n}\n\nexport interface QueuesModuleOptions {\n name: string;\n type: BrokerType;\n queueName: string;\n prefetch?: number;\n persistToDatabase?: boolean;\n}\n\nexport type MediaWithFullUrl = Media & {\n _full_url: string;\n};\n\n\nexport type ErrorCode = string;\n\nexport type ErrorMeta = {\n message: string;\n httpStatus?: number;\n};\n\nexport type ErrorRule = {\n /** Canonical error code. Keep them kebab-case for consistency. */\n code: ErrorCode;\n /** Higher runs earlier. Defaults to 0 if not provided. */\n priority?: number;\n /** Return true if this rule matches the combined error text. */\n match: (combinedErrorText: string) => boolean;\n /** Display + HTTP mapping for this code. */\n meta: ErrorMeta;\n};\n\nexport interface IErrorCodeProvider {\n /** Used for registry identity & logs */\n name(): string;\n\n /**\n * Return all rules this provider contributes.\n * These will be merged with other providers’ rules, then sorted by priority.\n */\n rules(): ReadonlyArray<ErrorRule>;\n\n /**\n * Optional fallback meta for codes this provider owns (when called by getMessage/getHttpStatus).\n * If omitted, the ErrorMapperService will rely on the rule.meta of the first matching rule.\n */\n resolve?(code: ErrorCode): ErrorMeta | undefined;\n}\n\n// MCP Tool Related\n\nexport type PlanStep = CreateNewFileStep | RegisterNestProviderStep | AddMethodToExistingClassStep | RegisterSolidXExtensionComponentStep | AddListViewButtonStep | AddFormViewButtonStep | AddImportStep;\nexport interface AddImportStep {\n type: \"addImport\";\n path: string; // e.g. apps/api/src/address-master/services/address-master.service.ts\n importStatement: string; // e.g. import { Something } from 'somewhere';\n overwrite?: boolean; // default=false\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface CreateNewFileStep {\n type: \"createNewFile\";\n path: string; // repo-relative e.g. solid-api/api/src/computed-providers/foo.provider.ts\n content: string; // full file content\n overwrite?: boolean; // default=false\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface RegisterNestProviderStep {\n type: \"registerNestProvider\";\n modulePath: string; // e.g. apps/api/src/address-master/address-master.module.ts\n providerClassName: string; // e.g. StateTotalCitiesComputedFieldProvider\n importFrom: string; // e.g. \"@/computed-providers/state-total-cities.provider\"\n registerIn: Array<\"providers\" | \"exports\">; // which arrays to add to\n uniqueGuard?: boolean; // default=true\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface AddMethodToExistingClassStep {\n type: \"addMethodToExistingClass\";\n path: string; // e.g. apps/api/src/address-master/services/address-master.service.ts\n className: string // e.g. CountryService\n methodName: string // e.g. addCountry\n content: string // Full Method Code\n importStatements?: string[]; // e.g. [ \"import { X } from 'y';\" ]\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface RegisterSolidXExtensionComponentStep {\n type: \"registerSolidXExtensionComponent\";\n path: string; // e.g. apps/api/src/address-master/services/address-master.service.ts\n content?: string; // Code\n importExtensionComponent?: string;\n}\n\nexport interface AddListViewButtonStep {\n type: \"addListViewButton\";\n moduleName?: string;\n modelName?: string;\n buttonType?: string;\n content?: string; // Code\n}\n\nexport interface AddFormViewButtonStep {\n type: \"addFormViewButton\";\n moduleName?: string;\n modelName?: string;\n buttonType?: string;\n content?: string; // Code\n}\n\nexport interface McpComputedProviderResponse {\n plan: PlanStep[];\n // provider?: any; // (intentionally ignored per your note)\n}\n\nexport interface ISecurityRuleConfigProvider {\n securityRuleConfig(activeUser: ActiveUserData, securityRule: SecurityRule): Promise<SecurityRuleConfig>;\n}\n\n\nexport interface AwsS3Config {\n S3_AWS_ACCESS_KEY: string;\n S3_AWS_SECRET_KEY: string;\n S3_AWS_REGION_NAME: string;\n}\n\n// Prevents inference so callers must provide explicit type arguments; reusable for other APIs.\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\n\nexport type AuditEventType = 'insert' | 'update' | 'delete';\n\nexport interface AuditQueuePayload {\n eventType: AuditEventType;\n modelName: string;\n entityId: string | number | null;\n occurredAt: string;\n after?: any;\n before?: any;\n updatedColumnNames?: string[];\n userId?: number | null;\n}\n"]}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;AA4DA,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,wCAAwB,CAAA;IACxB,6DAA6C,CAAA;IAC7C,6DAA6C,CAAA;IAC7C,8CAA8B,CAAA;AAChC,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAmKD,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,gDAAmC,CAAA;IACnC,8EAAiE,CAAA;IACjE,gFAAmE,CAAA;AACrE,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAED,MAAa,YAAY;IACvB,YACS,IAAS,EACT,OAAU;QADV,SAAI,GAAJ,IAAI,CAAK;QACT,YAAO,GAAP,OAAO,CAAG;IACf,CAAC;CACN;AALD,oCAKC;AA2FD,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,mCAAqB,CAAA;IACrB,mCAAqB,CAAA;IACrB,6BAAe,CAAA;AACjB,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB","sourcesContent":["import { Repository } from 'typeorm';\nimport { User } from 'src/entities/user.entity';\nimport { CreateUserDto } from 'src/dtos/create-user.dto';\nimport { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';\nimport { CreateSmsTemplateDto } from 'src/dtos/create-sms-template.dto';\nimport { SignUpDto } from 'src/dtos/sign-up.dto';\nimport { Readable } from 'stream';\nimport { CreateMediaStorageProviderMetadataDto } from './dtos/create-media-storage-provider-metadata.dto';\nimport { DatasourceType } from './dtos/create-model-metadata.dto';\nimport { CreateModuleMetadataDto } from './dtos/create-module-metadata.dto';\nimport { CreateRoleMetadataDto } from './dtos/create-role-metadata.dto';\nimport { CreateSecurityRuleDto } from './dtos/create-security-rule.dto';\nimport { FieldMetadata } from './entities/field-metadata.entity';\nimport { Media } from './entities/media.entity';\nimport { ComputedFieldMetadata } from './helpers/solid-registry';\nimport { ActiveUserData } from './interfaces/active-user-data.interface';\nimport { SecurityRuleConfig } from './dtos/security-rule-config.dto';\nimport { SecurityRule } from './entities/security-rule.entity';\n\nexport interface FieldCrudManager {\n // fieldMetadata: FieldMetadata;\n // entityManager?: EntityManager;\n // createDto: any;\n // files : Array<Express.Multer.File>;\n validate(\n dto: any,\n files: Array<Express.Multer.File>,\n ): ValidationError[] | Promise<ValidationError[]>;\n transformForCreate(dto: any, ctxt?: any): any | Promise<any>;\n}\n\nexport interface ValidationError {\n field: string;\n error: string;\n}\n\n// export interface MediaStorage\nexport interface MediaStorageProvider<T> {\n store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;\n delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void>;\n deleteByMediaRecord(media: Media): Promise<void>;\n retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;\n storeStreams(streamPairs: [Readable, string][], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;\n // delete(file: string): Promise<void>;\n}\n\nexport interface ModuleMetadataConfiguration {\n moduleMetadata?: CreateModuleMetadataDto,\n roles?: CreateRoleMetadataDto[],\n users?: SignUpDto[],\n actions?: any[],\n menus?: any[],\n views?: any[],\n emailTemplates?: CreateEmailTemplateDto[],\n smsTemplates?: CreateSmsTemplateDto[],\n mediaStorageProviders?: CreateMediaStorageProviderMetadataDto[]\n securityRules?: CreateSecurityRuleDto[],\n dashboards?: any[],\n}\n\nexport enum SettingLevel {\n SystemEnv = 'system-env',\n SystemAdminReadonly = 'system-admin-readonly',\n SystemAdminEditable = 'system-admin-editable',\n InternalUser = \"internal-user\"\n}\n\nexport type SettingControlType =\n | 'shortText'\n | 'longText'\n | 'numeric'\n | 'boolean'\n | 'date'\n | 'datetime'\n | 'mediaSingle'\n | 'selectionStatic'\n | 'custom';\n\nexport interface SettingOption {\n label: string;\n value: string | number | boolean;\n}\n\nexport interface SettingDefinition<T = any> {\n moduleName: string;\n key: string;\n value: T;\n level: SettingLevel;\n encrypted?: boolean;\n label?: string;\n description?: string;\n helpText?: string;\n placeholder?: string;\n group?: string;\n sortOrder?: number;\n controlType?: SettingControlType;\n options?: SettingOption[];\n settingsWidget?: string; // for custom controlType, specify the frontend widget to use\n}\n\nexport interface AdminSettingDefinition<T = any> extends SettingDefinition<T> {\n editable: boolean;\n}\n\nexport interface AdminSettingsResponse<T = any> {\n data: AdminSettingDefinition<T>[];\n}\n\n// solid-core/settings/settings-provider.interface.ts\nexport interface ISettingsProvider {\n getSettings(): SettingDefinition[];\n}\n\nexport interface CodeGenerationOptions {\n moduleId?: number;\n moduleUserKey?: string;\n modelId?: number;\n modelUserKey?: string;\n fieldIdsForRemoval?: number[];\n fieldNamesForRemoval?: string[];\n dryRun?: boolean;\n}\n\n\nexport interface McpResponse {\n success: boolean;\n request: string;\n response: string;\n model?: string;\n tools_invoked?: string[];\n tool_calls?: any[];\n duration_ms?: number;\n errors?: string[];\n error_trace?: string[];\n content_type?: string;\n}\n\nexport interface ISelectionProviderContext {\n limit: number;\n offset: number;\n formValues: Record<string, any>;\n //Attribute to control the validation on creating the record\n validateOnSave?: boolean;\n // query: string;\n}\n\nexport interface ISelectionProviderValues {\n label: string;\n value: string;\n}\n\nexport interface ISelectionProvider<T extends ISelectionProviderContext> {\n help(): string;\n\n name(): string;\n\n value(optionValue: string, ctxt: T): Promise<ISelectionProviderValues | any>;\n\n values(query: any, ctxt: T): Promise<readonly ISelectionProviderValues[]>;\n}\n\nexport interface IDashboardWidgetDataProviderContext<TVariables = Record<string, any>, TProviderContext = Record<string, any>> {\n moduleName: string;\n dashboardName: string;\n widgetName: string;\n variables: TVariables;\n providerContext: TProviderContext;\n activeUser?: ActiveUserData;\n}\n\nexport interface IDashboardWidgetDataResponseEnvelope<TData = any, TUiHints = Record<string, any>> {\n meta: {\n providerName: string;\n generatedAt: string;\n widgetName: string;\n durationMs: number;\n [key: string]: any;\n };\n data: TData;\n uiHints?: TUiHints;\n}\n\nexport interface IDashboardWidgetDataProvider<\n TContext extends IDashboardWidgetDataProviderContext = IDashboardWidgetDataProviderContext,\n TResponse = any,\n> {\n help(): string;\n name(): string;\n getData(\n widgetDefinition: Record<string, any>,\n ctxt: TContext,\n ): Promise<IDashboardWidgetDataResponseEnvelope<TResponse> | any>;\n}\n\n\n/**\n * @deprecated Use `IEntityComputedFieldProvider` instead.\n */\nexport interface IComputedFieldProvider<T> {\n help(): string;\n\n name(): string;\n\n valueType(): string;\n\n computeValue(dto: any, ctxt: T): Promise<string | number>; // FIXME : Improve the types to make it more specific using generics\n}\n\nexport interface IEntityComputedFieldProvider {\n help(): string;\n\n name(): string;\n}\n\nexport interface IEntityPreComputeFieldProvider<TTriggerEntity, TContext, TValue = void> extends IEntityComputedFieldProvider {\n preComputeValue(triggerEntity: TTriggerEntity, computedFieldMetadata: ComputedFieldMetadata<TContext>): Promise<TValue>;\n}\n\nexport interface IEntityPostComputeFieldProvider<TTriggerEntity, TContext> extends IEntityComputedFieldProvider {\n postComputeAndSaveValue(triggerEntity: TTriggerEntity, computedFieldMetadata: ComputedFieldMetadata<TContext>): Promise<void>;\n}\n\nexport interface ISolidDatabaseModule {\n name(): string;\n\n type(): DatasourceType;\n}\n\nexport enum EventType {\n USER_REGISTERED = 'user.registered',\n MODULE_METADATA_SEEDER_STARTED = 'module-metadata-seeder.started',\n MODULE_METADATA_SEEDER_FINISHED = 'module-metadata-seeder.finished',\n}\n\nexport class EventDetails<T> {\n constructor(\n public type: any,\n public payload: T,\n ) { }\n}\n\nexport interface ModuleMetadataSeederOptions {\n modulesToSeed: string[] | null;\n pruneMetadata: boolean;\n seedGlobalMetadata: boolean;\n}\n\nexport interface ModuleMetadataSeederEventPayload {\n seedRunId: string;\n options: ModuleMetadataSeederOptions;\n startedAt: string;\n finishedAt?: string;\n durationMs?: number;\n success?: boolean;\n seededModuleNames?: string[];\n currentStep?: string;\n errorMessage?: string;\n}\n\nexport interface IExtensionUserCreationProvider<T extends User = User, TDto extends CreateUserDto = CreateUserDto> {\n readonly repo: Repository<T>;\n buildExtensionEntity(dto: TDto): Promise<T>;\n roles(dto: TDto): string[];\n}\n\nexport interface IMail<TResponse = unknown> {\n sendEmail(\n to: string,\n subject: string,\n body: string,\n shouldQueueEmails: boolean,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string,\n ): Promise<TResponse>;\n\n sendEmailUsingTemplate(\n to: string,\n templateName: string,\n templateParams: any,\n shouldQueueEmails: boolean,\n wrapperAttachments?: MailAttachmentWrapper[],\n attachments?: MailAttachment[],\n parentEntity?: any,\n parentEntityId?: any,\n cc?: string[],\n bcc?: string[],\n from?: string,\n ): Promise<TResponse>;\n}\n\nexport interface ISMS {\n sendSMS(to: string, body: string, shouldQueueSms: boolean): Promise<any>;\n\n sendSMSUsingTemplate(\n to: string,\n templateName: string,\n templateParams: any,\n shouldQueueSms: boolean,\n ): Promise<any>;\n}\n\nexport interface IWhatsAppTransport {\n sendWhatsAppMessage(\n to: string,\n templateId: string,\n parameters: any,\n parentEntity?: any,\n parentEntityId?: any\n ): Promise<any>;\n}\n\nexport interface MailAttachmentWrapper {\n relativePath?: string;\n attachment?: MailAttachment;\n}\n\nexport interface MailAttachment {\n filename: string;\n templatePath?: string; // deprecated\n templateParams?: any; // deprecated\n content?: string | Buffer;\n contentType?: string;\n path?: string; //Filesystem absolute path or URL. \n}\n\nexport enum BrokerType {\n RabbitMQ = 'rabbitmq',\n Database = 'database',\n Redis = 'redis',\n}\n\nexport interface QueuesModuleOptions {\n name: string;\n type: BrokerType;\n queueName: string;\n prefetch?: number;\n persistToDatabase?: boolean;\n}\n\nexport type MediaWithFullUrl = Media & {\n _full_url: string;\n};\n\n\nexport type ErrorCode = string;\n\nexport type ErrorMeta = {\n message: string;\n httpStatus?: number;\n};\n\nexport type ErrorRule = {\n /** Canonical error code. Keep them kebab-case for consistency. */\n code: ErrorCode;\n /** Higher runs earlier. Defaults to 0 if not provided. */\n priority?: number;\n /** Return true if this rule matches the combined error text. */\n match: (combinedErrorText: string) => boolean;\n /** Display + HTTP mapping for this code. */\n meta: ErrorMeta;\n};\n\nexport interface IErrorCodeProvider {\n /** Used for registry identity & logs */\n name(): string;\n\n /**\n * Return all rules this provider contributes.\n * These will be merged with other providers’ rules, then sorted by priority.\n */\n rules(): ReadonlyArray<ErrorRule>;\n\n /**\n * Optional fallback meta for codes this provider owns (when called by getMessage/getHttpStatus).\n * If omitted, the ErrorMapperService will rely on the rule.meta of the first matching rule.\n */\n resolve?(code: ErrorCode): ErrorMeta | undefined;\n}\n\n// MCP Tool Related\n\nexport type PlanStep = CreateNewFileStep | RegisterNestProviderStep | AddMethodToExistingClassStep | RegisterSolidXExtensionComponentStep | AddListViewButtonStep | AddFormViewButtonStep | AddImportStep;\nexport interface AddImportStep {\n type: \"addImport\";\n path: string; // e.g. apps/api/src/address-master/services/address-master.service.ts\n importStatement: string; // e.g. import { Something } from 'somewhere';\n overwrite?: boolean; // default=false\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface CreateNewFileStep {\n type: \"createNewFile\";\n path: string; // repo-relative e.g. solid-api/api/src/computed-providers/foo.provider.ts\n content: string; // full file content\n overwrite?: boolean; // default=false\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface RegisterNestProviderStep {\n type: \"registerNestProvider\";\n modulePath: string; // e.g. apps/api/src/address-master/address-master.module.ts\n providerClassName: string; // e.g. StateTotalCitiesComputedFieldProvider\n importFrom: string; // e.g. \"@/computed-providers/state-total-cities.provider\"\n registerIn: Array<\"providers\" | \"exports\">; // which arrays to add to\n uniqueGuard?: boolean; // default=true\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface AddMethodToExistingClassStep {\n type: \"addMethodToExistingClass\";\n path: string; // e.g. apps/api/src/address-master/services/address-master.service.ts\n className: string // e.g. CountryService\n methodName: string // e.g. addCountry\n content: string // Full Method Code\n importStatements?: string[]; // e.g. [ \"import { X } from 'y';\" ]\n rationale?: string; // optional, ignored by executor\n}\n\nexport interface RegisterSolidXExtensionComponentStep {\n type: \"registerSolidXExtensionComponent\";\n path: string; // e.g. apps/api/src/address-master/services/address-master.service.ts\n content?: string; // Code\n importExtensionComponent?: string;\n}\n\nexport interface AddListViewButtonStep {\n type: \"addListViewButton\";\n moduleName?: string;\n modelName?: string;\n buttonType?: string;\n content?: string; // Code\n}\n\nexport interface AddFormViewButtonStep {\n type: \"addFormViewButton\";\n moduleName?: string;\n modelName?: string;\n buttonType?: string;\n content?: string; // Code\n}\n\nexport interface McpComputedProviderResponse {\n plan: PlanStep[];\n // provider?: any; // (intentionally ignored per your note)\n}\n\nexport interface ISecurityRuleConfigProvider {\n securityRuleConfig(activeUser: ActiveUserData, securityRule: SecurityRule): Promise<SecurityRuleConfig>;\n}\n\n\nexport interface AwsS3Config {\n S3_AWS_ACCESS_KEY: string;\n S3_AWS_SECRET_KEY: string;\n S3_AWS_REGION_NAME: string;\n}\n\n// Prevents inference so callers must provide explicit type arguments; reusable for other APIs.\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\n\nexport type AuditEventType = 'insert' | 'update' | 'delete';\n\nexport interface AuditQueuePayload {\n eventType: AuditEventType;\n modelName: string;\n entityId: string | number | null;\n occurredAt: string;\n after?: any;\n before?: any;\n updatedColumnNames?: string[];\n userId?: number | null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"media.repository.d.ts","sourceRoot":"","sources":["../../src/repository/media.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAM,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBACa,eAAgB,SAAQ,mBAAmB,CAAC,KAAK,CAAC;IAEvD,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;IAOvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gCAAgC;gBAZxC,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAOtC,iBAAiB,EAAE,uBAAuB,EAE1C,iBAAiB,EAAE,uBAAuB,EAC1C,gCAAgC,EAAE,sCAAsC;IAKvF,WAAW,CAAC,SAAS,EAAE,GAAG;IAoB1B,0CAA0C,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,KAAK;IAe7H,4CAA4C,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;CAexH"}
1
+ {"version":3,"file":"media.repository.d.ts","sourceRoot":"","sources":["../../src/repository/media.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAM,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,qBACa,eAAgB,SAAQ,mBAAmB,CAAC,KAAK,CAAC;IAEvD,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;IAOvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gCAAgC;gBAZxC,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAOtC,iBAAiB,EAAE,uBAAuB,EAE1C,iBAAiB,EAAE,uBAAuB,EAC1C,gCAAgC,EAAE,sCAAsC;IAKvF,WAAW,CAAC,SAAS,EAAE,GAAG;IAqB1B,0CAA0C,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,KAAK;IAe7H,4CAA4C,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;CAexH"}
@@ -22,6 +22,7 @@ const media_storage_provider_metadata_repository_1 = require("./media-storage-pr
22
22
  const model_metadata_repository_1 = require("./model-metadata.repository");
23
23
  const security_rule_repository_1 = require("./security-rule.repository");
24
24
  const solid_base_repository_1 = require("./solid-base.repository");
25
+ const media_storage_utils_1 = require("../services/media-storage.utils");
25
26
  let MediaRepository = class MediaRepository extends solid_base_repository_1.SolidBaseRepository {
26
27
  constructor(dataSource, requestContextService, securityRuleRepository, fieldMetadataRepo, modelMetadataRepo, mediaStorageProviderMetadataRepo) {
27
28
  super(media_entity_1.Media, dataSource, requestContextService, securityRuleRepository);
@@ -48,6 +49,7 @@ let MediaRepository = class MediaRepository extends solid_base_repository_1.Soli
48
49
  id: createDto['mediaStorageProviderMetadataId']
49
50
  },
50
51
  });
52
+ createDto['isPublic'] = (0, media_storage_utils_1.resolveStoredMediaIsPublic)(createDto['isPublic'], createDto['mediaStorageProviderMetadata']);
51
53
  const media = this.create(createDto);
52
54
  return this.save(media);
53
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"media.repository.js","sourceRoot":"","sources":["../../src/repository/media.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAgE;AAChE,2DAAkD;AAClD,iFAA6E;AAC7E,qCAAyC;AACzC,2EAAsE;AACtE,6GAAsG;AACtG,2EAAsE;AACtE,yEAAoE;AACpE,mEAA8D;AAGvD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,2CAA0B;IAC3D,YACa,UAAsB,EACtB,qBAA4C,EAC5C,sBAA8C,EAOtC,iBAA0C,EAE1C,iBAA0C,EAC1C,gCAAwE;QAEzF,KAAK,CAAC,oBAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;QAd/D,eAAU,GAAV,UAAU,CAAY;QACtB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAOtC,sBAAiB,GAAjB,iBAAiB,CAAyB;QAE1C,sBAAiB,GAAjB,iBAAiB,CAAyB;QAC1C,qCAAgC,GAAhC,gCAAgC,CAAwC;IAG7F,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAc;QAC5B,SAAS,CAAC,eAAe,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC9D,KAAK,EAAE;gBACH,EAAE,EAAE,SAAS,CAAC,iBAAiB,CAAC;aACnC;SACJ,CAAC,CAAC;QACH,SAAS,CAAC,eAAe,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC9D,KAAK,EAAE;gBACH,EAAE,EAAE,SAAS,CAAC,iBAAiB,CAAC;aACnC;SACJ,CAAC,CAAC;QACH,SAAS,CAAC,8BAA8B,CAAC,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC;YAC5F,KAAK,EAAE;gBACH,EAAE,EAAE,SAAS,CAAC,gCAAgC,CAAC;aAClD;SACJ,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,0CAA0C,CAAC,QAAgB,EAAE,eAAuB,EAAE,eAAuB,EAAE,SAAS,GAAG,EAAE;QAC/H,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE;gBACH,aAAa,EAAE;oBACX,EAAE,EAAE,eAAe;iBACtB;gBACD,aAAa,EAAE;oBACX,EAAE,EAAE,eAAe;iBACtB;gBACD,QAAQ,EAAE,QAAQ;aACrB;YACD,SAAS,EAAE,SAAS;SACvB,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,4CAA4C,CAAC,QAAgB,EAAE,eAAuB,EAAE,eAAuB;QACjH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC7B,KAAK,EAAE;gBACH,aAAa,EAAE;oBACX,EAAE,EAAE,eAAe;iBACtB;gBACD,aAAa,EAAE;oBACX,EAAE,EAAE,eAAe;iBACtB;gBACD,QAAQ,EAAE,QAAQ;aACrB;SACJ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;CAEJ,CAAA;AArEY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAaJ,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,mDAAuB,CAAC,CAAC,CAAA;qCAV7B,oBAAU;QACC,+CAAqB;QACpB,iDAAsB;QAOnB,mDAAuB;QAEvB,mDAAuB;QACR,mFAAsC;GAdpF,eAAe,CAqE3B","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { Media } from 'src/entities/media.entity';\nimport { RequestContextService } from 'src/services/request-context.service';\nimport { DataSource, In } from 'typeorm';\nimport { FieldMetadataRepository } from './field-metadata.repository';\nimport { MediaStorageProviderMetadataRepository } from './media-storage-provider-metadata.repository';\nimport { ModelMetadataRepository } from './model-metadata.repository';\nimport { SecurityRuleRepository } from './security-rule.repository';\nimport { SolidBaseRepository } from './solid-base.repository';\n\n@Injectable()\nexport class MediaRepository extends SolidBaseRepository<Media> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n // @InjectRepository(MediaStorageProviderMetadata)\n // private readonly mediaStorageProviderMetadataRepo: Repository<MediaStorageProviderMetadata>,\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly mediaStorageProviderMetadataRepo: MediaStorageProviderMetadataRepository,\n ) {\n super(Media, dataSource, requestContextService, securityRuleRepository);\n }\n\n async createMedia(createDto: any) {\n createDto['fieldMetadata'] = await this.fieldMetadataRepo.findOne({\n where: {\n id: createDto['fieldMetadataId']\n },\n });\n createDto['modelMetadata'] = await this.modelMetadataRepo.findOne({\n where: {\n id: createDto['modelMetadataId']\n },\n });\n createDto['mediaStorageProviderMetadata'] = await this.mediaStorageProviderMetadataRepo.findOne({\n where: {\n id: createDto['mediaStorageProviderMetadataId']\n },\n });\n const media = this.create(createDto);\n return this.save(media);\n }\n\n async findByEntityIdAndFieldIdAndModelMetadataId(entityId: number, fieldMetadataId: number, modelMetadataId: number, relations = {}) {\n return await this.find({\n where: {\n modelMetadata: {\n id: modelMetadataId\n },\n fieldMetadata: {\n id: fieldMetadataId\n },\n entityId: entityId,\n },\n relations: relations,\n });\n }\n\n async deleteByEntityIdAndFieldIdAndModelMetadataId(entityId: number, fieldMetadataId: number, modelMetadataId: number) {\n const entities = await this.find({\n where: {\n modelMetadata: {\n id: modelMetadataId\n },\n fieldMetadata: {\n id: fieldMetadataId\n },\n entityId: entityId,\n }\n });\n return this.remove(entities);\n }\n\n}\n"]}
1
+ {"version":3,"file":"media.repository.js","sourceRoot":"","sources":["../../src/repository/media.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { Media } from 'src/entities/media.entity';\nimport { RequestContextService } from 'src/services/request-context.service';\nimport { DataSource, In } from 'typeorm';\nimport { FieldMetadataRepository } from './field-metadata.repository';\nimport { MediaStorageProviderMetadataRepository } from './media-storage-provider-metadata.repository';\nimport { ModelMetadataRepository } from './model-metadata.repository';\nimport { SecurityRuleRepository } from './security-rule.repository';\nimport { SolidBaseRepository } from './solid-base.repository';\nimport { resolveStoredMediaIsPublic } from 'src/services/media-storage.utils';\n\n@Injectable()\nexport class MediaRepository extends SolidBaseRepository<Media> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n // @InjectRepository(MediaStorageProviderMetadata)\n // private readonly mediaStorageProviderMetadataRepo: Repository<MediaStorageProviderMetadata>,\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly mediaStorageProviderMetadataRepo: MediaStorageProviderMetadataRepository,\n ) {\n super(Media, dataSource, requestContextService, securityRuleRepository);\n }\n\n async createMedia(createDto: any) {\n createDto['fieldMetadata'] = await this.fieldMetadataRepo.findOne({\n where: {\n id: createDto['fieldMetadataId']\n },\n });\n createDto['modelMetadata'] = await this.modelMetadataRepo.findOne({\n where: {\n id: createDto['modelMetadataId']\n },\n });\n createDto['mediaStorageProviderMetadata'] = await this.mediaStorageProviderMetadataRepo.findOne({\n where: {\n id: createDto['mediaStorageProviderMetadataId']\n },\n });\n createDto['isPublic'] = resolveStoredMediaIsPublic(createDto['isPublic'], createDto['mediaStorageProviderMetadata']);\n const media = this.create(createDto);\n return this.save(media);\n }\n\n async findByEntityIdAndFieldIdAndModelMetadataId(entityId: number, fieldMetadataId: number, modelMetadataId: number, relations = {}) {\n return await this.find({\n where: {\n modelMetadata: {\n id: modelMetadataId\n },\n fieldMetadata: {\n id: fieldMetadataId\n },\n entityId: entityId,\n },\n relations: relations,\n });\n }\n\n async deleteByEntityIdAndFieldIdAndModelMetadataId(entityId: number, fieldMetadataId: number, modelMetadataId: number) {\n const entities = await this.find({\n where: {\n modelMetadata: {\n id: modelMetadataId\n },\n fieldMetadata: {\n id: fieldMetadataId\n },\n entityId: entityId,\n }\n });\n return this.remove(entities);\n }\n\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { EventEmitter2 } from '@nestjs/event-emitter';
1
2
  import { SecurityRuleRepository } from '../repository/security-rule.repository';
2
3
  import { AuthenticationService } from '../services/authentication.service';
3
4
  import { EmailTemplateService } from '../services/email-template.service';
@@ -26,6 +27,7 @@ import { LocaleRepository } from '../repository/locale.repository';
26
27
  export declare class ModuleMetadataSeederService {
27
28
  private readonly moduleMetadataService;
28
29
  private readonly modelMetadataService;
30
+ private readonly eventEmitter;
29
31
  private readonly fieldMetadataService;
30
32
  private readonly mediaStorageProviderMetadataService;
31
33
  private readonly roleService;
@@ -49,6 +51,7 @@ export declare class ModuleMetadataSeederService {
49
51
  readonly dataSource: DataSource;
50
52
  readonly modelSequenceRepo: ModelSequenceRepository;
51
53
  readonly localeRepo: LocaleRepository;
54
+ private readonly adminPermissionExclusionPrefixes;
52
55
  private readonly logger;
53
56
  private readonly seedTimingTag;
54
57
  private readonly permissionSeedBatchSize;
@@ -59,8 +62,10 @@ export declare class ModuleMetadataSeederService {
59
62
  private readonly viewLookupCache;
60
63
  private readonly mediaStorageProviderLookupCache;
61
64
  private enablePruning;
62
- constructor(moduleMetadataService: ModuleMetadataService, modelMetadataService: ModelMetadataService, fieldMetadataService: FieldMetadataService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, roleService: RoleMetadataService, userService: UserService, authenticationService: AuthenticationService, apiKeyService: ApiKeyService, solidActionService: ActionMetadataService, solidViewService: ViewMetadataService, emailTemplateService: EmailTemplateService, smsTemplateService: SmsTemplateService, listOfValuesService: ListOfValuesService, userApiKeyRepository: UserApiKeyRepository, permissionRepo: PermissionMetadataRepository, solidRegistry: SolidRegistry, settingService: SettingService, settingsRepo: SettingRepository, securityRuleRepo: SecurityRuleRepository, systemFieldsSeederService: SystemFieldsSeederService, scheduledJobRepository: ScheduledJobRepository, savedFiltersRepo: SavedFiltersRepository, dataSource: DataSource, modelSequenceRepo: ModelSequenceRepository, localeRepo: LocaleRepository);
65
+ constructor(moduleMetadataService: ModuleMetadataService, modelMetadataService: ModelMetadataService, eventEmitter: EventEmitter2, fieldMetadataService: FieldMetadataService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, roleService: RoleMetadataService, userService: UserService, authenticationService: AuthenticationService, apiKeyService: ApiKeyService, solidActionService: ActionMetadataService, solidViewService: ViewMetadataService, emailTemplateService: EmailTemplateService, smsTemplateService: SmsTemplateService, listOfValuesService: ListOfValuesService, userApiKeyRepository: UserApiKeyRepository, permissionRepo: PermissionMetadataRepository, solidRegistry: SolidRegistry, settingService: SettingService, settingsRepo: SettingRepository, securityRuleRepo: SecurityRuleRepository, systemFieldsSeederService: SystemFieldsSeederService, scheduledJobRepository: ScheduledJobRepository, savedFiltersRepo: SavedFiltersRepository, dataSource: DataSource, modelSequenceRepo: ModelSequenceRepository, localeRepo: LocaleRepository);
63
66
  seed(conf?: any): Promise<void>;
67
+ private emitModuleMetadataSeederEvent;
68
+ private emitModuleMetadataSeederFinishedEvent;
64
69
  private buildTimingPrefix;
65
70
  private formatDuration;
66
71
  private resetLookupCaches;
@@ -74,6 +79,7 @@ export declare class ModuleMetadataSeederService {
74
79
  private seedListOfValues;
75
80
  private seedLocales;
76
81
  private setupDefaultRolesWithPermissions;
82
+ private attachCapabilityRolesToAdminUsers;
77
83
  private seedSecurityRules;
78
84
  private seedDefaultSettings;
79
85
  private seedSmsTemplates;
@@ -1 +1 @@
1
- {"version":3,"file":"module-metadata-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-metadata-seeder.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-metadata-seeder.service.d.ts","sourceRoot":"","sources":["../../src/seeders/module-metadata-seeder.service.ts"],"names":[],"mappings":"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"}
@@ -51,9 +51,11 @@ var ModuleMetadataSeederService_1;
51
51
  Object.defineProperty(exports, "__esModule", { value: true });
52
52
  exports.ModuleMetadataSeederService = void 0;
53
53
  const common_1 = require("@nestjs/common");
54
+ const event_emitter_1 = require("@nestjs/event-emitter");
54
55
  const fs = __importStar(require("fs"));
55
56
  const os = __importStar(require("os"));
56
57
  const path = __importStar(require("path"));
58
+ const uuid_1 = require("uuid");
57
59
  const security_rule_repository_1 = require("../repository/security-rule.repository");
58
60
  const authentication_service_1 = require("../services/authentication.service");
59
61
  const email_template_service_1 = require("../services/email-template.service");
@@ -98,10 +100,12 @@ const field_metadata_entity_1 = require("../entities/field-metadata.entity");
98
100
  const model_metadata_entity_1 = require("../entities/model-metadata.entity");
99
101
  const permission_metadata_entity_1 = require("../entities/permission-metadata.entity");
100
102
  const view_metadata_entity_1 = require("../entities/view-metadata.entity");
103
+ const interfaces_1 = require("../interfaces");
101
104
  let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMetadataSeederService {
102
- constructor(moduleMetadataService, modelMetadataService, fieldMetadataService, mediaStorageProviderMetadataService, roleService, userService, authenticationService, apiKeyService, solidActionService, solidViewService, emailTemplateService, smsTemplateService, listOfValuesService, userApiKeyRepository, permissionRepo, solidRegistry, settingService, settingsRepo, securityRuleRepo, systemFieldsSeederService, scheduledJobRepository, savedFiltersRepo, dataSource, modelSequenceRepo, localeRepo) {
105
+ constructor(moduleMetadataService, modelMetadataService, eventEmitter, fieldMetadataService, mediaStorageProviderMetadataService, roleService, userService, authenticationService, apiKeyService, solidActionService, solidViewService, emailTemplateService, smsTemplateService, listOfValuesService, userApiKeyRepository, permissionRepo, solidRegistry, settingService, settingsRepo, securityRuleRepo, systemFieldsSeederService, scheduledJobRepository, savedFiltersRepo, dataSource, modelSequenceRepo, localeRepo) {
103
106
  this.moduleMetadataService = moduleMetadataService;
104
107
  this.modelMetadataService = modelMetadataService;
108
+ this.eventEmitter = eventEmitter;
105
109
  this.fieldMetadataService = fieldMetadataService;
106
110
  this.mediaStorageProviderMetadataService = mediaStorageProviderMetadataService;
107
111
  this.roleService = roleService;
@@ -125,6 +129,11 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
125
129
  this.dataSource = dataSource;
126
130
  this.modelSequenceRepo = modelSequenceRepo;
127
131
  this.localeRepo = localeRepo;
132
+ this.adminPermissionExclusionPrefixes = [
133
+ 'ImportTransactionController.',
134
+ 'ExportTemplateController.',
135
+ 'ExportTransactionController.',
136
+ ];
128
137
  this.logger = new common_1.Logger(ModuleMetadataSeederService_1.name);
129
138
  this.seedTimingTag = 'SEED_TIMING';
130
139
  this.permissionSeedBatchSize = 500;
@@ -140,7 +149,22 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
140
149
  let currentModule = 'global';
141
150
  let currentStep = 'bootstrap';
142
151
  let modulesToSeed = null;
152
+ const requestedModulesToSeed = Array.isArray(conf?.modulesToSeed) ? [...conf.modulesToSeed] : null;
143
153
  const shouldSeedGlobalMetadata = conf?.seedGlobalMetadata !== false;
154
+ const seedOptions = {
155
+ modulesToSeed: requestedModulesToSeed,
156
+ pruneMetadata: Boolean(conf?.pruneMetadata),
157
+ seedGlobalMetadata: shouldSeedGlobalMetadata,
158
+ };
159
+ const seedRunId = (0, uuid_1.v4)();
160
+ const startedAt = new Date();
161
+ const seededModuleNames = [];
162
+ this.emitModuleMetadataSeederEvent(interfaces_1.EventType.MODULE_METADATA_SEEDER_STARTED, {
163
+ seedRunId,
164
+ options: seedOptions,
165
+ startedAt: startedAt.toISOString(),
166
+ currentStep,
167
+ });
144
168
  try {
145
169
  this.enablePruning = Boolean(conf?.pruneMetadata);
146
170
  this.resetLookupCaches();
@@ -180,6 +204,7 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
180
204
  }
181
205
  console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);
182
206
  this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);
207
+ seededModuleNames.push(moduleMetadata.name);
183
208
  await this.timeOperation('module-total', async () => {
184
209
  currentStep = 'seedMediaStorageProviders';
185
210
  this.logger.log(`Seeding Media Storage Providers`);
@@ -252,8 +277,29 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
252
277
  await this.timeOperation('setup-default-roles-with-permissions', () => this.setupDefaultRolesWithPermissions(), { moduleName: 'global', component: 'default-roles' });
253
278
  }, { moduleName: 'global', component: 'seed-run' });
254
279
  console.log(`✔ Seeding completed.`);
280
+ await this.emitModuleMetadataSeederFinishedEvent(interfaces_1.EventType.MODULE_METADATA_SEEDER_FINISHED, {
281
+ seedRunId,
282
+ options: seedOptions,
283
+ startedAt: startedAt.toISOString(),
284
+ finishedAt: new Date().toISOString(),
285
+ durationMs: Date.now() - startedAt.getTime(),
286
+ success: true,
287
+ seededModuleNames,
288
+ currentStep,
289
+ });
255
290
  }
256
291
  catch (error) {
292
+ await this.emitModuleMetadataSeederFinishedEvent(interfaces_1.EventType.MODULE_METADATA_SEEDER_FINISHED, {
293
+ seedRunId,
294
+ options: seedOptions,
295
+ startedAt: startedAt.toISOString(),
296
+ finishedAt: new Date().toISOString(),
297
+ durationMs: Date.now() - startedAt.getTime(),
298
+ success: false,
299
+ seededModuleNames,
300
+ currentStep,
301
+ errorMessage: error?.message,
302
+ });
257
303
  this.logSeedFailureForCli(error, {
258
304
  moduleName: currentModule,
259
305
  step: currentStep,
@@ -263,6 +309,25 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
263
309
  throw error;
264
310
  }
265
311
  }
312
+ emitModuleMetadataSeederEvent(type, payload) {
313
+ try {
314
+ this.eventEmitter.emit(type, new interfaces_1.EventDetails(type, payload));
315
+ }
316
+ catch (error) {
317
+ this.logger.warn(`Failed to emit ${type}: ${error?.message ?? error}`);
318
+ }
319
+ }
320
+ async emitModuleMetadataSeederFinishedEvent(type, payload) {
321
+ try {
322
+ console.log(`▶ Running post-seed hooks for runId=${payload.seedRunId}`);
323
+ await this.eventEmitter.emitAsync(type, new interfaces_1.EventDetails(type, payload));
324
+ console.log(`✔ Post-seed hooks completed for runId=${payload.seedRunId}`);
325
+ }
326
+ catch (error) {
327
+ console.log(`✖ Post-seed hooks failed for runId=${payload.seedRunId}: ${error?.message ?? error}`);
328
+ this.logger.warn(`Failed to emit ${type}: ${error?.message ?? error}`);
329
+ }
330
+ }
266
331
  buildTimingPrefix(itemTag, options) {
267
332
  const parts = [`[${this.seedTimingTag}]`, `[ITEM:${itemTag}]`];
268
333
  if (options?.moduleName) {
@@ -428,13 +493,31 @@ let ModuleMetadataSeederService = ModuleMetadataSeederService_1 = class ModuleMe
428
493
  }
429
494
  async setupDefaultRolesWithPermissions() {
430
495
  this.logger.debug(`About to add all permissions to the Admin role`);
431
- await this.timeOperation('role-add-all-permissions', () => this.roleService.addAllPermissionsToRole(create_role_metadata_dto_1.ADMIN_ROLE_NAME), {
496
+ await this.timeOperation('role-add-all-permissions', () => this.roleService.addAllPermissionsToRoleExceptPrefixes(create_role_metadata_dto_1.ADMIN_ROLE_NAME, this.adminPermissionExclusionPrefixes), {
497
+ moduleName: 'global',
498
+ component: 'default-roles',
499
+ serviceCall: 'roleService.addAllPermissionsToRoleExceptPrefixes',
500
+ details: `role=${create_role_metadata_dto_1.ADMIN_ROLE_NAME}`,
501
+ });
502
+ await this.timeOperation('attach-capability-roles-to-admin-users', () => this.attachCapabilityRolesToAdminUsers(), {
432
503
  moduleName: 'global',
433
504
  component: 'default-roles',
434
- serviceCall: 'roleService.addAllPermissionsToRole',
505
+ serviceCall: 'attachCapabilityRolesToAdminUsers',
435
506
  details: `role=${create_role_metadata_dto_1.ADMIN_ROLE_NAME}`,
436
507
  });
437
508
  }
509
+ async attachCapabilityRolesToAdminUsers() {
510
+ const adminUsers = await this.userService.findUsersByRole(create_role_metadata_dto_1.ADMIN_ROLE_NAME, {});
511
+ if (!adminUsers?.length) {
512
+ return;
513
+ }
514
+ const capabilityRoles = [create_role_metadata_dto_1.ALLOWED_TO_IMPORT_ROLE_NAME, create_role_metadata_dto_1.ALLOWED_TO_EXPORT_ROLE_NAME];
515
+ for (const adminUser of adminUsers) {
516
+ for (const capabilityRole of capabilityRoles) {
517
+ await this.userService.addRoleToUser(adminUser.username, capabilityRole);
518
+ }
519
+ }
520
+ }
438
521
  async seedSecurityRules(overallMetadata) {
439
522
  const securityRules = this.getSeedArray(overallMetadata?.securityRules);
440
523
  const pruned = this.enablePruning ? await this.timeOperation('prune-security-rules', () => this.pruneSecurityRules(securityRules, overallMetadata?.moduleMetadata?.name), {
@@ -2191,6 +2274,7 @@ exports.ModuleMetadataSeederService = ModuleMetadataSeederService = ModuleMetada
2191
2274
  __param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_service_1.ModelMetadataService))),
2192
2275
  __metadata("design:paramtypes", [module_metadata_service_1.ModuleMetadataService,
2193
2276
  model_metadata_service_1.ModelMetadataService,
2277
+ event_emitter_1.EventEmitter2,
2194
2278
  field_metadata_service_1.FieldMetadataService,
2195
2279
  media_storage_provider_metadata_service_1.MediaStorageProviderMetadataService,
2196
2280
  role_metadata_service_1.RoleMetadataService,