@budibase/backend-core 2.9.16 → 2.9.17
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/index.js +12544 -0
- package/dist/index.js.map +7 -0
- package/dist/index.js.meta.json +1 -0
- package/dist/package.json +5 -5
- package/dist/plugins.js +288 -16
- package/dist/plugins.js.map +7 -1
- package/dist/plugins.js.meta.json +1 -0
- package/dist/tests.js +8476 -0
- package/dist/tests.js.map +7 -0
- package/dist/tests.js.meta.json +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/scripts/build.js +6 -0
- package/tsconfig.build.json +5 -1
- package/tsconfig.json +0 -8
- package/dist/jest.config.js +0 -25
- package/dist/jest.config.js.map +0 -1
- package/dist/plugins.d.ts +0 -1
- package/dist/src/accounts/accounts.js +0 -83
- package/dist/src/accounts/accounts.js.map +0 -1
- package/dist/src/accounts/api.js +0 -92
- package/dist/src/accounts/api.js.map +0 -1
- package/dist/src/accounts/index.js +0 -18
- package/dist/src/accounts/index.js.map +0 -1
- package/dist/src/auth/auth.js +0 -189
- package/dist/src/auth/auth.js.map +0 -1
- package/dist/src/auth/index.js +0 -18
- package/dist/src/auth/index.js.map +0 -1
- package/dist/src/blacklist/blacklist.js +0 -76
- package/dist/src/blacklist/blacklist.js.map +0 -1
- package/dist/src/blacklist/index.js +0 -18
- package/dist/src/blacklist/index.js.map +0 -1
- package/dist/src/cache/appMetadata.js +0 -96
- package/dist/src/cache/appMetadata.js.map +0 -1
- package/dist/src/cache/base/index.js +0 -120
- package/dist/src/cache/base/index.js.map +0 -1
- package/dist/src/cache/generic.js +0 -31
- package/dist/src/cache/generic.js.map +0 -1
- package/dist/src/cache/index.js +0 -35
- package/dist/src/cache/index.js.map +0 -1
- package/dist/src/cache/user.js +0 -108
- package/dist/src/cache/user.js.map +0 -1
- package/dist/src/cache/writethrough.js +0 -159
- package/dist/src/cache/writethrough.js.map +0 -1
- package/dist/src/configs/configs.js +0 -278
- package/dist/src/configs/configs.js.map +0 -1
- package/dist/src/configs/index.js +0 -18
- package/dist/src/configs/index.js.map +0 -1
- package/dist/src/constants/db.js +0 -67
- package/dist/src/constants/db.js.map +0 -1
- package/dist/src/constants/index.js +0 -19
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/constants/misc.js +0 -54
- package/dist/src/constants/misc.js.map +0 -1
- package/dist/src/context/Context.js +0 -14
- package/dist/src/context/Context.js.map +0 -1
- package/dist/src/context/identity.js +0 -72
- package/dist/src/context/identity.js.map +0 -1
- package/dist/src/context/index.js +0 -34
- package/dist/src/context/index.js.map +0 -1
- package/dist/src/context/mainContext.js +0 -331
- package/dist/src/context/mainContext.js.map +0 -1
- package/dist/src/context/types.js +0 -3
- package/dist/src/context/types.js.map +0 -1
- package/dist/src/db/Replication.js +0 -85
- package/dist/src/db/Replication.js.map +0 -1
- package/dist/src/db/constants.js +0 -13
- package/dist/src/db/constants.js.map +0 -1
- package/dist/src/db/couch/DatabaseImpl.js +0 -248
- package/dist/src/db/couch/DatabaseImpl.js.map +0 -1
- package/dist/src/db/couch/connections.js +0 -88
- package/dist/src/db/couch/connections.js.map +0 -1
- package/dist/src/db/couch/index.js +0 -27
- package/dist/src/db/couch/index.js.map +0 -1
- package/dist/src/db/couch/pouchDB.js +0 -108
- package/dist/src/db/couch/pouchDB.js.map +0 -1
- package/dist/src/db/couch/pouchDump.js +0 -2
- package/dist/src/db/couch/pouchDump.js.map +0 -1
- package/dist/src/db/couch/utils.js +0 -55
- package/dist/src/db/couch/utils.js.map +0 -1
- package/dist/src/db/db.js +0 -59
- package/dist/src/db/db.js.map +0 -1
- package/dist/src/db/errors.js +0 -22
- package/dist/src/db/errors.js.map +0 -1
- package/dist/src/db/index.js +0 -48
- package/dist/src/db/index.js.map +0 -1
- package/dist/src/db/lucene.js +0 -650
- package/dist/src/db/lucene.js.map +0 -1
- package/dist/src/db/searchIndexes/index.js +0 -18
- package/dist/src/db/searchIndexes/index.js.map +0 -1
- package/dist/src/db/searchIndexes/searchIndexes.js +0 -77
- package/dist/src/db/searchIndexes/searchIndexes.js.map +0 -1
- package/dist/src/db/utils.js +0 -213
- package/dist/src/db/utils.js.map +0 -1
- package/dist/src/db/views.js +0 -219
- package/dist/src/db/views.js.map +0 -1
- package/dist/src/docIds/conversions.js +0 -62
- package/dist/src/docIds/conversions.js.map +0 -1
- package/dist/src/docIds/ids.js +0 -112
- package/dist/src/docIds/ids.js.map +0 -1
- package/dist/src/docIds/index.js +0 -19
- package/dist/src/docIds/index.js.map +0 -1
- package/dist/src/docIds/newid.js +0 -9
- package/dist/src/docIds/newid.js.map +0 -1
- package/dist/src/docIds/params.js +0 -138
- package/dist/src/docIds/params.js.map +0 -1
- package/dist/src/docUpdates/index.js +0 -36
- package/dist/src/docUpdates/index.js.map +0 -1
- package/dist/src/environment.js +0 -110
- package/dist/src/environment.js.map +0 -1
- package/dist/src/errors/errors.js +0 -97
- package/dist/src/errors/errors.js.map +0 -1
- package/dist/src/errors/index.js +0 -18
- package/dist/src/errors/index.js.map +0 -1
- package/dist/src/events/analytics.js +0 -42
- package/dist/src/events/analytics.js.map +0 -1
- package/dist/src/events/asyncEvents/index.js +0 -19
- package/dist/src/events/asyncEvents/index.js.map +0 -1
- package/dist/src/events/asyncEvents/publisher.js +0 -27
- package/dist/src/events/asyncEvents/publisher.js.map +0 -1
- package/dist/src/events/asyncEvents/queue.js +0 -26
- package/dist/src/events/asyncEvents/queue.js.map +0 -1
- package/dist/src/events/backfill.js +0 -179
- package/dist/src/events/backfill.js.map +0 -1
- package/dist/src/events/documentId.js +0 -28
- package/dist/src/events/documentId.js.map +0 -1
- package/dist/src/events/events.js +0 -73
- package/dist/src/events/events.js.map +0 -1
- package/dist/src/events/identification.js +0 -300
- package/dist/src/events/identification.js.map +0 -1
- package/dist/src/events/index.js +0 -47
- package/dist/src/events/index.js.map +0 -1
- package/dist/src/events/processors/AnalyticsProcessor.js +0 -93
- package/dist/src/events/processors/AnalyticsProcessor.js.map +0 -1
- package/dist/src/events/processors/AuditLogsProcessor.js +0 -86
- package/dist/src/events/processors/AuditLogsProcessor.js.map +0 -1
- package/dist/src/events/processors/LoggingProcessor.js +0 -47
- package/dist/src/events/processors/LoggingProcessor.js.map +0 -1
- package/dist/src/events/processors/Processors.js +0 -52
- package/dist/src/events/processors/Processors.js.map +0 -1
- package/dist/src/events/processors/async/DocumentUpdateProcessor.js +0 -44
- package/dist/src/events/processors/async/DocumentUpdateProcessor.js.map +0 -1
- package/dist/src/events/processors/index.js +0 -23
- package/dist/src/events/processors/index.js.map +0 -1
- package/dist/src/events/processors/posthog/PosthogProcessor.js +0 -139
- package/dist/src/events/processors/posthog/PosthogProcessor.js.map +0 -1
- package/dist/src/events/processors/posthog/index.js +0 -8
- package/dist/src/events/processors/posthog/index.js.map +0 -1
- package/dist/src/events/processors/posthog/rateLimiting.js +0 -119
- package/dist/src/events/processors/posthog/rateLimiting.js.map +0 -1
- package/dist/src/events/processors/types.js +0 -3
- package/dist/src/events/processors/types.js.map +0 -1
- package/dist/src/events/publishers/account.js +0 -43
- package/dist/src/events/publishers/account.js.map +0 -1
- package/dist/src/events/publishers/app.js +0 -153
- package/dist/src/events/publishers/app.js.map +0 -1
- package/dist/src/events/publishers/auditLog.js +0 -34
- package/dist/src/events/publishers/auditLog.js.map +0 -1
- package/dist/src/events/publishers/auth.js +0 -80
- package/dist/src/events/publishers/auth.js.map +0 -1
- package/dist/src/events/publishers/automation.js +0 -117
- package/dist/src/events/publishers/automation.js.map +0 -1
- package/dist/src/events/publishers/backfill.js +0 -85
- package/dist/src/events/publishers/backfill.js.map +0 -1
- package/dist/src/events/publishers/backup.js +0 -41
- package/dist/src/events/publishers/backup.js.map +0 -1
- package/dist/src/events/publishers/datasource.js +0 -54
- package/dist/src/events/publishers/datasource.js.map +0 -1
- package/dist/src/events/publishers/email.js +0 -30
- package/dist/src/events/publishers/email.js.map +0 -1
- package/dist/src/events/publishers/environmentVariable.js +0 -44
- package/dist/src/events/publishers/environmentVariable.js.map +0 -1
- package/dist/src/events/publishers/group.js +0 -107
- package/dist/src/events/publishers/group.js.map +0 -1
- package/dist/src/events/publishers/index.js +0 -55
- package/dist/src/events/publishers/index.js.map +0 -1
- package/dist/src/events/publishers/installation.js +0 -52
- package/dist/src/events/publishers/installation.js.map +0 -1
- package/dist/src/events/publishers/layout.js +0 -34
- package/dist/src/events/publishers/layout.js.map +0 -1
- package/dist/src/events/publishers/license.js +0 -77
- package/dist/src/events/publishers/license.js.map +0 -1
- package/dist/src/events/publishers/org.js +0 -52
- package/dist/src/events/publishers/org.js.map +0 -1
- package/dist/src/events/publishers/plugin.js +0 -55
- package/dist/src/events/publishers/plugin.js.map +0 -1
- package/dist/src/events/publishers/query.js +0 -74
- package/dist/src/events/publishers/query.js.map +0 -1
- package/dist/src/events/publishers/role.js +0 -69
- package/dist/src/events/publishers/role.js.map +0 -1
- package/dist/src/events/publishers/rows.js +0 -32
- package/dist/src/events/publishers/rows.js.map +0 -1
- package/dist/src/events/publishers/screen.js +0 -46
- package/dist/src/events/publishers/screen.js.map +0 -1
- package/dist/src/events/publishers/serve.js +0 -47
- package/dist/src/events/publishers/serve.js.map +0 -1
- package/dist/src/events/publishers/table.js +0 -77
- package/dist/src/events/publishers/table.js.map +0 -1
- package/dist/src/events/publishers/user.js +0 -202
- package/dist/src/events/publishers/user.js.map +0 -1
- package/dist/src/events/publishers/view.js +0 -111
- package/dist/src/events/publishers/view.js.map +0 -1
- package/dist/src/featureFlags/index.js +0 -96
- package/dist/src/featureFlags/index.js.map +0 -1
- package/dist/src/helpers.js +0 -14
- package/dist/src/helpers.js.map +0 -1
- package/dist/src/index.js +0 -82
- package/dist/src/index.js.map +0 -1
- package/dist/src/installation.js +0 -138
- package/dist/src/installation.js.map +0 -1
- package/dist/src/logging/alerts.js +0 -24
- package/dist/src/logging/alerts.js.map +0 -1
- package/dist/src/logging/correlation/correlation.js +0 -17
- package/dist/src/logging/correlation/correlation.js.map +0 -1
- package/dist/src/logging/correlation/index.js +0 -18
- package/dist/src/logging/correlation/index.js.map +0 -1
- package/dist/src/logging/correlation/middleware.js +0 -17
- package/dist/src/logging/correlation/middleware.js.map +0 -1
- package/dist/src/logging/index.js +0 -35
- package/dist/src/logging/index.js.map +0 -1
- package/dist/src/logging/pino/logger.js +0 -218
- package/dist/src/logging/pino/logger.js.map +0 -1
- package/dist/src/logging/pino/middleware.js +0 -47
- package/dist/src/logging/pino/middleware.js.map +0 -1
- package/dist/src/logging/system.js +0 -101
- package/dist/src/logging/system.js.map +0 -1
- package/dist/src/middleware/adminOnly.js +0 -19
- package/dist/src/middleware/adminOnly.js.map +0 -1
- package/dist/src/middleware/auditLog.js +0 -16
- package/dist/src/middleware/auditLog.js.map +0 -1
- package/dist/src/middleware/authenticated.js +0 -204
- package/dist/src/middleware/authenticated.js.map +0 -1
- package/dist/src/middleware/builderOnly.js +0 -33
- package/dist/src/middleware/builderOnly.js.map +0 -1
- package/dist/src/middleware/builderOrAdmin.js +0 -33
- package/dist/src/middleware/builderOrAdmin.js.map +0 -1
- package/dist/src/middleware/csrf.js +0 -81
- package/dist/src/middleware/csrf.js.map +0 -1
- package/dist/src/middleware/errorHandling.js +0 -64
- package/dist/src/middleware/errorHandling.js.map +0 -1
- package/dist/src/middleware/index.js +0 -65
- package/dist/src/middleware/index.js.map +0 -1
- package/dist/src/middleware/internalApi.js +0 -30
- package/dist/src/middleware/internalApi.js.map +0 -1
- package/dist/src/middleware/joi-validator.js +0 -47
- package/dist/src/middleware/joi-validator.js.map +0 -1
- package/dist/src/middleware/matchers.js +0 -43
- package/dist/src/middleware/matchers.js.map +0 -1
- package/dist/src/middleware/passport/datasource/google.js +0 -95
- package/dist/src/middleware/passport/datasource/google.js.map +0 -1
- package/dist/src/middleware/passport/local.js +0 -81
- package/dist/src/middleware/passport/local.js.map +0 -1
- package/dist/src/middleware/passport/sso/google.js +0 -90
- package/dist/src/middleware/passport/sso/google.js.map +0 -1
- package/dist/src/middleware/passport/sso/oidc.js +0 -151
- package/dist/src/middleware/passport/sso/oidc.js.map +0 -1
- package/dist/src/middleware/passport/sso/sso.js +0 -165
- package/dist/src/middleware/passport/sso/sso.js.map +0 -1
- package/dist/src/middleware/passport/utils.js +0 -66
- package/dist/src/middleware/passport/utils.js.map +0 -1
- package/dist/src/middleware/querystringToBody.js +0 -29
- package/dist/src/middleware/querystringToBody.js.map +0 -1
- package/dist/src/middleware/tenancy.js +0 -37
- package/dist/src/middleware/tenancy.js.map +0 -1
- package/dist/src/migrations/definitions.js +0 -39
- package/dist/src/migrations/definitions.js.map +0 -1
- package/dist/src/migrations/index.js +0 -19
- package/dist/src/migrations/index.js.map +0 -1
- package/dist/src/migrations/migrations.js +0 -198
- package/dist/src/migrations/migrations.js.map +0 -1
- package/dist/src/objectStore/buckets/app.js +0 -73
- package/dist/src/objectStore/buckets/app.js.map +0 -1
- package/dist/src/objectStore/buckets/global.js +0 -58
- package/dist/src/objectStore/buckets/global.js.map +0 -1
- package/dist/src/objectStore/buckets/index.js +0 -20
- package/dist/src/objectStore/buckets/index.js.map +0 -1
- package/dist/src/objectStore/buckets/plugins.js +0 -95
- package/dist/src/objectStore/buckets/plugins.js.map +0 -1
- package/dist/src/objectStore/cloudfront.js +0 -40
- package/dist/src/objectStore/cloudfront.js.map +0 -1
- package/dist/src/objectStore/index.js +0 -20
- package/dist/src/objectStore/index.js.map +0 -1
- package/dist/src/objectStore/objectStore.js +0 -382
- package/dist/src/objectStore/objectStore.js.map +0 -1
- package/dist/src/objectStore/utils.js +0 -32
- package/dist/src/objectStore/utils.js.map +0 -1
- package/dist/src/platform/index.js +0 -33
- package/dist/src/platform/index.js.map +0 -1
- package/dist/src/platform/platformDb.js +0 -10
- package/dist/src/platform/platformDb.js.map +0 -1
- package/dist/src/platform/tenants.js +0 -139
- package/dist/src/platform/tenants.js.map +0 -1
- package/dist/src/platform/users.js +0 -96
- package/dist/src/platform/users.js.map +0 -1
- package/dist/src/plugin/index.js +0 -18
- package/dist/src/plugin/index.js.map +0 -1
- package/dist/src/plugin/utils.js +0 -145
- package/dist/src/plugin/utils.js.map +0 -1
- package/dist/src/queue/constants.js +0 -11
- package/dist/src/queue/constants.js.map +0 -1
- package/dist/src/queue/inMemoryQueue.js +0 -145
- package/dist/src/queue/inMemoryQueue.js.map +0 -1
- package/dist/src/queue/index.js +0 -19
- package/dist/src/queue/index.js.map +0 -1
- package/dist/src/queue/listeners.js +0 -186
- package/dist/src/queue/listeners.js.map +0 -1
- package/dist/src/queue/queue.js +0 -92
- package/dist/src/queue/queue.js.map +0 -1
- package/dist/src/redis/index.js +0 -37
- package/dist/src/redis/index.js.map +0 -1
- package/dist/src/redis/init.js +0 -138
- package/dist/src/redis/init.js.map +0 -1
- package/dist/src/redis/redis.js +0 -335
- package/dist/src/redis/redis.js.map +0 -1
- package/dist/src/redis/redlockImpl.js +0 -162
- package/dist/src/redis/redlockImpl.js.map +0 -1
- package/dist/src/redis/utils.js +0 -123
- package/dist/src/redis/utils.js.map +0 -1
- package/dist/src/security/encryption.js +0 -163
- package/dist/src/security/encryption.js.map +0 -1
- package/dist/src/security/permissions.js +0 -151
- package/dist/src/security/permissions.js.map +0 -1
- package/dist/src/security/roles.js +0 -388
- package/dist/src/security/roles.js.map +0 -1
- package/dist/src/security/sessions.js +0 -121
- package/dist/src/security/sessions.js.map +0 -1
- package/dist/src/tenancy/db.js +0 -10
- package/dist/src/tenancy/db.js.map +0 -1
- package/dist/src/tenancy/index.js +0 -19
- package/dist/src/tenancy/index.js.map +0 -1
- package/dist/src/tenancy/tenancy.js +0 -116
- package/dist/src/tenancy/tenancy.js.map +0 -1
- package/dist/src/timers/index.js +0 -18
- package/dist/src/timers/index.js.map +0 -1
- package/dist/src/timers/timers.js +0 -26
- package/dist/src/timers/timers.js.map +0 -1
- package/dist/src/users/db.js +0 -407
- package/dist/src/users/db.js.map +0 -1
- package/dist/src/users/events.js +0 -169
- package/dist/src/users/events.js.map +0 -1
- package/dist/src/users/index.js +0 -23
- package/dist/src/users/index.js.map +0 -1
- package/dist/src/users/lookup.js +0 -112
- package/dist/src/users/lookup.js.map +0 -1
- package/dist/src/users/users.js +0 -261
- package/dist/src/users/users.js.map +0 -1
- package/dist/src/users/utils.js +0 -92
- package/dist/src/users/utils.js.map +0 -1
- package/dist/src/utils/hashing.js +0 -47
- package/dist/src/utils/hashing.js.map +0 -1
- package/dist/src/utils/index.js +0 -20
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/stringUtils.js +0 -9
- package/dist/src/utils/stringUtils.js.map +0 -1
- package/dist/src/utils/utils.js +0 -247
- package/dist/src/utils/utils.js.map +0 -1
- package/dist/tests/core/logging.js +0 -33
- package/dist/tests/core/logging.js.map +0 -1
- package/dist/tests/core/utilities/index.js +0 -37
- package/dist/tests/core/utilities/index.js.map +0 -1
- package/dist/tests/core/utilities/jestUtils.js +0 -21
- package/dist/tests/core/utilities/jestUtils.js.map +0 -1
- package/dist/tests/core/utilities/mocks/alerts.js +0 -30
- package/dist/tests/core/utilities/mocks/alerts.js.map +0 -1
- package/dist/tests/core/utilities/mocks/date.js +0 -6
- package/dist/tests/core/utilities/mocks/date.js.map +0 -1
- package/dist/tests/core/utilities/mocks/events.js +0 -143
- package/dist/tests/core/utilities/mocks/events.js.map +0 -1
- package/dist/tests/core/utilities/mocks/fetch.js +0 -15
- package/dist/tests/core/utilities/mocks/fetch.js.map +0 -1
- package/dist/tests/core/utilities/mocks/index.js +0 -43
- package/dist/tests/core/utilities/mocks/index.js.map +0 -1
- package/dist/tests/core/utilities/mocks/licenses.js +0 -97
- package/dist/tests/core/utilities/mocks/licenses.js.map +0 -1
- package/dist/tests/core/utilities/mocks/posthog.js +0 -9
- package/dist/tests/core/utilities/mocks/posthog.js.map +0 -1
- package/dist/tests/core/utilities/structures/Chance.js +0 -21
- package/dist/tests/core/utilities/structures/Chance.js.map +0 -1
- package/dist/tests/core/utilities/structures/accounts.js +0 -78
- package/dist/tests/core/utilities/structures/accounts.js.map +0 -1
- package/dist/tests/core/utilities/structures/apps.js +0 -24
- package/dist/tests/core/utilities/structures/apps.js.map +0 -1
- package/dist/tests/core/utilities/structures/common.js +0 -11
- package/dist/tests/core/utilities/structures/common.js.map +0 -1
- package/dist/tests/core/utilities/structures/db.js +0 -16
- package/dist/tests/core/utilities/structures/db.js.map +0 -1
- package/dist/tests/core/utilities/structures/documents/index.js +0 -18
- package/dist/tests/core/utilities/structures/documents/index.js.map +0 -1
- package/dist/tests/core/utilities/structures/documents/platform/index.js +0 -28
- package/dist/tests/core/utilities/structures/documents/platform/index.js.map +0 -1
- package/dist/tests/core/utilities/structures/documents/platform/installation.js +0 -38
- package/dist/tests/core/utilities/structures/documents/platform/installation.js.map +0 -1
- package/dist/tests/core/utilities/structures/generator.js +0 -9
- package/dist/tests/core/utilities/structures/generator.js.map +0 -1
- package/dist/tests/core/utilities/structures/index.js +0 -46
- package/dist/tests/core/utilities/structures/index.js.map +0 -1
- package/dist/tests/core/utilities/structures/koa.js +0 -10
- package/dist/tests/core/utilities/structures/koa.js.map +0 -1
- package/dist/tests/core/utilities/structures/licenses.js +0 -140
- package/dist/tests/core/utilities/structures/licenses.js.map +0 -1
- package/dist/tests/core/utilities/structures/plugins.js +0 -23
- package/dist/tests/core/utilities/structures/plugins.js.map +0 -1
- package/dist/tests/core/utilities/structures/quotas.js +0 -71
- package/dist/tests/core/utilities/structures/quotas.js.map +0 -1
- package/dist/tests/core/utilities/structures/scim.js +0 -63
- package/dist/tests/core/utilities/structures/scim.js.map +0 -1
- package/dist/tests/core/utilities/structures/shared.js +0 -14
- package/dist/tests/core/utilities/structures/shared.js.map +0 -1
- package/dist/tests/core/utilities/structures/sso.js +0 -132
- package/dist/tests/core/utilities/structures/sso.js.map +0 -1
- package/dist/tests/core/utilities/structures/tenants.js +0 -9
- package/dist/tests/core/utilities/structures/tenants.js.map +0 -1
- package/dist/tests/core/utilities/structures/userGroups.js +0 -13
- package/dist/tests/core/utilities/structures/userGroups.js.map +0 -1
- package/dist/tests/core/utilities/structures/users.js +0 -48
- package/dist/tests/core/utilities/structures/users.js.map +0 -1
- package/dist/tests/core/utilities/testContainerUtils.js +0 -84
- package/dist/tests/core/utilities/testContainerUtils.js.map +0 -1
- package/dist/tests/core/utilities/utils/index.js +0 -28
- package/dist/tests/core/utilities/utils/index.js.map +0 -1
- package/dist/tests/core/utilities/utils/time.js +0 -8
- package/dist/tests/core/utilities/utils/time.js.map +0 -1
- package/dist/tests/extra/DBTestConfiguration.js +0 -55
- package/dist/tests/extra/DBTestConfiguration.js.map +0 -1
- package/dist/tests/extra/index.js +0 -33
- package/dist/tests/extra/index.js.map +0 -1
- package/dist/tests/extra/testEnv.js +0 -127
- package/dist/tests/extra/testEnv.js.map +0 -1
- package/dist/tests/index.js +0 -18
- package/dist/tests/index.js.map +0 -1
- package/dist/tests/jestEnv.js +0 -8
- package/dist/tests/jestEnv.js.map +0 -1
- package/dist/tests/jestSetup.js +0 -28
- package/dist/tests/jestSetup.js.map +0 -1
- package/plugins.ts +0 -1
|
@@ -1,162 +0,0 @@
|
|
|
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 (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.doWithLock = exports.newRedlock = void 0;
|
|
39
|
-
const redlock_1 = __importDefault(require("redlock"));
|
|
40
|
-
const init_1 = require("./init");
|
|
41
|
-
const types_1 = require("@budibase/types");
|
|
42
|
-
const context = __importStar(require("../context"));
|
|
43
|
-
const environment_1 = __importDefault(require("../environment"));
|
|
44
|
-
function getClient(type, opts) {
|
|
45
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
if (type === types_1.LockType.CUSTOM) {
|
|
47
|
-
return newRedlock(opts);
|
|
48
|
-
}
|
|
49
|
-
if (environment_1.default.isTest() && type !== types_1.LockType.TRY_ONCE) {
|
|
50
|
-
return newRedlock(OPTIONS.TEST);
|
|
51
|
-
}
|
|
52
|
-
switch (type) {
|
|
53
|
-
case types_1.LockType.TRY_ONCE: {
|
|
54
|
-
return newRedlock(OPTIONS.TRY_ONCE);
|
|
55
|
-
}
|
|
56
|
-
case types_1.LockType.TRY_TWICE: {
|
|
57
|
-
return newRedlock(OPTIONS.TRY_TWICE);
|
|
58
|
-
}
|
|
59
|
-
case types_1.LockType.DEFAULT: {
|
|
60
|
-
return newRedlock(OPTIONS.DEFAULT);
|
|
61
|
-
}
|
|
62
|
-
case types_1.LockType.DELAY_500: {
|
|
63
|
-
return newRedlock(OPTIONS.DELAY_500);
|
|
64
|
-
}
|
|
65
|
-
default: {
|
|
66
|
-
throw new Error(`Could not get redlock client: ${type}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
const OPTIONS = {
|
|
72
|
-
TRY_ONCE: {
|
|
73
|
-
// immediately throws an error if the lock is already held
|
|
74
|
-
retryCount: 0,
|
|
75
|
-
},
|
|
76
|
-
TRY_TWICE: {
|
|
77
|
-
retryCount: 1,
|
|
78
|
-
},
|
|
79
|
-
TEST: {
|
|
80
|
-
// higher retry count in unit tests
|
|
81
|
-
// due to high contention.
|
|
82
|
-
retryCount: 100,
|
|
83
|
-
},
|
|
84
|
-
DEFAULT: {
|
|
85
|
-
// the expected clock drift; for more details
|
|
86
|
-
// see http://redis.io/topics/distlock
|
|
87
|
-
driftFactor: 0.01,
|
|
88
|
-
// the max number of times Redlock will attempt
|
|
89
|
-
// to lock a resource before erroring
|
|
90
|
-
retryCount: 10,
|
|
91
|
-
// the time in ms between attempts
|
|
92
|
-
retryDelay: 200,
|
|
93
|
-
// the max time in ms randomly added to retries
|
|
94
|
-
// to improve performance under high contention
|
|
95
|
-
// see https://www.awsarchitectureblog.com/2015/03/backoff.html
|
|
96
|
-
retryJitter: 100, // time in ms
|
|
97
|
-
},
|
|
98
|
-
DELAY_500: {
|
|
99
|
-
retryDelay: 500,
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
function newRedlock(opts = {}) {
|
|
103
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
let options = Object.assign(Object.assign({}, OPTIONS.DEFAULT), opts);
|
|
105
|
-
const redisWrapper = yield (0, init_1.getLockClient)();
|
|
106
|
-
const client = redisWrapper.getClient();
|
|
107
|
-
return new redlock_1.default([client], options);
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
exports.newRedlock = newRedlock;
|
|
111
|
-
function getLockName(opts) {
|
|
112
|
-
// determine lock name
|
|
113
|
-
// by default use the tenantId for uniqueness, unless using a system lock
|
|
114
|
-
const prefix = opts.systemLock ? "system" : context.getTenantId();
|
|
115
|
-
let name = `lock:${prefix}_${opts.name}`;
|
|
116
|
-
// add additional unique name if required
|
|
117
|
-
if (opts.resource) {
|
|
118
|
-
name = name + `_${opts.resource}`;
|
|
119
|
-
}
|
|
120
|
-
return name;
|
|
121
|
-
}
|
|
122
|
-
function doWithLock(opts, task) {
|
|
123
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
const redlock = yield getClient(opts.type, opts.customOptions);
|
|
125
|
-
let lock;
|
|
126
|
-
try {
|
|
127
|
-
const name = getLockName(opts);
|
|
128
|
-
// create the lock
|
|
129
|
-
lock = yield redlock.lock(name, opts.ttl);
|
|
130
|
-
// perform locked task
|
|
131
|
-
// need to await to ensure completion before unlocking
|
|
132
|
-
const result = yield task();
|
|
133
|
-
return { executed: true, result };
|
|
134
|
-
}
|
|
135
|
-
catch (e) {
|
|
136
|
-
console.warn("lock error");
|
|
137
|
-
// lock limit exceeded
|
|
138
|
-
if (e.name === "LockError") {
|
|
139
|
-
if (opts.type === types_1.LockType.TRY_ONCE) {
|
|
140
|
-
// don't throw for try-once locks, they will always error
|
|
141
|
-
// due to retry count (0) exceeded
|
|
142
|
-
return { executed: false };
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
console.error(e);
|
|
146
|
-
throw e;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
console.error(e);
|
|
151
|
-
throw e;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
finally {
|
|
155
|
-
if (lock) {
|
|
156
|
-
yield lock.unlock();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
exports.doWithLock = doWithLock;
|
|
162
|
-
//# sourceMappingURL=redlockImpl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redlockImpl.js","sourceRoot":"","sources":["../../../src/redis/redlockImpl.ts"],"names":[],"mappings":"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"}
|
package/dist/src/redis/utils.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
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.removeDbPrefix = exports.addDbPrefix = exports.getRedisOptions = exports.SelectableDatabase = exports.Databases = exports.SEPARATOR = void 0;
|
|
7
|
-
const environment_1 = __importDefault(require("../environment"));
|
|
8
|
-
const SLOT_REFRESH_MS = 2000;
|
|
9
|
-
const CONNECT_TIMEOUT_MS = 10000;
|
|
10
|
-
exports.SEPARATOR = "-";
|
|
11
|
-
/**
|
|
12
|
-
* These Redis databases help us to segment up a Redis keyspace by prepending the
|
|
13
|
-
* specified database name onto the cache key. This means that a single real Redis database
|
|
14
|
-
* can be split up a bit; allowing us to use scans on small databases to find some particular
|
|
15
|
-
* keys within.
|
|
16
|
-
* If writing a very large volume of keys is expected (say 10K+) then it is better to keep these out
|
|
17
|
-
* of the default keyspace and use a separate one - the SelectableDatabase can be used for this.
|
|
18
|
-
*/
|
|
19
|
-
var Databases;
|
|
20
|
-
(function (Databases) {
|
|
21
|
-
Databases["PW_RESETS"] = "pwReset";
|
|
22
|
-
Databases["VERIFICATIONS"] = "verification";
|
|
23
|
-
Databases["INVITATIONS"] = "invitation";
|
|
24
|
-
Databases["DEV_LOCKS"] = "devLocks";
|
|
25
|
-
Databases["DEBOUNCE"] = "debounce";
|
|
26
|
-
Databases["SESSIONS"] = "session";
|
|
27
|
-
Databases["USER_CACHE"] = "users";
|
|
28
|
-
Databases["FLAGS"] = "flags";
|
|
29
|
-
Databases["APP_METADATA"] = "appMetadata";
|
|
30
|
-
Databases["QUERY_VARS"] = "queryVars";
|
|
31
|
-
Databases["LICENSES"] = "license";
|
|
32
|
-
Databases["GENERIC_CACHE"] = "data_cache";
|
|
33
|
-
Databases["WRITE_THROUGH"] = "writeThrough";
|
|
34
|
-
Databases["LOCKS"] = "locks";
|
|
35
|
-
Databases["SOCKET_IO"] = "socket_io";
|
|
36
|
-
})(Databases = exports.Databases || (exports.Databases = {}));
|
|
37
|
-
/**
|
|
38
|
-
* These define the numeric Redis databases that can be access with the SELECT command -
|
|
39
|
-
* (https://redis.io/commands/select/). By default a Redis server/cluster will have 16 selectable
|
|
40
|
-
* databases, increasing this count increases the amount of CPU/memory required to run the server.
|
|
41
|
-
* Ideally new Redis keyspaces should be used sparingly, only when absolutely necessary for performance
|
|
42
|
-
* to be maintained. Generally a keyspace can grow to be very large is scans are not needed or desired,
|
|
43
|
-
* but if you need to walk through all values in a database periodically then a separate selectable
|
|
44
|
-
* keyspace should be used.
|
|
45
|
-
*/
|
|
46
|
-
var SelectableDatabase;
|
|
47
|
-
(function (SelectableDatabase) {
|
|
48
|
-
SelectableDatabase[SelectableDatabase["DEFAULT"] = 0] = "DEFAULT";
|
|
49
|
-
SelectableDatabase[SelectableDatabase["SOCKET_IO"] = 1] = "SOCKET_IO";
|
|
50
|
-
SelectableDatabase[SelectableDatabase["UNUSED_1"] = 2] = "UNUSED_1";
|
|
51
|
-
SelectableDatabase[SelectableDatabase["UNUSED_2"] = 3] = "UNUSED_2";
|
|
52
|
-
SelectableDatabase[SelectableDatabase["UNUSED_3"] = 4] = "UNUSED_3";
|
|
53
|
-
SelectableDatabase[SelectableDatabase["UNUSED_4"] = 5] = "UNUSED_4";
|
|
54
|
-
SelectableDatabase[SelectableDatabase["UNUSED_5"] = 6] = "UNUSED_5";
|
|
55
|
-
SelectableDatabase[SelectableDatabase["UNUSED_6"] = 7] = "UNUSED_6";
|
|
56
|
-
SelectableDatabase[SelectableDatabase["UNUSED_7"] = 8] = "UNUSED_7";
|
|
57
|
-
SelectableDatabase[SelectableDatabase["UNUSED_8"] = 9] = "UNUSED_8";
|
|
58
|
-
SelectableDatabase[SelectableDatabase["UNUSED_9"] = 10] = "UNUSED_9";
|
|
59
|
-
SelectableDatabase[SelectableDatabase["UNUSED_10"] = 11] = "UNUSED_10";
|
|
60
|
-
SelectableDatabase[SelectableDatabase["UNUSED_11"] = 12] = "UNUSED_11";
|
|
61
|
-
SelectableDatabase[SelectableDatabase["UNUSED_12"] = 13] = "UNUSED_12";
|
|
62
|
-
SelectableDatabase[SelectableDatabase["UNUSED_13"] = 14] = "UNUSED_13";
|
|
63
|
-
SelectableDatabase[SelectableDatabase["UNUSED_14"] = 15] = "UNUSED_14";
|
|
64
|
-
})(SelectableDatabase = exports.SelectableDatabase || (exports.SelectableDatabase = {}));
|
|
65
|
-
function getRedisOptions() {
|
|
66
|
-
let password = environment_1.default.REDIS_PASSWORD;
|
|
67
|
-
let url = environment_1.default.REDIS_URL.split("//");
|
|
68
|
-
// get rid of the protocol
|
|
69
|
-
url = url.length > 1 ? url[1] : url[0];
|
|
70
|
-
// check for a password etc
|
|
71
|
-
url = url.split("@");
|
|
72
|
-
if (url.length > 1) {
|
|
73
|
-
// get the password
|
|
74
|
-
password = url[0].split(":")[1];
|
|
75
|
-
url = url[1];
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
url = url[0];
|
|
79
|
-
}
|
|
80
|
-
const [host, port] = url.split(":");
|
|
81
|
-
let redisProtocolUrl;
|
|
82
|
-
// fully qualified redis URL
|
|
83
|
-
if (/rediss?:\/\//.test(environment_1.default.REDIS_URL)) {
|
|
84
|
-
redisProtocolUrl = environment_1.default.REDIS_URL;
|
|
85
|
-
}
|
|
86
|
-
const opts = {
|
|
87
|
-
connectTimeout: CONNECT_TIMEOUT_MS,
|
|
88
|
-
};
|
|
89
|
-
if (environment_1.default.REDIS_CLUSTERED) {
|
|
90
|
-
opts.redisOptions = {};
|
|
91
|
-
opts.redisOptions.tls = {};
|
|
92
|
-
opts.redisOptions.password = password;
|
|
93
|
-
opts.slotsRefreshTimeout = SLOT_REFRESH_MS;
|
|
94
|
-
opts.dnsLookup = (address, callback) => callback(null, address);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
opts.host = host;
|
|
98
|
-
opts.port = port;
|
|
99
|
-
opts.password = password;
|
|
100
|
-
}
|
|
101
|
-
return { opts, host, port: parseInt(port), redisProtocolUrl };
|
|
102
|
-
}
|
|
103
|
-
exports.getRedisOptions = getRedisOptions;
|
|
104
|
-
function addDbPrefix(db, key) {
|
|
105
|
-
if (key.includes(db)) {
|
|
106
|
-
return key;
|
|
107
|
-
}
|
|
108
|
-
return `${db}${exports.SEPARATOR}${key}`;
|
|
109
|
-
}
|
|
110
|
-
exports.addDbPrefix = addDbPrefix;
|
|
111
|
-
function removeDbPrefix(key) {
|
|
112
|
-
let parts = key.split(exports.SEPARATOR);
|
|
113
|
-
if (parts.length >= 2) {
|
|
114
|
-
parts.shift();
|
|
115
|
-
return parts.join(exports.SEPARATOR);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
// return the only part
|
|
119
|
-
return parts[0];
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
exports.removeDbPrefix = removeDbPrefix;
|
|
123
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/redis/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,163 +0,0 @@
|
|
|
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.decryptFile = exports.encryptFile = exports.decrypt = exports.encrypt = exports.getSecret = exports.SecretOption = void 0;
|
|
16
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
17
|
-
const fs_1 = __importDefault(require("fs"));
|
|
18
|
-
const zlib_1 = __importDefault(require("zlib"));
|
|
19
|
-
const environment_1 = __importDefault(require("../environment"));
|
|
20
|
-
const path_1 = require("path");
|
|
21
|
-
const ALGO = "aes-256-ctr";
|
|
22
|
-
const SEPARATOR = "-";
|
|
23
|
-
const ITERATIONS = 10000;
|
|
24
|
-
const STRETCH_LENGTH = 32;
|
|
25
|
-
const SALT_LENGTH = 16;
|
|
26
|
-
const IV_LENGTH = 16;
|
|
27
|
-
var SecretOption;
|
|
28
|
-
(function (SecretOption) {
|
|
29
|
-
SecretOption["API"] = "api";
|
|
30
|
-
SecretOption["ENCRYPTION"] = "encryption";
|
|
31
|
-
})(SecretOption = exports.SecretOption || (exports.SecretOption = {}));
|
|
32
|
-
function getSecret(secretOption) {
|
|
33
|
-
let secret, secretName;
|
|
34
|
-
switch (secretOption) {
|
|
35
|
-
case SecretOption.ENCRYPTION:
|
|
36
|
-
secret = environment_1.default.ENCRYPTION_KEY;
|
|
37
|
-
secretName = "ENCRYPTION_KEY";
|
|
38
|
-
break;
|
|
39
|
-
case SecretOption.API:
|
|
40
|
-
default:
|
|
41
|
-
secret = environment_1.default.API_ENCRYPTION_KEY;
|
|
42
|
-
secretName = "API_ENCRYPTION_KEY";
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
if (!secret) {
|
|
46
|
-
throw new Error(`Secret "${secretName}" has not been set in environment.`);
|
|
47
|
-
}
|
|
48
|
-
return secret;
|
|
49
|
-
}
|
|
50
|
-
exports.getSecret = getSecret;
|
|
51
|
-
function stretchString(secret, salt) {
|
|
52
|
-
return crypto_1.default.pbkdf2Sync(secret, salt, ITERATIONS, STRETCH_LENGTH, "sha512");
|
|
53
|
-
}
|
|
54
|
-
function encrypt(input, secretOption = SecretOption.API) {
|
|
55
|
-
const salt = crypto_1.default.randomBytes(SALT_LENGTH);
|
|
56
|
-
const stretched = stretchString(getSecret(secretOption), salt);
|
|
57
|
-
const cipher = crypto_1.default.createCipheriv(ALGO, stretched, salt);
|
|
58
|
-
const base = cipher.update(input);
|
|
59
|
-
const final = cipher.final();
|
|
60
|
-
const encrypted = Buffer.concat([base, final]).toString("hex");
|
|
61
|
-
return `${salt.toString("hex")}${SEPARATOR}${encrypted}`;
|
|
62
|
-
}
|
|
63
|
-
exports.encrypt = encrypt;
|
|
64
|
-
function decrypt(input, secretOption = SecretOption.API) {
|
|
65
|
-
const [salt, encrypted] = input.split(SEPARATOR);
|
|
66
|
-
const saltBuffer = Buffer.from(salt, "hex");
|
|
67
|
-
const stretched = stretchString(getSecret(secretOption), saltBuffer);
|
|
68
|
-
const decipher = crypto_1.default.createDecipheriv(ALGO, stretched, saltBuffer);
|
|
69
|
-
const base = decipher.update(Buffer.from(encrypted, "hex"));
|
|
70
|
-
const final = decipher.final();
|
|
71
|
-
return Buffer.concat([base, final]).toString();
|
|
72
|
-
}
|
|
73
|
-
exports.decrypt = decrypt;
|
|
74
|
-
function encryptFile({ dir, filename }, secret) {
|
|
75
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
const outputFileName = `${filename}.enc`;
|
|
77
|
-
const filePath = (0, path_1.join)(dir, filename);
|
|
78
|
-
const inputFile = fs_1.default.createReadStream(filePath);
|
|
79
|
-
const outputFile = fs_1.default.createWriteStream((0, path_1.join)(dir, outputFileName));
|
|
80
|
-
const salt = crypto_1.default.randomBytes(SALT_LENGTH);
|
|
81
|
-
const iv = crypto_1.default.randomBytes(IV_LENGTH);
|
|
82
|
-
const stretched = stretchString(secret, salt);
|
|
83
|
-
const cipher = crypto_1.default.createCipheriv(ALGO, stretched, iv);
|
|
84
|
-
outputFile.write(salt);
|
|
85
|
-
outputFile.write(iv);
|
|
86
|
-
inputFile.pipe(zlib_1.default.createGzip()).pipe(cipher).pipe(outputFile);
|
|
87
|
-
return new Promise(r => {
|
|
88
|
-
outputFile.on("finish", () => {
|
|
89
|
-
r({
|
|
90
|
-
filename: outputFileName,
|
|
91
|
-
dir,
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
exports.encryptFile = encryptFile;
|
|
98
|
-
function getSaltAndIV(path) {
|
|
99
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
-
const fileStream = fs_1.default.createReadStream(path);
|
|
101
|
-
const salt = yield readBytes(fileStream, SALT_LENGTH);
|
|
102
|
-
const iv = yield readBytes(fileStream, IV_LENGTH);
|
|
103
|
-
fileStream.close();
|
|
104
|
-
return { salt, iv };
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
function decryptFile(inputPath, outputPath, secret) {
|
|
108
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
const { salt, iv } = yield getSaltAndIV(inputPath);
|
|
110
|
-
const inputFile = fs_1.default.createReadStream(inputPath, {
|
|
111
|
-
start: SALT_LENGTH + IV_LENGTH,
|
|
112
|
-
});
|
|
113
|
-
const outputFile = fs_1.default.createWriteStream(outputPath);
|
|
114
|
-
const stretched = stretchString(secret, salt);
|
|
115
|
-
const decipher = crypto_1.default.createDecipheriv(ALGO, stretched, iv);
|
|
116
|
-
const unzip = zlib_1.default.createGunzip();
|
|
117
|
-
inputFile.pipe(decipher).pipe(unzip).pipe(outputFile);
|
|
118
|
-
return new Promise((res, rej) => {
|
|
119
|
-
outputFile.on("finish", () => {
|
|
120
|
-
outputFile.close();
|
|
121
|
-
res();
|
|
122
|
-
});
|
|
123
|
-
inputFile.on("error", e => {
|
|
124
|
-
outputFile.close();
|
|
125
|
-
rej(e);
|
|
126
|
-
});
|
|
127
|
-
decipher.on("error", e => {
|
|
128
|
-
outputFile.close();
|
|
129
|
-
rej(e);
|
|
130
|
-
});
|
|
131
|
-
unzip.on("error", e => {
|
|
132
|
-
outputFile.close();
|
|
133
|
-
rej(e);
|
|
134
|
-
});
|
|
135
|
-
outputFile.on("error", e => {
|
|
136
|
-
outputFile.close();
|
|
137
|
-
rej(e);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
exports.decryptFile = decryptFile;
|
|
143
|
-
function readBytes(stream, length) {
|
|
144
|
-
return new Promise((resolve, reject) => {
|
|
145
|
-
let bytesRead = 0;
|
|
146
|
-
const data = [];
|
|
147
|
-
stream.on("readable", () => {
|
|
148
|
-
let chunk;
|
|
149
|
-
while ((chunk = stream.read(length - bytesRead)) !== null) {
|
|
150
|
-
data.push(chunk);
|
|
151
|
-
bytesRead += chunk.length;
|
|
152
|
-
}
|
|
153
|
-
resolve(Buffer.concat(data));
|
|
154
|
-
});
|
|
155
|
-
stream.on("end", () => {
|
|
156
|
-
reject(new Error("Insufficient data in the stream."));
|
|
157
|
-
});
|
|
158
|
-
stream.on("error", error => {
|
|
159
|
-
reject(error);
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=encryption.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../../src/security/encryption.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,151 +0,0 @@
|
|
|
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.GLOBAL_BUILDER = exports.BUILDER = exports.isPermissionLevelHigherThanRead = exports.doesHaveBasePermission = exports.getBuiltinPermissionByID = exports.getBuiltinPermissions = exports.BUILTIN_PERMISSIONS = exports.BuiltinPermissionID = exports.getAllowedLevels = exports.levelToNumber = exports.Permission = exports.PermissionLevel = exports.PermissionType = void 0;
|
|
7
|
-
const types_1 = require("@budibase/types");
|
|
8
|
-
var types_2 = require("@budibase/types");
|
|
9
|
-
Object.defineProperty(exports, "PermissionType", { enumerable: true, get: function () { return types_2.PermissionType; } });
|
|
10
|
-
Object.defineProperty(exports, "PermissionLevel", { enumerable: true, get: function () { return types_2.PermissionLevel; } });
|
|
11
|
-
const flatten_1 = __importDefault(require("lodash/flatten"));
|
|
12
|
-
const cloneDeep_1 = __importDefault(require("lodash/fp/cloneDeep"));
|
|
13
|
-
class Permission {
|
|
14
|
-
constructor(type, level) {
|
|
15
|
-
this.type = type;
|
|
16
|
-
this.level = level;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
exports.Permission = Permission;
|
|
20
|
-
function levelToNumber(perm) {
|
|
21
|
-
switch (perm) {
|
|
22
|
-
// not everything has execute privileges
|
|
23
|
-
case types_1.PermissionLevel.EXECUTE:
|
|
24
|
-
return 0;
|
|
25
|
-
case types_1.PermissionLevel.READ:
|
|
26
|
-
return 1;
|
|
27
|
-
case types_1.PermissionLevel.WRITE:
|
|
28
|
-
return 2;
|
|
29
|
-
case types_1.PermissionLevel.ADMIN:
|
|
30
|
-
return 3;
|
|
31
|
-
default:
|
|
32
|
-
return -1;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.levelToNumber = levelToNumber;
|
|
36
|
-
/**
|
|
37
|
-
* Given the specified permission level for the user return the levels they are allowed to carry out.
|
|
38
|
-
* @param {string} userPermLevel The permission level of the user.
|
|
39
|
-
* @return {string[]} All the permission levels this user is allowed to carry out.
|
|
40
|
-
*/
|
|
41
|
-
function getAllowedLevels(userPermLevel) {
|
|
42
|
-
switch (userPermLevel) {
|
|
43
|
-
case types_1.PermissionLevel.EXECUTE:
|
|
44
|
-
return [types_1.PermissionLevel.EXECUTE];
|
|
45
|
-
case types_1.PermissionLevel.READ:
|
|
46
|
-
return [types_1.PermissionLevel.EXECUTE, types_1.PermissionLevel.READ];
|
|
47
|
-
case types_1.PermissionLevel.WRITE:
|
|
48
|
-
case types_1.PermissionLevel.ADMIN:
|
|
49
|
-
return [
|
|
50
|
-
types_1.PermissionLevel.EXECUTE,
|
|
51
|
-
types_1.PermissionLevel.READ,
|
|
52
|
-
types_1.PermissionLevel.WRITE,
|
|
53
|
-
];
|
|
54
|
-
default:
|
|
55
|
-
return [];
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
exports.getAllowedLevels = getAllowedLevels;
|
|
59
|
-
var BuiltinPermissionID;
|
|
60
|
-
(function (BuiltinPermissionID) {
|
|
61
|
-
BuiltinPermissionID["PUBLIC"] = "public";
|
|
62
|
-
BuiltinPermissionID["READ_ONLY"] = "read_only";
|
|
63
|
-
BuiltinPermissionID["WRITE"] = "write";
|
|
64
|
-
BuiltinPermissionID["ADMIN"] = "admin";
|
|
65
|
-
BuiltinPermissionID["POWER"] = "power";
|
|
66
|
-
})(BuiltinPermissionID = exports.BuiltinPermissionID || (exports.BuiltinPermissionID = {}));
|
|
67
|
-
exports.BUILTIN_PERMISSIONS = {
|
|
68
|
-
PUBLIC: {
|
|
69
|
-
_id: BuiltinPermissionID.PUBLIC,
|
|
70
|
-
name: "Public",
|
|
71
|
-
permissions: [
|
|
72
|
-
new Permission(types_1.PermissionType.WEBHOOK, types_1.PermissionLevel.EXECUTE),
|
|
73
|
-
],
|
|
74
|
-
},
|
|
75
|
-
READ_ONLY: {
|
|
76
|
-
_id: BuiltinPermissionID.READ_ONLY,
|
|
77
|
-
name: "Read only",
|
|
78
|
-
permissions: [
|
|
79
|
-
new Permission(types_1.PermissionType.QUERY, types_1.PermissionLevel.READ),
|
|
80
|
-
new Permission(types_1.PermissionType.TABLE, types_1.PermissionLevel.READ),
|
|
81
|
-
new Permission(types_1.PermissionType.VIEW, types_1.PermissionLevel.READ),
|
|
82
|
-
],
|
|
83
|
-
},
|
|
84
|
-
WRITE: {
|
|
85
|
-
_id: BuiltinPermissionID.WRITE,
|
|
86
|
-
name: "Read/Write",
|
|
87
|
-
permissions: [
|
|
88
|
-
new Permission(types_1.PermissionType.QUERY, types_1.PermissionLevel.WRITE),
|
|
89
|
-
new Permission(types_1.PermissionType.TABLE, types_1.PermissionLevel.WRITE),
|
|
90
|
-
new Permission(types_1.PermissionType.VIEW, types_1.PermissionLevel.READ),
|
|
91
|
-
new Permission(types_1.PermissionType.AUTOMATION, types_1.PermissionLevel.EXECUTE),
|
|
92
|
-
],
|
|
93
|
-
},
|
|
94
|
-
POWER: {
|
|
95
|
-
_id: BuiltinPermissionID.POWER,
|
|
96
|
-
name: "Power",
|
|
97
|
-
permissions: [
|
|
98
|
-
new Permission(types_1.PermissionType.TABLE, types_1.PermissionLevel.WRITE),
|
|
99
|
-
new Permission(types_1.PermissionType.USER, types_1.PermissionLevel.READ),
|
|
100
|
-
new Permission(types_1.PermissionType.AUTOMATION, types_1.PermissionLevel.EXECUTE),
|
|
101
|
-
new Permission(types_1.PermissionType.VIEW, types_1.PermissionLevel.READ),
|
|
102
|
-
new Permission(types_1.PermissionType.WEBHOOK, types_1.PermissionLevel.READ),
|
|
103
|
-
],
|
|
104
|
-
},
|
|
105
|
-
ADMIN: {
|
|
106
|
-
_id: BuiltinPermissionID.ADMIN,
|
|
107
|
-
name: "Admin",
|
|
108
|
-
permissions: [
|
|
109
|
-
new Permission(types_1.PermissionType.TABLE, types_1.PermissionLevel.ADMIN),
|
|
110
|
-
new Permission(types_1.PermissionType.USER, types_1.PermissionLevel.ADMIN),
|
|
111
|
-
new Permission(types_1.PermissionType.AUTOMATION, types_1.PermissionLevel.ADMIN),
|
|
112
|
-
new Permission(types_1.PermissionType.VIEW, types_1.PermissionLevel.ADMIN),
|
|
113
|
-
new Permission(types_1.PermissionType.WEBHOOK, types_1.PermissionLevel.READ),
|
|
114
|
-
new Permission(types_1.PermissionType.QUERY, types_1.PermissionLevel.ADMIN),
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
function getBuiltinPermissions() {
|
|
119
|
-
return (0, cloneDeep_1.default)(exports.BUILTIN_PERMISSIONS);
|
|
120
|
-
}
|
|
121
|
-
exports.getBuiltinPermissions = getBuiltinPermissions;
|
|
122
|
-
function getBuiltinPermissionByID(id) {
|
|
123
|
-
const perms = Object.values(exports.BUILTIN_PERMISSIONS);
|
|
124
|
-
return perms.find(perm => perm._id === id);
|
|
125
|
-
}
|
|
126
|
-
exports.getBuiltinPermissionByID = getBuiltinPermissionByID;
|
|
127
|
-
function doesHaveBasePermission(permType, permLevel, rolesHierarchy) {
|
|
128
|
-
const basePermissions = [
|
|
129
|
-
...new Set(rolesHierarchy.map(role => role.permissionId)),
|
|
130
|
-
];
|
|
131
|
-
const builtins = Object.values(exports.BUILTIN_PERMISSIONS);
|
|
132
|
-
let permissions = (0, flatten_1.default)(builtins
|
|
133
|
-
.filter(builtin => basePermissions.indexOf(builtin._id) !== -1)
|
|
134
|
-
.map(builtin => builtin.permissions));
|
|
135
|
-
for (let permission of permissions) {
|
|
136
|
-
if (permission.type === permType &&
|
|
137
|
-
getAllowedLevels(permission.level).indexOf(permLevel) !== -1) {
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
exports.doesHaveBasePermission = doesHaveBasePermission;
|
|
144
|
-
function isPermissionLevelHigherThanRead(level) {
|
|
145
|
-
return levelToNumber(level) > 1;
|
|
146
|
-
}
|
|
147
|
-
exports.isPermissionLevelHigherThanRead = isPermissionLevelHigherThanRead;
|
|
148
|
-
// utility as a lot of things need simply the builder permission
|
|
149
|
-
exports.BUILDER = types_1.PermissionType.BUILDER;
|
|
150
|
-
exports.GLOBAL_BUILDER = types_1.PermissionType.GLOBAL_BUILDER;
|
|
151
|
-
//# sourceMappingURL=permissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/security/permissions.ts"],"names":[],"mappings":"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"}
|