@budibase/backend-core 2.9.40-alpha.6 → 2.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +5 -4
- package/dist/index.js.map +2 -2
- package/dist/index.js.meta.json +1 -1
- package/dist/package.json +6 -6
- package/dist/src/cache/appMetadata.js +1 -1
- package/dist/src/cache/appMetadata.js.map +1 -1
- package/dist/src/constants/misc.d.ts +0 -2
- package/dist/src/constants/misc.js +0 -2
- package/dist/src/constants/misc.js.map +1 -1
- package/dist/src/environment.js +5 -4
- package/dist/src/environment.js.map +1 -1
- package/dist/src/logging/system.d.ts +1 -1
- package/dist/src/timers/timers.d.ts +1 -1
- package/package.json +6 -6
- package/src/accounts/accounts.ts +82 -0
- package/src/accounts/api.ts +59 -0
- package/src/accounts/index.ts +1 -0
- package/src/auth/auth.ts +208 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/tests/auth.spec.ts +14 -0
- package/src/blacklist/blacklist.ts +54 -0
- package/src/blacklist/index.ts +1 -0
- package/src/blacklist/tests/blacklist.spec.ts +46 -0
- package/src/cache/appMetadata.ts +88 -0
- package/src/cache/base/index.ts +92 -0
- package/src/cache/generic.ts +30 -0
- package/src/cache/index.ts +5 -0
- package/src/cache/tests/writethrough.spec.ts +138 -0
- package/src/cache/user.ts +83 -0
- package/src/cache/writethrough.ts +133 -0
- package/src/configs/configs.ts +257 -0
- package/src/configs/index.ts +1 -0
- package/src/configs/tests/configs.spec.ts +184 -0
- package/src/constants/db.ts +63 -0
- package/src/constants/index.ts +2 -0
- package/src/constants/misc.ts +50 -0
- package/src/context/Context.ts +14 -0
- package/src/context/identity.ts +58 -0
- package/src/context/index.ts +3 -0
- package/src/context/mainContext.ts +310 -0
- package/src/context/tests/index.spec.ts +147 -0
- package/src/context/types.ts +11 -0
- package/src/db/Replication.ts +84 -0
- package/src/db/constants.ts +10 -0
- package/src/db/couch/DatabaseImpl.ts +238 -0
- package/src/db/couch/connections.ts +77 -0
- package/src/db/couch/index.ts +5 -0
- package/src/db/couch/pouchDB.ts +97 -0
- package/src/db/couch/pouchDump.ts +0 -0
- package/src/db/couch/utils.ts +50 -0
- package/src/db/db.ts +43 -0
- package/src/db/errors.ts +14 -0
- package/src/db/index.ts +12 -0
- package/src/db/lucene.ts +750 -0
- package/src/db/searchIndexes/index.ts +1 -0
- package/src/db/searchIndexes/searchIndexes.ts +62 -0
- package/src/db/tests/index.spec.js +25 -0
- package/src/db/tests/lucene.spec.ts +368 -0
- package/src/db/tests/pouch.spec.js +62 -0
- package/src/db/tests/utils.spec.ts +63 -0
- package/src/db/utils.ts +207 -0
- package/src/db/views.ts +241 -0
- package/src/docIds/conversions.ts +59 -0
- package/src/docIds/ids.ts +113 -0
- package/src/docIds/index.ts +2 -0
- package/src/docIds/newid.ts +5 -0
- package/src/docIds/params.ts +174 -0
- package/src/docUpdates/index.ts +29 -0
- package/src/environment.ts +201 -0
- package/src/errors/errors.ts +119 -0
- package/src/errors/index.ts +1 -0
- package/src/events/analytics.ts +6 -0
- package/src/events/asyncEvents/index.ts +2 -0
- package/src/events/asyncEvents/publisher.ts +12 -0
- package/src/events/asyncEvents/queue.ts +22 -0
- package/src/events/backfill.ts +183 -0
- package/src/events/documentId.ts +56 -0
- package/src/events/events.ts +40 -0
- package/src/events/identification.ts +310 -0
- package/src/events/index.ts +14 -0
- package/src/events/processors/AnalyticsProcessor.ts +64 -0
- package/src/events/processors/AuditLogsProcessor.ts +93 -0
- package/src/events/processors/LoggingProcessor.ts +37 -0
- package/src/events/processors/Processors.ts +52 -0
- package/src/events/processors/async/DocumentUpdateProcessor.ts +43 -0
- package/src/events/processors/index.ts +19 -0
- package/src/events/processors/posthog/PosthogProcessor.ts +118 -0
- package/src/events/processors/posthog/index.ts +2 -0
- package/src/events/processors/posthog/rateLimiting.ts +106 -0
- package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +168 -0
- package/src/events/processors/types.ts +1 -0
- package/src/events/publishers/account.ts +35 -0
- package/src/events/publishers/app.ts +155 -0
- package/src/events/publishers/auditLog.ts +26 -0
- package/src/events/publishers/auth.ts +73 -0
- package/src/events/publishers/automation.ts +110 -0
- package/src/events/publishers/backfill.ts +74 -0
- package/src/events/publishers/backup.ts +42 -0
- package/src/events/publishers/datasource.ts +48 -0
- package/src/events/publishers/email.ts +17 -0
- package/src/events/publishers/environmentVariable.ts +38 -0
- package/src/events/publishers/group.ts +99 -0
- package/src/events/publishers/index.ts +24 -0
- package/src/events/publishers/installation.ts +38 -0
- package/src/events/publishers/layout.ts +26 -0
- package/src/events/publishers/license.ts +84 -0
- package/src/events/publishers/org.ts +37 -0
- package/src/events/publishers/plugin.ts +47 -0
- package/src/events/publishers/query.ts +88 -0
- package/src/events/publishers/role.ts +62 -0
- package/src/events/publishers/rows.ts +29 -0
- package/src/events/publishers/screen.ts +36 -0
- package/src/events/publishers/serve.ts +43 -0
- package/src/events/publishers/table.ts +70 -0
- package/src/events/publishers/user.ts +202 -0
- package/src/events/publishers/view.ts +107 -0
- package/src/features/index.ts +78 -0
- package/src/features/installation.ts +17 -0
- package/src/features/tests/featureFlags.spec.ts +85 -0
- package/src/helpers.ts +9 -0
- package/src/index.ts +54 -0
- package/src/installation.ts +107 -0
- package/src/logging/alerts.ts +26 -0
- package/src/logging/correlation/correlation.ts +13 -0
- package/src/logging/correlation/index.ts +1 -0
- package/src/logging/correlation/middleware.ts +17 -0
- package/src/logging/index.ts +4 -0
- package/src/logging/pino/logger.ts +232 -0
- package/src/logging/pino/middleware.ts +45 -0
- package/src/logging/system.ts +81 -0
- package/src/logging/tests/system.spec.ts +61 -0
- package/src/middleware/adminOnly.ts +9 -0
- package/src/middleware/auditLog.ts +6 -0
- package/src/middleware/authenticated.ts +193 -0
- package/src/middleware/builderOnly.ts +21 -0
- package/src/middleware/builderOrAdmin.ts +21 -0
- package/src/middleware/csrf.ts +81 -0
- package/src/middleware/errorHandling.ts +29 -0
- package/src/middleware/index.ts +21 -0
- package/src/middleware/internalApi.ts +23 -0
- package/src/middleware/joi-validator.ts +45 -0
- package/src/middleware/matchers.ts +47 -0
- package/src/middleware/passport/datasource/google.ts +95 -0
- package/src/middleware/passport/local.ts +54 -0
- package/src/middleware/passport/sso/google.ts +77 -0
- package/src/middleware/passport/sso/oidc.ts +154 -0
- package/src/middleware/passport/sso/sso.ts +165 -0
- package/src/middleware/passport/sso/tests/google.spec.ts +67 -0
- package/src/middleware/passport/sso/tests/oidc.spec.ts +152 -0
- package/src/middleware/passport/sso/tests/sso.spec.ts +197 -0
- package/src/middleware/passport/utils.ts +38 -0
- package/src/middleware/querystringToBody.ts +28 -0
- package/src/middleware/tenancy.ts +36 -0
- package/src/middleware/tests/builder.spec.ts +180 -0
- package/src/middleware/tests/matchers.spec.ts +134 -0
- package/src/migrations/definitions.ts +40 -0
- package/src/migrations/index.ts +2 -0
- package/src/migrations/migrations.ts +191 -0
- package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +11 -0
- package/src/migrations/tests/migrations.spec.ts +64 -0
- package/src/objectStore/buckets/app.ts +40 -0
- package/src/objectStore/buckets/global.ts +29 -0
- package/src/objectStore/buckets/index.ts +3 -0
- package/src/objectStore/buckets/plugins.ts +71 -0
- package/src/objectStore/buckets/tests/app.spec.ts +171 -0
- package/src/objectStore/buckets/tests/global.spec.ts +74 -0
- package/src/objectStore/buckets/tests/plugins.spec.ts +111 -0
- package/src/objectStore/cloudfront.ts +41 -0
- package/src/objectStore/index.ts +3 -0
- package/src/objectStore/objectStore.ts +440 -0
- package/src/objectStore/utils.ts +27 -0
- package/src/platform/index.ts +3 -0
- package/src/platform/platformDb.ts +6 -0
- package/src/platform/tenants.ts +101 -0
- package/src/platform/tests/tenants.spec.ts +26 -0
- package/src/platform/users.ts +90 -0
- package/src/plugin/index.ts +1 -0
- package/src/plugin/tests/validation.spec.ts +83 -0
- package/src/plugin/utils.ts +156 -0
- package/src/queue/constants.ts +6 -0
- package/src/queue/inMemoryQueue.ts +141 -0
- package/src/queue/index.ts +2 -0
- package/src/queue/listeners.ts +195 -0
- package/src/queue/queue.ts +54 -0
- package/src/redis/index.ts +6 -0
- package/src/redis/init.ts +86 -0
- package/src/redis/redis.ts +308 -0
- package/src/redis/redlockImpl.ts +139 -0
- package/src/redis/utils.ts +117 -0
- package/src/security/encryption.ts +179 -0
- package/src/security/permissions.ts +158 -0
- package/src/security/roles.ts +389 -0
- package/src/security/sessions.ts +120 -0
- package/src/security/tests/encryption.spec.ts +31 -0
- package/src/security/tests/permissions.spec.ts +145 -0
- package/src/security/tests/sessions.spec.ts +12 -0
- package/src/tenancy/db.ts +6 -0
- package/src/tenancy/index.ts +2 -0
- package/src/tenancy/tenancy.ts +140 -0
- package/src/tenancy/tests/tenancy.spec.ts +184 -0
- package/src/timers/index.ts +1 -0
- package/src/timers/timers.ts +22 -0
- package/src/users/db.ts +484 -0
- package/src/users/events.ts +176 -0
- package/src/users/index.ts +4 -0
- package/src/users/lookup.ts +102 -0
- package/src/users/users.ts +276 -0
- package/src/users/utils.ts +55 -0
- package/src/utils/hashing.ts +14 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/stringUtils.ts +8 -0
- package/src/utils/tests/utils.spec.ts +191 -0
- package/src/utils/utils.ts +239 -0
- package/tests/core/logging.ts +34 -0
- package/tests/core/utilities/index.ts +6 -0
- package/tests/core/utilities/jestUtils.ts +30 -0
- package/tests/core/utilities/mocks/alerts.ts +3 -0
- package/tests/core/utilities/mocks/date.ts +2 -0
- package/tests/core/utilities/mocks/events.ts +131 -0
- package/tests/core/utilities/mocks/fetch.ts +17 -0
- package/tests/core/utilities/mocks/index.ts +10 -0
- package/tests/core/utilities/mocks/licenses.ts +115 -0
- package/tests/core/utilities/mocks/posthog.ts +7 -0
- package/tests/core/utilities/structures/Chance.ts +20 -0
- package/tests/core/utilities/structures/accounts.ts +115 -0
- package/tests/core/utilities/structures/apps.ts +21 -0
- package/tests/core/utilities/structures/common.ts +7 -0
- package/tests/core/utilities/structures/db.ts +12 -0
- package/tests/core/utilities/structures/documents/index.ts +1 -0
- package/tests/core/utilities/structures/documents/platform/index.ts +1 -0
- package/tests/core/utilities/structures/documents/platform/installation.ts +12 -0
- package/tests/core/utilities/structures/generator.ts +2 -0
- package/tests/core/utilities/structures/index.ts +15 -0
- package/tests/core/utilities/structures/koa.ts +16 -0
- package/tests/core/utilities/structures/licenses.ts +167 -0
- package/tests/core/utilities/structures/plugins.ts +19 -0
- package/tests/core/utilities/structures/quotas.ts +67 -0
- package/tests/core/utilities/structures/scim.ts +80 -0
- package/tests/core/utilities/structures/shared.ts +19 -0
- package/tests/core/utilities/structures/sso.ts +119 -0
- package/tests/core/utilities/structures/tenants.ts +5 -0
- package/tests/core/utilities/structures/userGroups.ts +10 -0
- package/tests/core/utilities/structures/users.ts +73 -0
- package/tests/core/utilities/testContainerUtils.ts +85 -0
- package/tests/core/utilities/utils/index.ts +1 -0
- package/tests/core/utilities/utils/time.ts +3 -0
- package/tests/extra/DBTestConfiguration.ts +36 -0
- package/tests/extra/index.ts +2 -0
- package/tests/extra/testEnv.ts +95 -0
- package/tests/index.ts +1 -0
- package/tests/jestEnv.ts +6 -0
- package/tests/jestSetup.ts +28 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AdminUser,
|
|
3
|
+
AdminOnlyUser,
|
|
4
|
+
BuilderUser,
|
|
5
|
+
SSOAuthDetails,
|
|
6
|
+
SSOUser,
|
|
7
|
+
} from "@budibase/types"
|
|
8
|
+
import { user } from "./shared"
|
|
9
|
+
import { authDetails } from "./sso"
|
|
10
|
+
|
|
11
|
+
export { user, newEmail } from "./shared"
|
|
12
|
+
|
|
13
|
+
export const adminUser = (userProps?: any): AdminUser => {
|
|
14
|
+
return {
|
|
15
|
+
...user(userProps),
|
|
16
|
+
admin: {
|
|
17
|
+
global: true,
|
|
18
|
+
},
|
|
19
|
+
builder: {
|
|
20
|
+
global: true,
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const adminOnlyUser = (userProps?: any): AdminOnlyUser => {
|
|
26
|
+
return {
|
|
27
|
+
...user(userProps),
|
|
28
|
+
admin: {
|
|
29
|
+
global: true,
|
|
30
|
+
},
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const builderUser = (userProps?: any): BuilderUser => {
|
|
35
|
+
return {
|
|
36
|
+
...user(userProps),
|
|
37
|
+
builder: {
|
|
38
|
+
global: true,
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const appBuilderUser = (appId: string, userProps?: any): BuilderUser => {
|
|
44
|
+
return {
|
|
45
|
+
...user(userProps),
|
|
46
|
+
builder: {
|
|
47
|
+
apps: [appId],
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function ssoUser(
|
|
53
|
+
opts: { user?: any; details?: SSOAuthDetails } = {}
|
|
54
|
+
): SSOUser {
|
|
55
|
+
const base = user(opts.user)
|
|
56
|
+
delete base.password
|
|
57
|
+
|
|
58
|
+
if (!opts.details) {
|
|
59
|
+
opts.details = authDetails(base)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
...base,
|
|
64
|
+
forceResetPassword: false,
|
|
65
|
+
oauth2: opts.details?.oauth2,
|
|
66
|
+
provider: opts.details?.provider!,
|
|
67
|
+
providerType: opts.details?.providerType!,
|
|
68
|
+
thirdPartyProfile: {
|
|
69
|
+
email: base.email,
|
|
70
|
+
picture: base.pictureUrl,
|
|
71
|
+
},
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { execSync } from "child_process"
|
|
2
|
+
|
|
3
|
+
let dockerPsResult: string | undefined
|
|
4
|
+
|
|
5
|
+
function formatDockerPsResult(serverName: string, port: number) {
|
|
6
|
+
const lines = dockerPsResult?.split("\n")
|
|
7
|
+
let first = true
|
|
8
|
+
if (!lines) {
|
|
9
|
+
return null
|
|
10
|
+
}
|
|
11
|
+
for (let line of lines) {
|
|
12
|
+
if (first) {
|
|
13
|
+
first = false
|
|
14
|
+
continue
|
|
15
|
+
}
|
|
16
|
+
let toLookFor = serverName.split("-service")[0]
|
|
17
|
+
if (!line.includes(toLookFor)) {
|
|
18
|
+
continue
|
|
19
|
+
}
|
|
20
|
+
const regex = new RegExp(`0.0.0.0:([0-9]*)->${port}`, "g")
|
|
21
|
+
const found = line.match(regex)
|
|
22
|
+
if (found) {
|
|
23
|
+
return found[0].split(":")[1].split("->")[0]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return null
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getTestContainerSettings(
|
|
30
|
+
serverName: string,
|
|
31
|
+
key: string
|
|
32
|
+
): string | null {
|
|
33
|
+
const entry = Object.entries(global).find(
|
|
34
|
+
([k]) =>
|
|
35
|
+
k.includes(`${serverName.toUpperCase()}`) &&
|
|
36
|
+
k.includes(`${key.toUpperCase()}`)
|
|
37
|
+
)
|
|
38
|
+
if (!entry) {
|
|
39
|
+
return null
|
|
40
|
+
}
|
|
41
|
+
return entry[1]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function getContainerInfo(containerName: string, port: number) {
|
|
45
|
+
let assignedPort = getTestContainerSettings(
|
|
46
|
+
containerName.toUpperCase(),
|
|
47
|
+
`PORT_${port}`
|
|
48
|
+
)
|
|
49
|
+
if (!dockerPsResult) {
|
|
50
|
+
try {
|
|
51
|
+
const outputBuffer = execSync("docker ps")
|
|
52
|
+
dockerPsResult = outputBuffer.toString("utf8")
|
|
53
|
+
} catch (err) {
|
|
54
|
+
//no-op
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const possiblePort = formatDockerPsResult(containerName, port)
|
|
58
|
+
if (possiblePort) {
|
|
59
|
+
assignedPort = possiblePort
|
|
60
|
+
}
|
|
61
|
+
const host = getTestContainerSettings(containerName.toUpperCase(), "IP")
|
|
62
|
+
return {
|
|
63
|
+
port: assignedPort,
|
|
64
|
+
host,
|
|
65
|
+
url: host && assignedPort && `http://${host}:${assignedPort}`,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function getCouchConfig() {
|
|
70
|
+
return getContainerInfo("couchdb", 5984)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function setupEnv(...envs: any[]) {
|
|
74
|
+
const couch = getCouchConfig()
|
|
75
|
+
const configs = [
|
|
76
|
+
{ key: "COUCH_DB_PORT", value: couch.port },
|
|
77
|
+
{ key: "COUCH_DB_URL", value: couch.url },
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
for (const config of configs.filter(x => !!x.value)) {
|
|
81
|
+
for (const env of envs) {
|
|
82
|
+
env._set(config.key, config.value)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as time from "./time"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import "../core/utilities/mocks"
|
|
2
|
+
import * as structures from "../core/utilities/structures"
|
|
3
|
+
import * as testEnv from "./testEnv"
|
|
4
|
+
import * as context from "../../src/context"
|
|
5
|
+
|
|
6
|
+
class DBTestConfiguration {
|
|
7
|
+
tenantId: string
|
|
8
|
+
|
|
9
|
+
constructor() {
|
|
10
|
+
// db tests need to be multi tenant to prevent conflicts
|
|
11
|
+
testEnv.multiTenant()
|
|
12
|
+
this.tenantId = structures.tenant.id()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
newTenant() {
|
|
16
|
+
this.tenantId = structures.tenant.id()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// TENANCY
|
|
20
|
+
|
|
21
|
+
doInTenant(task: any) {
|
|
22
|
+
return context.doInTenant(this.tenantId, () => {
|
|
23
|
+
return task()
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
getTenantId() {
|
|
28
|
+
try {
|
|
29
|
+
return context.getTenantId()
|
|
30
|
+
} catch (e) {
|
|
31
|
+
return this.tenantId!
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default DBTestConfiguration
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import env from "../../src/environment"
|
|
2
|
+
import * as context from "../../src/context"
|
|
3
|
+
import * as structures from "../core/utilities/structures"
|
|
4
|
+
|
|
5
|
+
// TENANCY
|
|
6
|
+
|
|
7
|
+
export async function withTenant(task: (tenantId: string) => any) {
|
|
8
|
+
const tenantId = structures.tenant.id()
|
|
9
|
+
return context.doInTenant(tenantId, async () => {
|
|
10
|
+
await task(tenantId)
|
|
11
|
+
})
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function singleTenant() {
|
|
15
|
+
env._set("MULTI_TENANCY", 0)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function multiTenant() {
|
|
19
|
+
env._set("MULTI_TENANCY", 1)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function selfHosted() {
|
|
23
|
+
env._set("SELF_HOSTED", 1)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function cloudHosted() {
|
|
27
|
+
env._set("SELF_HOSTED", 0)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// NODE
|
|
31
|
+
|
|
32
|
+
export function nodeDev() {
|
|
33
|
+
env._set("NODE_ENV", "dev")
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function nodeJest() {
|
|
37
|
+
env._set("NODE_ENV", "jest")
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// FILES
|
|
41
|
+
|
|
42
|
+
export function withS3() {
|
|
43
|
+
env._set("NODE_ENV", "production")
|
|
44
|
+
env._set("MINIO_ENABLED", 0)
|
|
45
|
+
env._set("MINIO_URL", "http://s3.example.com")
|
|
46
|
+
env._set("CLOUDFRONT_CDN", undefined)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const CLOUDFRONT_TEST_KEY =
|
|
50
|
+
"-----BEGIN RSA PRIVATE KEY-----\n" +
|
|
51
|
+
"MIIEpAIBAAKCAQEAqXRsir/0Qba1xEnybUs7d7QEAE02GRc+4H7HD5l5VnAxkV1m\n" +
|
|
52
|
+
"tNTXTmoYkaIhLdebV1EwQs3T9knxoyd4cVcrDkDfDLZErfYWJsuE3/QYNknnZs4/\n" +
|
|
53
|
+
"Ai0cg+v9ZX3gcizvpYg9GQI3INM0uRG8lJwGP7FQ/kknhA2yVFVCSxX6kkNtOUh5\n" +
|
|
54
|
+
"dKSG7m6IwswcSwD++Z/94vsFkoZIGY0e1CD/drFJ6+1TFY2YgbDKT5wDFLJ9vHFx\n" +
|
|
55
|
+
"/5o4POwn3gz/ru2Db9jbRdfEAqRdy46nRKQgBGUmupAgSK1+BJEzafexp8RmCGb0\n" +
|
|
56
|
+
"WUffxOtj8/jNCeCF0JBgVHAe3crOQ8ySrtoaHQIDAQABAoIBAA+ipW07/u6dTDI7\n" +
|
|
57
|
+
"XHoHKgqGeqQIe8he47dVG0ruL0rxeTFfe92NkfwzP+cYHZWcQkIRRLG1Six8cCZM\n" +
|
|
58
|
+
"uwlCML/U7n++xaGDhlG4D5+WZzGDKi3LM/cgcHQfrzbRIYeHa+lLI9AN60ZFFqVI\n" +
|
|
59
|
+
"5KyVpOH1m3KLD3FYzi6H22EQOxmJpqWlt2uArny5LxlPJKmmGSFjvneb4N2ZAKGQ\n" +
|
|
60
|
+
"QfClJGz9tRjceWUUdJrpqmTmBQIosKmLPq8PEviUNAVG+6m4r8jiRbf8OKkAm+3L\n" +
|
|
61
|
+
"LVIsN8HfYB9jEuERYPnbuXdX0kDEkg0xEyTH5YbNZvfm5ptCU9Xn+Jz1trF+wCHD\n" +
|
|
62
|
+
"2RlxdQUCgYEA3U0nCf6NTmmeMCsAX6gvaPuM0iUfUfS3b3G57I6u46lLGNLsfJw6\n" +
|
|
63
|
+
"MTpVc164lKYQK9czw/ijKzb8e3mcyzbPorVkajMjUCNWGrMK+vFbOGmqQkhUi30U\n" +
|
|
64
|
+
"IJuuTktMd+21D/SpLlev4MLria23vUIKEqNenYpV6wkGLt/mKtISaPMCgYEAxAYx\n" +
|
|
65
|
+
"j+xJLTK9eN+rpekwjYE78hD9VoBkBnr/NBiGV302AsJRuq2+L4zcBnAsH+SidFim\n" +
|
|
66
|
+
"cwqoj3jeVT8ZQFXlK3fGVaEJsCXd6GWk8ZIWUTn9JZwi2KcCvCU/YiHfx8c7y7Gl\n" +
|
|
67
|
+
"SiPXUPsvvkcw6RRh2u4J5tHLIqJe3W58ENoBNK8CgYEApxTBDMKrXTBQxn0w4wfQ\n" +
|
|
68
|
+
"A6soPuDYLMBeXj226eswD6KZmDxnYA1zwgcQzPIO2ewm+XKZGrR2PQJezbqbrrHL\n" +
|
|
69
|
+
"QkVBcwz49GA5eh8Dg0MGZCki6rhBXK8qqxPfHi2rpkBKG6nUsbBykXeY7XHC75kU\n" +
|
|
70
|
+
"kc3WeYsgIzvE908EMAA69hECgYEAinbpiYVZh1DBH+G26MIYZswz4OB5YyHcBevZ\n" +
|
|
71
|
+
"2x27v48VmMtUWe4iWopAXVfdA0ZILrD0Gm0b9gRl4IdqudQyxgqcEZ5oLoIBBwjN\n" +
|
|
72
|
+
"g0oy83tnwqpQvwLx3p7c79+HqCGmrlK0s/MvQ+e6qMi21t1r5e6hFed5euSA6B8E\n" +
|
|
73
|
+
"Cg9ELMcCgYB9bGwlNAE+iuzMIhKev1s7h3TzqKtGw37TtHXvxcTQs3uawJQksQ2s\n" +
|
|
74
|
+
"K0Zy1Ta7vybbwAA5m+LxoMT04WUdJO7Cr8/3rBMrbKKO3H7IgC3G+nXnOBdshzn5\n" +
|
|
75
|
+
"ifMbhZslFThC/osD5ZV7snXZgTWyPexaINJhHmdrAWpmW1h+UFoiMw==\n" +
|
|
76
|
+
"-----END RSA PRIVATE KEY-----\n"
|
|
77
|
+
|
|
78
|
+
const CLOUDFRONT_TEST_KEY_64 = Buffer.from(
|
|
79
|
+
CLOUDFRONT_TEST_KEY,
|
|
80
|
+
"utf-8"
|
|
81
|
+
).toString("base64")
|
|
82
|
+
|
|
83
|
+
export function withCloudfront() {
|
|
84
|
+
withS3()
|
|
85
|
+
env._set("CLOUDFRONT_CDN", "http://cf.example.com")
|
|
86
|
+
env._set("CLOUDFRONT_PUBLIC_KEY_ID", "keypair_123")
|
|
87
|
+
env._set("CLOUDFRONT_PRIVATE_KEY_64", CLOUDFRONT_TEST_KEY_64)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function withMinio() {
|
|
91
|
+
env._set("NODE_ENV", "production")
|
|
92
|
+
env._set("MINIO_ENABLED", 1)
|
|
93
|
+
env._set("MINIO_URL", "http://minio.example.com")
|
|
94
|
+
env._set("CLOUDFRONT_CDN", undefined)
|
|
95
|
+
}
|
package/tests/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./core/utilities"
|
package/tests/jestEnv.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import "./core/logging"
|
|
2
|
+
import env from "../src/environment"
|
|
3
|
+
import { cleanup } from "../src/timers"
|
|
4
|
+
import { mocks, testContainerUtils } from "./core/utilities"
|
|
5
|
+
|
|
6
|
+
// must explicitly enable fetch mock
|
|
7
|
+
mocks.fetch.enable()
|
|
8
|
+
|
|
9
|
+
// mock all dates to 2020-01-01T00:00:00.000Z
|
|
10
|
+
// use tk.reset() to use real dates in individual tests
|
|
11
|
+
import tk from "timekeeper"
|
|
12
|
+
tk.freeze(mocks.date.MOCK_DATE)
|
|
13
|
+
|
|
14
|
+
if (!process.env.DEBUG) {
|
|
15
|
+
console.log = jest.fn() // console.log are ignored in tests
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (!process.env.CI) {
|
|
19
|
+
// set a longer timeout in dev for debugging
|
|
20
|
+
// 100 seconds
|
|
21
|
+
jest.setTimeout(100000)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
testContainerUtils.setupEnv(env)
|
|
25
|
+
|
|
26
|
+
afterAll(() => {
|
|
27
|
+
cleanup()
|
|
28
|
+
})
|