kuzzle 2.19.2 → 2.19.5
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/lib/api/controllers/adminController.js +94 -80
- package/lib/api/controllers/authController.js +239 -212
- package/lib/api/controllers/baseController.js +89 -51
- package/lib/api/controllers/bulkController.js +62 -49
- package/lib/api/controllers/clusterController.js +6 -8
- package/lib/api/controllers/collectionController.js +140 -129
- package/lib/api/controllers/debugController.d.ts +2 -2
- package/lib/api/controllers/debugController.js +33 -31
- package/lib/api/controllers/documentController.js +365 -274
- package/lib/api/controllers/index.js +13 -13
- package/lib/api/controllers/indexController.js +46 -50
- package/lib/api/controllers/memoryStorageController.js +410 -360
- package/lib/api/controllers/realtimeController.js +37 -36
- package/lib/api/controllers/securityController.js +553 -412
- package/lib/api/controllers/serverController.js +111 -104
- package/lib/api/documentExtractor.js +75 -68
- package/lib/api/funnel.js +411 -312
- package/lib/api/httpRoutes.js +1493 -324
- package/lib/api/openapi/OpenApiManager.d.ts +1 -1
- package/lib/api/openapi/OpenApiManager.js +22 -22
- package/lib/api/openapi/components/document/count.yaml +1 -1
- package/lib/api/openapi/components/document/create.yaml +2 -2
- package/lib/api/openapi/components/document/delete.yaml +1 -1
- package/lib/api/openapi/components/document/deleteByQuery.yaml +1 -1
- package/lib/api/openapi/components/document/exists.yaml +1 -1
- package/lib/api/openapi/components/document/get.yaml +2 -2
- package/lib/api/openapi/components/document/index.js +12 -12
- package/lib/api/openapi/components/document/replace.yaml +1 -1
- package/lib/api/openapi/components/document/scroll.yaml +1 -1
- package/lib/api/openapi/components/document/validate.yaml +1 -1
- package/lib/api/openapi/components/index.d.ts +2 -2
- package/lib/api/openapi/components/index.js +1 -1
- package/lib/api/openapi/components/security/index.js +1 -1
- package/lib/api/openapi/components/security/upsertUser.yaml +2 -3
- package/lib/api/openapi/index.d.ts +1 -1
- package/lib/api/openapi/openApiGenerator.d.ts +1 -1
- package/lib/api/openapi/openApiGenerator.js +7 -7
- package/lib/api/rateLimiter.js +12 -13
- package/lib/api/request/index.d.ts +4 -4
- package/lib/api/request/kuzzleRequest.d.ts +9 -9
- package/lib/api/request/kuzzleRequest.js +91 -90
- package/lib/api/request/requestContext.d.ts +2 -2
- package/lib/api/request/requestContext.js +17 -17
- package/lib/api/request/requestInput.d.ts +1 -1
- package/lib/api/request/requestInput.js +19 -19
- package/lib/api/request/requestResponse.d.ts +4 -4
- package/lib/api/request/requestResponse.js +31 -33
- package/lib/cluster/command.js +48 -44
- package/lib/cluster/idCardHandler.d.ts +1 -1
- package/lib/cluster/idCardHandler.js +15 -15
- package/lib/cluster/index.js +2 -2
- package/lib/cluster/node.js +301 -269
- package/lib/cluster/publisher.js +45 -46
- package/lib/cluster/state.d.ts +5 -5
- package/lib/cluster/state.js +8 -8
- package/lib/cluster/subscriber.js +163 -113
- package/lib/cluster/workers/IDCardRenewer.js +33 -32
- package/lib/config/default.config.d.ts +1 -1
- package/lib/config/default.config.js +212 -171
- package/lib/config/documentEventAliases.js +6 -6
- package/lib/config/index.js +161 -98
- package/lib/config/sdkCompatibility.json +8 -8
- package/lib/core/auth/formatProcessing.js +7 -7
- package/lib/core/auth/passportResponse.js +7 -7
- package/lib/core/auth/passportWrapper.js +34 -30
- package/lib/core/auth/tokenManager.d.ts +2 -2
- package/lib/core/auth/tokenManager.js +11 -10
- package/lib/core/backend/applicationManager.d.ts +1 -1
- package/lib/core/backend/applicationManager.js +2 -2
- package/lib/core/backend/backend.d.ts +4 -4
- package/lib/core/backend/backend.js +34 -31
- package/lib/core/backend/backendCluster.d.ts +8 -9
- package/lib/core/backend/backendCluster.js +8 -8
- package/lib/core/backend/backendConfig.d.ts +2 -2
- package/lib/core/backend/backendConfig.js +3 -3
- package/lib/core/backend/backendController.d.ts +2 -2
- package/lib/core/backend/backendController.js +9 -10
- package/lib/core/backend/backendErrors.d.ts +3 -3
- package/lib/core/backend/backendErrors.js +2 -1
- package/lib/core/backend/backendHook.d.ts +3 -3
- package/lib/core/backend/backendHook.js +5 -5
- package/lib/core/backend/backendImport.d.ts +3 -3
- package/lib/core/backend/backendImport.js +23 -23
- package/lib/core/backend/backendOpenApi.d.ts +2 -2
- package/lib/core/backend/backendOpenApi.js +16 -16
- package/lib/core/backend/backendPipe.d.ts +3 -3
- package/lib/core/backend/backendPipe.js +6 -6
- package/lib/core/backend/backendPlugin.d.ts +4 -4
- package/lib/core/backend/backendPlugin.js +14 -14
- package/lib/core/backend/backendStorage.d.ts +2 -2
- package/lib/core/backend/backendStorage.js +1 -2
- package/lib/core/backend/backendVault.d.ts +2 -2
- package/lib/core/backend/backendVault.js +3 -3
- package/lib/core/backend/index.d.ts +14 -14
- package/lib/core/backend/internalLogger.d.ts +1 -1
- package/lib/core/backend/internalLogger.js +5 -5
- package/lib/core/cache/cacheDbEnum.js +4 -4
- package/lib/core/cache/cacheEngine.js +79 -85
- package/lib/core/network/accessLogger.js +126 -120
- package/lib/core/network/clientConnection.js +5 -5
- package/lib/core/network/context.js +8 -8
- package/lib/core/network/entryPoint.js +100 -85
- package/lib/core/network/httpRouter/index.js +63 -60
- package/lib/core/network/httpRouter/routeHandler.js +18 -19
- package/lib/core/network/httpRouter/routePart.js +23 -19
- package/lib/core/network/protocolManifest.js +3 -3
- package/lib/core/network/protocols/httpMessage.js +8 -10
- package/lib/core/network/protocols/httpwsProtocol.js +305 -250
- package/lib/core/network/protocols/internalProtocol.js +27 -24
- package/lib/core/network/protocols/mqttProtocol.js +106 -96
- package/lib/core/network/protocols/protocol.js +20 -17
- package/lib/core/network/router.js +56 -46
- package/lib/core/plugin/plugin.js +151 -120
- package/lib/core/plugin/pluginContext.d.ts +7 -7
- package/lib/core/plugin/pluginContext.js +48 -44
- package/lib/core/plugin/pluginManifest.js +13 -12
- package/lib/core/plugin/pluginRepository.js +26 -27
- package/lib/core/plugin/pluginsManager.js +425 -304
- package/lib/core/plugin/privilegedContext.js +3 -3
- package/lib/core/realtime/actionEnum.js +1 -1
- package/lib/core/realtime/channel.d.ts +1 -1
- package/lib/core/realtime/channel.js +22 -22
- package/lib/core/realtime/connectionRooms.d.ts +1 -1
- package/lib/core/realtime/hotelClerk.d.ts +2 -2
- package/lib/core/realtime/hotelClerk.js +53 -50
- package/lib/core/realtime/index.js +5 -5
- package/lib/core/realtime/notification/document.js +25 -25
- package/lib/core/realtime/notification/index.js +4 -4
- package/lib/core/realtime/notification/server.js +3 -3
- package/lib/core/realtime/notification/user.js +4 -4
- package/lib/core/realtime/notifier.js +113 -75
- package/lib/core/realtime/room.d.ts +1 -1
- package/lib/core/realtime/subscription.d.ts +1 -1
- package/lib/core/realtime/subscription.js +1 -1
- package/lib/core/security/index.js +8 -8
- package/lib/core/security/profileRepository.d.ts +6 -6
- package/lib/core/security/profileRepository.js +48 -45
- package/lib/core/security/roleRepository.js +127 -115
- package/lib/core/security/securityLoader.js +70 -63
- package/lib/core/security/tokenRepository.js +132 -118
- package/lib/core/security/userRepository.js +104 -88
- package/lib/core/shared/KoncordeWrapper.d.ts +1 -1
- package/lib/core/shared/KoncordeWrapper.js +3 -1
- package/lib/core/shared/abstractManifest.js +22 -23
- package/lib/core/shared/repository.js +69 -67
- package/lib/core/shared/sdk/embeddedSdk.d.ts +2 -2
- package/lib/core/shared/sdk/embeddedSdk.js +36 -32
- package/lib/core/shared/sdk/funnelProtocol.d.ts +1 -1
- package/lib/core/shared/sdk/funnelProtocol.js +11 -11
- package/lib/core/shared/sdk/impersonatedSdk.js +19 -18
- package/lib/core/shared/store.js +127 -32
- package/lib/core/statistics/index.js +2 -2
- package/lib/core/statistics/statistics.js +99 -85
- package/lib/core/storage/clientAdapter.js +219 -136
- package/lib/core/storage/indexCache.js +3 -3
- package/lib/core/storage/storageEngine.js +10 -13
- package/lib/core/storage/storeScopeEnum.js +3 -3
- package/lib/core/validation/baseType.js +12 -10
- package/lib/core/validation/index.js +2 -2
- package/lib/core/validation/types/anything.js +4 -4
- package/lib/core/validation/types/boolean.js +7 -7
- package/lib/core/validation/types/date.js +165 -131
- package/lib/core/validation/types/email.js +18 -21
- package/lib/core/validation/types/enum.js +34 -21
- package/lib/core/validation/types/geoPoint.js +7 -7
- package/lib/core/validation/types/geoShape.js +148 -125
- package/lib/core/validation/types/integer.js +9 -9
- package/lib/core/validation/types/ipAddress.js +17 -19
- package/lib/core/validation/types/numeric.js +36 -29
- package/lib/core/validation/types/object.js +19 -19
- package/lib/core/validation/types/string.js +36 -29
- package/lib/core/validation/types/url.js +17 -19
- package/lib/core/validation/validation.js +422 -378
- package/lib/kerror/codes/1-services.json +7 -1
- package/lib/kerror/codes/4-plugin.json +2 -2
- package/lib/kerror/codes/index.js +85 -63
- package/lib/kerror/errors/badRequestError.d.ts +1 -1
- package/lib/kerror/errors/externalServiceError.d.ts +1 -1
- package/lib/kerror/errors/forbiddenError.d.ts +1 -1
- package/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
- package/lib/kerror/errors/index.d.ts +15 -15
- package/lib/kerror/errors/internalError.d.ts +1 -1
- package/lib/kerror/errors/kuzzleError.d.ts +1 -1
- package/lib/kerror/errors/multipleErrorsError.d.ts +1 -1
- package/lib/kerror/errors/multipleErrorsError.js +1 -1
- package/lib/kerror/errors/notFoundError.d.ts +1 -1
- package/lib/kerror/errors/partialError.d.ts +1 -1
- package/lib/kerror/errors/partialError.js +1 -1
- package/lib/kerror/errors/pluginImplementationError.d.ts +1 -1
- package/lib/kerror/errors/pluginImplementationError.js +2 -1
- package/lib/kerror/errors/preconditionError.d.ts +1 -1
- package/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
- package/lib/kerror/errors/sizeLimitError.d.ts +1 -1
- package/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
- package/lib/kerror/errors/unauthorizedError.d.ts +1 -1
- package/lib/kerror/index.d.ts +3 -3
- package/lib/kerror/index.js +17 -16
- package/lib/kuzzle/dumpGenerator.js +130 -114
- package/lib/kuzzle/event/kuzzleEventEmitter.js +96 -70
- package/lib/kuzzle/event/pipeRunner.js +26 -25
- package/lib/kuzzle/event/waterfall.js +13 -15
- package/lib/kuzzle/index.js +2 -2
- package/lib/kuzzle/internalIndexHandler.js +80 -59
- package/lib/kuzzle/kuzzle.js +99 -99
- package/lib/kuzzle/kuzzleStateEnum.js +1 -1
- package/lib/kuzzle/log.js +23 -18
- package/lib/kuzzle/vault.js +34 -19
- package/lib/model/security/profile.d.ts +3 -3
- package/lib/model/security/profile.js +38 -37
- package/lib/model/security/rights.js +5 -5
- package/lib/model/security/role.d.ts +3 -3
- package/lib/model/security/role.js +25 -26
- package/lib/model/security/token.d.ts +1 -1
- package/lib/model/security/token.js +4 -4
- package/lib/model/security/user.d.ts +2 -2
- package/lib/model/security/user.js +9 -9
- package/lib/model/storage/apiKey.js +43 -33
- package/lib/model/storage/baseModel.js +49 -45
- package/lib/service/cache/redis.js +60 -55
- package/lib/service/service.js +17 -17
- package/lib/service/storage/elasticsearch.js +839 -755
- package/lib/service/storage/esWrapper.js +103 -86
- package/lib/service/storage/queryTranslator.js +52 -59
- package/lib/types/Controller.d.ts +3 -3
- package/lib/types/ControllerDefinition.d.ts +3 -3
- package/lib/types/DebugModule.d.ts +3 -2
- package/lib/types/DebugModule.js +1 -1
- package/lib/types/EventHandler.d.ts +31 -1
- package/lib/types/Global.d.ts +1 -1
- package/lib/types/HttpStream.d.ts +2 -1
- package/lib/types/HttpStream.js +7 -5
- package/lib/types/Kuzzle.d.ts +1 -1
- package/lib/types/KuzzleDocument.d.ts +1 -1
- package/lib/types/OpenApiDefinition.d.ts +1 -1
- package/lib/types/PasswordPolicy.d.ts +1 -1
- package/lib/types/Plugin.d.ts +8 -8
- package/lib/types/Plugin.js +2 -2
- package/lib/types/Policy.d.ts +1 -1
- package/lib/types/RequestPayload.d.ts +1 -1
- package/lib/types/ResponsePayload.d.ts +1 -1
- package/lib/types/Token.d.ts +1 -1
- package/lib/types/User.d.ts +1 -1
- package/lib/types/config/DumpConfiguration.d.ts +8 -8
- package/lib/types/config/HttpConfiguration.d.ts +1 -1
- package/lib/types/config/KuzzleConfiguration.d.ts +1 -1
- package/lib/types/config/LimitsConfiguration.d.ts +8 -8
- package/lib/types/config/PluginsConfiguration.d.ts +4 -4
- package/lib/types/config/SecurityConfiguration.d.ts +62 -62
- package/lib/types/config/ServerConfiguration.d.ts +55 -55
- package/lib/types/config/ServicesConfiguration.d.ts +2 -2
- package/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +10 -10
- package/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +3 -3
- package/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +194 -110
- package/lib/types/errors/ErrorDefinition.d.ts +1 -1
- package/lib/types/errors/ErrorDomains.d.ts +1 -1
- package/lib/types/events/EventGenericDocument.d.ts +26 -0
- package/lib/types/events/EventGenericDocument.js +3 -0
- package/lib/types/index.d.ts +39 -38
- package/lib/types/index.js +1 -0
- package/lib/types/realtime/RealtimeScope.d.ts +1 -1
- package/lib/types/realtime/RealtimeUsers.d.ts +1 -1
- package/lib/util/assertType.js +13 -11
- package/lib/util/async.d.ts +1 -0
- package/lib/util/async.js +61 -0
- package/lib/util/asyncStore.js +19 -21
- package/lib/util/bufferedPassThrough.d.ts +3 -2
- package/lib/util/bufferedPassThrough.js +4 -4
- package/lib/util/bytes.js +9 -13
- package/lib/util/crypto.js +1 -1
- package/lib/util/debug.js +5 -5
- package/lib/util/deprecate.js +24 -21
- package/lib/util/didYouMean.js +7 -7
- package/lib/util/dump-collection.d.ts +2 -2
- package/lib/util/dump-collection.js +26 -26
- package/lib/util/esRequest.d.ts +1 -0
- package/lib/util/esRequest.js +62 -0
- package/lib/util/extractFields.js +24 -25
- package/lib/util/inflector.js +5 -5
- package/lib/util/koncordeCompat.d.ts +2 -2
- package/lib/util/koncordeCompat.js +5 -5
- package/lib/util/memoize.js +3 -5
- package/lib/util/mutex.d.ts +19 -1
- package/lib/util/mutex.js +39 -12
- package/lib/util/name-generator.js +1331 -1331
- package/lib/util/promback.js +8 -10
- package/lib/util/readYamlFile.d.ts +1 -1
- package/lib/util/readYamlFile.js +1 -1
- package/lib/util/requestAssertions.js +34 -34
- package/lib/util/safeObject.js +5 -5
- package/lib/util/stackTrace.js +20 -22
- package/lib/util/wildcard.js +15 -15
- package/package.json +28 -29
- package/npm-shrinkwrap.json +0 -19422
|
@@ -82,21 +82,20 @@ class TokenManager {
|
|
|
82
82
|
if (a.idx === b.idx) {
|
|
83
83
|
return 0;
|
|
84
84
|
}
|
|
85
|
-
if (a.idx && a.idx[0] ===
|
|
85
|
+
if (a.idx && a.idx[0] === "-") {
|
|
86
86
|
return 1;
|
|
87
87
|
}
|
|
88
|
-
if (b.idx && b.idx[0] ===
|
|
88
|
+
if (b.idx && b.idx[0] === "-") {
|
|
89
89
|
return -1;
|
|
90
90
|
}
|
|
91
91
|
return a.idx < b.idx ? -1 : 1;
|
|
92
92
|
});
|
|
93
93
|
}
|
|
94
94
|
async init() {
|
|
95
|
-
const anonymous = await global.kuzzle.ask(
|
|
95
|
+
const anonymous = await global.kuzzle.ask("core:security:user:anonymous:get");
|
|
96
96
|
this.anonymousUserId = anonymous._id;
|
|
97
|
-
global.kuzzle.on(
|
|
98
|
-
this.removeConnection(connection.id)
|
|
99
|
-
.catch(err => global.kuzzle.log.info(err));
|
|
97
|
+
global.kuzzle.on("connection:remove", (connection) => {
|
|
98
|
+
this.removeConnection(connection.id).catch((err) => global.kuzzle.log.info(err));
|
|
100
99
|
});
|
|
101
100
|
}
|
|
102
101
|
runTimer() {
|
|
@@ -186,7 +185,7 @@ class TokenManager {
|
|
|
186
185
|
const managedToken = this.tokens.array[searchResult];
|
|
187
186
|
for (const connectionId of managedToken.connectionIds) {
|
|
188
187
|
this.tokensByConnection.delete(connectionId);
|
|
189
|
-
await global.kuzzle.ask(
|
|
188
|
+
await global.kuzzle.ask("core:realtime:connection:remove", connectionId);
|
|
190
189
|
}
|
|
191
190
|
this.deleteByIndex(searchResult);
|
|
192
191
|
}
|
|
@@ -217,11 +216,13 @@ class TokenManager {
|
|
|
217
216
|
async checkTokensValidity() {
|
|
218
217
|
const arr = this.tokens.array;
|
|
219
218
|
// API key can never expire (-1)
|
|
220
|
-
if (arr.length > 0 &&
|
|
219
|
+
if (arr.length > 0 &&
|
|
220
|
+
arr[0].expiresAt > 0 &&
|
|
221
|
+
arr[0].expiresAt < Date.now()) {
|
|
221
222
|
const managedToken = arr[0];
|
|
222
223
|
arr.shift();
|
|
223
224
|
for (const connectionId of managedToken.connectionIds) {
|
|
224
|
-
await global.kuzzle.ask(
|
|
225
|
+
await global.kuzzle.ask("core:realtime:tokenExpired:notify", connectionId);
|
|
225
226
|
this.tokensByConnection.delete(connectionId);
|
|
226
227
|
}
|
|
227
228
|
setImmediate(() => this.checkTokensValidity());
|
|
@@ -257,7 +258,7 @@ class TokenManager {
|
|
|
257
258
|
add(token, connectionIds) {
|
|
258
259
|
const orderedToken = Object.assign({}, token, {
|
|
259
260
|
connectionIds: new Set(connectionIds),
|
|
260
|
-
idx: ManagedToken.indexFor(token)
|
|
261
|
+
idx: ManagedToken.indexFor(token),
|
|
261
262
|
});
|
|
262
263
|
for (const connectionId of connectionIds) {
|
|
263
264
|
this.tokensByConnection.set(connectionId, orderedToken);
|
|
@@ -23,8 +23,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
exports.ApplicationManager = void 0;
|
|
24
24
|
class ApplicationManager {
|
|
25
25
|
constructor(application) {
|
|
26
|
-
Reflect.defineProperty(this,
|
|
27
|
-
value: application
|
|
26
|
+
Reflect.defineProperty(this, "_application", {
|
|
27
|
+
value: application,
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
get _kuzzle() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { EmbeddedSDK } from
|
|
2
|
-
import { JSONObject } from
|
|
3
|
-
import { BackendCluster, BackendConfig, BackendController, BackendHook, BackendImport, BackendPipe, BackendPlugin, BackendStorage, BackendVault, BackendOpenApi, InternalLogger, BackendErrors } from
|
|
1
|
+
import { EmbeddedSDK } from "../shared/sdk/embeddedSdk";
|
|
2
|
+
import { EventDefinition, JSONObject } from "../../../index";
|
|
3
|
+
import { BackendCluster, BackendConfig, BackendController, BackendHook, BackendImport, BackendPipe, BackendPlugin, BackendStorage, BackendVault, BackendOpenApi, InternalLogger, BackendErrors } from "./index";
|
|
4
4
|
export declare class Backend {
|
|
5
5
|
private _kuzzle;
|
|
6
6
|
private _name;
|
|
@@ -149,7 +149,7 @@ export declare class Backend {
|
|
|
149
149
|
*
|
|
150
150
|
* @returns {Promise<any>}
|
|
151
151
|
*/
|
|
152
|
-
trigger(event:
|
|
152
|
+
trigger<TEventDefinition extends EventDefinition = EventDefinition>(event: TEventDefinition["name"], ...payload: TEventDefinition["args"]): Promise<TEventDefinition["args"][0]>;
|
|
153
153
|
/**
|
|
154
154
|
* Register a method that will be executed only once on any given environment.
|
|
155
155
|
* If this method throws, the app won't start.
|
|
@@ -52,21 +52,21 @@ const kuzzle_1 = __importDefault(require("../../kuzzle"));
|
|
|
52
52
|
const embeddedSdk_1 = require("../shared/sdk/embeddedSdk");
|
|
53
53
|
const kerror = __importStar(require("../../kerror"));
|
|
54
54
|
const index_1 = require("./index");
|
|
55
|
-
const assertionError = kerror.wrap(
|
|
56
|
-
const runtimeError = kerror.wrap(
|
|
55
|
+
const assertionError = kerror.wrap("plugin", "assert");
|
|
56
|
+
const runtimeError = kerror.wrap("plugin", "runtime");
|
|
57
57
|
let _app = null;
|
|
58
|
-
Reflect.defineProperty(global,
|
|
58
|
+
Reflect.defineProperty(global, "app", {
|
|
59
59
|
configurable: true,
|
|
60
60
|
enumerable: false,
|
|
61
61
|
get() {
|
|
62
62
|
if (_app === null) {
|
|
63
|
-
throw new Error(
|
|
63
|
+
throw new Error("App instance not found. Are you sure you have already started your application?");
|
|
64
64
|
}
|
|
65
65
|
return _app;
|
|
66
66
|
},
|
|
67
67
|
set(value) {
|
|
68
68
|
if (_app !== null) {
|
|
69
|
-
throw new Error(
|
|
69
|
+
throw new Error("Cannot build an App instance: another one already exists");
|
|
70
70
|
}
|
|
71
71
|
_app = value;
|
|
72
72
|
},
|
|
@@ -85,11 +85,11 @@ class Backend {
|
|
|
85
85
|
this._plugins = {};
|
|
86
86
|
this._import = {
|
|
87
87
|
mappings: {},
|
|
88
|
-
onExistingUsers:
|
|
88
|
+
onExistingUsers: "skip",
|
|
89
89
|
profiles: {},
|
|
90
90
|
roles: {},
|
|
91
91
|
userMappings: {},
|
|
92
|
-
users: {}
|
|
92
|
+
users: {},
|
|
93
93
|
};
|
|
94
94
|
this._installationsWaitingList = [];
|
|
95
95
|
/**
|
|
@@ -109,30 +109,30 @@ class Backend {
|
|
|
109
109
|
/**
|
|
110
110
|
* Requiring the PluginObject on module top level creates cyclic dependency
|
|
111
111
|
*/
|
|
112
|
-
Reflect.defineProperty(this,
|
|
113
|
-
value: require(
|
|
112
|
+
Reflect.defineProperty(this, "PluginObject", {
|
|
113
|
+
value: require("../plugin/plugin"),
|
|
114
114
|
});
|
|
115
115
|
if (!this.PluginObject.checkName(name)) {
|
|
116
|
-
throw assertionError.get(
|
|
116
|
+
throw assertionError.get("invalid_application_name", name);
|
|
117
117
|
}
|
|
118
118
|
this._name = name;
|
|
119
|
-
Reflect.defineProperty(this,
|
|
120
|
-
writable: true
|
|
119
|
+
Reflect.defineProperty(this, "_kuzzle", {
|
|
120
|
+
writable: true,
|
|
121
121
|
});
|
|
122
|
-
Reflect.defineProperty(this,
|
|
123
|
-
writable: true
|
|
122
|
+
Reflect.defineProperty(this, "_sdk", {
|
|
123
|
+
writable: true,
|
|
124
124
|
});
|
|
125
125
|
/**
|
|
126
126
|
* Set the "started" property in this event so developers can use runtime
|
|
127
127
|
* features in pipes/hooks attached to this event.
|
|
128
128
|
*/
|
|
129
|
-
this._pipes[
|
|
129
|
+
this._pipes["kuzzle:state:ready"] = [
|
|
130
130
|
async () => {
|
|
131
131
|
this.started = true;
|
|
132
132
|
},
|
|
133
133
|
];
|
|
134
134
|
try {
|
|
135
|
-
const info = JSON.parse(fs_1.default.readFileSync(
|
|
135
|
+
const info = JSON.parse(fs_1.default.readFileSync("./package.json", "utf8"));
|
|
136
136
|
this.version = info.version;
|
|
137
137
|
}
|
|
138
138
|
catch (error) {
|
|
@@ -164,7 +164,7 @@ class Backend {
|
|
|
164
164
|
*/
|
|
165
165
|
async start() {
|
|
166
166
|
if (this.started) {
|
|
167
|
-
throw runtimeError.get(
|
|
167
|
+
throw runtimeError.get("already_started", "start");
|
|
168
168
|
}
|
|
169
169
|
this._kuzzle = new kuzzle_1.default(this.config.content);
|
|
170
170
|
for (const plugin of this.config.content.plugins.common.include) {
|
|
@@ -174,7 +174,10 @@ class Backend {
|
|
|
174
174
|
name: plugin,
|
|
175
175
|
});
|
|
176
176
|
}
|
|
177
|
-
const application = new this.PluginObject(this._instanceProxy, {
|
|
177
|
+
const application = new this.PluginObject(this._instanceProxy, {
|
|
178
|
+
application: true,
|
|
179
|
+
name: this.name,
|
|
180
|
+
});
|
|
178
181
|
application.version = this.version;
|
|
179
182
|
application.commit = this.commit;
|
|
180
183
|
application.openApi = this.openApi.definition;
|
|
@@ -200,7 +203,7 @@ class Backend {
|
|
|
200
203
|
*/
|
|
201
204
|
trigger(event, ...payload) {
|
|
202
205
|
if (!this.started) {
|
|
203
|
-
throw runtimeError.get(
|
|
206
|
+
throw runtimeError.get("unavailable_before_start", "trigger");
|
|
204
207
|
}
|
|
205
208
|
return this._kuzzle.pipe(event, ...payload);
|
|
206
209
|
}
|
|
@@ -215,16 +218,16 @@ class Backend {
|
|
|
215
218
|
*/
|
|
216
219
|
install(id, handler, description) {
|
|
217
220
|
if (this.started) {
|
|
218
|
-
throw runtimeError.get(
|
|
221
|
+
throw runtimeError.get("already_started", "install");
|
|
219
222
|
}
|
|
220
|
-
if (typeof id !==
|
|
221
|
-
throw kerror.get(
|
|
223
|
+
if (typeof id !== "string") {
|
|
224
|
+
throw kerror.get("validation", "assert", "invalid_type", "id", "string");
|
|
222
225
|
}
|
|
223
|
-
if (typeof handler !==
|
|
224
|
-
throw kerror.get(
|
|
226
|
+
if (typeof handler !== "function") {
|
|
227
|
+
throw kerror.get("validation", "assert", "invalid_type", "handler", "function");
|
|
225
228
|
}
|
|
226
|
-
if (description && typeof description !==
|
|
227
|
-
throw kerror.get(
|
|
229
|
+
if (description && typeof description !== "string") {
|
|
230
|
+
throw kerror.get("validation", "assert", "invalid_type", "id", "string");
|
|
228
231
|
}
|
|
229
232
|
this._installationsWaitingList.push({ description, handler, id });
|
|
230
233
|
}
|
|
@@ -239,7 +242,7 @@ class Backend {
|
|
|
239
242
|
*/
|
|
240
243
|
get sdk() {
|
|
241
244
|
if (!this.started) {
|
|
242
|
-
throw runtimeError.get(
|
|
245
|
+
throw runtimeError.get("unavailable_before_start", "sdk");
|
|
243
246
|
}
|
|
244
247
|
return this._sdk;
|
|
245
248
|
}
|
|
@@ -248,7 +251,7 @@ class Backend {
|
|
|
248
251
|
*/
|
|
249
252
|
get nodeId() {
|
|
250
253
|
if (!this.started) {
|
|
251
|
-
throw runtimeError.get(
|
|
254
|
+
throw runtimeError.get("unavailable_before_start", "nodeId");
|
|
252
255
|
}
|
|
253
256
|
return this._kuzzle.id;
|
|
254
257
|
}
|
|
@@ -275,12 +278,12 @@ class Backend {
|
|
|
275
278
|
if (!fs_1.default.statSync(gitDir).isDirectory()) {
|
|
276
279
|
return null;
|
|
277
280
|
}
|
|
278
|
-
const ref = fs_1.default.readFileSync(`${dir}/.git/HEAD`,
|
|
279
|
-
const refFile = `${dir}/.git/${ref}`.replace(
|
|
281
|
+
const ref = fs_1.default.readFileSync(`${dir}/.git/HEAD`, "utf8").split("ref: ")[1];
|
|
282
|
+
const refFile = `${dir}/.git/${ref}`.replace("\n", "");
|
|
280
283
|
if (!fs_1.default.existsSync(refFile)) {
|
|
281
284
|
return null;
|
|
282
285
|
}
|
|
283
|
-
return fs_1.default.readFileSync(refFile,
|
|
286
|
+
return fs_1.default.readFileSync(refFile, "utf8").replace("\n", "");
|
|
284
287
|
}
|
|
285
288
|
}
|
|
286
289
|
exports.Backend = Backend;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { EventHandler } from '../../types';
|
|
1
|
+
import { EventDefinition, ClusterEventHandler } from "../../../index";
|
|
3
2
|
export declare class BackendCluster {
|
|
4
3
|
/**
|
|
5
4
|
* Broadcasts an event to listeners across all registered Kuzzle nodes
|
|
@@ -8,34 +7,34 @@ export declare class BackendCluster {
|
|
|
8
7
|
* @param {JSONObject} payload
|
|
9
8
|
* @return {Promise<void>}
|
|
10
9
|
*/
|
|
11
|
-
broadcast(event:
|
|
10
|
+
broadcast<TEventDefinition extends EventDefinition = EventDefinition>(event: TEventDefinition["name"], payload: TEventDefinition["args"][0]): Promise<void>;
|
|
12
11
|
/**
|
|
13
12
|
* Registers a listener to the provided event name.
|
|
14
13
|
*
|
|
15
14
|
* @param {string} event
|
|
16
|
-
* @param {
|
|
15
|
+
* @param {ClusterEventHandler} listener
|
|
17
16
|
* @return {Promise<void>} [description]
|
|
18
17
|
*/
|
|
19
|
-
on(event:
|
|
18
|
+
on<TEventDefinition extends EventDefinition = EventDefinition>(event: TEventDefinition["name"], listener: ClusterEventHandler<TEventDefinition>): Promise<void>;
|
|
20
19
|
/**
|
|
21
20
|
* Registers a listener to the provided event name. This listener can be
|
|
22
21
|
* invoked only once, after which it will be removed from the listeners list.
|
|
23
22
|
*
|
|
24
23
|
* @param {string} event
|
|
25
|
-
* @param {
|
|
24
|
+
* @param {ClusterEventHandler} listener
|
|
26
25
|
* @return {Promise<void>}
|
|
27
26
|
*/
|
|
28
|
-
once(event:
|
|
27
|
+
once<TEventDefinition extends EventDefinition = EventDefinition>(event: TEventDefinition["name"], listener: ClusterEventHandler<TEventDefinition>): Promise<void>;
|
|
29
28
|
/**
|
|
30
29
|
* Removes a listener from an event.
|
|
31
30
|
* If multiple instances of the same listener are registered, only the first
|
|
32
31
|
* one is removed.
|
|
33
32
|
*
|
|
34
33
|
* @param {string} event
|
|
35
|
-
* @param {
|
|
34
|
+
* @param {ClusterEventHandler} listener
|
|
36
35
|
* @return {Promise<void>}
|
|
37
36
|
*/
|
|
38
|
-
off(event:
|
|
37
|
+
off<TEventDefinition extends EventDefinition = EventDefinition>(event: TEventDefinition["name"], listener: ClusterEventHandler<TEventDefinition>): Promise<void>;
|
|
39
38
|
/**
|
|
40
39
|
* Removes all listeners from an event.
|
|
41
40
|
*
|
|
@@ -30,28 +30,28 @@ class BackendCluster {
|
|
|
30
30
|
* @return {Promise<void>}
|
|
31
31
|
*/
|
|
32
32
|
async broadcast(event, payload) {
|
|
33
|
-
await global.kuzzle.ask(
|
|
33
|
+
await global.kuzzle.ask("cluster:event:broadcast", event, payload);
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Registers a listener to the provided event name.
|
|
37
37
|
*
|
|
38
38
|
* @param {string} event
|
|
39
|
-
* @param {
|
|
39
|
+
* @param {ClusterEventHandler} listener
|
|
40
40
|
* @return {Promise<void>} [description]
|
|
41
41
|
*/
|
|
42
42
|
async on(event, listener) {
|
|
43
|
-
await global.kuzzle.ask(
|
|
43
|
+
await global.kuzzle.ask("cluster:event:on", event, listener);
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Registers a listener to the provided event name. This listener can be
|
|
47
47
|
* invoked only once, after which it will be removed from the listeners list.
|
|
48
48
|
*
|
|
49
49
|
* @param {string} event
|
|
50
|
-
* @param {
|
|
50
|
+
* @param {ClusterEventHandler} listener
|
|
51
51
|
* @return {Promise<void>}
|
|
52
52
|
*/
|
|
53
53
|
async once(event, listener) {
|
|
54
|
-
await global.kuzzle.ask(
|
|
54
|
+
await global.kuzzle.ask("cluster:event:once", event, listener);
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Removes a listener from an event.
|
|
@@ -59,11 +59,11 @@ class BackendCluster {
|
|
|
59
59
|
* one is removed.
|
|
60
60
|
*
|
|
61
61
|
* @param {string} event
|
|
62
|
-
* @param {
|
|
62
|
+
* @param {ClusterEventHandler} listener
|
|
63
63
|
* @return {Promise<void>}
|
|
64
64
|
*/
|
|
65
65
|
async off(event, listener) {
|
|
66
|
-
await global.kuzzle.ask(
|
|
66
|
+
await global.kuzzle.ask("cluster:event:off", event, listener);
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
69
|
* Removes all listeners from an event.
|
|
@@ -72,7 +72,7 @@ class BackendCluster {
|
|
|
72
72
|
* @return {Promise<void>}
|
|
73
73
|
*/
|
|
74
74
|
async removeAllListeners(event) {
|
|
75
|
-
await global.kuzzle.ask(
|
|
75
|
+
await global.kuzzle.ask("cluster:event:removeAllListeners", event);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
exports.BackendCluster = BackendCluster;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ApplicationManager, Backend } from
|
|
2
|
-
import { KuzzleConfiguration } from
|
|
1
|
+
import { ApplicationManager, Backend } from "./index";
|
|
2
|
+
import { KuzzleConfiguration } from "../../types/config/KuzzleConfiguration";
|
|
3
3
|
export declare class BackendConfig extends ApplicationManager {
|
|
4
4
|
/**
|
|
5
5
|
* Configuration content.
|
|
@@ -51,7 +51,7 @@ const lodash_1 = __importDefault(require("lodash"));
|
|
|
51
51
|
const kerror = __importStar(require("../../kerror"));
|
|
52
52
|
const index_1 = require("./index");
|
|
53
53
|
const index_js_1 = require("../../config/index.js");
|
|
54
|
-
const runtimeError = kerror.wrap(
|
|
54
|
+
const runtimeError = kerror.wrap("plugin", "runtime");
|
|
55
55
|
class BackendConfig extends index_1.ApplicationManager {
|
|
56
56
|
constructor(application) {
|
|
57
57
|
super(application);
|
|
@@ -67,7 +67,7 @@ class BackendConfig extends index_1.ApplicationManager {
|
|
|
67
67
|
*/
|
|
68
68
|
set(path, value) {
|
|
69
69
|
if (this._application.started) {
|
|
70
|
-
throw runtimeError.get(
|
|
70
|
+
throw runtimeError.get("already_started", "config");
|
|
71
71
|
}
|
|
72
72
|
lodash_1.default.set(this.content, path, value);
|
|
73
73
|
}
|
|
@@ -80,7 +80,7 @@ class BackendConfig extends index_1.ApplicationManager {
|
|
|
80
80
|
*/
|
|
81
81
|
merge(config) {
|
|
82
82
|
if (this._application.started) {
|
|
83
|
-
throw runtimeError.get(
|
|
83
|
+
throw runtimeError.get("already_started", "config");
|
|
84
84
|
}
|
|
85
85
|
this.content = lodash_1.default.merge(this.content, config);
|
|
86
86
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ControllerDefinition, Controller } from
|
|
2
|
-
import { ApplicationManager } from
|
|
1
|
+
import { ControllerDefinition, Controller } from "../../types";
|
|
2
|
+
import { ApplicationManager } from "./index";
|
|
3
3
|
export declare class BackendController extends ApplicationManager {
|
|
4
4
|
/**
|
|
5
5
|
* Registers a new controller.
|
|
@@ -51,8 +51,8 @@ const inflector_1 = require("../../util/inflector");
|
|
|
51
51
|
const kerror = __importStar(require("../../kerror"));
|
|
52
52
|
const index_1 = require("./index");
|
|
53
53
|
const plugin_1 = __importDefault(require("../plugin/plugin"));
|
|
54
|
-
const assertionError = kerror.wrap(
|
|
55
|
-
const runtimeError = kerror.wrap(
|
|
54
|
+
const assertionError = kerror.wrap("plugin", "assert");
|
|
55
|
+
const runtimeError = kerror.wrap("plugin", "runtime");
|
|
56
56
|
class BackendController extends index_1.ApplicationManager {
|
|
57
57
|
/**
|
|
58
58
|
* Registers a new controller.
|
|
@@ -76,7 +76,7 @@ class BackendController extends index_1.ApplicationManager {
|
|
|
76
76
|
*/
|
|
77
77
|
register(name, definition) {
|
|
78
78
|
if (this._application.started) {
|
|
79
|
-
throw runtimeError.get(
|
|
79
|
+
throw runtimeError.get("already_started", "controller");
|
|
80
80
|
}
|
|
81
81
|
plugin_1.default.checkControllerDefinition(name, definition);
|
|
82
82
|
this.add(name, definition);
|
|
@@ -146,21 +146,20 @@ class BackendController extends index_1.ApplicationManager {
|
|
|
146
146
|
*/
|
|
147
147
|
use(controller) {
|
|
148
148
|
if (this._application.started) {
|
|
149
|
-
throw runtimeError.get(
|
|
149
|
+
throw runtimeError.get("already_started", "controller");
|
|
150
150
|
}
|
|
151
151
|
if (!controller.name) {
|
|
152
|
-
controller.name = inflector_1.Inflector.kebabCase(controller.constructor.name)
|
|
153
|
-
.replace('-controller', '');
|
|
152
|
+
controller.name = inflector_1.Inflector.kebabCase(controller.constructor.name).replace("-controller", "");
|
|
154
153
|
}
|
|
155
154
|
plugin_1.default.checkControllerDefinition(controller.name, controller.definition);
|
|
156
155
|
for (const [action, definition] of Object.entries(controller.definition.actions)) {
|
|
157
|
-
if (typeof definition.handler !==
|
|
158
|
-
throw assertionError.get(
|
|
156
|
+
if (typeof definition.handler !== "function") {
|
|
157
|
+
throw assertionError.get("invalid_controller_definition", controller.name, `Handler for action "${action}" is not a function.`);
|
|
159
158
|
}
|
|
160
159
|
// if the function handler is an instance method,
|
|
161
160
|
// bind the context to the controller instance
|
|
162
161
|
const handlerName = definition.handler.name;
|
|
163
|
-
if (handlerName && typeof controller[handlerName] ===
|
|
162
|
+
if (handlerName && typeof controller[handlerName] === "function") {
|
|
164
163
|
definition.handler = definition.handler.bind(controller);
|
|
165
164
|
}
|
|
166
165
|
}
|
|
@@ -174,7 +173,7 @@ class BackendController extends index_1.ApplicationManager {
|
|
|
174
173
|
*/
|
|
175
174
|
add(name, definition) {
|
|
176
175
|
if (this._application._controllers[name]) {
|
|
177
|
-
throw assertionError.get(
|
|
176
|
+
throw assertionError.get("invalid_controller_definition", name, "A controller with this name already exists");
|
|
178
177
|
}
|
|
179
178
|
this._application._controllers[name] = definition;
|
|
180
179
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { KuzzleError } from
|
|
2
|
-
import { ApplicationManager, Backend } from
|
|
3
|
-
import { CustomErrorDefinition } from
|
|
1
|
+
import { KuzzleError } from "../../kerror/errors";
|
|
2
|
+
import { ApplicationManager, Backend } from "./index";
|
|
3
|
+
import { CustomErrorDefinition } from "../../types";
|
|
4
4
|
export declare class BackendErrors extends ApplicationManager {
|
|
5
5
|
private domains;
|
|
6
6
|
constructor(application: Backend);
|
|
@@ -82,7 +82,8 @@ class BackendErrors extends index_1.ApplicationManager {
|
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
84
|
this.domains[domain].subDomains[subDomain].errors[name] = {
|
|
85
|
-
code: Object.keys(this.domains[domain].subDomains[subDomain].errors)
|
|
85
|
+
code: Object.keys(this.domains[domain].subDomains[subDomain].errors)
|
|
86
|
+
.length,
|
|
86
87
|
...definition,
|
|
87
88
|
};
|
|
88
89
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ApplicationManager } from
|
|
1
|
+
import { HookEventHandler, EventDefinition } from "../../types";
|
|
2
|
+
import { ApplicationManager } from "./index";
|
|
3
3
|
export declare class BackendHook extends ApplicationManager {
|
|
4
4
|
/**
|
|
5
5
|
* Registers a new hook on an event
|
|
@@ -8,5 +8,5 @@ export declare class BackendHook extends ApplicationManager {
|
|
|
8
8
|
* @param handler - Function to execute when the event is triggered
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
|
-
register(event:
|
|
11
|
+
register<TEventDefinition extends EventDefinition = EventDefinition>(event: TEventDefinition["name"], handler: HookEventHandler<TEventDefinition>): void;
|
|
12
12
|
}
|
|
@@ -46,8 +46,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
46
46
|
exports.BackendHook = void 0;
|
|
47
47
|
const kerror = __importStar(require("../../kerror"));
|
|
48
48
|
const index_1 = require("./index");
|
|
49
|
-
const assertionError = kerror.wrap(
|
|
50
|
-
const runtimeError = kerror.wrap(
|
|
49
|
+
const assertionError = kerror.wrap("plugin", "assert");
|
|
50
|
+
const runtimeError = kerror.wrap("plugin", "runtime");
|
|
51
51
|
class BackendHook extends index_1.ApplicationManager {
|
|
52
52
|
/**
|
|
53
53
|
* Registers a new hook on an event
|
|
@@ -58,10 +58,10 @@ class BackendHook extends index_1.ApplicationManager {
|
|
|
58
58
|
*/
|
|
59
59
|
register(event, handler) {
|
|
60
60
|
if (this._application.started) {
|
|
61
|
-
throw runtimeError.get(
|
|
61
|
+
throw runtimeError.get("already_started", "hook");
|
|
62
62
|
}
|
|
63
|
-
if (typeof handler !==
|
|
64
|
-
throw assertionError.get(
|
|
63
|
+
if (typeof handler !== "function") {
|
|
64
|
+
throw assertionError.get("invalid_hook", event);
|
|
65
65
|
}
|
|
66
66
|
if (!this._application._hooks[event]) {
|
|
67
67
|
this._application._hooks[event] = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ApplicationManager } from
|
|
2
|
-
import { JSONObject } from
|
|
1
|
+
import { ApplicationManager } from "./index";
|
|
2
|
+
import { JSONObject } from "../../../index";
|
|
3
3
|
export declare type DefaultMappings = {
|
|
4
4
|
[index: string]: {
|
|
5
5
|
[collection: string]: {
|
|
@@ -80,6 +80,6 @@ export declare class BackendImport extends ApplicationManager {
|
|
|
80
80
|
* @param options onExistingUsers: Default to `skip`. Strategy to adopt when trying to create an already existing user.
|
|
81
81
|
*/
|
|
82
82
|
users(users: JSONObject, options?: {
|
|
83
|
-
onExistingUsers?:
|
|
83
|
+
onExistingUsers?: "overwrite" | "skip";
|
|
84
84
|
}): void;
|
|
85
85
|
}
|