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

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 (52) hide show
  1. package/LICENSE.md +88 -0
  2. package/dist/app-artifact.entity.d.ts +0 -1
  3. package/dist/app.repository.d.ts +3 -8
  4. package/dist/app.repository.js +7 -35
  5. package/dist/app.repository.js.map +1 -1
  6. package/dist/apps.module.d.ts +0 -1
  7. package/dist/apps.module.js +0 -10
  8. package/dist/apps.module.js.map +1 -1
  9. package/dist/apps.service.d.ts +2 -3
  10. package/dist/apps.service.js +5 -8
  11. package/dist/apps.service.js.map +1 -1
  12. package/dist/build.tsbuildinfo +1 -1
  13. package/dist/index.d.ts +1 -6
  14. package/dist/index.js +1 -12
  15. package/dist/index.js.map +1 -1
  16. package/package.json +27 -35
  17. package/dist/app-artifact.repository.d.ts +0 -15
  18. package/dist/app-artifact.repository.js +0 -104
  19. package/dist/app-artifact.repository.js.map +0 -1
  20. package/dist/app-artifact.service.d.ts +0 -20
  21. package/dist/app-artifact.service.js +0 -118
  22. package/dist/app-artifact.service.js.map +0 -1
  23. package/dist/app-retention.service.d.ts +0 -16
  24. package/dist/app-retention.service.js +0 -74
  25. package/dist/app-retention.service.js.map +0 -1
  26. package/dist/app-storage-cleanup.task.d.ts +0 -17
  27. package/dist/app-storage-cleanup.task.js +0 -57
  28. package/dist/app-storage-cleanup.task.js.map +0 -1
  29. package/dist/app-storage-lock.d.ts +0 -1
  30. package/dist/app-storage-lock.js +0 -8
  31. package/dist/app-storage-lock.js.map +0 -1
  32. package/dist/app-version.repository.d.ts +0 -18
  33. package/dist/app-version.repository.js +0 -90
  34. package/dist/app-version.repository.js.map +0 -1
  35. package/dist/app-version.service.d.ts +0 -30
  36. package/dist/app-version.service.js +0 -124
  37. package/dist/app-version.service.js.map +0 -1
  38. package/dist/apps.config.d.ts +0 -8
  39. package/dist/apps.config.js +0 -54
  40. package/dist/apps.config.js.map +0 -1
  41. package/dist/storage/app-archive.d.ts +0 -16
  42. package/dist/storage/app-archive.js +0 -180
  43. package/dist/storage/app-archive.js.map +0 -1
  44. package/dist/storage/app-blob-store.d.ts +0 -21
  45. package/dist/storage/app-blob-store.js +0 -93
  46. package/dist/storage/app-blob-store.js.map +0 -1
  47. package/dist/storage/app-version-stores.d.ts +0 -20
  48. package/dist/storage/app-version-stores.js +0 -10
  49. package/dist/storage/app-version-stores.js.map +0 -1
  50. package/dist/storage/snapshot-app-version-stores.d.ts +0 -30
  51. package/dist/storage/snapshot-app-version-stores.js +0 -122
  52. package/dist/storage/snapshot-app-version-stores.js.map +0 -1
@@ -1,90 +0,0 @@
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.AppVersionRepository = void 0;
13
- const db_1 = require("@n8n/db");
14
- const di_1 = require("@n8n/di");
15
- const errors_1 = require("@n8n/errors");
16
- const typeorm_1 = require("@n8n/typeorm");
17
- const app_version_entity_1 = require("./app-version.entity");
18
- let AppVersionRepository = class AppVersionRepository extends db_1.BaseRepository {
19
- constructor(dataSource, txRunner) {
20
- super(app_version_entity_1.AppVersion, dataSource.manager, txRunner);
21
- }
22
- async insertVersion(data, ctx) {
23
- try {
24
- await this.managerFor(ctx).insert(app_version_entity_1.AppVersion, {
25
- ...data,
26
- bundleArtifactId: null,
27
- buildStatus: 'queued',
28
- });
29
- }
30
- catch (error) {
31
- if ((0, db_1.isUniqueConstraintError)(error)) {
32
- throw new errors_1.ConflictError('App version already exists. Save the source as a new version.');
33
- }
34
- throw error;
35
- }
36
- }
37
- async findVersionById(versionId, ctx = {}) {
38
- return await this.managerFor(ctx).findOneBy(app_version_entity_1.AppVersion, { id: versionId });
39
- }
40
- async listForApp(appId, ctx = {}) {
41
- return await this.managerFor(ctx).find(app_version_entity_1.AppVersion, {
42
- where: { appId },
43
- order: { createdAt: 'DESC', id: 'DESC' },
44
- });
45
- }
46
- async listForRetention(appId, ctx) {
47
- const versions = await this.managerFor(ctx).find(app_version_entity_1.AppVersion, {
48
- select: { id: true, buildStatus: true, bundleArtifactId: true },
49
- where: { appId },
50
- order: { createdAt: 'DESC', id: 'DESC' },
51
- });
52
- return versions.map(({ id, buildStatus, bundleArtifactId }) => ({
53
- id,
54
- buildStatus,
55
- hasBundle: bundleArtifactId !== null,
56
- }));
57
- }
58
- async attachBundle(versionId, artifactId, ctx) {
59
- const result = await this.managerFor(ctx).update(app_version_entity_1.AppVersion, {
60
- id: versionId,
61
- bundleArtifactId: (0, typeorm_1.IsNull)(),
62
- buildStatus: (0, typeorm_1.In)(['queued', 'running']),
63
- }, { bundleArtifactId: artifactId, buildStatus: 'succeeded' });
64
- return result.affected === 1;
65
- }
66
- async setLabel(versionId, label, ctx = {}) {
67
- return await this.runInTransaction(ctx, async (manager) => {
68
- const where = { id: versionId };
69
- const result = await manager.update(app_version_entity_1.AppVersion, where, { label });
70
- if (!result.affected)
71
- return null;
72
- return await manager.findOneBy(app_version_entity_1.AppVersion, where);
73
- });
74
- }
75
- async clearBundles(versionIds, ctx) {
76
- for (const ids of (0, db_1.chunkIds)(versionIds)) {
77
- await this.managerFor(ctx).update(app_version_entity_1.AppVersion, { id: (0, typeorm_1.In)(ids) }, { bundleArtifactId: null });
78
- }
79
- }
80
- async removeVersions(versionIds, ctx) {
81
- for (const ids of (0, db_1.chunkIds)(versionIds))
82
- await this.managerFor(ctx).delete(app_version_entity_1.AppVersion, { id: (0, typeorm_1.In)(ids) });
83
- }
84
- };
85
- exports.AppVersionRepository = AppVersionRepository;
86
- exports.AppVersionRepository = AppVersionRepository = __decorate([
87
- (0, di_1.Service)(),
88
- __metadata("design:paramtypes", [typeorm_1.DataSource, db_1.TransactionRunner])
89
- ], AppVersionRepository);
90
- //# sourceMappingURL=app-version.repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-version.repository.js","sourceRoot":"","sources":["../src/app-version.repository.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import { Logger } from '@n8n/backend-common';
2
- import type { OperationContext } from '@n8n/db';
3
- import { AppRetentionService } from './app-retention.service';
4
- import type { AppVersion } from './app-version.entity';
5
- import { AppVersionRepository } from './app-version.repository';
6
- import { AppRepository } from './app.repository';
7
- import { AppSourceVersionStore, AppBuildResultStore, type AppFiles } from './storage/app-version-stores';
8
- export declare class AppVersionService {
9
- private readonly apps;
10
- private readonly versions;
11
- private readonly sourceVersions;
12
- private readonly buildResults;
13
- private readonly retention;
14
- private readonly logger;
15
- constructor(apps: AppRepository, versions: AppVersionRepository, sourceVersions: AppSourceVersionStore, buildResults: AppBuildResultStore, retention: AppRetentionService, logger: Logger);
16
- saveSource(projectId: string, appId: string, expectedDraftVersionId: string | null, files: AppFiles, label?: string | null): Promise<AppVersion>;
17
- attachBundle(projectId: string, appId: string, versionId: string, files: AppFiles): Promise<AppVersion>;
18
- listVersions(projectId: string, appId: string): Promise<AppVersion[]>;
19
- getVersion(projectId: string, appId: string, versionId: string, ctx?: OperationContext): Promise<AppVersion>;
20
- readSource(projectId: string, appId: string, versionId: string): Promise<AppFiles>;
21
- readBundle(projectId: string, appId: string, versionId: string): Promise<AppFiles>;
22
- restoreSource(projectId: string, appId: string, versionId: string, expectedDraftVersionId: string | null): Promise<AppVersion>;
23
- setLabel(projectId: string, appId: string, versionId: string, label: string | null): Promise<AppVersion>;
24
- private requireApp;
25
- private requireVersion;
26
- private checkVersionId;
27
- private checkDraft;
28
- private checkLabel;
29
- private prune;
30
- }
@@ -1,124 +0,0 @@
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.AppVersionService = void 0;
13
- const api_types_1 = require("@n8n/api-types");
14
- const backend_common_1 = require("@n8n/backend-common");
15
- const di_1 = require("@n8n/di");
16
- const errors_1 = require("@n8n/errors");
17
- const uuid_1 = require("uuid");
18
- const app_retention_service_1 = require("./app-retention.service");
19
- const app_version_repository_1 = require("./app-version.repository");
20
- const app_repository_1 = require("./app.repository");
21
- const app_version_stores_1 = require("./storage/app-version-stores");
22
- let AppVersionService = class AppVersionService {
23
- constructor(apps, versions, sourceVersions, buildResults, retention, logger) {
24
- this.apps = apps;
25
- this.versions = versions;
26
- this.sourceVersions = sourceVersions;
27
- this.buildResults = buildResults;
28
- this.retention = retention;
29
- this.logger = logger;
30
- }
31
- async saveSource(projectId, appId, expectedDraftVersionId, files, label = null) {
32
- const app = await this.requireApp(projectId, appId);
33
- this.checkDraft(app.draftVersionId, expectedDraftVersionId);
34
- this.checkLabel(label);
35
- const versionId = (0, uuid_1.v7)();
36
- await this.sourceVersions.createVersion({ id: versionId, appId, expectedDraftVersionId, label }, files);
37
- const version = await this.requireVersion(versionId);
38
- await this.prune(appId);
39
- return version;
40
- }
41
- async attachBundle(projectId, appId, versionId, files) {
42
- const target = await this.getVersion(projectId, appId, versionId);
43
- if (target.buildStatus !== 'queued' && target.buildStatus !== 'running') {
44
- throw new errors_1.ConflictError('This app version cannot accept a bundle. Check its build status.');
45
- }
46
- await this.buildResults.recordSuccess(appId, versionId, files);
47
- const version = await this.requireVersion(versionId);
48
- await this.prune(appId);
49
- return version;
50
- }
51
- async listVersions(projectId, appId) {
52
- await this.requireApp(projectId, appId);
53
- return await this.versions.listForApp(appId);
54
- }
55
- async getVersion(projectId, appId, versionId, ctx = {}) {
56
- await this.requireApp(projectId, appId, ctx);
57
- const version = await this.requireVersion(versionId, ctx);
58
- if (version.appId !== appId)
59
- throw new errors_1.NotFoundError('App version not found.');
60
- return version;
61
- }
62
- async readSource(projectId, appId, versionId) {
63
- const version = await this.getVersion(projectId, appId, versionId);
64
- return await this.sourceVersions.readSource(version.id);
65
- }
66
- async readBundle(projectId, appId, versionId) {
67
- const version = await this.getVersion(projectId, appId, versionId);
68
- return await this.buildResults.readBundle(version.id);
69
- }
70
- async restoreSource(projectId, appId, versionId, expectedDraftVersionId) {
71
- const version = await this.getVersion(projectId, appId, versionId);
72
- const files = await this.sourceVersions.readSource(version.id);
73
- return await this.saveSource(projectId, appId, expectedDraftVersionId, files, version.label);
74
- }
75
- async setLabel(projectId, appId, versionId, label) {
76
- this.checkLabel(label);
77
- await this.getVersion(projectId, appId, versionId);
78
- const version = await this.versions.setLabel(versionId, label);
79
- if (!version)
80
- throw new errors_1.NotFoundError('App version not found.');
81
- return version;
82
- }
83
- async requireApp(projectId, appId, ctx = {}) {
84
- if (!api_types_1.appSchema.shape.id.safeParse(appId).success)
85
- throw new errors_1.NotFoundError('App not found.');
86
- const app = await this.apps.findInProject(projectId, appId, ctx);
87
- if (!app)
88
- throw new errors_1.NotFoundError('App not found.');
89
- return app;
90
- }
91
- async requireVersion(versionId, ctx = {}) {
92
- this.checkVersionId(versionId);
93
- const version = await this.versions.findVersionById(versionId, ctx);
94
- if (!version)
95
- throw new errors_1.NotFoundError('App version not found.');
96
- return version;
97
- }
98
- checkVersionId(versionId) {
99
- if (!api_types_1.appVersionSchema.shape.id.safeParse(versionId).success)
100
- throw new errors_1.NotFoundError('App version not found.');
101
- }
102
- checkDraft(actual, expected) {
103
- if (actual !== expected)
104
- throw new errors_1.ConflictError('The app draft changed. Reload the source before saving.');
105
- }
106
- checkLabel(label) {
107
- if (!api_types_1.appVersionSchema.shape.label.safeParse(label).success)
108
- throw new errors_1.BadRequestError('App version labels must contain at most 255 characters.');
109
- }
110
- async prune(appId) {
111
- try {
112
- await this.retention.prune(appId);
113
- }
114
- catch (error) {
115
- this.logger.warn('Could not prune app history.', { appId, error });
116
- }
117
- }
118
- };
119
- exports.AppVersionService = AppVersionService;
120
- exports.AppVersionService = AppVersionService = __decorate([
121
- (0, di_1.Service)(),
122
- __metadata("design:paramtypes", [app_repository_1.AppRepository, app_version_repository_1.AppVersionRepository, app_version_stores_1.AppSourceVersionStore, app_version_stores_1.AppBuildResultStore, app_retention_service_1.AppRetentionService, backend_common_1.Logger])
123
- ], AppVersionService);
124
- //# sourceMappingURL=app-version.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-version.service.js","sourceRoot":"","sources":["../src/app-version.service.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export declare class AppsConfig {
2
- maxVersionsPerApp: number;
3
- maxBundlesPerApp: number;
4
- maxStorageBytes: number;
5
- maxArtifactSizeBytes: number;
6
- maxArtifactUnpackedSizeBytes: number;
7
- maxArtifactEntries: number;
8
- }
@@ -1,54 +0,0 @@
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.AppsConfig = void 0;
13
- const config_1 = require("@n8n/config");
14
- const zod_1 = require("zod");
15
- const positiveInteger = zod_1.z.coerce.number().int().positive().max(Number.MAX_SAFE_INTEGER);
16
- let AppsConfig = class AppsConfig {
17
- constructor() {
18
- this.maxVersionsPerApp = 20;
19
- this.maxBundlesPerApp = 5;
20
- this.maxStorageBytes = 1024 * 1024 * 1024;
21
- this.maxArtifactSizeBytes = 20 * 1024 * 1024;
22
- this.maxArtifactUnpackedSizeBytes = 200 * 1024 * 1024;
23
- this.maxArtifactEntries = 20_000;
24
- }
25
- };
26
- exports.AppsConfig = AppsConfig;
27
- __decorate([
28
- (0, config_1.Env)('N8N_APPS_MAX_VERSIONS_PER_APP', positiveInteger),
29
- __metadata("design:type", Number)
30
- ], AppsConfig.prototype, "maxVersionsPerApp", void 0);
31
- __decorate([
32
- (0, config_1.Env)('N8N_APPS_MAX_BUNDLES_PER_APP', positiveInteger),
33
- __metadata("design:type", Number)
34
- ], AppsConfig.prototype, "maxBundlesPerApp", void 0);
35
- __decorate([
36
- (0, config_1.Env)('N8N_APPS_MAX_STORAGE_BYTES', positiveInteger),
37
- __metadata("design:type", Number)
38
- ], AppsConfig.prototype, "maxStorageBytes", void 0);
39
- __decorate([
40
- (0, config_1.Env)('N8N_APPS_MAX_ARTIFACT_SIZE_BYTES', positiveInteger.max(2 ** 31 - 1)),
41
- __metadata("design:type", Number)
42
- ], AppsConfig.prototype, "maxArtifactSizeBytes", void 0);
43
- __decorate([
44
- (0, config_1.Env)('N8N_APPS_MAX_ARTIFACT_UNPACKED_SIZE_BYTES', positiveInteger),
45
- __metadata("design:type", Number)
46
- ], AppsConfig.prototype, "maxArtifactUnpackedSizeBytes", void 0);
47
- __decorate([
48
- (0, config_1.Env)('N8N_APPS_MAX_ARTIFACT_ENTRIES', positiveInteger),
49
- __metadata("design:type", Number)
50
- ], AppsConfig.prototype, "maxArtifactEntries", void 0);
51
- exports.AppsConfig = AppsConfig = __decorate([
52
- config_1.Config
53
- ], AppsConfig);
54
- //# sourceMappingURL=apps.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apps.config.js","sourceRoot":"","sources":["../src/apps.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAC1C,6BAAwB;AAExB,MAAM,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAGjF,IAAM,UAAU,GAAhB,MAAM,UAAU;IAAhB;QAGN,sBAAiB,GAAW,EAAE,CAAC;QAI/B,qBAAgB,GAAW,CAAC,CAAC;QAI7B,oBAAe,GAAW,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAI7C,yBAAoB,GAAW,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;QAIhD,iCAA4B,GAAW,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;QAIzD,uBAAkB,GAAW,MAAM,CAAC;IACrC,CAAC;CAAA,CAAA;;AArBA;IADC,IAAA,YAAG,EAAC,+BAA+B,EAAE,eAAe,CAAC;;qDACvB;AAI/B;IADC,IAAA,YAAG,EAAC,8BAA8B,EAAE,eAAe,CAAC;;oDACxB;AAI7B;IADC,IAAA,YAAG,EAAC,4BAA4B,EAAE,eAAe,CAAC;;mDACN;AAI7C;IADC,IAAA,YAAG,EAAC,kCAAkC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;;wDAC1B;AAIhD;IADC,IAAA,YAAG,EAAC,2CAA2C,EAAE,eAAe,CAAC;;gEACT;AAIzD;IADC,IAAA,YAAG,EAAC,+BAA+B,EAAE,eAAe,CAAC;;sDAClB;qBAvBxB,UAAU;IADtB,eAAM;GACM,UAAU,CAwBtB"}
@@ -1,16 +0,0 @@
1
- import type { AppFiles } from './app-version-stores';
2
- import { AppsConfig } from '../apps.config';
3
- export declare class AppArchive {
4
- private readonly config;
5
- constructor(config: AppsConfig);
6
- pack(files: AppFiles, bundle?: boolean): Promise<Buffer>;
7
- unpack(body: Buffer, bundle?: boolean): Promise<Map<string, Buffer>>;
8
- listFiles(body: Buffer): Promise<string[]>;
9
- readFile(body: Buffer, filePath: string): Promise<Buffer | null>;
10
- private parse;
11
- private filePath;
12
- private checkFilePaths;
13
- private checkLimits;
14
- private checkCompressedSize;
15
- private checkBundle;
16
- }
@@ -1,180 +0,0 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.AppArchive = void 0;
16
- const di_1 = require("@n8n/di");
17
- const errors_1 = require("@n8n/errors");
18
- const node_path_1 = __importDefault(require("node:path"));
19
- const node_stream_1 = require("node:stream");
20
- const promises_1 = require("node:stream/promises");
21
- const apps_config_1 = require("../apps.config");
22
- const CHUNK_SIZE = 64 * 1024;
23
- function* slices(body) {
24
- for (let offset = 0; offset < body.length; offset += CHUNK_SIZE) {
25
- yield body.subarray(offset, offset + CHUNK_SIZE);
26
- }
27
- }
28
- let AppArchive = class AppArchive {
29
- constructor(config) {
30
- this.config = config;
31
- }
32
- async pack(files, bundle = false) {
33
- const normalized = new Map();
34
- let size = 0;
35
- for (const [name, content] of files) {
36
- const filePath = this.filePath(name);
37
- if (normalized.has(filePath))
38
- throw new errors_1.BadRequestError('App artifact contains duplicate paths.');
39
- normalized.set(filePath, content);
40
- size += content.length;
41
- this.checkLimits(size, normalized.size + 1);
42
- }
43
- this.checkFilePaths(new Set(normalized.keys()));
44
- this.checkBundle(normalized, bundle);
45
- const { Header, Pack, ReadEntry } = await import('tar');
46
- const archive = new Pack({ gzip: { portable: true }, portable: true, noMtime: true });
47
- const root = new ReadEntry(new Header({ path: './', size: 0, mode: 0o755, type: 'Directory' }));
48
- root.end();
49
- archive.write(root);
50
- for (const [name, content] of normalized) {
51
- const entry = new ReadEntry(new Header({ path: name, size: content.length, mode: 0o644, type: 'File' }));
52
- entry.end(content);
53
- archive.write(entry);
54
- }
55
- archive.end();
56
- const chunks = [];
57
- let compressedSize = 0;
58
- for await (const chunk of archive) {
59
- compressedSize += chunk.length;
60
- this.checkCompressedSize(compressedSize);
61
- chunks.push(chunk);
62
- }
63
- return Buffer.concat(chunks);
64
- }
65
- async unpack(body, bundle = false) {
66
- const { files } = await this.parse(body, () => true);
67
- this.checkBundle(files, bundle);
68
- return files;
69
- }
70
- async listFiles(body) {
71
- const { fileNames } = await this.parse(body, () => false);
72
- return [...fileNames].sort();
73
- }
74
- async readFile(body, filePath) {
75
- const normalizedPath = this.filePath(filePath);
76
- const { files } = await this.parse(body, (name) => name === normalizedPath);
77
- return files.get(normalizedPath) ?? null;
78
- }
79
- async parse(body, includeFile) {
80
- this.checkCompressedSize(body.length);
81
- if (body.length < 2 || body[0] !== 0x1f || body[1] !== 0x8b) {
82
- throw new errors_1.BadRequestError('App artifact must be a gzip archive. Save the source or bundle again.');
83
- }
84
- const { Parser } = await import('tar');
85
- const files = new Map();
86
- const fileNames = new Set();
87
- const paths = new Set();
88
- let size = 0;
89
- let entries = 0;
90
- const parser = new Parser({
91
- strict: true,
92
- filter: (_name, entry) => {
93
- try {
94
- if (!('type' in entry))
95
- return false;
96
- this.checkLimits(size, ++entries);
97
- if (entry.type !== 'File' && entry.type !== 'Directory') {
98
- throw new errors_1.BadRequestError('App artifacts can contain only files and directories.');
99
- }
100
- if (entry.type === 'Directory' && /^(\.\/)*\.?\/?$/.test(entry.path))
101
- return false;
102
- const name = this.filePath(entry.path);
103
- if (paths.has(name))
104
- throw new errors_1.BadRequestError('App artifact contains duplicate paths.');
105
- paths.add(name);
106
- if (!Number.isSafeInteger(entry.size) || entry.size < 0) {
107
- throw new errors_1.BadRequestError('App artifact contains an invalid file size.');
108
- }
109
- size += entry.size;
110
- this.checkLimits(size, entries);
111
- if (entry.type !== 'File')
112
- return false;
113
- fileNames.add(name);
114
- return includeFile(name);
115
- }
116
- catch (error) {
117
- parser.abort(error instanceof Error ? error : new Error(String(error)));
118
- return false;
119
- }
120
- },
121
- onReadEntry: (entry) => {
122
- const chunks = [];
123
- entry.on('data', (chunk) => chunks.push(chunk));
124
- entry.on('end', () => files.set(this.filePath(entry.path), Buffer.concat(chunks)));
125
- },
126
- });
127
- try {
128
- await (0, promises_1.pipeline)(node_stream_1.Readable.from(slices(body)), parser);
129
- }
130
- catch (error) {
131
- throw errors_1.BadRequestError.wrap('App artifact is invalid or exceeds the archive limits. Check the files and configured limits.', error);
132
- }
133
- this.checkFilePaths(fileNames);
134
- return { files, fileNames };
135
- }
136
- filePath(value) {
137
- const relative = value.replace(/^(\.\/)+/, '').replace(/\/$/, '');
138
- if (!relative ||
139
- relative.includes('\\') ||
140
- relative.includes('\0') ||
141
- node_path_1.default.posix.isAbsolute(relative) ||
142
- /^[a-z]:/i.test(relative) ||
143
- relative.split('/').some((part) => !part || part === '.' || part === '..')) {
144
- throw new errors_1.BadRequestError('App artifact contains an invalid file path. Use relative paths without parent directory segments.');
145
- }
146
- return relative;
147
- }
148
- checkFilePaths(fileNames) {
149
- for (const name of fileNames) {
150
- let parent = node_path_1.default.posix.dirname(name);
151
- while (parent !== '.') {
152
- if (fileNames.has(parent))
153
- throw new errors_1.BadRequestError('App artifact contains conflicting file paths.');
154
- parent = node_path_1.default.posix.dirname(parent);
155
- }
156
- }
157
- }
158
- checkLimits(bytes, entries) {
159
- if (bytes > this.config.maxArtifactUnpackedSizeBytes ||
160
- entries > this.config.maxArtifactEntries) {
161
- throw new errors_1.BadRequestError('App artifact exceeds the unpacked size or entry limit. Reduce the files or increase the artifact limits.');
162
- }
163
- }
164
- checkCompressedSize(bytes) {
165
- if (bytes > this.config.maxArtifactSizeBytes) {
166
- throw new errors_1.BadRequestError('App artifact exceeds the compressed size limit. Reduce its size or increase the artifact limit.');
167
- }
168
- }
169
- checkBundle(files, bundle) {
170
- if (bundle && !files.has('index.html')) {
171
- throw new errors_1.BadRequestError('App bundle must contain index.html at its root. Check the build output.');
172
- }
173
- }
174
- };
175
- exports.AppArchive = AppArchive;
176
- exports.AppArchive = AppArchive = __decorate([
177
- (0, di_1.Service)(),
178
- __metadata("design:paramtypes", [apps_config_1.AppsConfig])
179
- ], AppArchive);
180
- //# sourceMappingURL=app-archive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-archive.js","sourceRoot":"","sources":["../../src/storage/app-archive.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gCAAkC;AAClC,wCAA8C;AAC9C,0DAA6B;AAC7B,6CAAuC;AACvC,mDAAgD;AAGhD,gDAA4C;AAE5C,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7B,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAY;IAC5B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC;QACjE,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;IAClD,CAAC;AACF,CAAC;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAU;IACtB,YAA6B,MAAkB;sBAAlB,MAAM;IAAe,CAAC;IAEnD,KAAK,CAAC,IAAI,CAAC,KAAe,EAAE,MAAM,GAAG,KAAK;QACzC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC3B,MAAM,IAAI,wBAAe,CAAC,wCAAwC,CAAC,CAAC;YACrE,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,SAAS,CAC1B,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAC3E,CAAC;YACF,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YACnC,cAAc,IAAI,KAAK,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,MAAM,GAAG,KAAK;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,QAAgB;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,WAAsC;QACvE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7D,MAAM,IAAI,wBAAe,CACxB,uEAAuE,CACvE,CAAC;QACH,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACzB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACxB,IAAI,CAAC;oBACJ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;oBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBACzD,MAAM,IAAI,wBAAe,CAAC,uDAAuD,CAAC,CAAC;oBACpF,CAAC;oBACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACnF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;wBAAE,MAAM,IAAI,wBAAe,CAAC,wCAAwC,CAAC,CAAC;oBACzF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBACzD,MAAM,IAAI,wBAAe,CAAC,6CAA6C,CAAC,CAAC;oBAC1E,CAAC;oBACD,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;oBACnB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAChC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;wBAAE,OAAO,KAAK,CAAC;oBACxC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxE,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YACD,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtB,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpF,CAAC;SACD,CAAC,CAAC;QACH,IAAI,CAAC;YACJ,MAAM,IAAA,mBAAQ,EAAC,sBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,wBAAe,CAAC,IAAI,CACzB,+FAA+F,EAC/F,KAAK,CACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAEO,QAAQ,CAAC,KAAa;QAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClE,IACC,CAAC,QAAQ;YACT,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvB,mBAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YACzB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,EACzE,CAAC;YACF,MAAM,IAAI,wBAAe,CACxB,mGAAmG,CACnG,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAEO,cAAc,CAAC,SAA8B;QACpD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAG,mBAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;oBACxB,MAAM,IAAI,wBAAe,CAAC,+CAA+C,CAAC,CAAC;gBAC5E,MAAM,GAAG,mBAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;IACF,CAAC;IAEO,WAAW,CAAC,KAAa,EAAE,OAAe;QACjD,IACC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,4BAA4B;YAChD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EACvC,CAAC;YACF,MAAM,IAAI,wBAAe,CACxB,0GAA0G,CAC1G,CAAC;QACH,CAAC;IACF,CAAC;IAEO,mBAAmB,CAAC,KAAa;QACxC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC9C,MAAM,IAAI,wBAAe,CACxB,iGAAiG,CACjG,CAAC;QACH,CAAC;IACF,CAAC;IAEO,WAAW,CAAC,KAAe,EAAE,MAAe;QACnD,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,wBAAe,CACxB,yEAAyE,CACzE,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAA;;qBAvKY,UAAU;IADtB,IAAA,YAAO,GAAE;qCAE4B,wBAAU;GADnC,UAAU,CAuKtB"}
@@ -1,21 +0,0 @@
1
- import { BinaryDataRepository, DbLockService, type ExecutionDataStorageLocation } from '@n8n/db';
2
- import { FsByteStoreService, StorageConfig } from 'n8n-core';
3
- import type { AppArtifactRef } from '../app-artifact.entity';
4
- import { AppArtifactRepository } from '../app-artifact.repository';
5
- export type AppBlob = {
6
- storedAt: ExecutionDataStorageLocation;
7
- storageKey: string;
8
- };
9
- export declare class AppBlobStore {
10
- private readonly config;
11
- private readonly binaryData;
12
- private readonly artifacts;
13
- private readonly locks;
14
- private readonly stores;
15
- constructor(fs: FsByteStoreService, config: StorageConfig, binaryData: BinaryDataRepository, artifacts: AppArtifactRepository, locks: DbLockService);
16
- init(): Promise<void>;
17
- newBlob(): AppBlob;
18
- write(blob: AppBlob & AppArtifactRef, body: Buffer): Promise<void>;
19
- read(blob: AppBlob): Promise<Buffer | null>;
20
- delete(blob: AppBlob): Promise<void>;
21
- }