starta.microservice 0.1.2209
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/Exception.d.ts +21 -0
- package/lib/Exception.js +56 -0
- package/lib/Exception.js.map +1 -0
- package/lib/adapters/aws/index.d.ts +5 -0
- package/lib/adapters/aws/index.js +15 -0
- package/lib/adapters/aws/index.js.map +1 -0
- package/lib/adapters/database/DBScripts/BaseMigration.d.ts +11 -0
- package/lib/adapters/database/DBScripts/BaseMigration.js +12 -0
- package/lib/adapters/database/DBScripts/BaseMigration.js.map +1 -0
- package/lib/adapters/database/DBScripts/DBInitialise.d.ts +4 -0
- package/lib/adapters/database/DBScripts/DBInitialise.js +22 -0
- package/lib/adapters/database/DBScripts/DBInitialise.js.map +1 -0
- package/lib/adapters/database/index.d.ts +25 -0
- package/lib/adapters/database/index.js +88 -0
- package/lib/adapters/database/index.js.map +1 -0
- package/lib/adapters/logger/index.d.ts +14 -0
- package/lib/adapters/logger/index.js +113 -0
- package/lib/adapters/logger/index.js.map +1 -0
- package/lib/adapters/rabbitmq/index.d.ts +17 -0
- package/lib/adapters/rabbitmq/index.js +145 -0
- package/lib/adapters/rabbitmq/index.js.map +1 -0
- package/lib/adapters/redisService/Listener.d.ts +10 -0
- package/lib/adapters/redisService/Listener.js +35 -0
- package/lib/adapters/redisService/Listener.js.map +1 -0
- package/lib/adapters/redisService/Publisher.d.ts +7 -0
- package/lib/adapters/redisService/Publisher.js +38 -0
- package/lib/adapters/redisService/Publisher.js.map +1 -0
- package/lib/adapters/redisService/RedisAdapter.d.ts +29 -0
- package/lib/adapters/redisService/RedisAdapter.js +161 -0
- package/lib/adapters/redisService/RedisAdapter.js.map +1 -0
- package/lib/adapters/redisService/index.d.ts +71 -0
- package/lib/adapters/redisService/index.js +337 -0
- package/lib/adapters/redisService/index.js.map +1 -0
- package/lib/adapters/redisService/types.d.ts +14 -0
- package/lib/adapters/redisService/types.js +3 -0
- package/lib/adapters/redisService/types.js.map +1 -0
- package/lib/config.d.ts +103 -0
- package/lib/config.js +126 -0
- package/lib/config.js.map +1 -0
- package/lib/entities/Account.d.ts +191 -0
- package/lib/entities/Account.js +62 -0
- package/lib/entities/Account.js.map +1 -0
- package/lib/entities/Base.d.ts +29 -0
- package/lib/entities/Base.js +62 -0
- package/lib/entities/Base.js.map +1 -0
- package/lib/entities/Version.d.ts +6 -0
- package/lib/entities/Version.js +10 -0
- package/lib/entities/Version.js.map +1 -0
- package/lib/entities/types/index.d.ts +108 -0
- package/lib/entities/types/index.js +3 -0
- package/lib/entities/types/index.js.map +1 -0
- package/lib/helpers/index.d.ts +24 -0
- package/lib/helpers/index.js +151 -0
- package/lib/helpers/index.js.map +1 -0
- package/lib/repositories/Repository.d.ts +39 -0
- package/lib/repositories/Repository.js +403 -0
- package/lib/repositories/Repository.js.map +1 -0
- package/lib/repositories/index.d.ts +6 -0
- package/lib/repositories/index.js +16 -0
- package/lib/repositories/index.js.map +1 -0
- package/lib/repositories/types/AggregateOptions.d.ts +4 -0
- package/lib/repositories/types/AggregateOptions.js +6 -0
- package/lib/repositories/types/AggregateOptions.js.map +1 -0
- package/lib/repositories/types/FindOptions.d.ts +16 -0
- package/lib/repositories/types/FindOptions.js +6 -0
- package/lib/repositories/types/FindOptions.js.map +1 -0
- package/lib/repositories/types/IQuery.d.ts +4 -0
- package/lib/repositories/types/IQuery.js +3 -0
- package/lib/repositories/types/IQuery.js.map +1 -0
- package/lib/repositories/types/JoinOptions.d.ts +8 -0
- package/lib/repositories/types/JoinOptions.js +6 -0
- package/lib/repositories/types/JoinOptions.js.map +1 -0
- package/lib/services/ServiceExecutor.d.ts +16 -0
- package/lib/services/ServiceExecutor.js +169 -0
- package/lib/services/ServiceExecutor.js.map +1 -0
- package/lib/services/ServiceExecutorHandler.d.ts +13 -0
- package/lib/services/ServiceExecutorHandler.js +323 -0
- package/lib/services/ServiceExecutorHandler.js.map +1 -0
- package/lib/services/ServiceFactoryBase.d.ts +15 -0
- package/lib/services/ServiceFactoryBase.js +11 -0
- package/lib/services/ServiceFactoryBase.js.map +1 -0
- package/lib/services/ServiceHandlerBase.d.ts +30 -0
- package/lib/services/ServiceHandlerBase.js +113 -0
- package/lib/services/ServiceHandlerBase.js.map +1 -0
- package/lib/services/dataSelectors.d.ts +38 -0
- package/lib/services/dataSelectors.js +60 -0
- package/lib/services/dataSelectors.js.map +1 -0
- package/lib/timeProvider.d.ts +14 -0
- package/lib/timeProvider.js +37 -0
- package/lib/timeProvider.js.map +1 -0
- package/lib/types/index.d.ts +72 -0
- package/lib/types/index.js +14 -0
- package/lib/types/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type ErrorCode = 'BAD_REQUEST' | 'SOMETHING_WRONG_DELETING_OLD_RECORDS' | 'WRONG_PASSWORD' | 'MENTIONED_USER_IS_NOT_AUTHORIZED' | 'NOT_UNIQUE' | 'WRONG_UNIQUES' | 'CANNOT_EDIT_ORGANIZATION_OWNER' | 'CANNOT_ADD_ORGANISATION' | 'WRONG_ID' | 'USER_DOES_NOT_EXIST' | 'NOT_ALLOWED' | 'UNKNOWN_EXECUTORS' | 'NOT_VALID' | 'FORBIDDEN' | 'UNAUTHORIZED' | 'AUTHENTICATION_FAILED' | 'NOT_FOUND' | 'FORMAT_ERROR' | 'INVALID_FIELD' | 'UNALBE_TO_UPDATE_ONE_OBJECT_AT_THE_SAME_TIME' | 'ERROR_IN_PAYMENT_SETTINGS' | 'INCORRECT_SIGNATURE' | 'ORDERS_INTERSECT' | 'ORDER_WRONG_STARTTIME' | 'ONLINE_WIDGET_DISABLED' | 'UNABLE_TO_CREATE_SUBDOMAIN' | 'TOO_SOON' | 'TOO_MANY_REQUESTS' | string;
|
|
2
|
+
declare class Exception extends Error {
|
|
3
|
+
#private;
|
|
4
|
+
get fields(): object;
|
|
5
|
+
get code(): string;
|
|
6
|
+
get message(): string;
|
|
7
|
+
get statusCode(): number;
|
|
8
|
+
constructor(data: {
|
|
9
|
+
code: ErrorCode;
|
|
10
|
+
message?: string;
|
|
11
|
+
statusCode?: number;
|
|
12
|
+
fields?: object;
|
|
13
|
+
});
|
|
14
|
+
toHash(): {
|
|
15
|
+
fields: object;
|
|
16
|
+
code: string;
|
|
17
|
+
message: string;
|
|
18
|
+
statusCode: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export default Exception;
|
package/lib/Exception.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
+
};
|
|
13
|
+
var _Exception_fields, _Exception_code, _Exception_message, _Exception_statusCode;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
class Exception extends Error {
|
|
16
|
+
get fields() {
|
|
17
|
+
return __classPrivateFieldGet(this, _Exception_fields, "f");
|
|
18
|
+
}
|
|
19
|
+
get code() {
|
|
20
|
+
return __classPrivateFieldGet(this, _Exception_code, "f");
|
|
21
|
+
}
|
|
22
|
+
get message() {
|
|
23
|
+
return __classPrivateFieldGet(this, _Exception_message, "f");
|
|
24
|
+
}
|
|
25
|
+
get statusCode() {
|
|
26
|
+
if (__classPrivateFieldGet(this, _Exception_statusCode, "f")) {
|
|
27
|
+
return __classPrivateFieldGet(this, _Exception_statusCode, "f");
|
|
28
|
+
}
|
|
29
|
+
if (__classPrivateFieldGet(this, _Exception_code, "f") === 'NOT_FOUND') {
|
|
30
|
+
return 404;
|
|
31
|
+
}
|
|
32
|
+
return __classPrivateFieldGet(this, _Exception_statusCode, "f");
|
|
33
|
+
}
|
|
34
|
+
constructor(data) {
|
|
35
|
+
super();
|
|
36
|
+
_Exception_fields.set(this, void 0);
|
|
37
|
+
_Exception_code.set(this, void 0);
|
|
38
|
+
_Exception_message.set(this, void 0);
|
|
39
|
+
_Exception_statusCode.set(this, void 0);
|
|
40
|
+
__classPrivateFieldSet(this, _Exception_fields, data.fields, "f");
|
|
41
|
+
__classPrivateFieldSet(this, _Exception_code, data.code, "f");
|
|
42
|
+
__classPrivateFieldSet(this, _Exception_message, data.message, "f");
|
|
43
|
+
__classPrivateFieldSet(this, _Exception_statusCode, data.statusCode, "f");
|
|
44
|
+
}
|
|
45
|
+
toHash() {
|
|
46
|
+
return {
|
|
47
|
+
fields: __classPrivateFieldGet(this, _Exception_fields, "f"),
|
|
48
|
+
code: __classPrivateFieldGet(this, _Exception_code, "f"),
|
|
49
|
+
message: __classPrivateFieldGet(this, _Exception_message, "f"),
|
|
50
|
+
statusCode: __classPrivateFieldGet(this, _Exception_statusCode, "f"),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
_Exception_fields = new WeakMap(), _Exception_code = new WeakMap(), _Exception_message = new WeakMap(), _Exception_statusCode = new WeakMap();
|
|
55
|
+
exports.default = Exception;
|
|
56
|
+
//# sourceMappingURL=Exception.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Exception.js","sourceRoot":"","sources":["../src/Exception.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAgCA,MAAM,SAAU,SAAQ,KAAK;IAM3B,IAAW,MAAM;QACf,OAAO,uBAAA,IAAI,yBAAQ,CAAC;IACtB,CAAC;IAED,IAAW,IAAI;QACb,OAAO,uBAAA,IAAI,uBAAM,CAAC;IACpB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,uBAAA,IAAI,0BAAS,CAAC;IACvB,CAAC;IAED,IAAW,UAAU;QACnB,IAAI,uBAAA,IAAI,6BAAY,EAAE;YACpB,OAAO,uBAAA,IAAI,6BAAY,CAAC;SACzB;QAED,IAAI,uBAAA,IAAI,uBAAM,KAAK,WAAW,EAAE;YAC9B,OAAO,GAAG,CAAC;SACZ;QAED,OAAO,uBAAA,IAAI,6BAAY,CAAC;IAC1B,CAAC;IAGD,YAAY,IAAiF;QAC3F,KAAK,EAAE,CAAC;QA/BV,oCAAgB;QAChB,kCAAc;QACd,qCAAkB;QAClB,wCAAqB;QA8BnB,uBAAA,IAAI,qBAAW,IAAI,CAAC,MAAM,MAAA,CAAC;QAC3B,uBAAA,IAAI,mBAAS,IAAI,CAAC,IAAI,MAAA,CAAC;QACvB,uBAAA,IAAI,sBAAY,IAAI,CAAC,OAAO,MAAA,CAAC;QAC7B,uBAAA,IAAI,yBAAe,IAAI,CAAC,UAAU,MAAA,CAAC;IACrC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,MAAM,EAAE,uBAAA,IAAI,yBAAQ;YACpB,IAAI,EAAE,uBAAA,IAAI,uBAAM;YAChB,OAAO,EAAE,uBAAA,IAAI,0BAAS;YACtB,UAAU,EAAE,uBAAA,IAAI,6BAAY;SAC7B,CAAC;IACJ,CAAC;CACF;;AAED,kBAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
const aws_sdk_1 = __importDefault(require("aws-sdk"));
|
|
7
|
+
const config_1 = __importDefault(require("../../config"));
|
|
8
|
+
aws_sdk_1.default.config = new aws_sdk_1.default.Config();
|
|
9
|
+
aws_sdk_1.default.config.accessKeyId = config_1.default.aws.accessKey;
|
|
10
|
+
aws_sdk_1.default.config.secretAccessKey = config_1.default.aws.secretKey;
|
|
11
|
+
aws_sdk_1.default.config.region = config_1.default.aws.region;
|
|
12
|
+
exports.default = {
|
|
13
|
+
getS3: () => new aws_sdk_1.default.S3(),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/aws/index.ts"],"names":[],"mappings":";;;;;AACA,sDAA0B;AAC1B,0DAAkC;AAElC,iBAAG,CAAC,MAAM,GAAG,IAAI,iBAAG,CAAC,MAAM,EAAE,CAAC;AAC9B,iBAAG,CAAC,MAAM,CAAC,WAAW,GAAG,gBAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9C,iBAAG,CAAC,MAAM,CAAC,eAAe,GAAG,gBAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAClD,iBAAG,CAAC,MAAM,CAAC,MAAM,GAAG,gBAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAEtC,kBAAe;IACb,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,iBAAG,CAAC,EAAE,EAAE;CAC1B,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Db } from 'mongodb';
|
|
2
|
+
import RedisService from '../../../adapters/redisService';
|
|
3
|
+
import ServerLogger from '../../logger';
|
|
4
|
+
declare abstract class BaseMigration {
|
|
5
|
+
db: Db;
|
|
6
|
+
redis: RedisService;
|
|
7
|
+
logger: ServerLogger;
|
|
8
|
+
constructor(db: Db, redis: RedisService, logger: ServerLogger);
|
|
9
|
+
abstract up(): any;
|
|
10
|
+
}
|
|
11
|
+
export default BaseMigration;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
;
|
|
4
|
+
class BaseMigration {
|
|
5
|
+
constructor(db, redis, logger) {
|
|
6
|
+
this.db = db;
|
|
7
|
+
this.redis = redis;
|
|
8
|
+
this.logger = logger;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.default = BaseMigration;
|
|
12
|
+
//# sourceMappingURL=BaseMigration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseMigration.js","sourceRoot":"","sources":["../../../../src/adapters/database/DBScripts/BaseMigration.ts"],"names":[],"mappings":";;AAEwC,CAAC;AAEzC,MAAe,aAAa;IAK1B,YAAY,EAAM,EAAE,KAAmB,EAAE,MAAoB;QACzD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CAGF;AAED,kBAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const Version_1 = __importDefault(require("../../../entities/Version"));
|
|
16
|
+
exports.default = (db, mongoDb, lastVersion) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
const collation = { locale: 'en', strength: 2 };
|
|
18
|
+
const collections = db.getCollectionsNames();
|
|
19
|
+
console.log(JSON.stringify(collections));
|
|
20
|
+
yield db.getCollection('versions').insertOne(new Version_1.default({ version: lastVersion, date: new Date() }));
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=DBInitialise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DBInitialise.js","sourceRoot":"","sources":["../../../../src/adapters/database/DBScripts/DBInitialise.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,wEAAgD;AAGhD,kBAAe,CAAO,EAAY,EAAE,OAAW,EAAE,WAAmB,EAAE,EAAE;IACtE,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,aAAa,CAAU,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,iBAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC,CAAA,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { MongoClient, Db, Collection } from 'mongodb';
|
|
2
|
+
import EntityBase from '../../entities/Base';
|
|
3
|
+
import ServerLogger from '../logger';
|
|
4
|
+
import RedisService from '../../adapters/redisService';
|
|
5
|
+
import BaseMigration from './DBScripts/BaseMigration';
|
|
6
|
+
type Migrations = Array<{
|
|
7
|
+
version: Number;
|
|
8
|
+
migration: BaseMigration;
|
|
9
|
+
}>;
|
|
10
|
+
declare abstract class Database {
|
|
11
|
+
protected logger: ServerLogger;
|
|
12
|
+
protected connectionString: string;
|
|
13
|
+
protected mongoDbServer: MongoClient;
|
|
14
|
+
protected mongoDb: Db;
|
|
15
|
+
protected redis: RedisService;
|
|
16
|
+
constructor(connectionString: string, redis: RedisService, logger: ServerLogger);
|
|
17
|
+
abstract getCollectionsNames(): string[];
|
|
18
|
+
protected abstract getMigrations(): Migrations;
|
|
19
|
+
getCollection<T extends EntityBase>(collectionName: any): Collection<T>;
|
|
20
|
+
checkLiveness(): Promise<Boolean>;
|
|
21
|
+
connect(): Promise<void>;
|
|
22
|
+
disconnect(): Promise<void>;
|
|
23
|
+
initialize(): Promise<boolean>;
|
|
24
|
+
}
|
|
25
|
+
export default Database;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const mongodb_1 = require("mongodb");
|
|
16
|
+
const DBInitialise_1 = __importDefault(require("./DBScripts/DBInitialise"));
|
|
17
|
+
const Version_1 = __importDefault(require("../../entities/Version"));
|
|
18
|
+
class Database {
|
|
19
|
+
constructor(connectionString, redis, logger) {
|
|
20
|
+
this.connectionString = connectionString;
|
|
21
|
+
this.redis = redis;
|
|
22
|
+
this.logger = logger;
|
|
23
|
+
}
|
|
24
|
+
getCollection(collectionName) {
|
|
25
|
+
return this.mongoDb.collection(collectionName);
|
|
26
|
+
}
|
|
27
|
+
checkLiveness() {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
try {
|
|
30
|
+
const collectionCursor = this.mongoDb.listCollections();
|
|
31
|
+
const array = yield collectionCursor.toArray();
|
|
32
|
+
return array.length > 0;
|
|
33
|
+
}
|
|
34
|
+
catch (_a) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
connect() {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
this.mongoDbServer = yield mongodb_1.MongoClient.connect(this.connectionString);
|
|
42
|
+
this.mongoDb = this.mongoDbServer.db('collaboracia');
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
disconnect() {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
if (this.mongoDbServer) {
|
|
48
|
+
yield this.mongoDbServer.close(false);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
initialize() {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
this.logger.generic.info('starting db initialization');
|
|
55
|
+
try {
|
|
56
|
+
const versions = yield this.getCollection('versions').find({}).sort({ version: -1 }).limit(1).toArray();
|
|
57
|
+
const currentVersion = versions && versions[0];
|
|
58
|
+
if (!currentVersion) {
|
|
59
|
+
try {
|
|
60
|
+
this.logger.generic.info('initializing new db');
|
|
61
|
+
yield (0, DBInitialise_1.default)(this, this.mongoDb, this.getMigrations()[this.getMigrations().length - 1].version);
|
|
62
|
+
this.logger.generic.info('initializing completed');
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
catch (ex) {
|
|
66
|
+
this.logger.internalError(ex, 'failed to initialize DB');
|
|
67
|
+
throw ex;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
this.logger.generic.info('found version: ' + versions[0].version, { version: versions[0].version });
|
|
71
|
+
yield this.getMigrations().filter(m => m.version > versions[0].version)
|
|
72
|
+
.reduce((promise, migrationData) => __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
yield promise;
|
|
74
|
+
this.logger.generic.info('migration to version: ' + migrationData.version, { version: migrationData.version });
|
|
75
|
+
yield migrationData.migration.up();
|
|
76
|
+
yield this.getCollection('versions').insertOne(new Version_1.default({ version: migrationData.version, date: new Date() }));
|
|
77
|
+
this.logger.generic.info('migrated to version: ' + migrationData.version, { version: migrationData.version });
|
|
78
|
+
}), Promise.resolve());
|
|
79
|
+
}
|
|
80
|
+
catch (ex) {
|
|
81
|
+
this.logger.internalError(ex, 'DB initializing failed');
|
|
82
|
+
throw ex;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.default = Database;
|
|
88
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/database/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import { IAuthorizedRequest } from '../../types';
|
|
3
|
+
declare class ServerLogger {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(params?: Object);
|
|
6
|
+
get generic(): winston.Logger;
|
|
7
|
+
withParams(params: Object): ServerLogger;
|
|
8
|
+
internalServerError(error: any, req: IAuthorizedRequest): void;
|
|
9
|
+
internalError(error: any, message: string): void;
|
|
10
|
+
eventError(error: any, eventData: any): void;
|
|
11
|
+
badRequest(error: any, req: IAuthorizedRequest): void;
|
|
12
|
+
appStarted(port: any, tunnelStarted?: boolean): void;
|
|
13
|
+
}
|
|
14
|
+
export default ServerLogger;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
var _ServerLogger_params;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const winston_1 = __importDefault(require("winston"));
|
|
19
|
+
const winston_daily_rotate_file_1 = __importDefault(require("winston-daily-rotate-file"));
|
|
20
|
+
const ip_1 = __importDefault(require("ip"));
|
|
21
|
+
const util_1 = __importDefault(require("util"));
|
|
22
|
+
const dataSelectors_1 = __importDefault(require("../../services/dataSelectors"));
|
|
23
|
+
const config_1 = __importDefault(require("../../config"));
|
|
24
|
+
const commonOptions = {
|
|
25
|
+
timestamp: true,
|
|
26
|
+
};
|
|
27
|
+
const factory = (params) => {
|
|
28
|
+
const logger = winston_1.default.createLogger({
|
|
29
|
+
format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.json()),
|
|
30
|
+
levels: Object.assign({}, winston_1.default.config.npm.levels, { fatal: -1 }),
|
|
31
|
+
defaultMeta: params,
|
|
32
|
+
transports: [
|
|
33
|
+
new winston_1.default.transports.Console(Object.assign(Object.assign({}, commonOptions), { level: 'debug' })),
|
|
34
|
+
new winston_daily_rotate_file_1.default(Object.assign(Object.assign({}, commonOptions), { json: true, level: 'debug', dirname: config_1.default.logging.path, filename: 'application-%DATE%.log', datePattern: 'YYYY-MM-DD', zippedArchive: true, maxSize: '20m' })),
|
|
35
|
+
],
|
|
36
|
+
});
|
|
37
|
+
logger.on('error', error => console.error(error));
|
|
38
|
+
return logger;
|
|
39
|
+
};
|
|
40
|
+
const dataSelector = dataSelectors_1.default.composeSelectors(dataSelectors_1.default.selectParams, dataSelectors_1.default.selectQuery, dataSelectors_1.default.selectBody);
|
|
41
|
+
const divider = '\n-----------------------------------\n';
|
|
42
|
+
class ServerLogger {
|
|
43
|
+
constructor(params = null) {
|
|
44
|
+
_ServerLogger_params.set(this, void 0);
|
|
45
|
+
__classPrivateFieldSet(this, _ServerLogger_params, params, "f");
|
|
46
|
+
}
|
|
47
|
+
get generic() {
|
|
48
|
+
return factory(__classPrivateFieldGet(this, _ServerLogger_params, "f"));
|
|
49
|
+
}
|
|
50
|
+
withParams(params) {
|
|
51
|
+
return new ServerLogger(Object.assign(Object.assign({}, params), (__classPrivateFieldGet(this, _ServerLogger_params, "f") || {})));
|
|
52
|
+
}
|
|
53
|
+
internalServerError(error, req) {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
if (error.toHash)
|
|
56
|
+
error = error.toHash();
|
|
57
|
+
const username = ((_b = (_a = req === null || req === void 0 ? void 0 : req.session) === null || _a === void 0 ? void 0 : _a.account) === null || _b === void 0 ? void 0 : _b.login) || 'anonymous';
|
|
58
|
+
const permissions = JSON.stringify(req === null || req === void 0 ? void 0 : req.currentOrgPermissions);
|
|
59
|
+
const requestPayload = dataSelector(req);
|
|
60
|
+
if (requestPayload === null || requestPayload === void 0 ? void 0 : requestPayload.password) {
|
|
61
|
+
requestPayload.password = '*********';
|
|
62
|
+
}
|
|
63
|
+
if (requestPayload === null || requestPayload === void 0 ? void 0 : requestPayload.passwordConfirm) {
|
|
64
|
+
requestPayload.passwordConfirm = '*********';
|
|
65
|
+
}
|
|
66
|
+
const requestString = util_1.default.format('INTERNAL SERVER ERROR\n%s %s\nusername: %s\npermissions: %s\n%j', req.originalRequest.method, req.originalRequest.url, username, permissions, requestPayload);
|
|
67
|
+
const errorString = util_1.default.format('status code: %s\n%s\n%s', 500, error, error.stack);
|
|
68
|
+
this.generic.error(requestString + ' ' + errorString, { error, username, requestPayload });
|
|
69
|
+
}
|
|
70
|
+
internalError(error, message) {
|
|
71
|
+
if (error.toHash)
|
|
72
|
+
error = error.toHash();
|
|
73
|
+
const errorString = util_1.default.format('%s\n%s\n%s', error, error.code || 'no code', error.stack);
|
|
74
|
+
this.generic.error(message + ' ' + errorString, { error, message });
|
|
75
|
+
}
|
|
76
|
+
eventError(error, eventData) {
|
|
77
|
+
if (error.toHash)
|
|
78
|
+
error = error.toHash();
|
|
79
|
+
const eventString = util_1.default.format('INTERNAL EVENT ERROR\n%s %s\n%j', eventData.channel, eventData.message);
|
|
80
|
+
const errorString = util_1.default.format('%s\n%s\n%s', error, error.code || 'no code', error.stack);
|
|
81
|
+
this.generic.error(eventString + ' ' + errorString, Object.assign(Object.assign({}, eventData), { error }));
|
|
82
|
+
}
|
|
83
|
+
badRequest(error, req) {
|
|
84
|
+
var _a, _b;
|
|
85
|
+
if (error.toHash)
|
|
86
|
+
error = error.toHash();
|
|
87
|
+
const username = ((_b = (_a = req === null || req === void 0 ? void 0 : req.session) === null || _a === void 0 ? void 0 : _a.account) === null || _b === void 0 ? void 0 : _b.login) || 'anonymous';
|
|
88
|
+
const permissions = JSON.stringify(req === null || req === void 0 ? void 0 : req.currentOrgPermissions);
|
|
89
|
+
const requestPayload = dataSelector(req);
|
|
90
|
+
if (requestPayload === null || requestPayload === void 0 ? void 0 : requestPayload.password) {
|
|
91
|
+
requestPayload.password = '*********';
|
|
92
|
+
}
|
|
93
|
+
if (requestPayload === null || requestPayload === void 0 ? void 0 : requestPayload.passwordConfirm) {
|
|
94
|
+
requestPayload.passwordConfirm = '*********';
|
|
95
|
+
}
|
|
96
|
+
const requestString = util_1.default.format('BAD REQUEST\n%s %s\nusername: %s\npermissions: %s\n%j', req.originalRequest.method, req.originalRequest.url, username, permissions, requestPayload);
|
|
97
|
+
const errorString = util_1.default.format('code: %s\nfields: %j\nstatus: %d', error.code, error.fields || 'no fields', error.statusCode || 400);
|
|
98
|
+
this.generic.debug(requestString + ' ' + errorString, { error, requestPayload });
|
|
99
|
+
}
|
|
100
|
+
appStarted(port, tunnelStarted = false) {
|
|
101
|
+
this.generic.info('Server started ✓');
|
|
102
|
+
if (tunnelStarted) {
|
|
103
|
+
this.generic.info(`Tunnel initialised ✓`);
|
|
104
|
+
}
|
|
105
|
+
this.generic.info('\nAccess URLs:' +
|
|
106
|
+
divider +
|
|
107
|
+
`Localhost: http://localhost:${port}` + '\n' +
|
|
108
|
+
`LAN: http://${ip_1.default.address()}:${port}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
_ServerLogger_params = new WeakMap();
|
|
112
|
+
exports.default = ServerLogger;
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/logger/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import amqp from 'amqplib';
|
|
2
|
+
import ServerLogger from '../../adapters/logger';
|
|
3
|
+
declare class Rabbitmq {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(logger: ServerLogger);
|
|
6
|
+
connect(tryRecconect?: boolean, timeout?: number): Promise<void>;
|
|
7
|
+
disconnect(): Promise<void>;
|
|
8
|
+
emitEvent(exchange: string, eventData: Object): Promise<void>;
|
|
9
|
+
consume(exchange: string, queue: string, onMessage: (msg: amqp.Message) => Promise<void>, options?: {
|
|
10
|
+
pattern: string;
|
|
11
|
+
noAck: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
checkLiveness(): Promise<boolean>;
|
|
14
|
+
createExchanges(exchanges: string[], type?: string, durable?: boolean): Promise<void>;
|
|
15
|
+
createQueues(queues: string[], durable?: boolean): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export default Rabbitmq;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
14
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
15
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
16
|
+
};
|
|
17
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
18
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
19
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
20
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
21
|
+
};
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
var _Rabbitmq_logger, _Rabbitmq_connection, _Rabbitmq_channel;
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
const amqplib_1 = __importDefault(require("amqplib"));
|
|
28
|
+
const config_1 = __importDefault(require("../../config"));
|
|
29
|
+
class Rabbitmq {
|
|
30
|
+
constructor(logger) {
|
|
31
|
+
_Rabbitmq_logger.set(this, void 0);
|
|
32
|
+
_Rabbitmq_connection.set(this, void 0);
|
|
33
|
+
_Rabbitmq_channel.set(this, void 0);
|
|
34
|
+
__classPrivateFieldSet(this, _Rabbitmq_logger, logger, "f");
|
|
35
|
+
}
|
|
36
|
+
connect(tryRecconect = false, timeout = 1000) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const self = this;
|
|
39
|
+
const reconnect = () => __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
const promise = self.connect.call(self, true, Math.min(timeout * 2, 20000));
|
|
41
|
+
yield promise;
|
|
42
|
+
});
|
|
43
|
+
__classPrivateFieldGet(this, _Rabbitmq_logger, "f").generic.info("Connecting to rabbit");
|
|
44
|
+
try {
|
|
45
|
+
__classPrivateFieldSet(this, _Rabbitmq_connection, yield amqplib_1.default.connect(config_1.default.rabbitmq.uri), "f");
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
__classPrivateFieldGet(this, _Rabbitmq_logger, "f").generic.error("rabbit error", err);
|
|
49
|
+
if (tryRecconect) {
|
|
50
|
+
setTimeout(reconnect, timeout);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
__classPrivateFieldGet(this, _Rabbitmq_connection, "f").on("error", function (err) {
|
|
55
|
+
__classPrivateFieldSet(self, _Rabbitmq_connection, null, "f");
|
|
56
|
+
if ((err === null || err === void 0 ? void 0 : err.message) !== "Connection closing") {
|
|
57
|
+
__classPrivateFieldGet(this, _Rabbitmq_logger, "f").generic.error("rabbit error", err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
__classPrivateFieldGet(this, _Rabbitmq_connection, "f").on("close", function (err) {
|
|
61
|
+
__classPrivateFieldSet(self, _Rabbitmq_connection, null, "f");
|
|
62
|
+
if (err) {
|
|
63
|
+
__classPrivateFieldGet(self, _Rabbitmq_logger, "f").generic.error("rabbit error", err);
|
|
64
|
+
setTimeout(reconnect, timeout);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
__classPrivateFieldSet(this, _Rabbitmq_channel, yield __classPrivateFieldGet(this, _Rabbitmq_connection, "f").createChannel(), "f");
|
|
68
|
+
__classPrivateFieldGet(this, _Rabbitmq_logger, "f").generic.info("Connected to rabbit");
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
disconnect() {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
__classPrivateFieldGet(this, _Rabbitmq_logger, "f").generic.info("Disconnecting from rabbit");
|
|
74
|
+
yield __classPrivateFieldGet(this, _Rabbitmq_channel, "f").close();
|
|
75
|
+
yield __classPrivateFieldGet(this, _Rabbitmq_connection, "f").close();
|
|
76
|
+
__classPrivateFieldGet(this, _Rabbitmq_logger, "f").generic.info("Disconnected from rabbit");
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
emitEvent(exchange, eventData) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const emit = () => __classPrivateFieldGet(this, _Rabbitmq_channel, "f").publish(exchange, '*', Buffer.from(JSON.stringify(eventData)));
|
|
82
|
+
try {
|
|
83
|
+
emit();
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
__classPrivateFieldGet(this, _Rabbitmq_logger, "f").internalError(e, "Unable to publish to rabbit");
|
|
87
|
+
try {
|
|
88
|
+
yield this.disconnect();
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
yield this.connect();
|
|
92
|
+
emit();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
consume(exchange, queue, onMessage, options = {
|
|
98
|
+
noAck: true,
|
|
99
|
+
pattern: '*'
|
|
100
|
+
}) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
if (!exchange) {
|
|
103
|
+
throw 'exchange is null';
|
|
104
|
+
}
|
|
105
|
+
yield this.createExchanges([exchange]);
|
|
106
|
+
yield this.createQueues([queue]);
|
|
107
|
+
yield __classPrivateFieldGet(this, _Rabbitmq_channel, "f").bindQueue(queue, exchange, options.pattern);
|
|
108
|
+
yield __classPrivateFieldGet(this, _Rabbitmq_channel, "f").consume(queue, (msg) => __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
try {
|
|
110
|
+
yield onMessage(msg);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
const errorQueueName = 'ERROR:' + queue;
|
|
114
|
+
yield this.createQueues([errorQueueName]);
|
|
115
|
+
__classPrivateFieldGet(this, _Rabbitmq_channel, "f").publish('', errorQueueName, Buffer.from(JSON.stringify({
|
|
116
|
+
message: msg.content.toString(),
|
|
117
|
+
error: e
|
|
118
|
+
})));
|
|
119
|
+
}
|
|
120
|
+
}), { noAck: options.noAck });
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
checkLiveness() {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
return !!__classPrivateFieldGet(this, _Rabbitmq_connection, "f");
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
createExchanges(exchanges, type = 'direct', durable = true) {
|
|
129
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
yield Promise.all(exchanges.map(exchange => __classPrivateFieldGet(this, _Rabbitmq_channel, "f").assertExchange(exchange, type, {
|
|
131
|
+
durable,
|
|
132
|
+
})));
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
createQueues(queues, durable = true) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
yield Promise.all(queues.map(queue => __classPrivateFieldGet(this, _Rabbitmq_channel, "f").assertQueue(queue, {
|
|
138
|
+
durable
|
|
139
|
+
})));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
_Rabbitmq_logger = new WeakMap(), _Rabbitmq_connection = new WeakMap(), _Rabbitmq_channel = new WeakMap();
|
|
144
|
+
exports.default = Rabbitmq;
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/rabbitmq/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA2B;AAG3B,0DAAkC;AAElC,MAAM,QAAQ;IAOZ,YAAY,MAAoB;QANhC,mCAAsB;QAEtB,uCAA6B;QAE7B,oCAAuB;QAGrB,uBAAA,IAAI,oBAAW,MAAM,MAAA,CAAC;IACxB,CAAC;IAEK,OAAO,CAAC,eAAwB,KAAK,EAAE,UAAkB,IAAI;;YACjE,MAAM,IAAI,GAAG,IAAI,CAAC;YAClB,MAAM,SAAS,GAAG,GAAS,EAAE;gBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC5E,MAAM,OAAO,CAAC;YAChB,CAAC,CAAA,CAAA;YACD,uBAAA,IAAI,wBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClD,IAAI;gBACF,uBAAA,IAAI,wBAAe,MAAM,iBAAI,CAAC,OAAO,CAAC,gBAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAA,CAAC;aAC5D;YAAC,OAAO,GAAG,EAAE;gBACZ,uBAAA,IAAI,wBAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;gBAChD,IAAI,YAAY,EAAE;oBAChB,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;iBAChC;gBACD,OAAO;aACR;YACD,uBAAA,IAAI,4BAAY,CAAC,EAAE,CAAC,OAAO,EAAE,UAAS,GAAG;gBACvC,uBAAA,IAAI,wBAAe,IAAI,MAAA,CAAC;gBACxB,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,MAAK,oBAAoB,EAAE;oBACzC,uBAAA,IAAI,wBAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;iBACjD;YACH,CAAC,CAAC,CAAC;YAEH,uBAAA,IAAI,4BAAY,CAAC,EAAE,CAAC,OAAO,EAAE,UAAS,GAAG;gBACvC,uBAAA,IAAI,wBAAe,IAAI,MAAA,CAAC;gBACxB,IAAI,GAAG,EAAE;oBACP,uBAAA,IAAI,wBAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;oBAChD,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;iBAChC;YACH,CAAC,CAAC,CAAC;YAEH,uBAAA,IAAI,qBAAY,MAAM,uBAAA,IAAI,4BAAY,CAAC,aAAa,EAAE,MAAA,CAAC;YACvD,uBAAA,IAAI,wBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnD,CAAC;KAAA;IAGK,UAAU;;YACd,uBAAA,IAAI,wBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACvD,MAAM,uBAAA,IAAI,yBAAS,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,uBAAA,IAAI,4BAAY,CAAC,KAAK,EAAE,CAAC;YAC/B,uBAAA,IAAI,wBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxD,CAAC;KAAA;IAEK,SAAS,CAAC,QAAgB,EAAE,SAAiB;;YACjD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,uBAAA,IAAI,yBAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAEhG,IAAI;gBACF,IAAI,EAAE,CAAC;aACR;YAAC,OAAO,CAAC,EAAE;gBACV,uBAAA,IAAI,wBAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC;gBAC7D,IAAI;oBACF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;iBACzB;wBAAS;oBACR,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrB,IAAI,EAAE,CAAC;iBACR;aACF;QACH,CAAC;KAAA;IAEK,OAAO,CACX,QAAgB,EAChB,KAAa,EACb,SAA+C,EAC/C,UAGI;QACF,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,GAAG;KACb;;YACD,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,kBAAkB,CAAA;aACzB;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,MAAM,uBAAA,IAAI,yBAAS,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,uBAAA,IAAI,yBAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAM,GAAG,EAAC,EAAE;gBAC7C,IAAI;oBACF,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;iBACtB;gBAAC,OAAO,CAAC,EAAE;oBACV,MAAM,cAAc,GAAG,QAAQ,GAAC,KAAK,CAAA;oBACrC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;oBAC1C,uBAAA,IAAI,yBAAS,CAAC,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;wBACnE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE;wBAC/B,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC,CAAC,CAAC;iBACN;YACH,CAAC,CAAA,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QAC9B,CAAC;KAAA;IAEK,aAAa;;YACjB,OAAO,CAAC,CAAC,uBAAA,IAAI,4BAAY,CAAC;QAC5B,CAAC;KAAA;IAEK,eAAe,CAAC,SAAmB,EAAE,OAAe,QAAQ,EAAE,UAAmB,IAAI;;YACzF,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CACzC,uBAAA,IAAI,yBAAS,CAAC,cAAc,CAC1B,QAAQ,EACR,IAAI,EACJ;gBACE,OAAO;aACR,CAAC,CACH,CACF,CAAC;QACJ,CAAC;KAAA;IAEK,YAAY,CAAC,MAAgB,EAAE,UAAmB,IAAI;;YAC1D,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACnC,uBAAA,IAAI,yBAAS,CAAC,WAAW,CACvB,KAAK,EACL;gBACE,OAAO;aACR,CACF,CACF,CAAC,CAAC;QACL,CAAC;KAAA;CACF;;AAED,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Client from "ioredis";
|
|
2
|
+
declare class Listener {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(redisClientDB: Client);
|
|
5
|
+
psubscribe(pattern: any): Promise<unknown>;
|
|
6
|
+
subscribe(channel: any): Promise<unknown>;
|
|
7
|
+
on(channel: any, cb: any): Client;
|
|
8
|
+
unsubscribe(): void;
|
|
9
|
+
}
|
|
10
|
+
export default Listener;
|