@n8n/backend-module-apps 0.0.0-stage → 0.0.0-tp-setup

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 (66) hide show
  1. package/dist/app-artifact.entity.d.ts +10 -0
  2. package/dist/app-artifact.entity.js +48 -0
  3. package/dist/app-artifact.entity.js.map +1 -0
  4. package/dist/app-artifact.repository.d.ts +15 -0
  5. package/dist/app-artifact.repository.js +104 -0
  6. package/dist/app-artifact.repository.js.map +1 -0
  7. package/dist/app-artifact.service.d.ts +20 -0
  8. package/dist/app-artifact.service.js +118 -0
  9. package/dist/app-artifact.service.js.map +1 -0
  10. package/dist/app-retention.service.d.ts +16 -0
  11. package/dist/app-retention.service.js +74 -0
  12. package/dist/app-retention.service.js.map +1 -0
  13. package/dist/app-storage-cleanup.task.d.ts +17 -0
  14. package/dist/app-storage-cleanup.task.js +57 -0
  15. package/dist/app-storage-cleanup.task.js.map +1 -0
  16. package/dist/app-storage-lock.d.ts +1 -0
  17. package/dist/app-storage-lock.js +8 -0
  18. package/dist/app-storage-lock.js.map +1 -0
  19. package/dist/app-version.entity.d.ts +12 -0
  20. package/dist/app-version.entity.js +56 -0
  21. package/dist/app-version.entity.js.map +1 -0
  22. package/dist/app-version.repository.d.ts +18 -0
  23. package/dist/app-version.repository.js +90 -0
  24. package/dist/app-version.repository.js.map +1 -0
  25. package/dist/app-version.service.d.ts +30 -0
  26. package/dist/app-version.service.js +124 -0
  27. package/dist/app-version.service.js.map +1 -0
  28. package/dist/app.entity.d.ts +11 -0
  29. package/dist/app.entity.js +53 -0
  30. package/dist/app.entity.js.map +1 -0
  31. package/dist/app.repository.d.ts +19 -0
  32. package/dist/app.repository.js +116 -0
  33. package/dist/app.repository.js.map +1 -0
  34. package/dist/apps-list.controller.d.ts +9 -0
  35. package/dist/apps-list.controller.js +39 -0
  36. package/dist/apps-list.controller.js.map +1 -0
  37. package/dist/apps.config.d.ts +8 -0
  38. package/dist/apps.config.js +54 -0
  39. package/dist/apps.config.js.map +1 -0
  40. package/dist/apps.controller.d.ts +48 -0
  41. package/dist/apps.controller.js +82 -0
  42. package/dist/apps.controller.js.map +1 -0
  43. package/dist/apps.module.d.ts +9 -0
  44. package/dist/apps.module.js +43 -0
  45. package/dist/apps.module.js.map +1 -0
  46. package/dist/apps.service.d.ts +18 -0
  47. package/dist/apps.service.js +93 -0
  48. package/dist/apps.service.js.map +1 -0
  49. package/dist/build.tsbuildinfo +1 -0
  50. package/dist/index.d.ts +10 -0
  51. package/dist/index.js +25 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/storage/app-archive.d.ts +16 -0
  54. package/dist/storage/app-archive.js +180 -0
  55. package/dist/storage/app-archive.js.map +1 -0
  56. package/dist/storage/app-blob-store.d.ts +21 -0
  57. package/dist/storage/app-blob-store.js +93 -0
  58. package/dist/storage/app-blob-store.js.map +1 -0
  59. package/dist/storage/app-version-stores.d.ts +20 -0
  60. package/dist/storage/app-version-stores.js +10 -0
  61. package/dist/storage/app-version-stores.js.map +1 -0
  62. package/dist/storage/snapshot-app-version-stores.d.ts +30 -0
  63. package/dist/storage/snapshot-app-version-stores.js +122 -0
  64. package/dist/storage/snapshot-app-version-stores.js.map +1 -0
  65. package/package.json +67 -4
  66. package/README.md +0 -3
@@ -0,0 +1,48 @@
1
+ import { CreateAppDto, ListAppsQueryDto, UpdateAppDto } from '@n8n/api-types';
2
+ import type { AuthenticatedRequest } from '@n8n/db';
3
+ import type { Response } from 'express';
4
+ import { AppsService } from './apps.service';
5
+ type AppRequest = AuthenticatedRequest<{
6
+ projectId: string;
7
+ appId: string;
8
+ }>;
9
+ export declare class AppsController {
10
+ private readonly appsService;
11
+ constructor(appsService: AppsService);
12
+ create(req: AppRequest, _res: Response, dto: CreateAppDto): Promise<{
13
+ id: string;
14
+ projectId: string;
15
+ name: string;
16
+ namespace: string;
17
+ visibility: "instance" | "project" | "public";
18
+ draftVersionId: string | null;
19
+ publishedVersionId: string | null;
20
+ createdAt: string;
21
+ updatedAt: string;
22
+ }>;
23
+ list(req: AppRequest, res: Response, query: ListAppsQueryDto): Promise<void>;
24
+ get(req: AppRequest): Promise<{
25
+ id: string;
26
+ projectId: string;
27
+ name: string;
28
+ namespace: string;
29
+ visibility: "instance" | "project" | "public";
30
+ draftVersionId: string | null;
31
+ publishedVersionId: string | null;
32
+ createdAt: string;
33
+ updatedAt: string;
34
+ }>;
35
+ update(req: AppRequest, _res: Response, dto: UpdateAppDto): Promise<{
36
+ id: string;
37
+ projectId: string;
38
+ name: string;
39
+ namespace: string;
40
+ visibility: "instance" | "project" | "public";
41
+ draftVersionId: string | null;
42
+ publishedVersionId: string | null;
43
+ createdAt: string;
44
+ updatedAt: string;
45
+ }>;
46
+ delete(req: AppRequest): Promise<void>;
47
+ }
48
+ export {};
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AppsController = void 0;
16
+ const api_types_1 = require("@n8n/api-types");
17
+ const decorators_1 = require("@n8n/decorators");
18
+ const apps_service_1 = require("./apps.service");
19
+ let AppsController = class AppsController {
20
+ constructor(appsService) {
21
+ this.appsService = appsService;
22
+ }
23
+ async create(req, _res, dto) {
24
+ return await this.appsService.createApp(req.params.projectId, dto);
25
+ }
26
+ async list(req, res, query) {
27
+ res.json(await this.appsService.listApps(req.params.projectId, query));
28
+ }
29
+ async get(req) {
30
+ return await this.appsService.getApp(req.params.projectId, req.params.appId);
31
+ }
32
+ async update(req, _res, dto) {
33
+ return await this.appsService.updateApp(req.params.projectId, req.params.appId, dto);
34
+ }
35
+ async delete(req) {
36
+ await this.appsService.deleteApp(req.params.projectId, req.params.appId);
37
+ }
38
+ };
39
+ exports.AppsController = AppsController;
40
+ __decorate([
41
+ (0, decorators_1.Post)('/'),
42
+ (0, decorators_1.ProjectScope)('app:create'),
43
+ __param(2, decorators_1.Body),
44
+ __metadata("design:type", Function),
45
+ __metadata("design:paramtypes", [Object, Object, api_types_1.CreateAppDto]),
46
+ __metadata("design:returntype", Promise)
47
+ ], AppsController.prototype, "create", null);
48
+ __decorate([
49
+ (0, decorators_1.Get)('/'),
50
+ (0, decorators_1.ProjectScope)('app:list'),
51
+ __param(2, decorators_1.Query),
52
+ __metadata("design:type", Function),
53
+ __metadata("design:paramtypes", [Object, Object, api_types_1.ListAppsQueryDto]),
54
+ __metadata("design:returntype", Promise)
55
+ ], AppsController.prototype, "list", null);
56
+ __decorate([
57
+ (0, decorators_1.Get)('/:appId'),
58
+ (0, decorators_1.ProjectScope)('app:read'),
59
+ __metadata("design:type", Function),
60
+ __metadata("design:paramtypes", [Object]),
61
+ __metadata("design:returntype", Promise)
62
+ ], AppsController.prototype, "get", null);
63
+ __decorate([
64
+ (0, decorators_1.Patch)('/:appId'),
65
+ (0, decorators_1.ProjectScope)('app:update'),
66
+ __param(2, decorators_1.Body),
67
+ __metadata("design:type", Function),
68
+ __metadata("design:paramtypes", [Object, Object, api_types_1.UpdateAppDto]),
69
+ __metadata("design:returntype", Promise)
70
+ ], AppsController.prototype, "update", null);
71
+ __decorate([
72
+ (0, decorators_1.Delete)('/:appId'),
73
+ (0, decorators_1.ProjectScope)('app:delete'),
74
+ __metadata("design:type", Function),
75
+ __metadata("design:paramtypes", [Object]),
76
+ __metadata("design:returntype", Promise)
77
+ ], AppsController.prototype, "delete", null);
78
+ exports.AppsController = AppsController = __decorate([
79
+ (0, decorators_1.RestController)('/projects/:projectId/apps'),
80
+ __metadata("design:paramtypes", [apps_service_1.AppsService])
81
+ ], AppsController);
82
+ //# sourceMappingURL=apps.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.controller.js","sourceRoot":"","sources":["../src/apps.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8CAA8E;AAE9E,gDASyB;AAGzB,iDAA6C;AAKtC,IAAM,cAAc,GAApB,MAAM,cAAc;IAC1B,YAA6B,WAAwB;2BAAxB,WAAW;IAAgB,CAAC;IAKnD,AAAN,KAAK,CAAC,MAAM,CAAC,GAAe,EAAE,IAAc,EAAQ,GAAiB;QACpE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IAIK,AAAN,KAAK,CAAC,IAAI,CAAC,GAAe,EAAE,GAAa,EAAS,KAAuB;QACxE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;IAIK,AAAN,KAAK,CAAC,GAAG,CAAC,GAAe;QACxB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IAIK,AAAN,KAAK,CAAC,MAAM,CAAC,GAAe,EAAE,IAAc,EAAQ,GAAiB;QACpE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtF,CAAC;IAIK,AAAN,KAAK,CAAC,MAAM,CAAC,GAAe;QAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC;CACD,CAAA;;AA3BM;IAFL,IAAA,iBAAI,EAAC,GAAG,CAAC;IACT,IAAA,yBAAY,EAAC,YAAY,CAAC;IACoB,WAAA,iBAAI,CAAA;;qDAAM,wBAAY;;4CAEpE;AAIK;IAFL,IAAA,gBAAG,EAAC,GAAG,CAAC;IACR,IAAA,yBAAY,EAAC,UAAU,CAAC;IACmB,WAAA,kBAAK,CAAA;;qDAAQ,4BAAgB;;0CAExE;AAIK;IAFL,IAAA,gBAAG,EAAC,SAAS,CAAC;IACd,IAAA,yBAAY,EAAC,UAAU,CAAC;;;;yCAGxB;AAIK;IAFL,IAAA,kBAAK,EAAC,SAAS,CAAC;IAChB,IAAA,yBAAY,EAAC,YAAY,CAAC;IACoB,WAAA,iBAAI,CAAA;;qDAAM,wBAAY;;4CAEpE;AAIK;IAFL,IAAA,mBAAM,EAAC,SAAS,CAAC;IACjB,IAAA,yBAAY,EAAC,YAAY,CAAC;;;;4CAG1B;yBAhCW,cAAc;IAD1B,IAAA,2BAAc,EAAC,2BAA2B,CAAC;qCAED,0BAAW;GADzC,cAAc,CAiC1B"}
@@ -0,0 +1,9 @@
1
+ import type { ModuleInterface } from '@n8n/decorators';
2
+ export declare class AppsModule implements ModuleInterface {
3
+ init(): Promise<void>;
4
+ systemTasks(): Promise<typeof import("./app-storage-cleanup.task.js").AppStorageCleanupTask[]>;
5
+ entities(): Promise<(typeof import("./app-artifact.entity.js").AppArtifact | typeof import("./app-version.entity.js").AppVersion | typeof import("./app.entity.js").App)[]>;
6
+ settings(): Promise<{
7
+ enabled: boolean;
8
+ }>;
9
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AppsModule = void 0;
10
+ const decorators_1 = require("@n8n/decorators");
11
+ const backend_common_1 = require("@n8n/backend-common");
12
+ const di_1 = require("@n8n/di");
13
+ let AppsModule = class AppsModule {
14
+ async init() {
15
+ await import('./apps.controller.js');
16
+ await import('./apps-list.controller.js');
17
+ const { AppBlobStore } = await import('./storage/app-blob-store.js');
18
+ await di_1.Container.get(AppBlobStore).init();
19
+ const { AppSourceVersionStore, AppBuildResultStore } = await import('./storage/app-version-stores.js');
20
+ const { SnapshotAppSourceVersionStore, SnapshotAppBuildResultStore } = await import('./storage/snapshot-app-version-stores.js');
21
+ di_1.Container.set(AppSourceVersionStore, di_1.Container.get(SnapshotAppSourceVersionStore));
22
+ di_1.Container.set(AppBuildResultStore, di_1.Container.get(SnapshotAppBuildResultStore));
23
+ di_1.Container.get(backend_common_1.Logger).warn('The apps module is experimental.');
24
+ }
25
+ async systemTasks() {
26
+ const { AppStorageCleanupTask } = await import('./app-storage-cleanup.task.js');
27
+ return [AppStorageCleanupTask];
28
+ }
29
+ async entities() {
30
+ const { App } = await import('./app.entity.js');
31
+ const { AppVersion } = await import('./app-version.entity.js');
32
+ const { AppArtifact } = await import('./app-artifact.entity.js');
33
+ return [App, AppVersion, AppArtifact];
34
+ }
35
+ async settings() {
36
+ return { enabled: true };
37
+ }
38
+ };
39
+ exports.AppsModule = AppsModule;
40
+ exports.AppsModule = AppsModule = __decorate([
41
+ (0, decorators_1.BackendModule)({ name: 'apps', instanceTypes: ['main'] })
42
+ ], AppsModule);
43
+ //# sourceMappingURL=apps.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.module.js","sourceRoot":"","sources":["../src/apps.module.ts"],"names":[],"mappings":";;;;;;;;;AACA,gDAAgD;AAChD,wDAA6C;AAC7C,gCAAoC;AAG7B,IAAM,UAAU,GAAhB,MAAM,UAAU;IACtB,KAAK,CAAC,IAAI;QACT,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACrC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACrE,MAAM,cAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAClE,iCAAiC,CACjC,CAAC;QACF,MAAM,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,GAAG,MAAM,MAAM,CAClF,0CAA0C,CAC1C,CAAC;QACF,cAAS,CAAC,GAAG,CAAC,qBAAqB,EAAE,cAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACnF,cAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,cAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC/E,cAAS,CAAC,GAAG,CAAC,uBAAM,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAChF,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC/D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;CACD,CAAA;;qBAhCY,UAAU;IADtB,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;GAC5C,UAAU,CAgCtB"}
@@ -0,0 +1,18 @@
1
+ import { type CreateAppDto, type UpdateAppDto, type AppResponse, type AppListResponse, type ListAppsQueryDto } from '@n8n/api-types';
2
+ import { ProjectScopeService } from '@n8n/backend-services';
3
+ import { DbLockService, type User } from '@n8n/db';
4
+ import { AppRepository } from './app.repository';
5
+ export declare class AppsService {
6
+ private readonly appRepository;
7
+ private readonly projectScopeService;
8
+ private readonly locks;
9
+ constructor(appRepository: AppRepository, projectScopeService: ProjectScopeService, locks: DbLockService);
10
+ createApp(projectId: string, dto: CreateAppDto): Promise<AppResponse>;
11
+ getApp(projectId: string, appId: string): Promise<AppResponse>;
12
+ listApps(projectId: string, query: ListAppsQueryDto): Promise<AppListResponse>;
13
+ listAppsForUser(user: User, query: ListAppsQueryDto): Promise<AppListResponse>;
14
+ updateApp(projectId: string, appId: string, dto: UpdateAppDto): Promise<AppResponse>;
15
+ deleteApp(projectId: string, appId: string): Promise<void>;
16
+ private assertValidAppId;
17
+ private assertProjectExists;
18
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppsService = void 0;
13
+ const api_types_1 = require("@n8n/api-types");
14
+ const backend_services_1 = require("@n8n/backend-services");
15
+ const db_1 = require("@n8n/db");
16
+ const di_1 = require("@n8n/di");
17
+ const errors_1 = require("@n8n/errors");
18
+ const app_storage_lock_1 = require("./app-storage-lock");
19
+ const app_repository_1 = require("./app.repository");
20
+ function toResponse(app) {
21
+ return {
22
+ id: app.id,
23
+ projectId: app.projectId,
24
+ name: app.name,
25
+ namespace: app.namespace,
26
+ visibility: app.visibility,
27
+ draftVersionId: app.draftVersionId,
28
+ publishedVersionId: app.publishedVersionId,
29
+ createdAt: app.createdAt.toISOString(),
30
+ updatedAt: app.updatedAt.toISOString(),
31
+ };
32
+ }
33
+ let AppsService = class AppsService {
34
+ constructor(appRepository, projectScopeService, locks) {
35
+ this.appRepository = appRepository;
36
+ this.projectScopeService = projectScopeService;
37
+ this.locks = locks;
38
+ }
39
+ async createApp(projectId, dto) {
40
+ await this.assertProjectExists(projectId);
41
+ return toResponse(await this.appRepository.createApp(projectId, dto));
42
+ }
43
+ async getApp(projectId, appId) {
44
+ this.assertValidAppId(appId);
45
+ const app = await this.appRepository.findInProject(projectId, appId);
46
+ if (!app)
47
+ throw new errors_1.NotFoundError('App not found');
48
+ return toResponse(app);
49
+ }
50
+ async listApps(projectId, query) {
51
+ await this.assertProjectExists(projectId);
52
+ const { data, count } = await this.appRepository.list([projectId], query);
53
+ return { data: data.map(toResponse), count };
54
+ }
55
+ async listAppsForUser(user, query) {
56
+ const projectIds = await this.projectScopeService.getProjectIds(user, ['app:list']);
57
+ const { data, count } = await this.appRepository.list(projectIds, query);
58
+ return { data: data.map(toResponse), count };
59
+ }
60
+ async updateApp(projectId, appId, dto) {
61
+ if (Object.keys(dto).length === 0) {
62
+ throw new errors_1.BadRequestError('Select an app field to update.');
63
+ }
64
+ this.assertValidAppId(appId);
65
+ const app = await this.appRepository.updateApp(projectId, appId, dto);
66
+ if (!app)
67
+ throw new errors_1.NotFoundError('App not found');
68
+ return toResponse(app);
69
+ }
70
+ async deleteApp(projectId, appId) {
71
+ this.assertValidAppId(appId);
72
+ const deleted = await this.locks.withLockContext(1010, async (ctx) => await this.appRepository.deleteInProject(projectId, appId, ctx), { subKey: (0, app_storage_lock_1.appStorageLockSubKey)(appId) });
73
+ if (!deleted) {
74
+ throw new errors_1.NotFoundError('App not found');
75
+ }
76
+ }
77
+ assertValidAppId(appId) {
78
+ if (!api_types_1.appSchema.shape.id.safeParse(appId).success) {
79
+ throw new errors_1.NotFoundError('App not found');
80
+ }
81
+ }
82
+ async assertProjectExists(projectId) {
83
+ if (!(await this.appRepository.projectExists(projectId))) {
84
+ throw new errors_1.NotFoundError('Project not found');
85
+ }
86
+ }
87
+ };
88
+ exports.AppsService = AppsService;
89
+ exports.AppsService = AppsService = __decorate([
90
+ (0, di_1.Service)(),
91
+ __metadata("design:paramtypes", [app_repository_1.AppRepository, backend_services_1.ProjectScopeService, db_1.DbLockService])
92
+ ], AppsService);
93
+ //# sourceMappingURL=apps.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.service.js","sourceRoot":"","sources":["../src/apps.service.ts"],"names":[],"mappings":"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"}