@balena/pinejs 19.7.2-build-esm-36f468424324d7ef7578ae401fc681c9f8f63e03-3 → 19.7.2-build-update-deps-a909ee054f395de407ec4e1275fd0f5b7514fe29-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.versionbot/CHANGELOG.yml +3 -3
- package/CHANGELOG.md +1 -1
- package/{Gruntfile.cts → Gruntfile.ts} +22 -9
- package/bin/abstract-sql-compiler.js +1 -1
- package/bin/odata-compiler.js +1 -1
- package/bin/sbvr-compiler.js +1 -1
- package/build/{browser.cts → browser.ts} +1 -1
- package/build/{config.cts → config.ts} +1 -5
- package/build/{module.cts → module.ts} +1 -1
- package/build/{server.cts → server.ts} +1 -1
- package/out/bin/abstract-sql-compiler.js +19 -17
- package/out/bin/abstract-sql-compiler.js.map +1 -1
- package/out/bin/odata-compiler.js +21 -19
- package/out/bin/odata-compiler.js.map +1 -1
- package/out/bin/sbvr-compiler.js +54 -19
- package/out/bin/sbvr-compiler.js.map +1 -1
- package/out/bin/utils.d.ts +3 -3
- package/out/bin/utils.js +53 -21
- package/out/bin/utils.js.map +1 -1
- package/out/config-loader/config-loader.d.ts +7 -7
- package/out/config-loader/config-loader.js +63 -23
- package/out/config-loader/config-loader.js.map +1 -1
- package/out/config-loader/env.d.ts +1 -1
- package/out/config-loader/env.js +66 -24
- package/out/config-loader/env.js.map +1 -1
- package/out/data-server/sbvr-server.d.ts +3 -3
- package/out/data-server/sbvr-server.js +42 -5
- package/out/data-server/sbvr-server.js.map +1 -1
- package/out/database-layer/db.d.ts +3 -3
- package/out/database-layer/db.js +83 -37
- package/out/database-layer/db.js.map +1 -1
- package/out/express-emulator/express.js.map +1 -1
- package/out/extended-sbvr-parser/extended-sbvr-parser.js +11 -8
- package/out/extended-sbvr-parser/extended-sbvr-parser.js.map +1 -1
- package/out/http-transactions/transactions.d.ts +2 -2
- package/out/http-transactions/transactions.js +4 -4
- package/out/http-transactions/transactions.js.map +1 -1
- package/out/migrator/async.d.ts +2 -2
- package/out/migrator/async.js +60 -20
- package/out/migrator/async.js.map +1 -1
- package/out/migrator/migrations.js +2 -1
- package/out/migrator/sync.d.ts +6 -6
- package/out/migrator/sync.js +61 -20
- package/out/migrator/sync.js.map +1 -1
- package/out/migrator/utils.d.ts +4 -4
- package/out/migrator/utils.js +97 -42
- package/out/migrator/utils.js.map +1 -1
- package/out/odata-metadata/odata-metadata-generator.js +14 -7
- package/out/odata-metadata/odata-metadata-generator.js.map +1 -1
- package/out/passport-pinejs/mount-login-router.d.ts +1 -1
- package/out/passport-pinejs/mount-login-router.js +41 -4
- package/out/passport-pinejs/mount-login-router.js.map +1 -1
- package/out/passport-pinejs/passport-pinejs.d.ts +3 -3
- package/out/passport-pinejs/passport-pinejs.js +46 -11
- package/out/passport-pinejs/passport-pinejs.js.map +1 -1
- package/out/pinejs-session-store/pinejs-session-store.d.ts +1 -1
- package/out/pinejs-session-store/pinejs-session-store.js +48 -11
- package/out/pinejs-session-store/pinejs-session-store.js.map +1 -1
- package/out/sbvr-api/abstract-sql.d.ts +3 -3
- package/out/sbvr-api/abstract-sql.js +65 -22
- package/out/sbvr-api/abstract-sql.js.map +1 -1
- package/out/sbvr-api/cached-compile.js +15 -8
- package/out/sbvr-api/cached-compile.js.map +1 -1
- package/out/sbvr-api/common-types.js +2 -1
- package/out/sbvr-api/control-flow.d.ts +1 -1
- package/out/sbvr-api/control-flow.js +25 -12
- package/out/sbvr-api/control-flow.js.map +1 -1
- package/out/sbvr-api/dev.js +2 -1
- package/out/sbvr-api/errors.d.ts +1 -1
- package/out/sbvr-api/errors.js +95 -47
- package/out/sbvr-api/errors.js.map +1 -1
- package/out/sbvr-api/express-extension.d.ts +2 -2
- package/out/sbvr-api/express-extension.js +2 -1
- package/out/sbvr-api/hooks.d.ts +4 -4
- package/out/sbvr-api/hooks.js +35 -23
- package/out/sbvr-api/hooks.js.map +1 -1
- package/out/sbvr-api/odata-response.d.ts +2 -2
- package/out/sbvr-api/odata-response.js +29 -19
- package/out/sbvr-api/odata-response.js.map +1 -1
- package/out/sbvr-api/permissions.d.ts +9 -9
- package/out/sbvr-api/permissions.js +159 -106
- package/out/sbvr-api/permissions.js.map +1 -1
- package/out/sbvr-api/sbvr-utils.d.ts +18 -40
- package/out/sbvr-api/sbvr-utils.js +285 -222
- package/out/sbvr-api/sbvr-utils.js.map +1 -1
- package/out/sbvr-api/translations.d.ts +1 -1
- package/out/sbvr-api/translations.js +17 -10
- package/out/sbvr-api/translations.js.map +1 -1
- package/out/sbvr-api/uri-parser.d.ts +7 -7
- package/out/sbvr-api/uri-parser.js +84 -39
- package/out/sbvr-api/uri-parser.js.map +1 -1
- package/out/sbvr-api/user.js +2 -1
- package/out/server-glue/global-ext.d.ts +3 -0
- package/out/server-glue/module.d.ts +16 -16
- package/out/server-glue/module.js +59 -20
- package/out/server-glue/module.js.map +1 -1
- package/out/server-glue/sbvr-loader.d.ts +1 -2
- package/out/server-glue/sbvr-loader.js +11 -4
- package/out/server-glue/sbvr-loader.js.map +1 -1
- package/out/server-glue/server.d.ts +2 -2
- package/out/server-glue/server.js +59 -17
- package/out/server-glue/server.js.map +1 -1
- package/out/tasks/common.d.ts +1 -1
- package/out/tasks/common.js +9 -3
- package/out/tasks/common.js.map +1 -1
- package/out/tasks/index.d.ts +8 -8
- package/out/tasks/index.js +63 -25
- package/out/tasks/index.js.map +1 -1
- package/out/tasks/tasks.js +2 -1
- package/out/tasks/worker.d.ts +3 -3
- package/out/tasks/worker.js +51 -14
- package/out/tasks/worker.js.map +1 -1
- package/out/webresource-handler/handlers/NoopHandler.d.ts +1 -1
- package/out/webresource-handler/handlers/NoopHandler.js +5 -1
- package/out/webresource-handler/handlers/NoopHandler.js.map +1 -1
- package/out/webresource-handler/handlers/S3Handler.d.ts +1 -1
- package/out/webresource-handler/handlers/S3Handler.js +24 -17
- package/out/webresource-handler/handlers/S3Handler.js.map +1 -1
- package/out/webresource-handler/handlers/index.d.ts +2 -2
- package/out/webresource-handler/handlers/index.js +18 -2
- package/out/webresource-handler/handlers/index.js.map +1 -1
- package/out/webresource-handler/index.d.ts +3 -3
- package/out/webresource-handler/index.js +85 -35
- package/out/webresource-handler/index.js.map +1 -1
- package/package.json +33 -33
- package/src/bin/abstract-sql-compiler.ts +3 -3
- package/src/bin/odata-compiler.ts +3 -3
- package/src/bin/sbvr-compiler.ts +2 -2
- package/src/bin/utils.ts +15 -23
- package/src/config-loader/config-loader.ts +12 -12
- package/src/config-loader/env.ts +3 -3
- package/src/data-server/sbvr-server.ts +4 -4
- package/src/database-layer/db.ts +11 -18
- package/src/extended-sbvr-parser/extended-sbvr-parser.ts +5 -5
- package/src/http-transactions/transactions.js +4 -4
- package/src/migrator/async.ts +5 -5
- package/src/migrator/sync.ts +8 -8
- package/src/migrator/utils.ts +7 -7
- package/src/odata-metadata/odata-metadata-generator.ts +2 -3
- package/src/passport-pinejs/mount-login-router.ts +3 -3
- package/src/passport-pinejs/passport-pinejs.ts +6 -6
- package/src/pinejs-session-store/pinejs-session-store.ts +4 -4
- package/src/sbvr-api/abstract-sql.ts +6 -6
- package/src/sbvr-api/cached-compile.ts +2 -2
- package/src/sbvr-api/control-flow.ts +1 -1
- package/src/sbvr-api/errors.ts +1 -1
- package/src/sbvr-api/express-extension.ts +2 -2
- package/src/sbvr-api/hooks.ts +5 -5
- package/src/sbvr-api/odata-response.ts +4 -8
- package/src/sbvr-api/permissions.ts +19 -19
- package/src/sbvr-api/sbvr-utils.ts +33 -39
- package/src/sbvr-api/translations.ts +1 -1
- package/src/sbvr-api/uri-parser.ts +10 -10
- package/src/server-glue/global-ext.d.ts +3 -0
- package/src/server-glue/module.ts +20 -20
- package/src/server-glue/sbvr-loader.ts +27 -15
- package/src/server-glue/server.ts +24 -13
- package/src/tasks/common.ts +1 -1
- package/src/tasks/index.ts +14 -14
- package/src/tasks/worker.ts +8 -8
- package/src/webresource-handler/handlers/NoopHandler.ts +1 -5
- package/src/webresource-handler/handlers/S3Handler.ts +1 -1
- package/src/webresource-handler/handlers/index.ts +2 -2
- package/src/webresource-handler/index.ts +10 -10
- package/tsconfig.dev.json +2 -4
- package/tsconfig.json +1 -1
- package/typings/lf-to-abstract-sql.d.ts +2 -2
- package/typings/memoizee.d.ts +2 -2
package/out/tasks/worker.js
CHANGED
@@ -1,9 +1,45 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
36
|
+
exports.Worker = void 0;
|
37
|
+
const promises_1 = require("node:timers/promises");
|
38
|
+
const env_1 = require("../config-loader/env");
|
39
|
+
const permissions = __importStar(require("../sbvr-api/permissions"));
|
40
|
+
const sbvr_utils_1 = require("../sbvr-api/sbvr-utils");
|
41
|
+
const module_1 = require("../server-glue/module");
|
42
|
+
const common_1 = require("./common");
|
7
43
|
const selectColumns = Object.entries({
|
8
44
|
id: 'id',
|
9
45
|
'is executed by-handler': 'is_executed_by__handler',
|
@@ -15,7 +51,7 @@ const selectColumns = Object.entries({
|
|
15
51
|
})
|
16
52
|
.map(([key, value]) => `t."${key}" AS "${value}"`)
|
17
53
|
.join(', ');
|
18
|
-
|
54
|
+
class Worker {
|
19
55
|
client;
|
20
56
|
handlers = {};
|
21
57
|
concurrency;
|
@@ -24,8 +60,8 @@ export class Worker {
|
|
24
60
|
executing = 0;
|
25
61
|
constructor(client) {
|
26
62
|
this.client = client;
|
27
|
-
this.concurrency =
|
28
|
-
this.interval =
|
63
|
+
this.concurrency = env_1.tasks.queueConcurrency;
|
64
|
+
this.interval = env_1.tasks.queueIntervalMS;
|
29
65
|
}
|
30
66
|
canExecute() {
|
31
67
|
return (this.executing < this.concurrency && Object.keys(this.handlers).length > 0);
|
@@ -41,14 +77,14 @@ export class Worker {
|
|
41
77
|
}
|
42
78
|
if (handler.validate != null &&
|
43
79
|
!handler.validate(task.is_executed_with__parameter_set)) {
|
44
|
-
await this.update(tx, task, startedOnTime, 'failed', `Invalid parameter set: ${ajv.errorsText(handler.validate.errors)}`);
|
80
|
+
await this.update(tx, task, startedOnTime, 'failed', `Invalid parameter set: ${common_1.ajv.errorsText(handler.validate.errors)}`);
|
45
81
|
return;
|
46
82
|
}
|
47
83
|
let status = 'queued';
|
48
84
|
let error;
|
49
85
|
try {
|
50
86
|
const results = await handler.fn({
|
51
|
-
api: new PinejsClient({}),
|
87
|
+
api: new sbvr_utils_1.PinejsClient({}),
|
52
88
|
params: task.is_executed_with__parameter_set ?? {},
|
53
89
|
});
|
54
90
|
status = results.status;
|
@@ -126,7 +162,7 @@ export class Worker {
|
|
126
162
|
if (handlerNames.length === 0) {
|
127
163
|
return;
|
128
164
|
}
|
129
|
-
await sbvrUtils.db.transaction(async (tx) => {
|
165
|
+
await module_1.sbvrUtils.db.transaction(async (tx) => {
|
130
166
|
const result = await tx.executeSql(`SELECT ${selectColumns}
|
131
167
|
FROM task AS t
|
132
168
|
WHERE
|
@@ -152,7 +188,7 @@ export class Worker {
|
|
152
188
|
}
|
153
189
|
finally {
|
154
190
|
if (!executed) {
|
155
|
-
await setTimeout(this.interval);
|
191
|
+
await (0, promises_1.setTimeout)(this.interval);
|
156
192
|
}
|
157
193
|
if (this.running) {
|
158
194
|
this.poll();
|
@@ -164,7 +200,7 @@ export class Worker {
|
|
164
200
|
this.running = false;
|
165
201
|
}
|
166
202
|
async start() {
|
167
|
-
if (sbvrUtils.db.engine !== 'postgres') {
|
203
|
+
if (module_1.sbvrUtils.db.engine !== 'postgres') {
|
168
204
|
throw new Error('Database does not support tasks, giving up on starting worker');
|
169
205
|
}
|
170
206
|
const handlerNames = Object.keys(this.handlers);
|
@@ -198,4 +234,5 @@ export class Worker {
|
|
198
234
|
}
|
199
235
|
}
|
200
236
|
}
|
237
|
+
exports.Worker = Worker;
|
201
238
|
//# sourceMappingURL=worker.js.map
|
package/out/tasks/worker.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tasks/worker.ts"],"names":[],"mappings":"AACA,
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tasks/worker.ts"],"names":[],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
2
|
-
import type { IncomingFile, UploadResponse, WebResourceHandler } from '
|
2
|
+
import type { IncomingFile, UploadResponse, WebResourceHandler } from '..';
|
3
3
|
export declare class NoopHandler implements WebResourceHandler {
|
4
4
|
handleFile(resource: IncomingFile): Promise<UploadResponse>;
|
5
5
|
removeFile(): Promise<void>;
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.NoopHandler = void 0;
|
4
|
+
class NoopHandler {
|
2
5
|
async handleFile(resource) {
|
3
6
|
resource.stream.resume();
|
4
7
|
return {
|
@@ -13,4 +16,5 @@ export class NoopHandler {
|
|
13
16
|
return webResource;
|
14
17
|
}
|
15
18
|
}
|
19
|
+
exports.NoopHandler = NoopHandler;
|
16
20
|
//# sourceMappingURL=NoopHandler.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"NoopHandler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/NoopHandler.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"NoopHandler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/NoopHandler.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IAChB,KAAK,CAAC,UAAU,CAAC,QAAsB;QAE7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO;YACN,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC;SACP,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,OAAO;IACR,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,WAAwB;QACjD,OAAO,WAAW,CAAC;IACpB,CAAC;CACD;AAjBD,kCAiBC"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { type IncomingFile, type UploadResponse, type WebResourceHandler } from '
|
1
|
+
import { type IncomingFile, type UploadResponse, type WebResourceHandler } from '..';
|
2
2
|
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
3
3
|
export interface S3HandlerProps {
|
4
4
|
region: string;
|
@@ -1,10 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.S3Handler = void 0;
|
7
|
+
const __1 = require("..");
|
8
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
9
|
+
const lib_storage_1 = require("@aws-sdk/lib-storage");
|
10
|
+
const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
|
11
|
+
const crypto_1 = require("crypto");
|
12
|
+
const memoizee_1 = __importDefault(require("memoizee"));
|
13
|
+
class S3Handler {
|
8
14
|
config;
|
9
15
|
bucket;
|
10
16
|
maxFileSize;
|
@@ -28,21 +34,21 @@ export class S3Handler {
|
|
28
34
|
config.signedUrlCacheExpireTimeSeconds ?? 82800;
|
29
35
|
this.maxFileSize = config.maxSize ?? 52428800;
|
30
36
|
this.bucket = config.bucket;
|
31
|
-
this.client = new S3Client(this.config);
|
32
|
-
this.cachedGetSignedUrl =
|
37
|
+
this.client = new client_s3_1.S3Client(this.config);
|
38
|
+
this.cachedGetSignedUrl = (0, memoizee_1.default)(this.s3SignUrl, {
|
33
39
|
maxAge: this.signedUrlCacheExpireTimeSeconds * 1000,
|
34
40
|
});
|
35
41
|
}
|
36
42
|
async handleFile(resource) {
|
37
43
|
let size = 0;
|
38
|
-
const key = `${resource.fieldname}_${randomUUID()}_${resource.originalname}`;
|
44
|
+
const key = `${resource.fieldname}_${(0, crypto_1.randomUUID)()}_${resource.originalname}`;
|
39
45
|
const params = {
|
40
46
|
Bucket: this.bucket,
|
41
47
|
Key: key,
|
42
48
|
Body: resource.stream,
|
43
49
|
ContentType: resource.mimetype,
|
44
50
|
};
|
45
|
-
const upload = new Upload({ client: this.client, params });
|
51
|
+
const upload = new lib_storage_1.Upload({ client: this.client, params });
|
46
52
|
upload.on('httpUploadProgress', async (ev) => {
|
47
53
|
size = ev.total ?? ev.loaded;
|
48
54
|
if (size > this.maxFileSize) {
|
@@ -55,16 +61,16 @@ export class S3Handler {
|
|
55
61
|
catch (err) {
|
56
62
|
resource.stream.resume();
|
57
63
|
if (size > this.maxFileSize) {
|
58
|
-
throw new FileSizeExceededError(this.maxFileSize);
|
64
|
+
throw new __1.FileSizeExceededError(this.maxFileSize);
|
59
65
|
}
|
60
|
-
throw new WebResourceError(err);
|
66
|
+
throw new __1.WebResourceError(err);
|
61
67
|
}
|
62
68
|
const filename = this.getS3URL(key);
|
63
69
|
return { size, filename };
|
64
70
|
}
|
65
71
|
async removeFile(href) {
|
66
72
|
const fileKey = this.getKeyFromHref(href);
|
67
|
-
const command = new DeleteObjectCommand({
|
73
|
+
const command = new client_s3_1.DeleteObjectCommand({
|
68
74
|
Bucket: this.bucket,
|
69
75
|
Key: fileKey,
|
70
76
|
});
|
@@ -78,11 +84,11 @@ export class S3Handler {
|
|
78
84
|
return webResource;
|
79
85
|
}
|
80
86
|
s3SignUrl(fileKey) {
|
81
|
-
const command = new GetObjectCommand({
|
87
|
+
const command = new client_s3_1.GetObjectCommand({
|
82
88
|
Bucket: this.bucket,
|
83
89
|
Key: fileKey,
|
84
90
|
});
|
85
|
-
return getSignedUrl(this.client, command, {
|
91
|
+
return (0, s3_request_presigner_1.getSignedUrl)(this.client, command, {
|
86
92
|
expiresIn: this.signedUrlExpireTimeSeconds,
|
87
93
|
});
|
88
94
|
}
|
@@ -90,8 +96,9 @@ export class S3Handler {
|
|
90
96
|
return `${this.config.endpoint}/${this.bucket}/${key}`;
|
91
97
|
}
|
92
98
|
getKeyFromHref(href) {
|
93
|
-
const hrefWithoutParams = normalizeHref(href);
|
99
|
+
const hrefWithoutParams = (0, __1.normalizeHref)(href);
|
94
100
|
return hrefWithoutParams.substring(hrefWithoutParams.lastIndexOf('/') + 1);
|
95
101
|
}
|
96
102
|
}
|
103
|
+
exports.S3Handler = S3Handler;
|
97
104
|
//# sourceMappingURL=S3Handler.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"S3Handler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/S3Handler.ts"],"names":[],"mappings":"AAAA,
|
1
|
+
{"version":3,"file":"S3Handler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/S3Handler.ts"],"names":[],"mappings":"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"}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
export * from './NoopHandler
|
2
|
-
export * from './S3Handler
|
1
|
+
export * from './NoopHandler';
|
2
|
+
export * from './S3Handler';
|
@@ -1,3 +1,19 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./NoopHandler"), exports);
|
18
|
+
__exportStar(require("./S3Handler"), exports);
|
3
19
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/index.ts"],"names":[],"mappings":"AAAA,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,8CAA4B"}
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import type Express from 'express';
|
2
|
-
import type stream from 'node:stream';
|
1
|
+
import type * as Express from 'express';
|
2
|
+
import type * as stream from 'node:stream';
|
3
3
|
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
4
4
|
import { TypedError } from 'typed-error';
|
5
|
-
export * from './handlers
|
5
|
+
export * from './handlers';
|
6
6
|
export interface IncomingFile {
|
7
7
|
fieldname: string;
|
8
8
|
originalname: string;
|
@@ -1,21 +1,65 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
35
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
37
|
+
};
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
40
|
+
};
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
42
|
+
exports.setupUploadHooks = exports.getDefaultHandler = exports.normalizeHref = exports.getUploaderMiddlware = exports.getWebresourceHandler = exports.setupWebresourceHandler = exports.FileSizeExceededError = exports.WebResourceError = void 0;
|
43
|
+
const busboy_1 = __importDefault(require("busboy"));
|
44
|
+
const uriParser = __importStar(require("../sbvr-api/uri-parser"));
|
45
|
+
const sbvrUtils = __importStar(require("../sbvr-api/sbvr-utils"));
|
46
|
+
const sbvr_utils_1 = require("../sbvr-api/sbvr-utils");
|
47
|
+
const permissions_1 = require("../sbvr-api/permissions");
|
48
|
+
const NoopHandler_1 = require("./handlers/NoopHandler");
|
49
|
+
const odata_to_abstract_sql_1 = require("@balena/odata-to-abstract-sql");
|
50
|
+
const module_1 = require("../server-glue/module");
|
51
|
+
const typed_error_1 = require("typed-error");
|
52
|
+
__exportStar(require("./handlers"), exports);
|
53
|
+
class WebResourceError extends typed_error_1.TypedError {
|
12
54
|
}
|
13
|
-
|
55
|
+
exports.WebResourceError = WebResourceError;
|
56
|
+
class FileSizeExceededError extends WebResourceError {
|
14
57
|
name = 'FileSizeExceededError';
|
15
58
|
constructor(maxSize) {
|
16
59
|
super(`File size exceeded the limit of ${maxSize} bytes.`);
|
17
60
|
}
|
18
61
|
}
|
62
|
+
exports.FileSizeExceededError = FileSizeExceededError;
|
19
63
|
const getLogger = (vocab) => {
|
20
64
|
if (vocab) {
|
21
65
|
return sbvrUtils.logger[vocab] ?? console;
|
@@ -23,21 +67,23 @@ const getLogger = (vocab) => {
|
|
23
67
|
return console;
|
24
68
|
};
|
25
69
|
let configuredWebResourceHandler;
|
26
|
-
|
70
|
+
const setupWebresourceHandler = (handler) => {
|
27
71
|
configuredWebResourceHandler = handler;
|
28
72
|
};
|
29
|
-
|
73
|
+
exports.setupWebresourceHandler = setupWebresourceHandler;
|
74
|
+
const getWebresourceHandler = () => {
|
30
75
|
return configuredWebResourceHandler;
|
31
76
|
};
|
77
|
+
exports.getWebresourceHandler = getWebresourceHandler;
|
32
78
|
const isFileInValidPath = async (fieldname, req) => {
|
33
79
|
if (req.method !== 'POST' && req.method !== 'PATCH') {
|
34
80
|
return false;
|
35
81
|
}
|
36
|
-
const apiRoot = getApiRoot(req);
|
82
|
+
const apiRoot = (0, sbvr_utils_1.getApiRoot)(req);
|
37
83
|
if (apiRoot == null) {
|
38
84
|
return false;
|
39
85
|
}
|
40
|
-
const model = getModel(apiRoot);
|
86
|
+
const model = (0, sbvr_utils_1.getModel)(apiRoot);
|
41
87
|
const odataRequest = uriParser.parseOData({
|
42
88
|
url: req.url,
|
43
89
|
method: req.method,
|
@@ -49,14 +95,14 @@ const isFileInValidPath = async (fieldname, req) => {
|
|
49
95
|
}
|
50
96
|
const permission = req.method === 'POST' ? 'create' : 'update';
|
51
97
|
const vocab = model.versions[model.versions.length - 1];
|
52
|
-
const hasPermissions = await checkPermissions(req, permission, odataRequest.resourceName, vocab);
|
98
|
+
const hasPermissions = await (0, permissions_1.checkPermissions)(req, permission, odataRequest.resourceName, vocab);
|
53
99
|
if (!hasPermissions) {
|
54
100
|
return false;
|
55
101
|
}
|
56
|
-
const dbFieldName = odataNameToSqlName(fieldname);
|
102
|
+
const dbFieldName = (0, odata_to_abstract_sql_1.odataNameToSqlName)(fieldname);
|
57
103
|
return table.fields.some((field) => field.fieldName === dbFieldName && field.dataType === 'WebResource');
|
58
104
|
};
|
59
|
-
|
105
|
+
const getUploaderMiddlware = (handler) => {
|
60
106
|
return (req, res, next) => {
|
61
107
|
if (!req.is('multipart')) {
|
62
108
|
next();
|
@@ -64,7 +110,7 @@ export const getUploaderMiddlware = (handler) => {
|
|
64
110
|
}
|
65
111
|
const uploadedFilePaths = [];
|
66
112
|
const completeUploads = [];
|
67
|
-
const bb =
|
113
|
+
const bb = (0, busboy_1.default)({ headers: req.headers });
|
68
114
|
let isAborting = false;
|
69
115
|
const finishFileUpload = () => {
|
70
116
|
req.unpipe(bb);
|
@@ -78,7 +124,7 @@ export const getUploaderMiddlware = (handler) => {
|
|
78
124
|
return await Promise.all(deletions);
|
79
125
|
}
|
80
126
|
catch (err) {
|
81
|
-
getLogger(getApiRoot(req)).error('Error deleting file', err);
|
127
|
+
getLogger((0, sbvr_utils_1.getApiRoot)(req)).error('Error deleting file', err);
|
82
128
|
}
|
83
129
|
};
|
84
130
|
bb.on('file', (fieldname, filestream, info) => {
|
@@ -128,9 +174,9 @@ export const getUploaderMiddlware = (handler) => {
|
|
128
174
|
finishFileUpload();
|
129
175
|
await clearFiles();
|
130
176
|
if (err instanceof FileSizeExceededError) {
|
131
|
-
return sbvrUtils.handleHttpErrors(req, res, new errors.BadRequestError(err.message));
|
177
|
+
return sbvrUtils.handleHttpErrors(req, res, new module_1.errors.BadRequestError(err.message));
|
132
178
|
}
|
133
|
-
getLogger(getApiRoot(req)).error('Error uploading file', err);
|
179
|
+
getLogger((0, sbvr_utils_1.getApiRoot)(req)).error('Error uploading file', err);
|
134
180
|
next(err);
|
135
181
|
}
|
136
182
|
});
|
@@ -138,24 +184,25 @@ export const getUploaderMiddlware = (handler) => {
|
|
138
184
|
finishFileUpload();
|
139
185
|
await clearFiles();
|
140
186
|
if (err instanceof FileSizeExceededError) {
|
141
|
-
return sbvrUtils.handleHttpErrors(req, res, new errors.BadRequestError(err.message));
|
187
|
+
return sbvrUtils.handleHttpErrors(req, res, new module_1.errors.BadRequestError(err.message));
|
142
188
|
}
|
143
|
-
getLogger(getApiRoot(req)).error('Error uploading file', err);
|
189
|
+
getLogger((0, sbvr_utils_1.getApiRoot)(req)).error('Error uploading file', err);
|
144
190
|
next(err);
|
145
191
|
});
|
146
192
|
req.pipe(bb);
|
147
193
|
};
|
148
194
|
};
|
195
|
+
exports.getUploaderMiddlware = getUploaderMiddlware;
|
149
196
|
const getWebResourceFields = (request, useTranslations = true) => {
|
150
197
|
const resourceName = sbvrUtils.resolveSynonym(request);
|
151
|
-
const sqlResourceName = odataNameToSqlName(resourceName);
|
198
|
+
const sqlResourceName = (0, odata_to_abstract_sql_1.odataNameToSqlName)(resourceName);
|
152
199
|
const model = sbvrUtils.getAbstractSqlModel(request).tables[sqlResourceName];
|
153
200
|
const fields = useTranslations
|
154
201
|
? (model.modifyFields ?? model.fields)
|
155
202
|
: model.fields;
|
156
203
|
return fields
|
157
204
|
.filter((f) => f.dataType === 'WebResource')
|
158
|
-
.map((f) => sqlNameToODataName(f.fieldName));
|
205
|
+
.map((f) => (0, odata_to_abstract_sql_1.sqlNameToODataName)(f.fieldName));
|
159
206
|
};
|
160
207
|
const deleteFiles = async (keysToDelete, webResourceHandler) => {
|
161
208
|
const promises = keysToDelete.map((r) => webResourceHandler.removeFile(r));
|
@@ -164,7 +211,7 @@ const deleteFiles = async (keysToDelete, webResourceHandler) => {
|
|
164
211
|
const throwIfWebresourceNotInMultipart = (webResourceFields, { req, request }) => {
|
165
212
|
if (!req.is?.('multipart') &&
|
166
213
|
webResourceFields.some((field) => request.values[field] != null)) {
|
167
|
-
throw new errors.BadRequestError('Use multipart requests to upload a file.');
|
214
|
+
throw new module_1.errors.BadRequestError('Use multipart requests to upload a file.');
|
168
215
|
}
|
169
216
|
};
|
170
217
|
const getCreateWebResourceHooks = (webResourceHandler) => {
|
@@ -183,12 +230,13 @@ const getCreateWebResourceHooks = (webResourceHandler) => {
|
|
183
230
|
const getWebResourcesHrefs = (webResources) => {
|
184
231
|
const hrefs = (webResources ?? []).flatMap((resource) => Object.values(resource ?? {})
|
185
232
|
.filter((resourceKey) => resourceKey != null)
|
186
|
-
.map((resourceKey) => normalizeHref(resourceKey.href)));
|
233
|
+
.map((resourceKey) => (0, exports.normalizeHref)(resourceKey.href)));
|
187
234
|
return hrefs;
|
188
235
|
};
|
189
|
-
|
236
|
+
const normalizeHref = (href) => {
|
190
237
|
return href.split('?')[0];
|
191
238
|
};
|
239
|
+
exports.normalizeHref = normalizeHref;
|
192
240
|
const getWebResourcesKeysFromRequest = (webResourceFields, { values }) => {
|
193
241
|
return webResourceFields
|
194
242
|
.map((field) => values[field]?.href)
|
@@ -216,7 +264,7 @@ const getRemoveWebResourceHooks = (webResourceHandler) => {
|
|
216
264
|
tx.on('end', () => {
|
217
265
|
deletePendingFiles(keysToDelete, request, webResourceHandler);
|
218
266
|
});
|
219
|
-
throw new errors.BadRequestError('WebResources can only be updated when providing a resource key.');
|
267
|
+
throw new module_1.errors.BadRequestError('WebResources can only be updated when providing a resource key.');
|
220
268
|
}
|
221
269
|
const ids = await sbvrUtils.getAffectedIds(args);
|
222
270
|
if (ids.length === 0) {
|
@@ -228,7 +276,7 @@ const getRemoveWebResourceHooks = (webResourceHandler) => {
|
|
228
276
|
resource: request.resourceName,
|
229
277
|
passthrough: {
|
230
278
|
tx: args.tx,
|
231
|
-
req: permissions.root,
|
279
|
+
req: module_1.permissions.root,
|
232
280
|
},
|
233
281
|
options: {
|
234
282
|
$select: webResourceFields,
|
@@ -261,12 +309,14 @@ const deletePendingFiles = (keysToDelete, request, webResourceHandler) => {
|
|
261
309
|
getLogger(request.vocabulary).error(`Failed to delete pending files`, err);
|
262
310
|
}
|
263
311
|
};
|
264
|
-
|
265
|
-
return new NoopHandler();
|
312
|
+
const getDefaultHandler = () => {
|
313
|
+
return new NoopHandler_1.NoopHandler();
|
266
314
|
};
|
267
|
-
|
315
|
+
exports.getDefaultHandler = getDefaultHandler;
|
316
|
+
const setupUploadHooks = (handler, apiRoot, resourceName) => {
|
268
317
|
sbvrUtils.addPureHook('DELETE', apiRoot, resourceName, getRemoveWebResourceHooks(handler));
|
269
318
|
sbvrUtils.addPureHook('PATCH', apiRoot, resourceName, getRemoveWebResourceHooks(handler));
|
270
319
|
sbvrUtils.addPureHook('POST', apiRoot, resourceName, getCreateWebResourceHooks(handler));
|
271
320
|
};
|
321
|
+
exports.setupUploadHooks = setupUploadHooks;
|
272
322
|
//# sourceMappingURL=index.js.map
|