backend-test-tools 1.0.0
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/.env.example +51 -0
- package/.mocharc.js +9 -0
- package/.prettierrc +7 -0
- package/README.md +271 -0
- package/babel.config.json +33 -0
- package/dist/factory/factory.d.ts +11 -0
- package/dist/factory/factory.js +39 -0
- package/dist/factory/factory.js.map +1 -0
- package/dist/factory/factory.types.d.ts +38 -0
- package/dist/factory/factory.types.js +2 -0
- package/dist/factory/factory.types.js.map +1 -0
- package/dist/factory/index.d.ts +2 -0
- package/dist/factory/index.js +28 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/factory/workers/connection.d.ts +3 -0
- package/dist/factory/workers/connection.js +25 -0
- package/dist/factory/workers/connection.js.map +1 -0
- package/dist/factory/workers/connection.types.d.ts +28 -0
- package/dist/factory/workers/connection.types.js +2 -0
- package/dist/factory/workers/connection.types.js.map +1 -0
- package/dist/factory/workers/index.d.ts +6 -0
- package/dist/factory/workers/index.js +72 -0
- package/dist/factory/workers/index.js.map +1 -0
- package/dist/factory/workers/organization.d.ts +3 -0
- package/dist/factory/workers/organization.js +36 -0
- package/dist/factory/workers/organization.js.map +1 -0
- package/dist/factory/workers/organization.types.d.ts +51 -0
- package/dist/factory/workers/organization.types.js +2 -0
- package/dist/factory/workers/organization.types.js.map +1 -0
- package/dist/factory/workers/user.d.ts +5 -0
- package/dist/factory/workers/user.js +60 -0
- package/dist/factory/workers/user.js.map +1 -0
- package/dist/factory/workers/user.types.d.ts +76 -0
- package/dist/factory/workers/user.types.js +2 -0
- package/dist/factory/workers/user.types.js.map +1 -0
- package/dist/generators/generateAccessToken.d.ts +3 -0
- package/dist/generators/generateAccessToken.js +27 -0
- package/dist/generators/generateAccessToken.js.map +1 -0
- package/dist/generators/generateChatId.d.ts +2 -0
- package/dist/generators/generateChatId.js +13 -0
- package/dist/generators/generateChatId.js.map +1 -0
- package/dist/generators/generateEcdsaKeyPair.d.ts +2 -0
- package/dist/generators/generateEcdsaKeyPair.js +31 -0
- package/dist/generators/generateEcdsaKeyPair.js.map +1 -0
- package/dist/generators/generateImageBuffer.d.ts +3 -0
- package/dist/generators/generateImageBuffer.js +23 -0
- package/dist/generators/generateImageBuffer.js.map +1 -0
- package/dist/generators/generateImageBuffer.types.d.ts +7 -0
- package/dist/generators/generateImageBuffer.types.js +2 -0
- package/dist/generators/generateImageBuffer.types.js.map +1 -0
- package/dist/generators/generateKeyPair.d.ts +6 -0
- package/dist/generators/generateKeyPair.js +36 -0
- package/dist/generators/generateKeyPair.js.map +1 -0
- package/dist/generators/generateKeyPair.types.d.ts +9 -0
- package/dist/generators/generateKeyPair.types.js +2 -0
- package/dist/generators/generateKeyPair.types.js.map +1 -0
- package/dist/generators/generateLocale.d.ts +5 -0
- package/dist/generators/generateLocale.js +16 -0
- package/dist/generators/generateLocale.js.map +1 -0
- package/dist/generators/generateRegId.d.ts +4 -0
- package/dist/generators/generateRegId.js +14 -0
- package/dist/generators/generateRegId.js.map +1 -0
- package/dist/generators/generateRsaKeyPair.d.ts +2 -0
- package/dist/generators/generateRsaKeyPair.js +22 -0
- package/dist/generators/generateRsaKeyPair.js.map +1 -0
- package/dist/generators/generateUserCrypto.d.ts +15 -0
- package/dist/generators/generateUserCrypto.js +33 -0
- package/dist/generators/generateUserCrypto.js.map +1 -0
- package/dist/generators/index.d.ts +9 -0
- package/dist/generators/index.js +105 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/stubs/index.d.ts +1 -0
- package/dist/stubs/index.js +17 -0
- package/dist/stubs/index.js.map +1 -0
- package/dist/stubs/server-engine/Leader.types.d.ts +8 -0
- package/dist/stubs/server-engine/Leader.types.js +2 -0
- package/dist/stubs/server-engine/Leader.types.js.map +1 -0
- package/dist/stubs/server-engine/Localizator.d.ts +3 -0
- package/dist/stubs/server-engine/Localizator.js +34 -0
- package/dist/stubs/server-engine/Localizator.js.map +1 -0
- package/dist/stubs/server-engine/Localizator.types.d.ts +22 -0
- package/dist/stubs/server-engine/Localizator.types.js +2 -0
- package/dist/stubs/server-engine/Localizator.types.js.map +1 -0
- package/dist/stubs/server-engine/PubSub.d.ts +3 -0
- package/dist/stubs/server-engine/PubSub.js +24 -0
- package/dist/stubs/server-engine/PubSub.js.map +1 -0
- package/dist/stubs/server-engine/PubSub.types.d.ts +14 -0
- package/dist/stubs/server-engine/PubSub.types.js +2 -0
- package/dist/stubs/server-engine/PubSub.types.js.map +1 -0
- package/dist/stubs/server-engine/PushNotification.d.ts +3 -0
- package/dist/stubs/server-engine/PushNotification.js +18 -0
- package/dist/stubs/server-engine/PushNotification.js.map +1 -0
- package/dist/stubs/server-engine/PushNotification.types.d.ts +8 -0
- package/dist/stubs/server-engine/PushNotification.types.js +2 -0
- package/dist/stubs/server-engine/PushNotification.types.js.map +1 -0
- package/dist/stubs/server-engine/index.d.ts +4 -0
- package/dist/stubs/server-engine/index.js +50 -0
- package/dist/stubs/server-engine/index.js.map +1 -0
- package/dist/stubs/server-engine/sendPush.d.ts +3 -0
- package/dist/stubs/server-engine/sendPush.js +15 -0
- package/dist/stubs/server-engine/sendPush.js.map +1 -0
- package/dist/utils/generateCerts/generateCerts.const.d.ts +5 -0
- package/dist/utils/generateCerts/generateCerts.const.js +35 -0
- package/dist/utils/generateCerts/generateCerts.const.js.map +1 -0
- package/dist/utils/generateCerts/generateCerts.d.ts +9 -0
- package/dist/utils/generateCerts/generateCerts.js +108 -0
- package/dist/utils/generateCerts/generateCerts.js.map +1 -0
- package/dist/utils/generateCerts/generateCerts.types.d.ts +19 -0
- package/dist/utils/generateCerts/generateCerts.types.js +2 -0
- package/dist/utils/generateCerts/generateCerts.types.js.map +1 -0
- package/dist/utils/generateCerts/index.d.ts +1 -0
- package/dist/utils/generateCerts/index.js +17 -0
- package/dist/utils/generateCerts/index.js.map +1 -0
- package/dist/utils/getAdminApiBearer.d.ts +2 -0
- package/dist/utils/getAdminApiBearer.js +19 -0
- package/dist/utils/getAdminApiBearer.js.map +1 -0
- package/dist/utils/getBearer.d.ts +3 -0
- package/dist/utils/getBearer.js +12 -0
- package/dist/utils/getBearer.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +72 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/jwtRequest.d.ts +9 -0
- package/dist/utils/jwtRequest.js +29 -0
- package/dist/utils/jwtRequest.js.map +1 -0
- package/dist/utils/staticRequest.d.ts +10 -0
- package/dist/utils/staticRequest.js +24 -0
- package/dist/utils/staticRequest.js.map +1 -0
- package/dist/utils/tlsRequest.d.ts +6 -0
- package/dist/utils/tlsRequest.js +44 -0
- package/dist/utils/tlsRequest.js.map +1 -0
- package/dist/utils/tlsRequest.types.d.ts +9 -0
- package/dist/utils/tlsRequest.types.js +2 -0
- package/dist/utils/tlsRequest.types.js.map +1 -0
- package/eslint.config.mjs +11 -0
- package/jsconfig.json +14 -0
- package/package.json +83 -0
- package/src/factory/factory.ts +51 -0
- package/src/factory/factory.types.ts +50 -0
- package/src/factory/index.ts +2 -0
- package/src/factory/workers/connection.ts +22 -0
- package/src/factory/workers/connection.types.ts +29 -0
- package/src/factory/workers/index.ts +6 -0
- package/src/factory/workers/organization.ts +35 -0
- package/src/factory/workers/organization.types.ts +53 -0
- package/src/factory/workers/user.ts +57 -0
- package/src/factory/workers/user.types.ts +77 -0
- package/src/generators/generateAccessToken.ts +24 -0
- package/src/generators/generateChatId.ts +6 -0
- package/src/generators/generateEcdsaKeyPair.ts +16 -0
- package/src/generators/generateImageBuffer.ts +19 -0
- package/src/generators/generateImageBuffer.types.ts +7 -0
- package/src/generators/generateKeyPair.ts +24 -0
- package/src/generators/generateKeyPair.types.ts +9 -0
- package/src/generators/generateLocale.ts +28 -0
- package/src/generators/generateRegId.ts +9 -0
- package/src/generators/generateRsaKeyPair.ts +12 -0
- package/src/generators/generateUserCrypto.ts +24 -0
- package/src/generators/index.ts +9 -0
- package/src/index.ts +4 -0
- package/src/stubs/index.ts +1 -0
- package/src/stubs/server-engine/Leader.types.ts +9 -0
- package/src/stubs/server-engine/Localizator.ts +25 -0
- package/src/stubs/server-engine/Localizator.types.ts +24 -0
- package/src/stubs/server-engine/PubSub.ts +13 -0
- package/src/stubs/server-engine/PubSub.types.ts +15 -0
- package/src/stubs/server-engine/PushNotification.ts +11 -0
- package/src/stubs/server-engine/PushNotification.types.ts +9 -0
- package/src/stubs/server-engine/index.ts +4 -0
- package/src/stubs/server-engine/sendPush.ts +7 -0
- package/src/utils/generateCerts/generateCerts.const.ts +48 -0
- package/src/utils/generateCerts/generateCerts.ts +108 -0
- package/src/utils/generateCerts/generateCerts.types.ts +21 -0
- package/src/utils/generateCerts/index.ts +1 -0
- package/src/utils/getAdminApiBearer.ts +17 -0
- package/src/utils/getBearer.ts +11 -0
- package/src/utils/index.ts +6 -0
- package/src/utils/jwtRequest.ts +25 -0
- package/src/utils/staticRequest.ts +22 -0
- package/src/utils/tlsRequest.ts +41 -0
- package/src/utils/tlsRequest.types.ts +9 -0
- package/test/env.ts +10 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_user","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_user2","_connection","_connection2","_organization","_organization2"],"sources":["../../../src/factory/workers/index.ts"],"sourcesContent":["export * from './user';\nexport * from './user.types';\nexport * from './connection';\nexport * from './connection.types';\nexport * from './organization';\nexport * from './organization.types';\n"],"mappings":";;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,KAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,KAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,KAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,MAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,MAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,MAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,MAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,WAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,WAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,WAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,WAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,YAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,YAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,YAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,YAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,aAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,aAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,aAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,aAAA,CAAAR,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,cAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,cAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAS,cAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,cAAA,CAAAT,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.organizationFactoryWorker = organizationFactoryWorker;
|
|
7
|
+
var _faker = require("@faker-js/faker");
|
|
8
|
+
/** Create a random organization */
|
|
9
|
+
function organizationFactoryWorker() {
|
|
10
|
+
return {
|
|
11
|
+
name: _faker.faker.company.name(),
|
|
12
|
+
territory: _faker.faker.address.countryCode(),
|
|
13
|
+
description: _faker.faker.company.catchPhrase(),
|
|
14
|
+
contactInfo: _faker.faker.address.streetAddress(),
|
|
15
|
+
productsInfo: _faker.faker.company.catchPhrase(),
|
|
16
|
+
avatarUrl: _faker.faker.internet.url(),
|
|
17
|
+
coverUrl: _faker.faker.internet.url(),
|
|
18
|
+
membersVisible: _faker.faker.datatype.boolean(),
|
|
19
|
+
searchable: _faker.faker.datatype.boolean(),
|
|
20
|
+
activities: [{
|
|
21
|
+
id: _faker.faker.string.uuid(),
|
|
22
|
+
translationKey: _faker.faker.lorem.word()
|
|
23
|
+
}],
|
|
24
|
+
members: [{
|
|
25
|
+
id: _faker.faker.string.uuid(),
|
|
26
|
+
organizationId: _faker.faker.string.uuid(),
|
|
27
|
+
userId: _faker.faker.string.uuid(),
|
|
28
|
+
requested: _faker.faker.datatype.boolean(),
|
|
29
|
+
requestedAt: _faker.faker.date.recent(),
|
|
30
|
+
invited: _faker.faker.datatype.boolean(),
|
|
31
|
+
invitedAt: _faker.faker.date.recent(),
|
|
32
|
+
admin: _faker.faker.datatype.boolean()
|
|
33
|
+
}]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=organization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.js","names":["_faker","require","organizationFactoryWorker","name","faker","company","territory","address","countryCode","description","catchPhrase","contactInfo","streetAddress","productsInfo","avatarUrl","internet","url","coverUrl","membersVisible","datatype","boolean","searchable","activities","id","string","uuid","translationKey","lorem","word","members","organizationId","userId","requested","requestedAt","date","recent","invited","invitedAt","admin"],"sources":["../../../src/factory/workers/organization.ts"],"sourcesContent":["import { faker } from '@faker-js/faker';\nimport {OrganizationModel} from './organization.types';\n\n/** Create a random organization */\nexport function organizationFactoryWorker(): OrganizationModel {\n return {\n name: faker.company.name(),\n territory: faker.address.countryCode(),\n description: faker.company.catchPhrase(),\n contactInfo: faker.address.streetAddress(),\n productsInfo: faker.company.catchPhrase(),\n avatarUrl: faker.internet.url(),\n coverUrl: faker.internet.url(),\n membersVisible: faker.datatype.boolean(),\n searchable: faker.datatype.boolean(),\n activities: [\n {\n id: faker.string.uuid(),\n translationKey: faker.lorem.word(),\n },\n ],\n members: [\n {\n id: faker.string.uuid(),\n organizationId: faker.string.uuid(),\n userId: faker.string.uuid(),\n requested: faker.datatype.boolean(),\n requestedAt: faker.date.recent(),\n invited: faker.datatype.boolean(),\n invitedAt: faker.date.recent(),\n admin: faker.datatype.boolean(),\n },\n ],\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA;AACO,SAASC,yBAAyBA,CAAA,EAAsB;EAC7D,OAAO;IACLC,IAAI,EAAEC,YAAK,CAACC,OAAO,CAACF,IAAI,CAAC,CAAC;IAC1BG,SAAS,EAAEF,YAAK,CAACG,OAAO,CAACC,WAAW,CAAC,CAAC;IACtCC,WAAW,EAAEL,YAAK,CAACC,OAAO,CAACK,WAAW,CAAC,CAAC;IACxCC,WAAW,EAAEP,YAAK,CAACG,OAAO,CAACK,aAAa,CAAC,CAAC;IAC1CC,YAAY,EAAET,YAAK,CAACC,OAAO,CAACK,WAAW,CAAC,CAAC;IACzCI,SAAS,EAAEV,YAAK,CAACW,QAAQ,CAACC,GAAG,CAAC,CAAC;IAC/BC,QAAQ,EAAEb,YAAK,CAACW,QAAQ,CAACC,GAAG,CAAC,CAAC;IAC9BE,cAAc,EAAEd,YAAK,CAACe,QAAQ,CAACC,OAAO,CAAC,CAAC;IACxCC,UAAU,EAAEjB,YAAK,CAACe,QAAQ,CAACC,OAAO,CAAC,CAAC;IACpCE,UAAU,EAAE,CACV;MACEC,EAAE,EAAEnB,YAAK,CAACoB,MAAM,CAACC,IAAI,CAAC,CAAC;MACvBC,cAAc,EAAEtB,YAAK,CAACuB,KAAK,CAACC,IAAI,CAAC;IACnC,CAAC,CACF;IACDC,OAAO,EAAE,CACP;MACEN,EAAE,EAAEnB,YAAK,CAACoB,MAAM,CAACC,IAAI,CAAC,CAAC;MACvBK,cAAc,EAAE1B,YAAK,CAACoB,MAAM,CAACC,IAAI,CAAC,CAAC;MACnCM,MAAM,EAAE3B,YAAK,CAACoB,MAAM,CAACC,IAAI,CAAC,CAAC;MAC3BO,SAAS,EAAE5B,YAAK,CAACe,QAAQ,CAACC,OAAO,CAAC,CAAC;MACnCa,WAAW,EAAE7B,YAAK,CAAC8B,IAAI,CAACC,MAAM,CAAC,CAAC;MAChCC,OAAO,EAAEhC,YAAK,CAACe,QAAQ,CAACC,OAAO,CAAC,CAAC;MACjCiB,SAAS,EAAEjC,YAAK,CAAC8B,IAAI,CAACC,MAAM,CAAC,CAAC;MAC9BG,KAAK,EAAElC,YAAK,CAACe,QAAQ,CAACC,OAAO,CAAC;IAChC,CAAC;EAEL,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Organization base model */
|
|
2
|
+
export interface OrganizationModel {
|
|
3
|
+
/** Name of the organization */
|
|
4
|
+
name: string;
|
|
5
|
+
/** ISO Code of the territory in which the organization is located */
|
|
6
|
+
territory: string;
|
|
7
|
+
/** Description of the organization */
|
|
8
|
+
description: string;
|
|
9
|
+
/** Contact information of the organization */
|
|
10
|
+
contactInfo: string;
|
|
11
|
+
/** Product information fo the organization */
|
|
12
|
+
productsInfo: string;
|
|
13
|
+
/** URL of the organization avatar */
|
|
14
|
+
avatarUrl: string;
|
|
15
|
+
/** URL of the organization cover picture */
|
|
16
|
+
coverUrl: string;
|
|
17
|
+
/** Indicates if organization members are visible publicly */
|
|
18
|
+
membersVisible: boolean;
|
|
19
|
+
/** Indicates if organization is searchable publicly */
|
|
20
|
+
searchable: boolean;
|
|
21
|
+
/** List of activities that the organization has */
|
|
22
|
+
activities: Array<OrganizationActivityModel>;
|
|
23
|
+
/** List of organization members */
|
|
24
|
+
members: Array<OrganizationMemberModel>;
|
|
25
|
+
}
|
|
26
|
+
/** Organization activity template */
|
|
27
|
+
export interface OrganizationActivityModel {
|
|
28
|
+
/** ID of the activity */
|
|
29
|
+
id: string;
|
|
30
|
+
/** Translation key to display the activity name */
|
|
31
|
+
translationKey: string;
|
|
32
|
+
}
|
|
33
|
+
/** Organization member */
|
|
34
|
+
export interface OrganizationMemberModel {
|
|
35
|
+
/** ID of the membership */
|
|
36
|
+
id: string;
|
|
37
|
+
/** ID of the organization on which the user has membership */
|
|
38
|
+
organizationId: string;
|
|
39
|
+
/** ID of the user */
|
|
40
|
+
userId: string;
|
|
41
|
+
/** Did the user accept/request to join the organization */
|
|
42
|
+
requested: boolean;
|
|
43
|
+
/** Time at which the user accepted/requested to join the organization */
|
|
44
|
+
requestedAt: Date;
|
|
45
|
+
/** Did the user get accepted/invited by an organization admin */
|
|
46
|
+
invited: boolean;
|
|
47
|
+
/** Time at which the user got accepted/invited by an organization admin */
|
|
48
|
+
invitedAt: Date;
|
|
49
|
+
/** Is the user an admin of the organization */
|
|
50
|
+
admin: boolean;
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.types.js","names":[],"sources":["../../../src/factory/workers/organization.types.ts"],"sourcesContent":["/** Organization base model */\nexport interface OrganizationModel {\n /** Name of the organization */\n name: string;\n /** ISO Code of the territory in which the organization is located */\n territory: string;\n /** Description of the organization */\n description: string;\n /** Contact information of the organization */\n contactInfo: string;\n /** Product information fo the organization */\n productsInfo: string;\n /** URL of the organization avatar */\n avatarUrl: string;\n /** URL of the organization cover picture */\n coverUrl: string;\n /** Indicates if organization members are visible publicly */\n membersVisible: boolean;\n /** Indicates if organization is searchable publicly */\n searchable: boolean;\n /** List of activities that the organization has */\n activities: Array<OrganizationActivityModel>;\n /** List of organization members */\n members: Array<OrganizationMemberModel>;\n}\n\n/** Organization activity template */\nexport interface OrganizationActivityModel {\n /** ID of the activity */\n id: string;\n /** Translation key to display the activity name */\n translationKey: string;\n}\n\n/** Organization member */\nexport interface OrganizationMemberModel {\n /** ID of the membership */\n id: string;\n /** ID of the organization on which the user has membership */\n organizationId: string;\n /** ID of the user */\n userId: string;\n /** Did the user accept/request to join the organization */\n requested: boolean;\n /** Time at which the user accepted/requested to join the organization */\n requestedAt: Date;\n /** Did the user get accepted/invited by an organization admin */\n invited: boolean;\n /** Time at which the user got accepted/invited by an organization admin */\n invitedAt: Date;\n /** Is the user an admin of the organization */\n admin: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.userFactoryWorker = userFactoryWorker;
|
|
7
|
+
var _crypto = require("crypto");
|
|
8
|
+
var _faker = require("@faker-js/faker");
|
|
9
|
+
var _generators = require("../../generators");
|
|
10
|
+
/**
|
|
11
|
+
* Create a random user
|
|
12
|
+
*/
|
|
13
|
+
function userFactoryWorker(buildOptions = {}) {
|
|
14
|
+
const firstName = buildOptions.firstName ?? _faker.faker.person.firstName();
|
|
15
|
+
const lastName = buildOptions.lastName ?? _faker.faker.person.lastName();
|
|
16
|
+
const email = _faker.faker.internet.email({
|
|
17
|
+
firstName,
|
|
18
|
+
lastName
|
|
19
|
+
});
|
|
20
|
+
const userName = _faker.faker.internet.userName({
|
|
21
|
+
firstName,
|
|
22
|
+
lastName
|
|
23
|
+
});
|
|
24
|
+
const random = Math.random().toString(36).substring(7);
|
|
25
|
+
const organizationId = buildOptions.organizationId;
|
|
26
|
+
const organizationMember = buildOptions.member ?? false;
|
|
27
|
+
const organizationAdmin = buildOptions.admin ?? false;
|
|
28
|
+
return {
|
|
29
|
+
firstName,
|
|
30
|
+
lastName,
|
|
31
|
+
firstNameLastName: `${firstName}${lastName}`,
|
|
32
|
+
firstNameSpaceLastName: `${firstName} ${lastName}`,
|
|
33
|
+
lastNameFirstName: `${lastName}${firstName}`,
|
|
34
|
+
lastNameSpaceFirstName: `${lastName} ${firstName}`,
|
|
35
|
+
displayName: `${firstName} ${lastName}`,
|
|
36
|
+
casualName: `${firstName}`,
|
|
37
|
+
formalName: `${firstName}`,
|
|
38
|
+
email: buildOptions.moreRandom ? `${random}${email}` : email,
|
|
39
|
+
username: buildOptions.moreRandom ? `${random}${userName}` : userName,
|
|
40
|
+
regId: (0, _generators.generateRegId)(),
|
|
41
|
+
locale: (0, _generators.generateLocale)(),
|
|
42
|
+
pictureUrl: _faker.faker.image.avatar(),
|
|
43
|
+
organizationId,
|
|
44
|
+
joinedOrganizationAt: organizationId ? _faker.faker.date.recent() : null,
|
|
45
|
+
organizationAdmin: organizationAdmin,
|
|
46
|
+
requestedToJoinOrganization: organizationMember || organizationAdmin,
|
|
47
|
+
acceptedInOrganization: organizationMember || organizationAdmin,
|
|
48
|
+
linkId: (0, _crypto.randomUUID)(),
|
|
49
|
+
bbId: (0, _crypto.randomUUID)(),
|
|
50
|
+
bbEncrypted: (0, _generators.generateBbEncrypted)(),
|
|
51
|
+
signKeyEncrypted: (0, _generators.generateSignKeyEncrypted)(),
|
|
52
|
+
signKeyPub: (0, _generators.generateSignKeyPub)(),
|
|
53
|
+
autoConnect: true,
|
|
54
|
+
searchable: true,
|
|
55
|
+
enableUrlScan: true,
|
|
56
|
+
enableMessageTranslation: true,
|
|
57
|
+
emailVisibility: true
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","names":["_crypto","require","_faker","_generators","userFactoryWorker","buildOptions","firstName","faker","person","lastName","email","internet","userName","random","Math","toString","substring","organizationId","organizationMember","member","organizationAdmin","admin","firstNameLastName","firstNameSpaceLastName","lastNameFirstName","lastNameSpaceFirstName","displayName","casualName","formalName","moreRandom","username","regId","generateRegId","locale","generateLocale","pictureUrl","image","avatar","joinedOrganizationAt","date","recent","requestedToJoinOrganization","acceptedInOrganization","linkId","randomUUID","bbId","bbEncrypted","generateBbEncrypted","signKeyEncrypted","generateSignKeyEncrypted","signKeyPub","generateSignKeyPub","autoConnect","searchable","enableUrlScan","enableMessageTranslation","emailVisibility"],"sources":["../../../src/factory/workers/user.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { faker } from '@faker-js/faker';\nimport { UserModel, UserBuildOptions } from './user.types';\nimport {\n generateRegId,\n generateLocale,\n generateSignKeyPub,\n generateSignKeyEncrypted,\n generateBbEncrypted\n} from 'generators';\n\n/**\n * Create a random user\n */\nexport function userFactoryWorker(\n buildOptions: UserBuildOptions = {}\n): UserModel {\n const firstName = buildOptions.firstName ?? faker.person.firstName();\n const lastName = buildOptions.lastName ?? faker.person.lastName();\n const email = faker.internet.email({ firstName, lastName });\n const userName = faker.internet.userName({ firstName, lastName });\n const random = Math.random().toString(36).substring(7);\n const organizationId = buildOptions.organizationId;\n const organizationMember = buildOptions.member ?? false;\n const organizationAdmin = buildOptions.admin ?? false;\n return {\n firstName,\n lastName,\n firstNameLastName: `${firstName}${lastName}`,\n firstNameSpaceLastName: `${firstName} ${lastName}`,\n lastNameFirstName: `${lastName}${firstName}`,\n lastNameSpaceFirstName: `${lastName} ${firstName}`,\n displayName: `${firstName} ${lastName}`,\n casualName: `${firstName}`,\n formalName: `${firstName}`,\n email: buildOptions.moreRandom ? `${random}${email}` : email,\n username: buildOptions.moreRandom ? `${random}${userName}` : userName,\n regId: generateRegId(),\n locale: generateLocale(),\n pictureUrl: faker.image.avatar(),\n organizationId,\n joinedOrganizationAt: organizationId ? faker.date.recent() : null,\n organizationAdmin: organizationAdmin,\n requestedToJoinOrganization: organizationMember || organizationAdmin,\n acceptedInOrganization: organizationMember || organizationAdmin,\n linkId: randomUUID(),\n bbId: randomUUID(),\n bbEncrypted: generateBbEncrypted(),\n signKeyEncrypted: generateSignKeyEncrypted(),\n signKeyPub: generateSignKeyPub(),\n autoConnect: true,\n searchable: true,\n enableUrlScan: true,\n enableMessageTranslation: true,\n emailVisibility: true\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,WAAA,GAAAF,OAAA;AAQA;AACA;AACA;AACO,SAASG,iBAAiBA,CAC/BC,YAA8B,GAAG,CAAC,CAAC,EACxB;EACX,MAAMC,SAAS,GAAGD,YAAY,CAACC,SAAS,IAAIC,YAAK,CAACC,MAAM,CAACF,SAAS,CAAC,CAAC;EACpE,MAAMG,QAAQ,GAAGJ,YAAY,CAACI,QAAQ,IAAIF,YAAK,CAACC,MAAM,CAACC,QAAQ,CAAC,CAAC;EACjE,MAAMC,KAAK,GAAGH,YAAK,CAACI,QAAQ,CAACD,KAAK,CAAC;IAAEJ,SAAS;IAAEG;EAAS,CAAC,CAAC;EAC3D,MAAMG,QAAQ,GAAGL,YAAK,CAACI,QAAQ,CAACC,QAAQ,CAAC;IAAEN,SAAS;IAAEG;EAAS,CAAC,CAAC;EACjE,MAAMI,MAAM,GAAGC,IAAI,CAACD,MAAM,CAAC,CAAC,CAACE,QAAQ,CAAC,EAAE,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACtD,MAAMC,cAAc,GAAGZ,YAAY,CAACY,cAAc;EAClD,MAAMC,kBAAkB,GAAGb,YAAY,CAACc,MAAM,IAAI,KAAK;EACvD,MAAMC,iBAAiB,GAAGf,YAAY,CAACgB,KAAK,IAAI,KAAK;EACrD,OAAO;IACLf,SAAS;IACTG,QAAQ;IACRa,iBAAiB,EAAE,GAAGhB,SAAS,GAAGG,QAAQ,EAAE;IAC5Cc,sBAAsB,EAAE,GAAGjB,SAAS,IAAIG,QAAQ,EAAE;IAClDe,iBAAiB,EAAE,GAAGf,QAAQ,GAAGH,SAAS,EAAE;IAC5CmB,sBAAsB,EAAE,GAAGhB,QAAQ,IAAIH,SAAS,EAAE;IAClDoB,WAAW,EAAE,GAAGpB,SAAS,IAAIG,QAAQ,EAAE;IACvCkB,UAAU,EAAE,GAAGrB,SAAS,EAAE;IAC1BsB,UAAU,EAAE,GAAGtB,SAAS,EAAE;IAC1BI,KAAK,EAAEL,YAAY,CAACwB,UAAU,GAAG,GAAGhB,MAAM,GAAGH,KAAK,EAAE,GAAGA,KAAK;IAC5DoB,QAAQ,EAAEzB,YAAY,CAACwB,UAAU,GAAG,GAAGhB,MAAM,GAAGD,QAAQ,EAAE,GAAGA,QAAQ;IACrEmB,KAAK,EAAE,IAAAC,yBAAa,EAAC,CAAC;IACtBC,MAAM,EAAE,IAAAC,0BAAc,EAAC,CAAC;IACxBC,UAAU,EAAE5B,YAAK,CAAC6B,KAAK,CAACC,MAAM,CAAC,CAAC;IAChCpB,cAAc;IACdqB,oBAAoB,EAAErB,cAAc,GAAGV,YAAK,CAACgC,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,IAAI;IACjEpB,iBAAiB,EAAEA,iBAAiB;IACpCqB,2BAA2B,EAAEvB,kBAAkB,IAAIE,iBAAiB;IACpEsB,sBAAsB,EAAExB,kBAAkB,IAAIE,iBAAiB;IAC/DuB,MAAM,EAAE,IAAAC,kBAAU,EAAC,CAAC;IACpBC,IAAI,EAAE,IAAAD,kBAAU,EAAC,CAAC;IAClBE,WAAW,EAAE,IAAAC,+BAAmB,EAAC,CAAC;IAClCC,gBAAgB,EAAE,IAAAC,oCAAwB,EAAC,CAAC;IAC5CC,UAAU,EAAE,IAAAC,8BAAkB,EAAC,CAAC;IAChCC,WAAW,EAAE,IAAI;IACjBC,UAAU,EAAE,IAAI;IAChBC,aAAa,EAAE,IAAI;IACnBC,wBAAwB,EAAE,IAAI;IAC9BC,eAAe,EAAE;EACnB,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** User model template */
|
|
2
|
+
export interface UserModel {
|
|
3
|
+
/** User's first name */
|
|
4
|
+
firstName: string;
|
|
5
|
+
/** User's last name */
|
|
6
|
+
lastName: string;
|
|
7
|
+
/** @deprecated */
|
|
8
|
+
firstNameLastName: string;
|
|
9
|
+
/** @deprecated */
|
|
10
|
+
firstNameSpaceLastName: string;
|
|
11
|
+
/** @deprecated */
|
|
12
|
+
lastNameFirstName: string;
|
|
13
|
+
/** @deprecated */
|
|
14
|
+
lastNameSpaceFirstName: string;
|
|
15
|
+
/** User's regular display name */
|
|
16
|
+
displayName: string;
|
|
17
|
+
/** User's casual display name */
|
|
18
|
+
casualName: string;
|
|
19
|
+
/** User's formal display name */
|
|
20
|
+
formalName: string;
|
|
21
|
+
/** User's email address */
|
|
22
|
+
email: string;
|
|
23
|
+
/** @deprecated User's username */
|
|
24
|
+
username: string;
|
|
25
|
+
/** User's RegId */
|
|
26
|
+
regId: string;
|
|
27
|
+
/** User's locale */
|
|
28
|
+
locale: string;
|
|
29
|
+
/** URL opf the user's avatar */
|
|
30
|
+
pictureUrl: string;
|
|
31
|
+
/** @deprecated ID of the user's organization */
|
|
32
|
+
organizationId?: string;
|
|
33
|
+
/** @deprecated Date at which the user joined the organization */
|
|
34
|
+
joinedOrganizationAt?: Date | null;
|
|
35
|
+
/** @deprecated Admin status of the user in the organization */
|
|
36
|
+
organizationAdmin: boolean;
|
|
37
|
+
/** @deprecated */
|
|
38
|
+
requestedToJoinOrganization: boolean;
|
|
39
|
+
/** @deprecated */
|
|
40
|
+
acceptedInOrganization: boolean;
|
|
41
|
+
/** User's ID for QR codes */
|
|
42
|
+
linkId: string;
|
|
43
|
+
/** User's BlackBerry ID */
|
|
44
|
+
bbId: string;
|
|
45
|
+
/** User's BlackBerry encrypted key */
|
|
46
|
+
bbEncrypted: string;
|
|
47
|
+
/** User's signature keys */
|
|
48
|
+
signKeyEncrypted: string;
|
|
49
|
+
/** User's public key */
|
|
50
|
+
signKeyPub: string;
|
|
51
|
+
/** Enables auto-acceptance of contact requests */
|
|
52
|
+
autoConnect: boolean;
|
|
53
|
+
/** Is the user searchable publicly */
|
|
54
|
+
searchable: boolean;
|
|
55
|
+
/** Is URL scanning enabled for the user */
|
|
56
|
+
enableUrlScan: boolean;
|
|
57
|
+
/** Is message translation enabled for the user */
|
|
58
|
+
enableMessageTranslation: boolean;
|
|
59
|
+
/** Is the user's email visible publicly */
|
|
60
|
+
emailVisibility: boolean;
|
|
61
|
+
}
|
|
62
|
+
/** User template build options */
|
|
63
|
+
export interface UserBuildOptions {
|
|
64
|
+
/** User's first name */
|
|
65
|
+
firstName?: string;
|
|
66
|
+
/** User's last name */
|
|
67
|
+
lastName?: string;
|
|
68
|
+
/** Id of the organization to which the user is affiliated */
|
|
69
|
+
organizationId?: string;
|
|
70
|
+
/** Admin status of the user in his organization */
|
|
71
|
+
admin?: boolean;
|
|
72
|
+
/** Membership status of the user in his organization */
|
|
73
|
+
member?: boolean;
|
|
74
|
+
/** Add randomness to avoid collisions when generating a large number of entities */
|
|
75
|
+
moreRandom?: boolean;
|
|
76
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.types.js","names":[],"sources":["../../../src/factory/workers/user.types.ts"],"sourcesContent":["/** User model template */\nexport interface UserModel {\n /** User's first name */\n firstName: string;\n /** User's last name */\n lastName: string;\n /** @deprecated */\n firstNameLastName: string;\n /** @deprecated */\n firstNameSpaceLastName: string;\n /** @deprecated */\n lastNameFirstName: string;\n /** @deprecated */\n lastNameSpaceFirstName: string;\n /** User's regular display name */\n displayName: string;\n /** User's casual display name */\n casualName: string;\n /** User's formal display name */\n formalName: string;\n /** User's email address */\n email: string;\n /** @deprecated User's username */\n username: string;\n /** User's RegId */\n regId: string;\n /** User's locale */\n locale: string;\n /** URL opf the user's avatar */\n pictureUrl: string;\n /** @deprecated ID of the user's organization */\n organizationId?: string;\n /** @deprecated Date at which the user joined the organization */\n joinedOrganizationAt?: Date | null;\n /** @deprecated Admin status of the user in the organization */\n organizationAdmin: boolean;\n /** @deprecated */\n requestedToJoinOrganization: boolean;\n /** @deprecated */\n acceptedInOrganization: boolean;\n /** User's ID for QR codes */\n linkId: string;\n /** User's BlackBerry ID */\n bbId: string;\n /** User's BlackBerry encrypted key */\n bbEncrypted: string;\n /** User's signature keys */\n signKeyEncrypted: string;\n /** User's public key */\n signKeyPub: string;\n /** Enables auto-acceptance of contact requests */\n autoConnect: boolean;\n /** Is the user searchable publicly */\n searchable: boolean;\n /** Is URL scanning enabled for the user */\n enableUrlScan: boolean;\n /** Is message translation enabled for the user */\n enableMessageTranslation: boolean;\n /** Is the user's email visible publicly */\n emailVisibility: boolean;\n}\n\n/** User template build options */\nexport interface UserBuildOptions {\n /** User's first name */\n firstName?: string;\n /** User's last name */\n lastName?: string;\n /** Id of the organization to which the user is affiliated */\n organizationId?: string;\n /** Admin status of the user in his organization */\n admin?: boolean;\n /** Membership status of the user in his organization */\n member?: boolean;\n /** Add randomness to avoid collisions when generating a large number of entities */\n moreRandom?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateAccessToken = generateAccessToken;
|
|
7
|
+
var _crypto = require("crypto");
|
|
8
|
+
var _jsonwebtoken = require("jsonwebtoken");
|
|
9
|
+
/** Returns an API access token valid in test environment */
|
|
10
|
+
function generateAccessToken(userId, options = {}, payload = {}) {
|
|
11
|
+
const id = userId ?? (0, _crypto.randomUUID)();
|
|
12
|
+
if (!process.env.JWT_SECRET) throw new Error('Missing JWT signing secret');
|
|
13
|
+
return (0, _jsonwebtoken.sign)(typeof payload === 'object' ? {
|
|
14
|
+
...payload,
|
|
15
|
+
user: {
|
|
16
|
+
id
|
|
17
|
+
}
|
|
18
|
+
} : payload, process.env.JWT_SECRET, {
|
|
19
|
+
expiresIn: '1d',
|
|
20
|
+
audience: process.env.ACCESS_TOKEN_AUDIENCE,
|
|
21
|
+
issuer: process.env.ACCESS_TOKEN_ISSUER,
|
|
22
|
+
subject: id,
|
|
23
|
+
jwtid: (0, _crypto.randomUUID)(),
|
|
24
|
+
...options
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=generateAccessToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateAccessToken.js","names":["_crypto","require","_jsonwebtoken","generateAccessToken","userId","options","payload","id","randomUUID","process","env","JWT_SECRET","Error","sign","user","expiresIn","audience","ACCESS_TOKEN_AUDIENCE","issuer","ACCESS_TOKEN_ISSUER","subject","jwtid"],"sources":["../../src/generators/generateAccessToken.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { sign, SignOptions } from 'jsonwebtoken';\n\n/** Returns an API access token valid in test environment */\nexport function generateAccessToken(\n userId: string,\n options: SignOptions = {},\n payload: string | Buffer | object = {}\n): string {\n const id = userId ?? randomUUID();\n if (!process.env.JWT_SECRET) throw new Error('Missing JWT signing secret');\n return sign(\n typeof payload === 'object' ? { ...payload, user: { id } } : payload,\n process.env.JWT_SECRET,\n {\n expiresIn: '1d',\n audience: process.env.ACCESS_TOKEN_AUDIENCE,\n issuer: process.env.ACCESS_TOKEN_ISSUER,\n subject: id,\n jwtid: randomUUID(),\n ...options\n }\n );\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAEA;AACO,SAASE,mBAAmBA,CACjCC,MAAc,EACdC,OAAoB,GAAG,CAAC,CAAC,EACzBC,OAAiC,GAAG,CAAC,CAAC,EAC9B;EACR,MAAMC,EAAE,GAAGH,MAAM,IAAI,IAAAI,kBAAU,EAAC,CAAC;EACjC,IAAI,CAACC,OAAO,CAACC,GAAG,CAACC,UAAU,EAAE,MAAM,IAAIC,KAAK,CAAC,4BAA4B,CAAC;EAC1E,OAAO,IAAAC,kBAAI,EACT,OAAOP,OAAO,KAAK,QAAQ,GAAG;IAAE,GAAGA,OAAO;IAAEQ,IAAI,EAAE;MAAEP;IAAG;EAAE,CAAC,GAAGD,OAAO,EACpEG,OAAO,CAACC,GAAG,CAACC,UAAU,EACtB;IACEI,SAAS,EAAE,IAAI;IACfC,QAAQ,EAAEP,OAAO,CAACC,GAAG,CAACO,qBAAqB;IAC3CC,MAAM,EAAET,OAAO,CAACC,GAAG,CAACS,mBAAmB;IACvCC,OAAO,EAAEb,EAAE;IACXc,KAAK,EAAE,IAAAb,kBAAU,EAAC,CAAC;IACnB,GAAGH;EACL,CACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.generateChatId = generateChatId;
|
|
8
|
+
var _crypto = _interopRequireDefault(require("crypto"));
|
|
9
|
+
/** Generate a BlackBerry Spark chatId */
|
|
10
|
+
function generateChatId() {
|
|
11
|
+
return `${_crypto.default.randomBytes(20).toString('hex')}.1`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=generateChatId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateChatId.js","names":["_crypto","_interopRequireDefault","require","generateChatId","crypto","randomBytes","toString"],"sources":["../../src/generators/generateChatId.ts"],"sourcesContent":["import crypto from 'crypto';\n\n/** Generate a BlackBerry Spark chatId */\nexport function generateChatId(): string {\n return `${crypto.randomBytes(20).toString('hex')}.1`;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA;AACO,SAASC,cAAcA,CAAA,EAAW;EACvC,OAAO,GAAGC,eAAM,CAACC,WAAW,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,KAAK,CAAC,IAAI;AACtD","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateEcdsaKeyPair = generateEcdsaKeyPair;
|
|
7
|
+
var _crypto = require("crypto");
|
|
8
|
+
var _fs = require("fs");
|
|
9
|
+
var _path = require("path");
|
|
10
|
+
/** Generate a signature key pair for ECDSA */
|
|
11
|
+
function generateEcdsaKeyPair() {
|
|
12
|
+
const DIR = (0, _path.resolve)('certs');
|
|
13
|
+
if (!(0, _fs.existsSync)(DIR)) (0, _fs.mkdirSync)(DIR);
|
|
14
|
+
const {
|
|
15
|
+
privateKey,
|
|
16
|
+
publicKey
|
|
17
|
+
} = (0, _crypto.generateKeyPairSync)('ec', {
|
|
18
|
+
namedCurve: 'prime256v1',
|
|
19
|
+
privateKeyEncoding: {
|
|
20
|
+
type: 'pkcs8',
|
|
21
|
+
format: 'pem'
|
|
22
|
+
},
|
|
23
|
+
publicKeyEncoding: {
|
|
24
|
+
type: 'spki',
|
|
25
|
+
format: 'pem'
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
(0, _fs.writeFileSync)(`${DIR}/ecdsa.key`, privateKey);
|
|
29
|
+
(0, _fs.writeFileSync)(`${DIR}/ecdsa.key.pub`, publicKey);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=generateEcdsaKeyPair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateEcdsaKeyPair.js","names":["_crypto","require","_fs","_path","generateEcdsaKeyPair","DIR","resolve","existsSync","mkdirSync","privateKey","publicKey","generateKeyPairSync","namedCurve","privateKeyEncoding","type","format","publicKeyEncoding","writeFileSync"],"sources":["../../src/generators/generateEcdsaKeyPair.ts"],"sourcesContent":["import {generateKeyPairSync} from 'crypto';\nimport {writeFileSync, existsSync, mkdirSync} from 'fs';\nimport {resolve} from 'path';\n\n/** Generate a signature key pair for ECDSA */\nexport function generateEcdsaKeyPair(): void {\n const DIR = resolve('certs');\n if (!existsSync(DIR)) mkdirSync(DIR);\n const {privateKey, publicKey} = generateKeyPairSync('ec', {\n namedCurve: 'prime256v1',\n privateKeyEncoding: {type: 'pkcs8', format: 'pem'},\n publicKeyEncoding: {type: 'spki', format: 'pem'},\n });\n writeFileSync(`${DIR}/ecdsa.key`, privateKey);\n writeFileSync(`${DIR}/ecdsa.key.pub`, publicKey);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,GAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAEA;AACO,SAASG,oBAAoBA,CAAA,EAAS;EAC3C,MAAMC,GAAG,GAAG,IAAAC,aAAO,EAAC,OAAO,CAAC;EAC5B,IAAI,CAAC,IAAAC,cAAU,EAACF,GAAG,CAAC,EAAE,IAAAG,aAAS,EAACH,GAAG,CAAC;EACpC,MAAM;IAACI,UAAU;IAAEC;EAAS,CAAC,GAAG,IAAAC,2BAAmB,EAAC,IAAI,EAAE;IACxDC,UAAU,EAAE,YAAY;IACxBC,kBAAkB,EAAE;MAACC,IAAI,EAAE,OAAO;MAAEC,MAAM,EAAE;IAAK,CAAC;IAClDC,iBAAiB,EAAE;MAACF,IAAI,EAAE,MAAM;MAAEC,MAAM,EAAE;IAAK;EACjD,CAAC,CAAC;EACF,IAAAE,iBAAa,EAAC,GAAGZ,GAAG,YAAY,EAAEI,UAAU,CAAC;EAC7C,IAAAQ,iBAAa,EAAC,GAAGZ,GAAG,gBAAgB,EAAEK,SAAS,CAAC;AAClD","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.generateImageBuffer = generateImageBuffer;
|
|
8
|
+
var _jimp = _interopRequireDefault(require("jimp"));
|
|
9
|
+
/** Generate a binary buffer containing a PNG image */
|
|
10
|
+
async function generateImageBuffer(options = {}) {
|
|
11
|
+
const image = await generateImage(options);
|
|
12
|
+
return image.getBufferAsync(_jimp.default.MIME_PNG);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Generate the asynchronously image using Jimp */
|
|
16
|
+
async function generateImage(options = {}) {
|
|
17
|
+
return new Promise(resolve => {
|
|
18
|
+
new _jimp.default(options.width ?? 150, options.height ?? 150, function (err, image) {
|
|
19
|
+
resolve(image);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=generateImageBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateImageBuffer.js","names":["_jimp","_interopRequireDefault","require","generateImageBuffer","options","image","generateImage","getBufferAsync","Jimp","MIME_PNG","Promise","resolve","width","height","err"],"sources":["../../src/generators/generateImageBuffer.ts"],"sourcesContent":["import Jimp from 'jimp';\nimport {generateImageBufferOptions} from './generateImageBuffer.types';\n\n/** Generate a binary buffer containing a PNG image */\nexport async function generateImageBuffer(\n options: generateImageBufferOptions = {},\n): Promise<Buffer> {\n const image = await generateImage(options);\n return image.getBufferAsync(Jimp.MIME_PNG);\n}\n\n/** Generate the asynchronously image using Jimp */\nasync function generateImage(options: generateImageBufferOptions = {}): Promise<Jimp> {\n return new Promise<Jimp>((resolve) => {\n new Jimp(options.width ?? 150, options.height ?? 150, function (err, image) {\n resolve(image);\n });\n });\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA;AACO,eAAeC,mBAAmBA,CACvCC,OAAmC,GAAG,CAAC,CAAC,EACvB;EACjB,MAAMC,KAAK,GAAG,MAAMC,aAAa,CAACF,OAAO,CAAC;EAC1C,OAAOC,KAAK,CAACE,cAAc,CAACC,aAAI,CAACC,QAAQ,CAAC;AAC5C;;AAEA;AACA,eAAeH,aAAaA,CAACF,OAAmC,GAAG,CAAC,CAAC,EAAiB;EACpF,OAAO,IAAIM,OAAO,CAAQC,OAAO,IAAK;IACpC,IAAIH,aAAI,CAACJ,OAAO,CAACQ,KAAK,IAAI,GAAG,EAAER,OAAO,CAACS,MAAM,IAAI,GAAG,EAAE,UAAUC,GAAG,EAAET,KAAK,EAAE;MAC1EM,OAAO,CAACN,KAAK,CAAC;IAChB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateImageBuffer.types.js","names":[],"sources":["../../src/generators/generateImageBuffer.types.ts"],"sourcesContent":["/** Options to generate a fake image buffer */\nexport interface generateImageBufferOptions {\n /** Image width */\n width?: number;\n /** Image height */\n height?: number;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GeneratedKeyPair } from './generateKeyPair.types';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a RSA key pair
|
|
4
|
+
* @param pass - passphrase used to encrypt the private key (default: generates a random passphrase)
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateKeyPair(pass: string): GeneratedKeyPair;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateKeyPair = generateKeyPair;
|
|
7
|
+
var _crypto = require("crypto");
|
|
8
|
+
/**
|
|
9
|
+
* Generate a RSA key pair
|
|
10
|
+
* @param pass - passphrase used to encrypt the private key (default: generates a random passphrase)
|
|
11
|
+
*/
|
|
12
|
+
function generateKeyPair(pass) {
|
|
13
|
+
const passphrase = pass ?? process.env.ID_TOKEN_PASSPHRASE ?? (0, _crypto.randomBytes)(32).toString('base64');
|
|
14
|
+
const {
|
|
15
|
+
publicKey,
|
|
16
|
+
privateKey
|
|
17
|
+
} = (0, _crypto.generateKeyPairSync)('rsa', {
|
|
18
|
+
modulusLength: 1024,
|
|
19
|
+
publicKeyEncoding: {
|
|
20
|
+
type: 'spki',
|
|
21
|
+
format: 'pem'
|
|
22
|
+
},
|
|
23
|
+
privateKeyEncoding: {
|
|
24
|
+
type: 'pkcs8',
|
|
25
|
+
format: 'pem',
|
|
26
|
+
cipher: 'aes-256-cbc',
|
|
27
|
+
passphrase
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
passphrase,
|
|
32
|
+
publicKey,
|
|
33
|
+
privateKey
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=generateKeyPair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateKeyPair.js","names":["_crypto","require","generateKeyPair","pass","passphrase","process","env","ID_TOKEN_PASSPHRASE","randomBytes","toString","publicKey","privateKey","generateKeyPairSync","modulusLength","publicKeyEncoding","type","format","privateKeyEncoding","cipher"],"sources":["../../src/generators/generateKeyPair.ts"],"sourcesContent":["import {generateKeyPairSync, randomBytes} from 'crypto';\nimport {GeneratedKeyPair} from './generateKeyPair.types';\n\n/**\n * Generate a RSA key pair\n * @param pass - passphrase used to encrypt the private key (default: generates a random passphrase)\n */\nexport function generateKeyPair(pass: string): GeneratedKeyPair {\n const passphrase = pass ?? process.env.ID_TOKEN_PASSPHRASE ?? randomBytes(32).toString('base64');\n const {publicKey, privateKey} = generateKeyPairSync('rsa', {\n modulusLength: 1024,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem',\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem',\n cipher: 'aes-256-cbc',\n passphrase,\n },\n });\n return {passphrase, publicKey, privateKey};\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACC,IAAY,EAAoB;EAC9D,MAAMC,UAAU,GAAGD,IAAI,IAAIE,OAAO,CAACC,GAAG,CAACC,mBAAmB,IAAI,IAAAC,mBAAW,EAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,QAAQ,CAAC;EAChG,MAAM;IAACC,SAAS;IAAEC;EAAU,CAAC,GAAG,IAAAC,2BAAmB,EAAC,KAAK,EAAE;IACzDC,aAAa,EAAE,IAAI;IACnBC,iBAAiB,EAAE;MACjBC,IAAI,EAAE,MAAM;MACZC,MAAM,EAAE;IACV,CAAC;IACDC,kBAAkB,EAAE;MAClBF,IAAI,EAAE,OAAO;MACbC,MAAM,EAAE,KAAK;MACbE,MAAM,EAAE,aAAa;MACrBd;IACF;EACF,CAAC,CAAC;EACF,OAAO;IAACA,UAAU;IAAEM,SAAS;IAAEC;EAAU,CAAC;AAC5C","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Key pair that was generated */
|
|
2
|
+
export interface GeneratedKeyPair {
|
|
3
|
+
/** PAssphrase used to encrypt the private key */
|
|
4
|
+
passphrase: string;
|
|
5
|
+
/** Public key generated, PEM encoded */
|
|
6
|
+
publicKey: string;
|
|
7
|
+
/** Private key generated, PEM encoded */
|
|
8
|
+
privateKey: string;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateKeyPair.types.js","names":[],"sources":["../../src/generators/generateKeyPair.types.ts"],"sourcesContent":["/** Key pair that was generated */\nexport interface GeneratedKeyPair {\n /** PAssphrase used to encrypt the private key */\n passphrase: string;\n /** Public key generated, PEM encoded */\n publicKey: string;\n /** Private key generated, PEM encoded */\n privateKey: string;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TEST_LOCALES = void 0;
|
|
7
|
+
exports.generateLocale = generateLocale;
|
|
8
|
+
const TEST_LOCALES = exports.TEST_LOCALES = ['ar', 'en-US', 'es-ES', 'fr-FR', 'id-ID', 'it-IT', 'ja-JP', 'km-KH', 'ko-KR', 'ms-MY', 'my-MM', 'nl-NL', 'pt-PT', 'ry-RU', 'th-TH', 'uk-UA', 'vi-VN', 'zh-CN', 'zh-TW'];
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Pick up a random locale from the list of testable ones
|
|
12
|
+
*/
|
|
13
|
+
function generateLocale() {
|
|
14
|
+
return TEST_LOCALES[Math.floor(Math.random() * TEST_LOCALES.length)];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=generateLocale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateLocale.js","names":["TEST_LOCALES","exports","generateLocale","Math","floor","random","length"],"sources":["../../src/generators/generateLocale.ts"],"sourcesContent":["export const TEST_LOCALES = [\n 'ar',\n 'en-US',\n 'es-ES',\n 'fr-FR',\n 'id-ID',\n 'it-IT',\n 'ja-JP',\n 'km-KH',\n 'ko-KR',\n 'ms-MY',\n 'my-MM',\n 'nl-NL',\n 'pt-PT',\n 'ry-RU',\n 'th-TH',\n 'uk-UA',\n 'vi-VN',\n 'zh-CN',\n 'zh-TW',\n];\n\n/**\n * Pick up a random locale from the list of testable ones\n */\nexport function generateLocale(): string {\n return TEST_LOCALES[Math.floor(Math.random() * TEST_LOCALES.length)];\n}\n"],"mappings":";;;;;;;AAAO,MAAMA,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,CAC1B,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACR;;AAED;AACA;AACA;AACO,SAASE,cAAcA,CAAA,EAAW;EACvC,OAAOF,YAAY,CAACG,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAGL,YAAY,CAACM,MAAM,CAAC,CAAC;AACtE","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateRegId = generateRegId;
|
|
7
|
+
/**
|
|
8
|
+
* Generates a regID like BBM Spark would
|
|
9
|
+
*/
|
|
10
|
+
function generateRegId() {
|
|
11
|
+
const length = 18;
|
|
12
|
+
return Math.floor(Math.random() * Math.pow(10, length)).toString().padStart(length, '0');
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=generateRegId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateRegId.js","names":["generateRegId","length","Math","floor","random","pow","toString","padStart"],"sources":["../../src/generators/generateRegId.ts"],"sourcesContent":["/**\n * Generates a regID like BBM Spark would\n */\nexport function generateRegId(): string {\n const length = 18;\n return Math.floor(Math.random() * Math.pow(10, length))\n .toString()\n .padStart(length, '0');\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACO,SAASA,aAAaA,CAAA,EAAW;EACtC,MAAMC,MAAM,GAAG,EAAE;EACjB,OAAOC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAGF,IAAI,CAACG,GAAG,CAAC,EAAE,EAAEJ,MAAM,CAAC,CAAC,CACpDK,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAACN,MAAM,EAAE,GAAG,CAAC;AAC1B","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.generateRsaKeyPair = generateRsaKeyPair;
|
|
8
|
+
var _fs = require("fs");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _generateKeyPair = require("./generateKeyPair");
|
|
11
|
+
/** Generate a RSA key pair and store it under "{cwd}/certs/rsa.*" */
|
|
12
|
+
function generateRsaKeyPair(passphrase) {
|
|
13
|
+
const DIR = _path.default.resolve('certs');
|
|
14
|
+
if (!(0, _fs.existsSync)(DIR)) (0, _fs.mkdirSync)(DIR);
|
|
15
|
+
const {
|
|
16
|
+
publicKey,
|
|
17
|
+
privateKey
|
|
18
|
+
} = (0, _generateKeyPair.generateKeyPair)(passphrase);
|
|
19
|
+
(0, _fs.writeFileSync)(`${DIR}/rsa.key`, privateKey);
|
|
20
|
+
(0, _fs.writeFileSync)(`${DIR}/rsa.pub.key`, publicKey);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=generateRsaKeyPair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateRsaKeyPair.js","names":["_fs","require","_path","_interopRequireDefault","_generateKeyPair","generateRsaKeyPair","passphrase","DIR","path","resolve","existsSync","mkdirSync","publicKey","privateKey","generateKeyPair","writeFileSync"],"sources":["../../src/generators/generateRsaKeyPair.ts"],"sourcesContent":["import {writeFileSync, mkdirSync, existsSync} from 'fs';\nimport path from 'path';\nimport {generateKeyPair} from './generateKeyPair';\n\n/** Generate a RSA key pair and store it under \"{cwd}/certs/rsa.*\" */\nexport function generateRsaKeyPair(passphrase: string): void {\n const DIR = path.resolve('certs');\n if (!existsSync(DIR)) mkdirSync(DIR);\n const {publicKey, privateKey} = generateKeyPair(passphrase);\n writeFileSync(`${DIR}/rsa.key`, privateKey);\n writeFileSync(`${DIR}/rsa.pub.key`, publicKey);\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AAEA;AACO,SAASI,kBAAkBA,CAACC,UAAkB,EAAQ;EAC3D,MAAMC,GAAG,GAAGC,aAAI,CAACC,OAAO,CAAC,OAAO,CAAC;EACjC,IAAI,CAAC,IAAAC,cAAU,EAACH,GAAG,CAAC,EAAE,IAAAI,aAAS,EAACJ,GAAG,CAAC;EACpC,MAAM;IAACK,SAAS;IAAEC;EAAU,CAAC,GAAG,IAAAC,gCAAe,EAACR,UAAU,CAAC;EAC3D,IAAAS,iBAAa,EAAC,GAAGR,GAAG,UAAU,EAAEM,UAAU,CAAC;EAC3C,IAAAE,iBAAa,EAAC,GAAGR,GAAG,cAAc,EAAEK,SAAS,CAAC;AAChD","ignoreList":[]}
|