@budibase/backend-core 3.2.41 → 3.2.43
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/dist/package.json +3 -3
- package/dist/src/accounts/accounts.js +83 -0
- package/dist/src/accounts/accounts.js.map +1 -0
- package/dist/src/accounts/api.js +102 -0
- package/dist/src/accounts/api.js.map +1 -0
- package/dist/src/accounts/index.js +18 -0
- package/dist/src/accounts/index.js.map +1 -0
- package/dist/src/cache/appMetadata.js +96 -0
- package/dist/src/cache/appMetadata.js.map +1 -0
- package/dist/src/cache/base/index.js +189 -0
- package/dist/src/cache/base/index.js.map +1 -0
- package/dist/src/cache/docWritethrough.js +123 -0
- package/dist/src/cache/docWritethrough.js.map +1 -0
- package/dist/src/cache/generic.js +37 -0
- package/dist/src/cache/generic.js.map +1 -0
- package/dist/src/cache/index.js +48 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/invite.js +128 -0
- package/dist/src/cache/invite.js.map +1 -0
- package/dist/src/cache/passwordReset.js +92 -0
- package/dist/src/cache/passwordReset.js.map +1 -0
- package/dist/src/cache/user.js +183 -0
- package/dist/src/cache/user.js.map +1 -0
- package/dist/src/cache/writethrough.js +170 -0
- package/dist/src/cache/writethrough.js.map +1 -0
- package/dist/src/configs/configs.js +294 -0
- package/dist/src/configs/configs.js.map +1 -0
- package/dist/src/configs/index.js +18 -0
- package/dist/src/configs/index.js.map +1 -0
- package/dist/src/constants/db.js +75 -0
- package/dist/src/constants/db.js.map +1 -0
- package/dist/src/constants/index.js +19 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/constants/misc.js +40 -0
- package/dist/src/constants/misc.js.map +1 -0
- package/dist/src/context/Context.js +14 -0
- package/dist/src/context/Context.js.map +1 -0
- package/dist/src/context/identity.js +81 -0
- package/dist/src/context/identity.js.map +1 -0
- package/dist/src/context/index.js +44 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/mainContext.js +446 -0
- package/dist/src/context/mainContext.js.map +1 -0
- package/dist/src/context/types.js +3 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/db/Replication.js +90 -0
- package/dist/src/db/Replication.js.map +1 -0
- package/dist/src/db/couch/DatabaseImpl.js +475 -0
- package/dist/src/db/couch/DatabaseImpl.js.map +1 -0
- package/dist/src/db/couch/connections.js +101 -0
- package/dist/src/db/couch/connections.js.map +1 -0
- package/dist/src/db/couch/index.js +26 -0
- package/dist/src/db/couch/index.js.map +1 -0
- package/dist/src/db/couch/pouchDB.js +108 -0
- package/dist/src/db/couch/pouchDB.js.map +1 -0
- package/dist/src/db/couch/utils.js +60 -0
- package/dist/src/db/couch/utils.js.map +1 -0
- package/dist/src/db/db.js +47 -0
- package/dist/src/db/db.js.map +1 -0
- package/dist/src/db/errors.js +21 -0
- package/dist/src/db/errors.js.map +1 -0
- package/dist/src/db/index.js +58 -0
- package/dist/src/db/index.js.map +1 -0
- package/dist/src/db/instrumentation.js +202 -0
- package/dist/src/db/instrumentation.js.map +1 -0
- package/dist/src/db/lucene.js +638 -0
- package/dist/src/db/lucene.js.map +1 -0
- package/dist/src/db/searchIndexes/index.js +18 -0
- package/dist/src/db/searchIndexes/index.js.map +1 -0
- package/dist/src/db/searchIndexes/searchIndexes.js +76 -0
- package/dist/src/db/searchIndexes/searchIndexes.js.map +1 -0
- package/dist/src/db/utils.js +212 -0
- package/dist/src/db/utils.js.map +1 -0
- package/dist/src/db/views.js +224 -0
- package/dist/src/db/views.js.map +1 -0
- package/dist/src/docIds/conversions.js +62 -0
- package/dist/src/docIds/conversions.js.map +1 -0
- package/dist/src/docIds/ids.js +125 -0
- package/dist/src/docIds/ids.js.map +1 -0
- package/dist/src/docIds/index.js +19 -0
- package/dist/src/docIds/index.js.map +1 -0
- package/dist/src/docIds/newid.js +8 -0
- package/dist/src/docIds/newid.js.map +1 -0
- package/dist/src/docIds/params.js +141 -0
- package/dist/src/docIds/params.js.map +1 -0
- package/dist/src/environment.js +182 -0
- package/dist/src/environment.js.map +1 -0
- package/dist/src/errors/errors.js +97 -0
- package/dist/src/errors/errors.js.map +1 -0
- package/dist/src/errors/index.js +18 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/events/analytics.js +52 -0
- package/dist/src/events/analytics.js.map +1 -0
- package/dist/src/events/asyncEvents/index.js +19 -0
- package/dist/src/events/asyncEvents/index.js.map +1 -0
- package/dist/src/events/asyncEvents/publisher.js +26 -0
- package/dist/src/events/asyncEvents/publisher.js.map +1 -0
- package/dist/src/events/asyncEvents/queue.js +26 -0
- package/dist/src/events/asyncEvents/queue.js.map +1 -0
- package/dist/src/events/backfill.js +189 -0
- package/dist/src/events/backfill.js.map +1 -0
- package/dist/src/events/events.js +87 -0
- package/dist/src/events/events.js.map +1 -0
- package/dist/src/events/identification.js +299 -0
- package/dist/src/events/identification.js.map +1 -0
- package/dist/src/events/index.js +59 -0
- package/dist/src/events/index.js.map +1 -0
- package/dist/src/events/processors/AnalyticsProcessor.js +103 -0
- package/dist/src/events/processors/AnalyticsProcessor.js.map +1 -0
- package/dist/src/events/processors/AuditLogsProcessor.js +86 -0
- package/dist/src/events/processors/AuditLogsProcessor.js.map +1 -0
- package/dist/src/events/processors/LoggingProcessor.js +47 -0
- package/dist/src/events/processors/LoggingProcessor.js.map +1 -0
- package/dist/src/events/processors/Processors.js +52 -0
- package/dist/src/events/processors/Processors.js.map +1 -0
- package/dist/src/events/processors/index.js +23 -0
- package/dist/src/events/processors/index.js.map +1 -0
- package/dist/src/events/processors/posthog/PosthogProcessor.js +147 -0
- package/dist/src/events/processors/posthog/PosthogProcessor.js.map +1 -0
- package/dist/src/events/processors/posthog/index.js +8 -0
- package/dist/src/events/processors/posthog/index.js.map +1 -0
- package/dist/src/events/processors/posthog/rateLimiting.js +129 -0
- package/dist/src/events/processors/posthog/rateLimiting.js.map +1 -0
- package/dist/src/events/processors/types.js +3 -0
- package/dist/src/events/processors/types.js.map +1 -0
- package/dist/src/events/publishers/account.js +43 -0
- package/dist/src/events/publishers/account.js.map +1 -0
- package/dist/src/events/publishers/ai.js +30 -0
- package/dist/src/events/publishers/ai.js.map +1 -0
- package/dist/src/events/publishers/app.js +166 -0
- package/dist/src/events/publishers/app.js.map +1 -0
- package/dist/src/events/publishers/auditLog.js +34 -0
- package/dist/src/events/publishers/auditLog.js.map +1 -0
- package/dist/src/events/publishers/auth.js +80 -0
- package/dist/src/events/publishers/auth.js.map +1 -0
- package/dist/src/events/publishers/automation.js +117 -0
- package/dist/src/events/publishers/automation.js.map +1 -0
- package/dist/src/events/publishers/backfill.js +85 -0
- package/dist/src/events/publishers/backfill.js.map +1 -0
- package/dist/src/events/publishers/backup.js +41 -0
- package/dist/src/events/publishers/backup.js.map +1 -0
- package/dist/src/events/publishers/datasource.js +54 -0
- package/dist/src/events/publishers/datasource.js.map +1 -0
- package/dist/src/events/publishers/email.js +30 -0
- package/dist/src/events/publishers/email.js.map +1 -0
- package/dist/src/events/publishers/environmentVariable.js +44 -0
- package/dist/src/events/publishers/environmentVariable.js.map +1 -0
- package/dist/src/events/publishers/group.js +107 -0
- package/dist/src/events/publishers/group.js.map +1 -0
- package/dist/src/events/publishers/index.js +59 -0
- package/dist/src/events/publishers/index.js.map +1 -0
- package/dist/src/events/publishers/installation.js +52 -0
- package/dist/src/events/publishers/installation.js.map +1 -0
- package/dist/src/events/publishers/layout.js +34 -0
- package/dist/src/events/publishers/layout.js.map +1 -0
- package/dist/src/events/publishers/license.js +77 -0
- package/dist/src/events/publishers/license.js.map +1 -0
- package/dist/src/events/publishers/org.js +52 -0
- package/dist/src/events/publishers/org.js.map +1 -0
- package/dist/src/events/publishers/plugin.js +55 -0
- package/dist/src/events/publishers/plugin.js.map +1 -0
- package/dist/src/events/publishers/query.js +73 -0
- package/dist/src/events/publishers/query.js.map +1 -0
- package/dist/src/events/publishers/role.js +69 -0
- package/dist/src/events/publishers/role.js.map +1 -0
- package/dist/src/events/publishers/rowAction.js +22 -0
- package/dist/src/events/publishers/rowAction.js.map +1 -0
- package/dist/src/events/publishers/rows.js +31 -0
- package/dist/src/events/publishers/rows.js.map +1 -0
- package/dist/src/events/publishers/screen.js +46 -0
- package/dist/src/events/publishers/screen.js.map +1 -0
- package/dist/src/events/publishers/serve.js +47 -0
- package/dist/src/events/publishers/serve.js.map +1 -0
- package/dist/src/events/publishers/table.js +95 -0
- package/dist/src/events/publishers/table.js.map +1 -0
- package/dist/src/events/publishers/user.js +201 -0
- package/dist/src/events/publishers/user.js.map +1 -0
- package/dist/src/events/publishers/view.js +123 -0
- package/dist/src/events/publishers/view.js.map +1 -0
- package/dist/src/helpers.js +13 -0
- package/dist/src/helpers.js.map +1 -0
- package/dist/src/installation.js +159 -0
- package/dist/src/installation.js.map +1 -0
- package/dist/src/logging/alerts.js +23 -0
- package/dist/src/logging/alerts.js.map +1 -0
- package/dist/src/logging/correlation/correlation.js +18 -0
- package/dist/src/logging/correlation/correlation.js.map +1 -0
- package/dist/src/logging/correlation/index.js +18 -0
- package/dist/src/logging/correlation/index.js.map +1 -0
- package/dist/src/logging/index.js +45 -0
- package/dist/src/logging/index.js.map +1 -0
- package/dist/src/logging/pino/logger.js +234 -0
- package/dist/src/logging/pino/logger.js.map +1 -0
- package/dist/src/logging/system.js +110 -0
- package/dist/src/logging/system.js.map +1 -0
- package/dist/src/objectStore/buckets/app.js +95 -0
- package/dist/src/objectStore/buckets/app.js.map +1 -0
- package/dist/src/objectStore/buckets/global.js +68 -0
- package/dist/src/objectStore/buckets/global.js.map +1 -0
- package/dist/src/objectStore/buckets/index.js +20 -0
- package/dist/src/objectStore/buckets/index.js.map +1 -0
- package/dist/src/objectStore/buckets/plugins.js +104 -0
- package/dist/src/objectStore/buckets/plugins.js.map +1 -0
- package/dist/src/objectStore/cloudfront.js +73 -0
- package/dist/src/objectStore/cloudfront.js.map +1 -0
- package/dist/src/objectStore/index.js +20 -0
- package/dist/src/objectStore/index.js.map +1 -0
- package/dist/src/objectStore/objectStore.js +509 -0
- package/dist/src/objectStore/objectStore.js.map +1 -0
- package/dist/src/objectStore/utils.js +148 -0
- package/dist/src/objectStore/utils.js.map +1 -0
- package/dist/src/platform/index.js +43 -0
- package/dist/src/platform/index.js.map +1 -0
- package/dist/src/platform/platformDb.js +9 -0
- package/dist/src/platform/platformDb.js.map +1 -0
- package/dist/src/platform/tenants.js +149 -0
- package/dist/src/platform/tenants.js.map +1 -0
- package/dist/src/platform/users.js +118 -0
- package/dist/src/platform/users.js.map +1 -0
- package/dist/src/queue/constants.js +13 -0
- package/dist/src/queue/constants.js.map +1 -0
- package/dist/src/queue/inMemoryQueue.js +192 -0
- package/dist/src/queue/inMemoryQueue.js.map +1 -0
- package/dist/src/queue/index.js +19 -0
- package/dist/src/queue/index.js.map +1 -0
- package/dist/src/queue/listeners.js +199 -0
- package/dist/src/queue/listeners.js.map +1 -0
- package/dist/src/queue/queue.js +124 -0
- package/dist/src/queue/queue.js.map +1 -0
- package/dist/src/redis/index.js +47 -0
- package/dist/src/redis/index.js.map +1 -0
- package/dist/src/redis/init.js +184 -0
- package/dist/src/redis/init.js.map +1 -0
- package/dist/src/redis/redis.js +396 -0
- package/dist/src/redis/redis.js.map +1 -0
- package/dist/src/redis/redlockImpl.js +181 -0
- package/dist/src/redis/redlockImpl.js.map +1 -0
- package/dist/src/redis/utils.js +131 -0
- package/dist/src/redis/utils.js.map +1 -0
- package/dist/src/security/auth.js +26 -0
- package/dist/src/security/auth.js.map +1 -0
- package/dist/src/security/index.js +18 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/security/roles.js +566 -0
- package/dist/src/security/roles.js.map +1 -0
- package/dist/src/security/sessions.js +156 -0
- package/dist/src/security/sessions.js.map +1 -0
- package/dist/src/sql/utils.js +180 -0
- package/dist/src/sql/utils.js.map +1 -0
- package/dist/src/tenancy/db.js +9 -0
- package/dist/src/tenancy/db.js.map +1 -0
- package/dist/src/tenancy/index.js +19 -0
- package/dist/src/tenancy/index.js.map +1 -0
- package/dist/src/tenancy/tenancy.js +125 -0
- package/dist/src/tenancy/tenancy.js.map +1 -0
- package/dist/src/timers/index.js +18 -0
- package/dist/src/timers/index.js.map +1 -0
- package/dist/src/timers/timers.js +25 -0
- package/dist/src/timers/timers.js.map +1 -0
- package/dist/src/users/db.js +489 -0
- package/dist/src/users/db.js.map +1 -0
- package/dist/src/users/events.js +179 -0
- package/dist/src/users/events.js.map +1 -0
- package/dist/src/users/index.js +23 -0
- package/dist/src/users/index.js.map +1 -0
- package/dist/src/users/lookup.js +126 -0
- package/dist/src/users/lookup.js.map +1 -0
- package/dist/src/users/users.js +376 -0
- package/dist/src/users/users.js.map +1 -0
- package/dist/src/users/utils.js +127 -0
- package/dist/src/users/utils.js.map +1 -0
- package/dist/src/utils/Duration.js +54 -0
- package/dist/src/utils/Duration.js.map +1 -0
- package/dist/src/utils/hashing.js +46 -0
- package/dist/src/utils/hashing.js.map +1 -0
- package/dist/src/utils/index.js +21 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/stringUtils.js +8 -0
- package/dist/src/utils/stringUtils.js.map +1 -0
- package/dist/src/utils/utils.js +267 -0
- package/dist/src/utils/utils.js.map +1 -0
- package/dist/tests/core/logging.js +33 -0
- package/dist/tests/core/logging.js.map +1 -0
- package/dist/tests/core/utilities/index.js +48 -0
- package/dist/tests/core/utilities/index.js.map +1 -0
- package/dist/tests/core/utilities/jestUtils.js +21 -0
- package/dist/tests/core/utilities/jestUtils.js.map +1 -0
- package/dist/tests/core/utilities/mocks/alerts.js +40 -0
- package/dist/tests/core/utilities/mocks/alerts.js.map +1 -0
- package/dist/tests/core/utilities/mocks/date.js +6 -0
- package/dist/tests/core/utilities/mocks/date.js.map +1 -0
- package/dist/tests/core/utilities/mocks/events.js +155 -0
- package/dist/tests/core/utilities/mocks/events.js.map +1 -0
- package/dist/tests/core/utilities/mocks/index.js +47 -0
- package/dist/tests/core/utilities/mocks/index.js.map +1 -0
- package/dist/tests/core/utilities/mocks/licenses.js +109 -0
- package/dist/tests/core/utilities/mocks/licenses.js.map +1 -0
- package/dist/tests/core/utilities/queue.js +21 -0
- package/dist/tests/core/utilities/queue.js.map +1 -0
- package/dist/tests/core/utilities/structures/Chance.js +21 -0
- package/dist/tests/core/utilities/structures/Chance.js.map +1 -0
- package/dist/tests/core/utilities/structures/accounts.js +43 -0
- package/dist/tests/core/utilities/structures/accounts.js.map +1 -0
- package/dist/tests/core/utilities/structures/apps.js +23 -0
- package/dist/tests/core/utilities/structures/apps.js.map +1 -0
- package/dist/tests/core/utilities/structures/common.js +11 -0
- package/dist/tests/core/utilities/structures/common.js.map +1 -0
- package/dist/tests/core/utilities/structures/db.js +15 -0
- package/dist/tests/core/utilities/structures/db.js.map +1 -0
- package/dist/tests/core/utilities/structures/documents/index.js +18 -0
- package/dist/tests/core/utilities/structures/documents/index.js.map +1 -0
- package/dist/tests/core/utilities/structures/documents/platform/index.js +38 -0
- package/dist/tests/core/utilities/structures/documents/platform/index.js.map +1 -0
- package/dist/tests/core/utilities/structures/documents/platform/installation.js +47 -0
- package/dist/tests/core/utilities/structures/documents/platform/installation.js.map +1 -0
- package/dist/tests/core/utilities/structures/generator.js +9 -0
- package/dist/tests/core/utilities/structures/generator.js.map +1 -0
- package/dist/tests/core/utilities/structures/index.js +56 -0
- package/dist/tests/core/utilities/structures/index.js.map +1 -0
- package/dist/tests/core/utilities/structures/koa.js +10 -0
- package/dist/tests/core/utilities/structures/koa.js.map +1 -0
- package/dist/tests/core/utilities/structures/licenses.js +157 -0
- package/dist/tests/core/utilities/structures/licenses.js.map +1 -0
- package/dist/tests/core/utilities/structures/plugins.js +22 -0
- package/dist/tests/core/utilities/structures/plugins.js.map +1 -0
- package/dist/tests/core/utilities/structures/quotas.js +73 -0
- package/dist/tests/core/utilities/structures/quotas.js.map +1 -0
- package/dist/tests/core/utilities/structures/scim.js +62 -0
- package/dist/tests/core/utilities/structures/scim.js.map +1 -0
- package/dist/tests/core/utilities/structures/sso.js +140 -0
- package/dist/tests/core/utilities/structures/sso.js.map +1 -0
- package/dist/tests/core/utilities/structures/tenants.js +8 -0
- package/dist/tests/core/utilities/structures/tenants.js.map +1 -0
- package/dist/tests/core/utilities/structures/userGroups.js +12 -0
- package/dist/tests/core/utilities/structures/userGroups.js.map +1 -0
- package/dist/tests/core/utilities/structures/users.js +53 -0
- package/dist/tests/core/utilities/structures/users.js.map +1 -0
- package/dist/tests/core/utilities/testContainerUtils.js +161 -0
- package/dist/tests/core/utilities/testContainerUtils.js.map +1 -0
- package/dist/tests/core/utilities/utils/index.js +39 -0
- package/dist/tests/core/utilities/utils/index.js.map +1 -0
- package/dist/tests/core/utilities/utils/queue.js +37 -0
- package/dist/tests/core/utilities/utils/queue.js.map +1 -0
- package/dist/tests/core/utilities/utils/time.js +7 -0
- package/dist/tests/core/utilities/utils/time.js.map +1 -0
- package/dist/tests/extra/DBTestConfiguration.js +65 -0
- package/dist/tests/extra/DBTestConfiguration.js.map +1 -0
- package/dist/tests/extra/index.js +43 -0
- package/dist/tests/extra/index.js.map +1 -0
- package/dist/tests/extra/testEnv.js +136 -0
- package/dist/tests/extra/testEnv.js.map +1 -0
- package/dist/tests/index.js +19 -0
- package/dist/tests/index.js.map +1 -0
- package/dist/tests/jestEnv.js +12 -0
- package/dist/tests/jestEnv.js.map +1 -0
- package/dist/tests/jestSetup.js +33 -0
- package/dist/tests/jestSetup.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
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.SIGNED_FILE_PREFIX = void 0;
|
|
16
|
+
exports.sanitizeKey = sanitizeKey;
|
|
17
|
+
exports.sanitizeBucket = sanitizeBucket;
|
|
18
|
+
exports.ObjectStore = ObjectStore;
|
|
19
|
+
exports.createBucketIfNotExists = createBucketIfNotExists;
|
|
20
|
+
exports.upload = upload;
|
|
21
|
+
exports.streamUpload = streamUpload;
|
|
22
|
+
exports.retrieve = retrieve;
|
|
23
|
+
exports.listAllObjects = listAllObjects;
|
|
24
|
+
exports.getPresignedUrl = getPresignedUrl;
|
|
25
|
+
exports.retrieveToTmp = retrieveToTmp;
|
|
26
|
+
exports.retrieveDirectory = retrieveDirectory;
|
|
27
|
+
exports.deleteFile = deleteFile;
|
|
28
|
+
exports.deleteFiles = deleteFiles;
|
|
29
|
+
exports.deleteFolder = deleteFolder;
|
|
30
|
+
exports.uploadDirectory = uploadDirectory;
|
|
31
|
+
exports.downloadTarballDirect = downloadTarballDirect;
|
|
32
|
+
exports.downloadTarball = downloadTarball;
|
|
33
|
+
exports.getReadStream = getReadStream;
|
|
34
|
+
exports.getObjectMetadata = getObjectMetadata;
|
|
35
|
+
exports.extractBucketAndPath = extractBucketAndPath;
|
|
36
|
+
const sanitize = require("sanitize-s3-objectkey");
|
|
37
|
+
const aws_sdk_1 = __importDefault(require("aws-sdk"));
|
|
38
|
+
const stream_1 = __importDefault(require("stream"));
|
|
39
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
40
|
+
const tar_fs_1 = __importDefault(require("tar-fs"));
|
|
41
|
+
const zlib_1 = __importDefault(require("zlib"));
|
|
42
|
+
const util_1 = require("util");
|
|
43
|
+
const path_1 = require("path");
|
|
44
|
+
const fs_1 = __importDefault(require("fs"));
|
|
45
|
+
const environment_1 = __importDefault(require("../environment"));
|
|
46
|
+
const utils_1 = require("./utils");
|
|
47
|
+
const uuid_1 = require("uuid");
|
|
48
|
+
const db_1 = require("../db");
|
|
49
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
50
|
+
const streamPipeline = (0, util_1.promisify)(stream_1.default.pipeline);
|
|
51
|
+
// use this as a temporary store of buckets that are being created
|
|
52
|
+
const STATE = {
|
|
53
|
+
bucketCreationPromises: {},
|
|
54
|
+
};
|
|
55
|
+
exports.SIGNED_FILE_PREFIX = "/files/signed";
|
|
56
|
+
const CONTENT_TYPE_MAP = {
|
|
57
|
+
txt: "text/plain",
|
|
58
|
+
html: "text/html",
|
|
59
|
+
css: "text/css",
|
|
60
|
+
js: "application/javascript",
|
|
61
|
+
json: "application/json",
|
|
62
|
+
gz: "application/gzip",
|
|
63
|
+
svg: "image/svg+xml",
|
|
64
|
+
form: "multipart/form-data",
|
|
65
|
+
};
|
|
66
|
+
const STRING_CONTENT_TYPES = [
|
|
67
|
+
CONTENT_TYPE_MAP.html,
|
|
68
|
+
CONTENT_TYPE_MAP.css,
|
|
69
|
+
CONTENT_TYPE_MAP.js,
|
|
70
|
+
CONTENT_TYPE_MAP.json,
|
|
71
|
+
];
|
|
72
|
+
// does normal sanitization and then swaps dev apps to apps
|
|
73
|
+
function sanitizeKey(input) {
|
|
74
|
+
return sanitize(sanitizeBucket(input)).replace(/\\/g, "/");
|
|
75
|
+
}
|
|
76
|
+
// simply handles the dev app to app conversion
|
|
77
|
+
function sanitizeBucket(input) {
|
|
78
|
+
return input.replace(new RegExp(db_1.APP_DEV_PREFIX, "g"), db_1.APP_PREFIX);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Gets a connection to the object store using the S3 SDK.
|
|
82
|
+
* @param bucket the name of the bucket which blobs will be uploaded/retrieved from.
|
|
83
|
+
* @param opts configuration for the object store.
|
|
84
|
+
* @return an S3 object store object, check S3 Nodejs SDK for usage.
|
|
85
|
+
* @constructor
|
|
86
|
+
*/
|
|
87
|
+
function ObjectStore(bucket, opts = { presigning: false }) {
|
|
88
|
+
const config = {
|
|
89
|
+
s3ForcePathStyle: true,
|
|
90
|
+
signatureVersion: "v4",
|
|
91
|
+
apiVersion: "2006-03-01",
|
|
92
|
+
accessKeyId: environment_1.default.MINIO_ACCESS_KEY,
|
|
93
|
+
secretAccessKey: environment_1.default.MINIO_SECRET_KEY,
|
|
94
|
+
region: environment_1.default.AWS_REGION,
|
|
95
|
+
};
|
|
96
|
+
if (bucket) {
|
|
97
|
+
config.params = {
|
|
98
|
+
Bucket: sanitizeBucket(bucket),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// for AWS Credentials using temporary session token
|
|
102
|
+
if (!environment_1.default.MINIO_ENABLED && environment_1.default.AWS_SESSION_TOKEN) {
|
|
103
|
+
config.sessionToken = environment_1.default.AWS_SESSION_TOKEN;
|
|
104
|
+
}
|
|
105
|
+
// custom S3 is in use i.e. minio
|
|
106
|
+
if (environment_1.default.MINIO_URL) {
|
|
107
|
+
if (opts.presigning && environment_1.default.MINIO_ENABLED) {
|
|
108
|
+
// IMPORTANT: Signed urls will inspect the host header of the request.
|
|
109
|
+
// Normally a signed url will need to be generated with a specified host in mind.
|
|
110
|
+
// To support dynamic hosts, e.g. some unknown self-hosted installation url,
|
|
111
|
+
// use a predefined host. The host 'minio-service' is also forwarded to minio requests via nginx
|
|
112
|
+
config.endpoint = "minio-service";
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
config.endpoint = environment_1.default.MINIO_URL;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return new aws_sdk_1.default.S3(config);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Given an object store and a bucket name this will make sure the bucket exists,
|
|
122
|
+
* if it does not exist then it will create it.
|
|
123
|
+
*/
|
|
124
|
+
function createBucketIfNotExists(client, bucketName) {
|
|
125
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
126
|
+
bucketName = sanitizeBucket(bucketName);
|
|
127
|
+
try {
|
|
128
|
+
yield client
|
|
129
|
+
.headBucket({
|
|
130
|
+
Bucket: bucketName,
|
|
131
|
+
})
|
|
132
|
+
.promise();
|
|
133
|
+
return { created: false, exists: true };
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
const promises = STATE.bucketCreationPromises;
|
|
137
|
+
const doesntExist = err.statusCode === 404, noAccess = err.statusCode === 403;
|
|
138
|
+
if (promises[bucketName]) {
|
|
139
|
+
yield promises[bucketName];
|
|
140
|
+
return { created: false, exists: true };
|
|
141
|
+
}
|
|
142
|
+
else if (doesntExist || noAccess) {
|
|
143
|
+
if (doesntExist) {
|
|
144
|
+
promises[bucketName] = client
|
|
145
|
+
.createBucket({
|
|
146
|
+
Bucket: bucketName,
|
|
147
|
+
})
|
|
148
|
+
.promise();
|
|
149
|
+
yield promises[bucketName];
|
|
150
|
+
delete promises[bucketName];
|
|
151
|
+
return { created: true, exists: false };
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
throw new Error("Access denied to object store bucket." + err);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
throw new Error("Unable to write to object store bucket.");
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Uploads the contents of a file given the required parameters, useful when
|
|
165
|
+
* temp files in use (for example file uploaded as an attachment).
|
|
166
|
+
*/
|
|
167
|
+
function upload(_a) {
|
|
168
|
+
return __awaiter(this, arguments, void 0, function* ({ bucket: bucketName, filename, path, type, metadata, body, ttl, }) {
|
|
169
|
+
const extension = filename.split(".").pop();
|
|
170
|
+
const fileBytes = path ? (yield promises_1.default.open(path)).createReadStream() : body;
|
|
171
|
+
const objectStore = ObjectStore(bucketName);
|
|
172
|
+
const bucketCreated = yield createBucketIfNotExists(objectStore, bucketName);
|
|
173
|
+
if (ttl && bucketCreated.created) {
|
|
174
|
+
let ttlConfig = (0, utils_1.bucketTTLConfig)(bucketName, ttl);
|
|
175
|
+
yield objectStore.putBucketLifecycleConfiguration(ttlConfig).promise();
|
|
176
|
+
}
|
|
177
|
+
let contentType = type;
|
|
178
|
+
if (!contentType) {
|
|
179
|
+
contentType = extension
|
|
180
|
+
? CONTENT_TYPE_MAP[extension.toLowerCase()]
|
|
181
|
+
: CONTENT_TYPE_MAP.txt;
|
|
182
|
+
}
|
|
183
|
+
const config = {
|
|
184
|
+
// windows file paths need to be converted to forward slashes for s3
|
|
185
|
+
Key: sanitizeKey(filename),
|
|
186
|
+
Body: fileBytes,
|
|
187
|
+
ContentType: contentType,
|
|
188
|
+
};
|
|
189
|
+
if (metadata && typeof metadata === "object") {
|
|
190
|
+
// remove any nullish keys from the metadata object, as these may be considered invalid
|
|
191
|
+
for (let key of Object.keys(metadata)) {
|
|
192
|
+
if (!metadata[key] || typeof metadata[key] !== "string") {
|
|
193
|
+
delete metadata[key];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
config.Metadata = metadata;
|
|
197
|
+
}
|
|
198
|
+
return objectStore.upload(config).promise();
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Similar to the upload function but can be used to send a file stream
|
|
203
|
+
* through to the object store.
|
|
204
|
+
*/
|
|
205
|
+
function streamUpload(_a) {
|
|
206
|
+
return __awaiter(this, arguments, void 0, function* ({ bucket: bucketName, stream, filename, type, extra, ttl, }) {
|
|
207
|
+
if (!stream) {
|
|
208
|
+
throw new Error("Stream to upload is invalid/undefined");
|
|
209
|
+
}
|
|
210
|
+
const extension = filename.split(".").pop();
|
|
211
|
+
const objectStore = ObjectStore(bucketName);
|
|
212
|
+
const bucketCreated = yield createBucketIfNotExists(objectStore, bucketName);
|
|
213
|
+
if (ttl && bucketCreated.created) {
|
|
214
|
+
let ttlConfig = (0, utils_1.bucketTTLConfig)(bucketName, ttl);
|
|
215
|
+
yield objectStore.putBucketLifecycleConfiguration(ttlConfig).promise();
|
|
216
|
+
}
|
|
217
|
+
// Set content type for certain known extensions
|
|
218
|
+
if (filename === null || filename === void 0 ? void 0 : filename.endsWith(".js")) {
|
|
219
|
+
extra = Object.assign(Object.assign({}, extra), { ContentType: "application/javascript" });
|
|
220
|
+
}
|
|
221
|
+
else if (filename === null || filename === void 0 ? void 0 : filename.endsWith(".svg")) {
|
|
222
|
+
extra = Object.assign(Object.assign({}, extra), { ContentType: "image" });
|
|
223
|
+
}
|
|
224
|
+
let contentType = type;
|
|
225
|
+
if (!contentType) {
|
|
226
|
+
contentType = extension
|
|
227
|
+
? CONTENT_TYPE_MAP[extension.toLowerCase()]
|
|
228
|
+
: CONTENT_TYPE_MAP.txt;
|
|
229
|
+
}
|
|
230
|
+
const bucket = sanitizeBucket(bucketName), objKey = sanitizeKey(filename);
|
|
231
|
+
const params = Object.assign({ Bucket: bucket, Key: objKey, Body: stream, ContentType: contentType }, extra);
|
|
232
|
+
const details = yield objectStore.upload(params).promise();
|
|
233
|
+
const headDetails = yield objectStore
|
|
234
|
+
.headObject({
|
|
235
|
+
Bucket: bucket,
|
|
236
|
+
Key: objKey,
|
|
237
|
+
})
|
|
238
|
+
.promise();
|
|
239
|
+
return Object.assign(Object.assign({}, details), { ContentLength: headDetails.ContentLength });
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* retrieves the contents of a file from the object store, if it is a known content type it
|
|
244
|
+
* will be converted, otherwise it will be returned as a buffer stream.
|
|
245
|
+
*/
|
|
246
|
+
function retrieve(bucketName, filepath) {
|
|
247
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
+
const objectStore = ObjectStore(bucketName);
|
|
249
|
+
const params = {
|
|
250
|
+
Bucket: sanitizeBucket(bucketName),
|
|
251
|
+
Key: sanitizeKey(filepath),
|
|
252
|
+
};
|
|
253
|
+
const response = yield objectStore.getObject(params).promise();
|
|
254
|
+
// currently these are all strings
|
|
255
|
+
if (STRING_CONTENT_TYPES.includes(response.ContentType)) {
|
|
256
|
+
return response.Body.toString("utf8");
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
return response.Body;
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function listAllObjects(bucketName, path) {
|
|
264
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
265
|
+
const objectStore = ObjectStore(bucketName);
|
|
266
|
+
const list = (params = {}) => {
|
|
267
|
+
return objectStore
|
|
268
|
+
.listObjectsV2(Object.assign(Object.assign({}, params), { Bucket: sanitizeBucket(bucketName), Prefix: sanitizeKey(path) }))
|
|
269
|
+
.promise();
|
|
270
|
+
};
|
|
271
|
+
let isTruncated = false, token, objects = [];
|
|
272
|
+
do {
|
|
273
|
+
let params = {};
|
|
274
|
+
if (token) {
|
|
275
|
+
params.ContinuationToken = token;
|
|
276
|
+
}
|
|
277
|
+
const response = yield list(params);
|
|
278
|
+
if (response.Contents) {
|
|
279
|
+
objects = objects.concat(response.Contents);
|
|
280
|
+
}
|
|
281
|
+
isTruncated = !!response.IsTruncated;
|
|
282
|
+
token = response.NextContinuationToken;
|
|
283
|
+
} while (isTruncated && token);
|
|
284
|
+
return objects;
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Generate a presigned url with a default TTL of 1 hour
|
|
289
|
+
*/
|
|
290
|
+
function getPresignedUrl(bucketName, key, durationSeconds = 3600) {
|
|
291
|
+
const objectStore = ObjectStore(bucketName, { presigning: true });
|
|
292
|
+
const params = {
|
|
293
|
+
Bucket: sanitizeBucket(bucketName),
|
|
294
|
+
Key: sanitizeKey(key),
|
|
295
|
+
Expires: durationSeconds,
|
|
296
|
+
};
|
|
297
|
+
const url = objectStore.getSignedUrl("getObject", params);
|
|
298
|
+
if (!environment_1.default.MINIO_ENABLED) {
|
|
299
|
+
// return the full URL to the client
|
|
300
|
+
return url;
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
// return the path only to the client
|
|
304
|
+
// use the presigned url route to ensure the static
|
|
305
|
+
// hostname will be used in the request
|
|
306
|
+
const signedUrl = new URL(url);
|
|
307
|
+
const path = signedUrl.pathname;
|
|
308
|
+
const query = signedUrl.search;
|
|
309
|
+
return `${exports.SIGNED_FILE_PREFIX}${path}${query}`;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Same as retrieval function but puts to a temporary file.
|
|
314
|
+
*/
|
|
315
|
+
function retrieveToTmp(bucketName, filepath) {
|
|
316
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
317
|
+
bucketName = sanitizeBucket(bucketName);
|
|
318
|
+
filepath = sanitizeKey(filepath);
|
|
319
|
+
const data = yield retrieve(bucketName, filepath);
|
|
320
|
+
const outputPath = (0, path_1.join)((0, utils_1.budibaseTempDir)(), (0, uuid_1.v4)());
|
|
321
|
+
fs_1.default.writeFileSync(outputPath, data);
|
|
322
|
+
return outputPath;
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
function retrieveDirectory(bucketName, path) {
|
|
326
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
327
|
+
let writePath = (0, path_1.join)((0, utils_1.budibaseTempDir)(), (0, uuid_1.v4)());
|
|
328
|
+
fs_1.default.mkdirSync(writePath);
|
|
329
|
+
const objects = yield listAllObjects(bucketName, path);
|
|
330
|
+
let streams = yield Promise.all(objects.map(obj => getReadStream(bucketName, obj.Key)));
|
|
331
|
+
let count = 0;
|
|
332
|
+
const writePromises = [];
|
|
333
|
+
for (let obj of objects) {
|
|
334
|
+
const filename = obj.Key;
|
|
335
|
+
const stream = streams[count++];
|
|
336
|
+
const possiblePath = filename.split("/");
|
|
337
|
+
const dirs = possiblePath.slice(0, possiblePath.length - 1);
|
|
338
|
+
const possibleDir = (0, path_1.join)(writePath, ...dirs);
|
|
339
|
+
if (possiblePath.length > 1 && !fs_1.default.existsSync(possibleDir)) {
|
|
340
|
+
fs_1.default.mkdirSync(possibleDir, { recursive: true });
|
|
341
|
+
}
|
|
342
|
+
const writeStream = fs_1.default.createWriteStream((0, path_1.join)(writePath, ...possiblePath), {
|
|
343
|
+
mode: 0o644,
|
|
344
|
+
});
|
|
345
|
+
stream.pipe(writeStream);
|
|
346
|
+
writePromises.push(new Promise((resolve, reject) => {
|
|
347
|
+
stream.on("finish", resolve);
|
|
348
|
+
stream.on("error", reject);
|
|
349
|
+
writeStream.on("error", reject);
|
|
350
|
+
}));
|
|
351
|
+
}
|
|
352
|
+
yield Promise.all(writePromises);
|
|
353
|
+
return writePath;
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Delete a single file.
|
|
358
|
+
*/
|
|
359
|
+
function deleteFile(bucketName, filepath) {
|
|
360
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
361
|
+
const objectStore = ObjectStore(bucketName);
|
|
362
|
+
yield createBucketIfNotExists(objectStore, bucketName);
|
|
363
|
+
const params = {
|
|
364
|
+
Bucket: bucketName,
|
|
365
|
+
Key: sanitizeKey(filepath),
|
|
366
|
+
};
|
|
367
|
+
return objectStore.deleteObject(params).promise();
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
function deleteFiles(bucketName, filepaths) {
|
|
371
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
372
|
+
const objectStore = ObjectStore(bucketName);
|
|
373
|
+
yield createBucketIfNotExists(objectStore, bucketName);
|
|
374
|
+
const params = {
|
|
375
|
+
Bucket: bucketName,
|
|
376
|
+
Delete: {
|
|
377
|
+
Objects: filepaths.map((path) => ({ Key: sanitizeKey(path) })),
|
|
378
|
+
},
|
|
379
|
+
};
|
|
380
|
+
return objectStore.deleteObjects(params).promise();
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Delete a path, including everything within.
|
|
385
|
+
*/
|
|
386
|
+
function deleteFolder(bucketName, folder) {
|
|
387
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
388
|
+
var _a, _b, _c;
|
|
389
|
+
bucketName = sanitizeBucket(bucketName);
|
|
390
|
+
folder = sanitizeKey(folder);
|
|
391
|
+
const client = ObjectStore(bucketName);
|
|
392
|
+
const listParams = {
|
|
393
|
+
Bucket: bucketName,
|
|
394
|
+
Prefix: folder,
|
|
395
|
+
};
|
|
396
|
+
const existingObjectsResponse = yield client.listObjects(listParams).promise();
|
|
397
|
+
if (((_a = existingObjectsResponse.Contents) === null || _a === void 0 ? void 0 : _a.length) === 0) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
const deleteParams = {
|
|
401
|
+
Bucket: bucketName,
|
|
402
|
+
Delete: {
|
|
403
|
+
Objects: [],
|
|
404
|
+
},
|
|
405
|
+
};
|
|
406
|
+
(_b = existingObjectsResponse.Contents) === null || _b === void 0 ? void 0 : _b.forEach((content) => {
|
|
407
|
+
deleteParams.Delete.Objects.push({ Key: content.Key });
|
|
408
|
+
});
|
|
409
|
+
const deleteResponse = yield client.deleteObjects(deleteParams).promise();
|
|
410
|
+
// can only empty 1000 items at once
|
|
411
|
+
if (((_c = deleteResponse.Deleted) === null || _c === void 0 ? void 0 : _c.length) === 1000) {
|
|
412
|
+
return deleteFolder(bucketName, folder);
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
function uploadDirectory(bucketName, localPath, bucketPath) {
|
|
417
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
418
|
+
bucketName = sanitizeBucket(bucketName);
|
|
419
|
+
let uploads = [];
|
|
420
|
+
const files = fs_1.default.readdirSync(localPath, { withFileTypes: true });
|
|
421
|
+
for (let file of files) {
|
|
422
|
+
const path = sanitizeKey((0, path_1.join)(bucketPath, file.name));
|
|
423
|
+
const local = (0, path_1.join)(localPath, file.name);
|
|
424
|
+
if (file.isDirectory()) {
|
|
425
|
+
uploads.push(uploadDirectory(bucketName, local, path));
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
uploads.push(streamUpload({
|
|
429
|
+
bucket: bucketName,
|
|
430
|
+
filename: path,
|
|
431
|
+
stream: fs_1.default.createReadStream(local),
|
|
432
|
+
}));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
yield Promise.all(uploads);
|
|
436
|
+
return files;
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
function downloadTarballDirect(url_1, path_2) {
|
|
440
|
+
return __awaiter(this, arguments, void 0, function* (url, path, headers = {}) {
|
|
441
|
+
path = sanitizeKey(path);
|
|
442
|
+
const response = yield (0, node_fetch_1.default)(url, { headers });
|
|
443
|
+
if (!response.ok) {
|
|
444
|
+
throw new Error(`unexpected response ${response.statusText}`);
|
|
445
|
+
}
|
|
446
|
+
yield streamPipeline(response.body, zlib_1.default.createUnzip(), tar_fs_1.default.extract(path));
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
function downloadTarball(url, bucketName, path) {
|
|
450
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
451
|
+
bucketName = sanitizeBucket(bucketName);
|
|
452
|
+
path = sanitizeKey(path);
|
|
453
|
+
const response = yield (0, node_fetch_1.default)(url);
|
|
454
|
+
if (!response.ok) {
|
|
455
|
+
throw new Error(`unexpected response ${response.statusText}`);
|
|
456
|
+
}
|
|
457
|
+
const tmpPath = (0, path_1.join)((0, utils_1.budibaseTempDir)(), path);
|
|
458
|
+
yield streamPipeline(response.body, zlib_1.default.createUnzip(), tar_fs_1.default.extract(tmpPath));
|
|
459
|
+
if (!environment_1.default.isTest() && environment_1.default.SELF_HOSTED) {
|
|
460
|
+
yield uploadDirectory(bucketName, tmpPath, path);
|
|
461
|
+
}
|
|
462
|
+
// return the temporary path incase there is a use for it
|
|
463
|
+
return tmpPath;
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
function getReadStream(bucketName, path) {
|
|
467
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
468
|
+
bucketName = sanitizeBucket(bucketName);
|
|
469
|
+
path = sanitizeKey(path);
|
|
470
|
+
const client = ObjectStore(bucketName);
|
|
471
|
+
const params = {
|
|
472
|
+
Bucket: bucketName,
|
|
473
|
+
Key: path,
|
|
474
|
+
};
|
|
475
|
+
return client.getObject(params).createReadStream();
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
function getObjectMetadata(bucket, path) {
|
|
479
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
480
|
+
bucket = sanitizeBucket(bucket);
|
|
481
|
+
path = sanitizeKey(path);
|
|
482
|
+
const client = ObjectStore(bucket);
|
|
483
|
+
const params = {
|
|
484
|
+
Bucket: bucket,
|
|
485
|
+
Key: path,
|
|
486
|
+
};
|
|
487
|
+
try {
|
|
488
|
+
return yield client.headObject(params).promise();
|
|
489
|
+
}
|
|
490
|
+
catch (err) {
|
|
491
|
+
throw new Error("Unable to retrieve metadata from object");
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
/*
|
|
496
|
+
Given a signed url like '/files/signed/tmp-files-attachments/app_123456/myfile.txt' extract
|
|
497
|
+
the bucket and the path from it
|
|
498
|
+
*/
|
|
499
|
+
function extractBucketAndPath(url) {
|
|
500
|
+
const baseUrl = url.split("?")[0];
|
|
501
|
+
const regex = new RegExp(`^${exports.SIGNED_FILE_PREFIX}/(?<bucket>[^/]+)/(?<path>.+)$`);
|
|
502
|
+
const match = baseUrl.match(regex);
|
|
503
|
+
if (match && match.groups) {
|
|
504
|
+
const { bucket, path } = match.groups;
|
|
505
|
+
return { bucket, path };
|
|
506
|
+
}
|
|
507
|
+
return null;
|
|
508
|
+
}
|
|
509
|
+
//# sourceMappingURL=objectStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectStore.js","sourceRoot":"","sources":["../../../src/objectStore/objectStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.bucketTTLConfig = exports.ObjectStoreBuckets = void 0;
|
|
49
|
+
exports.budibaseTempDir = budibaseTempDir;
|
|
50
|
+
exports.processObjectStoreAttachment = processObjectStoreAttachment;
|
|
51
|
+
exports.processAutomationAttachment = processAutomationAttachment;
|
|
52
|
+
const path_1 = __importStar(require("path"));
|
|
53
|
+
const os_1 = require("os");
|
|
54
|
+
const fs_1 = __importDefault(require("fs"));
|
|
55
|
+
const environment_1 = __importDefault(require("../environment"));
|
|
56
|
+
const objectStore = __importStar(require("./objectStore"));
|
|
57
|
+
const stream_1 = __importDefault(require("stream"));
|
|
58
|
+
/****************************************************
|
|
59
|
+
* NOTE: When adding a new bucket - name *
|
|
60
|
+
* sure that S3 usages (like budibase-infra) *
|
|
61
|
+
* have been updated to have a unique bucket name. *
|
|
62
|
+
****************************************************/
|
|
63
|
+
// can't be an enum - only numbers can be used for computed types
|
|
64
|
+
exports.ObjectStoreBuckets = {
|
|
65
|
+
BACKUPS: environment_1.default.BACKUPS_BUCKET_NAME,
|
|
66
|
+
APPS: environment_1.default.APPS_BUCKET_NAME,
|
|
67
|
+
TEMPLATES: environment_1.default.TEMPLATES_BUCKET_NAME,
|
|
68
|
+
GLOBAL: environment_1.default.GLOBAL_BUCKET_NAME,
|
|
69
|
+
PLUGINS: environment_1.default.PLUGIN_BUCKET_NAME,
|
|
70
|
+
TEMP: environment_1.default.TEMP_BUCKET_NAME,
|
|
71
|
+
};
|
|
72
|
+
const bbTmp = (0, path_1.join)((0, os_1.tmpdir)(), ".budibase");
|
|
73
|
+
try {
|
|
74
|
+
fs_1.default.mkdirSync(bbTmp);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
if (e.code !== "EEXIST") {
|
|
78
|
+
throw e;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function budibaseTempDir() {
|
|
82
|
+
return bbTmp;
|
|
83
|
+
}
|
|
84
|
+
const bucketTTLConfig = (bucketName, days) => {
|
|
85
|
+
const lifecycleRule = {
|
|
86
|
+
ID: `${bucketName}-ExpireAfter${days}days`,
|
|
87
|
+
Prefix: "",
|
|
88
|
+
Status: "Enabled",
|
|
89
|
+
Expiration: {
|
|
90
|
+
Days: days,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
const lifecycleConfiguration = {
|
|
94
|
+
Rules: [lifecycleRule],
|
|
95
|
+
};
|
|
96
|
+
return {
|
|
97
|
+
Bucket: bucketName,
|
|
98
|
+
LifecycleConfiguration: lifecycleConfiguration,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
exports.bucketTTLConfig = bucketTTLConfig;
|
|
102
|
+
function processUrlAttachment(attachment) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
const response = yield fetch(attachment.url);
|
|
105
|
+
if (!response.ok || !response.body) {
|
|
106
|
+
throw new Error(`Unexpected response ${response.statusText}`);
|
|
107
|
+
}
|
|
108
|
+
const fallbackFilename = path_1.default.basename(new URL(attachment.url).pathname);
|
|
109
|
+
if (!response.body) {
|
|
110
|
+
throw new Error("No response received for attachment");
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
filename: attachment.filename || fallbackFilename,
|
|
114
|
+
content: stream_1.default.Readable.fromWeb(response.body),
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function processObjectStoreAttachment(attachment) {
|
|
119
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
const result = objectStore.extractBucketAndPath(attachment.url);
|
|
121
|
+
if (result === null) {
|
|
122
|
+
throw new Error("Invalid signed URL");
|
|
123
|
+
}
|
|
124
|
+
const { bucket, path: objectPath } = result;
|
|
125
|
+
const readStream = yield objectStore.getReadStream(bucket, objectPath);
|
|
126
|
+
const fallbackFilename = path_1.default.basename(objectPath);
|
|
127
|
+
return {
|
|
128
|
+
bucket,
|
|
129
|
+
path: objectPath,
|
|
130
|
+
filename: attachment.filename || fallbackFilename,
|
|
131
|
+
content: readStream,
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function processAutomationAttachment(attachment) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
var _a, _b;
|
|
138
|
+
const isFullyFormedUrl = ((_a = attachment.url) === null || _a === void 0 ? void 0 : _a.startsWith("http://")) ||
|
|
139
|
+
((_b = attachment.url) === null || _b === void 0 ? void 0 : _b.startsWith("https://"));
|
|
140
|
+
if (isFullyFormedUrl) {
|
|
141
|
+
return yield processUrlAttachment(attachment);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
return yield processObjectStoreAttachment(attachment);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=utils.js.map
|