@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 @@
|
|
|
1
|
+
{"version":3,"file":"docWritethrough.js","sourceRoot":"","sources":["../../../src/cache/docWritethrough.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,oBAGC;AAED,oCAKC;AAtGD,oCAAuD;AACvD,+CAAgC;AAQhC,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAChC,IAAI,SAA+C,CAAA;AAEnD,MAAa,wBAAwB;IAG5B,MAAM,KAAK,KAAK;QACrB,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC;YACrC,wBAAwB,CAAC,MAAM,GAAG,IAAA,mBAAW,EAC3C,gBAAQ,CAAC,sBAAsB,EAC/B;gBACE,UAAU,EAAE;oBACV,QAAQ,EAAE,oBAAoB;iBAC/B;aACF,CACF,CAAA;QACH,CAAC;QAED,OAAO,wBAAwB,CAAC,MAAM,CAAA;IACxC,CAAC;IAED,IAAI;QACF,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAM,OAAO,EAAC,EAAE;YACrD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACtC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACvB,4GAA4G;oBAC5G,MAAM,IAAI,KAAK,CACb,+BAA+B,OAAO,CAAC,EAAE,aAAa,OAAO,CAAC,YAAY,EAAE,CAC7E,CAAA;gBACH,CAAC;gBAED,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC,CAAA,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAEa,WAAW;6DAAC,EACxB,MAAM,EACN,KAAK,EACL,IAAI,GAKL;YACC,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAChC,IAAI,GAA4B,CAAA;YAChC,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC3B,CAAC;YAAC,WAAM,CAAC;gBACP,GAAG,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;YACtB,CAAC;YAED,GAAG,mCAAQ,GAAG,GAAK,IAAI,CAAE,CAAA;YACzB,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;KAAA;CACF;AAxDD,4DAwDC;AAED,MAAa,eAAe;IAI1B,YAAY,EAAY,EAAE,KAAa;QACrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAEK,KAAK,CAAC,IAAyB;;YACnC,MAAM,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC;gBACvC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI;aACL,CAAC,CAAA;QACJ,CAAC;KAAA;CACF;AApBD,0CAoBC;AAED,SAAgB,IAAI;IAClB,SAAS,GAAG,IAAI,wBAAwB,EAAE,CAAC,IAAI,EAAE,CAAA;IACjD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAgB,YAAY;IAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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.bustCache = exports.withCache = exports.destroy = exports.store = exports.get = exports.keys = exports.TTL = exports.CacheKey = void 0;
|
|
7
|
+
const base_1 = __importDefault(require("./base"));
|
|
8
|
+
const GENERIC = new base_1.default();
|
|
9
|
+
var CacheKey;
|
|
10
|
+
(function (CacheKey) {
|
|
11
|
+
CacheKey["CHECKLIST"] = "checklist";
|
|
12
|
+
CacheKey["INSTALLATION"] = "installation";
|
|
13
|
+
CacheKey["ANALYTICS_ENABLED"] = "analyticsEnabled";
|
|
14
|
+
CacheKey["UNIQUE_TENANT_ID"] = "uniqueTenantId";
|
|
15
|
+
CacheKey["EVENTS"] = "events";
|
|
16
|
+
CacheKey["BACKFILL_METADATA"] = "backfillMetadata";
|
|
17
|
+
CacheKey["EVENTS_RATE_LIMIT"] = "eventsRateLimit";
|
|
18
|
+
})(CacheKey || (exports.CacheKey = CacheKey = {}));
|
|
19
|
+
var TTL;
|
|
20
|
+
(function (TTL) {
|
|
21
|
+
TTL[TTL["ONE_MINUTE"] = 600] = "ONE_MINUTE";
|
|
22
|
+
TTL[TTL["ONE_HOUR"] = 3600] = "ONE_HOUR";
|
|
23
|
+
TTL[TTL["ONE_DAY"] = 86400] = "ONE_DAY";
|
|
24
|
+
})(TTL || (exports.TTL = TTL = {}));
|
|
25
|
+
const keys = (...args) => GENERIC.keys(...args);
|
|
26
|
+
exports.keys = keys;
|
|
27
|
+
const get = (...args) => GENERIC.get(...args);
|
|
28
|
+
exports.get = get;
|
|
29
|
+
const store = (...args) => GENERIC.store(...args);
|
|
30
|
+
exports.store = store;
|
|
31
|
+
const destroy = (...args) => GENERIC.delete(...args);
|
|
32
|
+
exports.destroy = destroy;
|
|
33
|
+
const withCache = (...args) => GENERIC.withCache(...args);
|
|
34
|
+
exports.withCache = withCache;
|
|
35
|
+
const bustCache = (...args) => GENERIC.bustCache(...args);
|
|
36
|
+
exports.bustCache = bustCache;
|
|
37
|
+
//# sourceMappingURL=generic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/cache/generic.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA8B;AAE9B,MAAM,OAAO,GAAG,IAAI,cAAS,EAAE,CAAA;AAE/B,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,mCAAuB,CAAA;IACvB,yCAA6B,CAAA;IAC7B,kDAAsC,CAAA;IACtC,+CAAmC,CAAA;IACnC,6BAAiB,CAAA;IACjB,kDAAsC,CAAA;IACtC,iDAAqC,CAAA;AACvC,CAAC,EARW,QAAQ,wBAAR,QAAQ,QAQnB;AAED,IAAY,GAIX;AAJD,WAAY,GAAG;IACb,2CAAgB,CAAA;IAChB,wCAAe,CAAA;IACf,uCAAe,CAAA;AACjB,CAAC,EAJW,GAAG,mBAAH,GAAG,QAId;AAEM,MAAM,IAAI,GAAG,CAAC,GAAG,IAAqC,EAAE,EAAE,CAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;AADV,QAAA,IAAI,QACM;AAChB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAoC,EAAE,EAAE,CAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AADT,QAAA,GAAG,OACM;AACf,MAAM,KAAK,GAAG,CAAC,GAAG,IAAsC,EAAE,EAAE,CACjE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;AADX,QAAA,KAAK,SACM;AACjB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAuC,EAAE,EAAE,CACpE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;AADZ,QAAA,OAAO,WACK;AAClB,MAAM,SAAS,GAAG,CACvB,GAAG,IAA6C,EAChD,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;AAFlB,QAAA,SAAS,aAES;AACxB,MAAM,SAAS,GAAG,CAAC,GAAG,IAA0C,EAAE,EAAE,CACzE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;AADf,QAAA,SAAS,aACM"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.docWritethrough = exports.passwordReset = exports.invite = exports.writethrough = exports.app = exports.user = exports.generic = void 0;
|
|
40
|
+
exports.generic = __importStar(require("./generic"));
|
|
41
|
+
exports.user = __importStar(require("./user"));
|
|
42
|
+
exports.app = __importStar(require("./appMetadata"));
|
|
43
|
+
exports.writethrough = __importStar(require("./writethrough"));
|
|
44
|
+
exports.invite = __importStar(require("./invite"));
|
|
45
|
+
exports.passwordReset = __importStar(require("./passwordReset"));
|
|
46
|
+
__exportStar(require("./generic"), exports);
|
|
47
|
+
exports.docWritethrough = __importStar(require("./docWritethrough"));
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cache/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAoC;AACpC,+CAA8B;AAC9B,qDAAoC;AACpC,+DAA8C;AAC9C,mDAAkC;AAClC,iEAAgD;AAChD,4CAAyB;AACzB,qEAAoD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
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.updateCode = updateCode;
|
|
49
|
+
exports.createCode = createCode;
|
|
50
|
+
exports.getCode = getCode;
|
|
51
|
+
exports.deleteCode = deleteCode;
|
|
52
|
+
exports.getInviteCodes = getInviteCodes;
|
|
53
|
+
exports.getExistingInvites = getExistingInvites;
|
|
54
|
+
const utils = __importStar(require("../utils"));
|
|
55
|
+
const utils_1 = require("../utils");
|
|
56
|
+
const environment_1 = __importDefault(require("../environment"));
|
|
57
|
+
const context_1 = require("../context");
|
|
58
|
+
const redis = __importStar(require("../redis/init"));
|
|
59
|
+
const TTL_SECONDS = utils_1.Duration.fromDays(7).toSeconds();
|
|
60
|
+
/**
|
|
61
|
+
* Given an invite code and invite body, allow the update an existing/valid invite in redis
|
|
62
|
+
* @param code The invite code for an invite in redis
|
|
63
|
+
* @param value The body of the updated user invitation
|
|
64
|
+
*/
|
|
65
|
+
function updateCode(code, value) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
const client = yield redis.getInviteClient();
|
|
68
|
+
yield client.store(code, value, TTL_SECONDS);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generates an invitation code and writes it to redis - which can later be checked for user creation.
|
|
73
|
+
* @param email the email address which the code is being sent to (for use later).
|
|
74
|
+
* @param info Information to be carried along with the invitation.
|
|
75
|
+
* @return returns the code that was stored to redis.
|
|
76
|
+
*/
|
|
77
|
+
function createCode(email, info) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
const code = utils.newid();
|
|
80
|
+
const client = yield redis.getInviteClient();
|
|
81
|
+
yield client.store(code, { email, info }, TTL_SECONDS);
|
|
82
|
+
return code;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Checks that the provided invite code is valid - will return the email address of user that was invited.
|
|
87
|
+
* @param code the invite code that was provided as part of the link.
|
|
88
|
+
* @return If the code is valid then an email address will be returned.
|
|
89
|
+
*/
|
|
90
|
+
function getCode(code) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
const client = yield redis.getInviteClient();
|
|
93
|
+
const value = (yield client.get(code));
|
|
94
|
+
if (!value) {
|
|
95
|
+
throw "Invitation is not valid or has expired, please request a new one.";
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function deleteCode(code) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
const client = yield redis.getInviteClient();
|
|
103
|
+
yield client.delete(code);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
Get all currently available user invitations for the current tenant.
|
|
108
|
+
**/
|
|
109
|
+
function getInviteCodes() {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
const client = yield redis.getInviteClient();
|
|
112
|
+
const invites = yield client.scan();
|
|
113
|
+
const results = invites.map(invite => {
|
|
114
|
+
return Object.assign(Object.assign({}, invite.value), { code: invite.key });
|
|
115
|
+
});
|
|
116
|
+
if (!environment_1.default.MULTI_TENANCY) {
|
|
117
|
+
return results;
|
|
118
|
+
}
|
|
119
|
+
const tenantId = (0, context_1.getTenantId)();
|
|
120
|
+
return results.filter(invite => tenantId === invite.info.tenantId);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function getExistingInvites(emails) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
return (yield getInviteCodes()).filter(invite => emails.includes(invite.email));
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=invite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite.js","sourceRoot":"","sources":["../../../src/cache/invite.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,gCAGC;AAQD,gCAKC;AAOD,0BAOC;AAED,gCAGC;AAKD,wCAeC;AAED,gDAMC;AA7ED,gDAAiC;AACjC,oCAAmC;AACnC,iEAAgC;AAChC,wCAAwC;AACxC,qDAAsC;AAGtC,MAAM,WAAW,GAAG,gBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;AAEpD;;;;GAIG;AACH,SAAsB,UAAU,CAAC,IAAY,EAAE,KAAa;;QAC1D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IAC9C,CAAC;CAAA;AAED;;;;;GAKG;AACH,SAAsB,UAAU,CAAC,KAAa,EAAE,IAAS;;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,CAAA;QACtD,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAED;;;;GAIG;AACH,SAAsB,OAAO,CAAC,IAAY;;QACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAuB,CAAA;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,mEAAmE,CAAA;QAC3E,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;CAAA;AAED,SAAsB,UAAU,CAAC,IAAY;;QAC3C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;CAAA;AAED;;IAEI;AACJ,SAAsB,cAAc;;QAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;QAC5C,MAAM,OAAO,GAAqC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAErE,MAAM,OAAO,GAAqB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACrD,uCACK,MAAM,CAAC,KAAK,KACf,IAAI,EAAE,MAAM,CAAC,GAAG,IACjB;QACH,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,qBAAG,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAA,qBAAW,GAAE,CAAA;QAC9B,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACpE,CAAC;CAAA;AAED,SAAsB,kBAAkB,CACtC,MAAgB;;QAEhB,OAAO,CAAC,MAAM,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC9C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAC9B,CAAA;IACH,CAAC;CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.createCode = createCode;
|
|
46
|
+
exports.getCode = getCode;
|
|
47
|
+
exports.invalidateCode = invalidateCode;
|
|
48
|
+
const redis = __importStar(require("../redis/init"));
|
|
49
|
+
const utils = __importStar(require("../utils"));
|
|
50
|
+
const utils_1 = require("../utils");
|
|
51
|
+
const TTL_SECONDS = utils_1.Duration.fromHours(1).toSeconds();
|
|
52
|
+
/**
|
|
53
|
+
* Given a user ID this will store a code (that is returned) for an hour in redis.
|
|
54
|
+
* The user can then return this code for resetting their password (through their reset link).
|
|
55
|
+
* @param userId the ID of the user which is to be reset.
|
|
56
|
+
* @param info Info about the user/the reset process.
|
|
57
|
+
* @return returns the code that was stored to redis.
|
|
58
|
+
*/
|
|
59
|
+
function createCode(userId, info) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
const code = utils.newid();
|
|
62
|
+
const client = yield redis.getPasswordResetClient();
|
|
63
|
+
yield client.store(code, { userId, info }, TTL_SECONDS);
|
|
64
|
+
return code;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Given a reset code this will lookup to redis, check if the code is valid.
|
|
69
|
+
* @param code The code provided via the email link.
|
|
70
|
+
* @return returns the user ID if it is found
|
|
71
|
+
*/
|
|
72
|
+
function getCode(code) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
const client = yield redis.getPasswordResetClient();
|
|
75
|
+
const value = (yield client.get(code));
|
|
76
|
+
if (!value) {
|
|
77
|
+
throw new Error("Provided information is not valid, cannot reset password - please try again.");
|
|
78
|
+
}
|
|
79
|
+
return value;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Given a reset code this will invalidate it.
|
|
84
|
+
* @param code The code provided via the email link.
|
|
85
|
+
*/
|
|
86
|
+
function invalidateCode(code) {
|
|
87
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
const client = yield redis.getPasswordResetClient();
|
|
89
|
+
yield client.delete(code);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=passwordReset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passwordReset.js","sourceRoot":"","sources":["../../../src/cache/passwordReset.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,gCAKC;AAOD,0BASC;AAMD,wCAGC;AAhDD,qDAAsC;AACtC,gDAAiC;AACjC,oCAAmC;AAEnC,MAAM,WAAW,GAAG,gBAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;AAOrD;;;;;;GAMG;AACH,SAAsB,UAAU,CAAC,MAAc,EAAE,IAAS;;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE,CAAA;QACnD,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,CAAA;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;CAAA;AAED;;;;GAIG;AACH,SAAsB,OAAO,CAAC,IAAY;;QACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE,CAAA;QACnD,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAA8B,CAAA;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;CAAA;AAED;;;GAGG;AACH,SAAsB,cAAc,CAAC,IAAY;;QAC/C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE,CAAA;QACnD,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;CAAA"}
|
|
@@ -0,0 +1,183 @@
|
|
|
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.getUser = getUser;
|
|
49
|
+
exports.getUsers = getUsers;
|
|
50
|
+
exports.invalidateUser = invalidateUser;
|
|
51
|
+
const redis = __importStar(require("../redis/init"));
|
|
52
|
+
const tenancy = __importStar(require("../tenancy"));
|
|
53
|
+
const context = __importStar(require("../context"));
|
|
54
|
+
const platform = __importStar(require("../platform"));
|
|
55
|
+
const environment_1 = __importDefault(require("../environment"));
|
|
56
|
+
const accounts = __importStar(require("../accounts"));
|
|
57
|
+
const users_1 = require("../users");
|
|
58
|
+
const shared_core_1 = require("@budibase/shared-core");
|
|
59
|
+
const EXPIRY_SECONDS = 3600;
|
|
60
|
+
/**
|
|
61
|
+
* The default populate user function
|
|
62
|
+
*/
|
|
63
|
+
function populateFromDB(userId, tenantId) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
+
const db = tenancy.getTenantDB(tenantId);
|
|
66
|
+
const user = yield db.get(userId);
|
|
67
|
+
user.budibaseAccess = true;
|
|
68
|
+
if (!environment_1.default.SELF_HOSTED && !environment_1.default.DISABLE_ACCOUNT_PORTAL) {
|
|
69
|
+
const account = yield accounts.getAccount(user.email);
|
|
70
|
+
if (account) {
|
|
71
|
+
user.account = account;
|
|
72
|
+
user.accountPortalAccess = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return user;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function populateUsersFromDB(userIds) {
|
|
79
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
80
|
+
const getUsersResponse = yield users_1.UserDB.bulkGet(userIds);
|
|
81
|
+
// Handle missed user ids
|
|
82
|
+
const notFoundIds = userIds.filter((uid, i) => !getUsersResponse[i]);
|
|
83
|
+
const users = getUsersResponse.filter(x => x);
|
|
84
|
+
yield Promise.all(users.map((user) => __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
user.budibaseAccess = true;
|
|
86
|
+
if (!environment_1.default.SELF_HOSTED && !environment_1.default.DISABLE_ACCOUNT_PORTAL) {
|
|
87
|
+
const account = yield accounts.getAccount(user.email);
|
|
88
|
+
if (account) {
|
|
89
|
+
user.account = account;
|
|
90
|
+
user.accountPortalAccess = true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
})));
|
|
94
|
+
if (notFoundIds.length) {
|
|
95
|
+
return { users, notFoundIds };
|
|
96
|
+
}
|
|
97
|
+
return { users };
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the requested user by id.
|
|
102
|
+
* Use redis cache to first read the user.
|
|
103
|
+
* If not present fallback to loading the user directly and re-caching.
|
|
104
|
+
* @param userId the id of the user to get
|
|
105
|
+
* @param tenantId the tenant of the user to get
|
|
106
|
+
* @param email the email of the user to populate from account if needed
|
|
107
|
+
* @param populateUser function to provide the user for re-caching. default to couch db
|
|
108
|
+
* @returns
|
|
109
|
+
*/
|
|
110
|
+
function getUser(_a) {
|
|
111
|
+
return __awaiter(this, arguments, void 0, function* ({ userId, tenantId, email, populateUser, }) {
|
|
112
|
+
if (!populateUser) {
|
|
113
|
+
populateUser = populateFromDB;
|
|
114
|
+
}
|
|
115
|
+
if (!tenantId) {
|
|
116
|
+
try {
|
|
117
|
+
tenantId = context.getTenantId();
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
tenantId = yield platform.users.lookupTenantId(userId);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const client = yield redis.getUserClient();
|
|
124
|
+
// try cache
|
|
125
|
+
let user = yield client.get(userId);
|
|
126
|
+
if (!user) {
|
|
127
|
+
user = yield populateUser(userId, tenantId, email);
|
|
128
|
+
yield client.store(userId, user, EXPIRY_SECONDS);
|
|
129
|
+
}
|
|
130
|
+
if (user && !user.tenantId && tenantId) {
|
|
131
|
+
// make sure the tenant ID is always correct/set
|
|
132
|
+
user.tenantId = tenantId;
|
|
133
|
+
}
|
|
134
|
+
// if has groups, could have builder permissions granted by a group
|
|
135
|
+
if (user.userGroups && !shared_core_1.sdk.users.isGlobalBuilder(user)) {
|
|
136
|
+
yield context.doInTenant(tenantId, () => __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
var _a;
|
|
138
|
+
const appIds = yield users_1.UserDB.getGroupBuilderAppIds(user);
|
|
139
|
+
if (appIds.length) {
|
|
140
|
+
const existing = ((_a = user.builder) === null || _a === void 0 ? void 0 : _a.apps) || [];
|
|
141
|
+
user.builder = {
|
|
142
|
+
apps: [...new Set(existing.concat(appIds))],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
return user;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get the requested users by id.
|
|
152
|
+
* Use redis cache to first read the users.
|
|
153
|
+
* If not present fallback to loading the users directly and re-caching.
|
|
154
|
+
* @param userIds the ids of the user to get
|
|
155
|
+
* @param tenantId the tenant of the users to get
|
|
156
|
+
* @returns
|
|
157
|
+
*/
|
|
158
|
+
function getUsers(userIds) {
|
|
159
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
160
|
+
const client = yield redis.getUserClient();
|
|
161
|
+
// try cache
|
|
162
|
+
let usersFromCache = yield client.bulkGet(userIds);
|
|
163
|
+
const missingUsersFromCache = userIds.filter(uid => !usersFromCache[uid]);
|
|
164
|
+
const users = Object.values(usersFromCache);
|
|
165
|
+
let notFoundIds;
|
|
166
|
+
if (missingUsersFromCache.length) {
|
|
167
|
+
const usersFromDb = yield populateUsersFromDB(missingUsersFromCache);
|
|
168
|
+
notFoundIds = usersFromDb.notFoundIds;
|
|
169
|
+
for (const userToCache of usersFromDb.users) {
|
|
170
|
+
yield client.store(userToCache._id, userToCache, EXPIRY_SECONDS);
|
|
171
|
+
}
|
|
172
|
+
users.push(...usersFromDb.users);
|
|
173
|
+
}
|
|
174
|
+
return { users, notFoundIds: notFoundIds };
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
function invalidateUser(userId) {
|
|
178
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
179
|
+
const client = yield redis.getUserClient();
|
|
180
|
+
yield client.delete(userId);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/cache/user.ts"],"names":[],"mappings":"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"}
|