first commit
This commit is contained in:
48
node_modules/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.d.ts
generated
vendored
Normal file
48
node_modules/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
import { ICryptoStorageProvider } from "./ICryptoStorageProvider";
|
||||
import { IStorageProvider } from "./IStorageProvider";
|
||||
/**
|
||||
* A storage provider definition for appservices to use.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export interface IAppserviceStorageProvider {
|
||||
/**
|
||||
* Tracks a user ID as "registered".
|
||||
* @returns {Promise<any>|void} Resolves when complete.
|
||||
*/
|
||||
addRegisteredUser(userId: string): Promise<any> | void;
|
||||
/**
|
||||
* Determines if a user ID is registered or not.
|
||||
* @returns {boolean|Promise<boolean>} True if registered. This may be a promise.
|
||||
*/
|
||||
isUserRegistered(userId: string): boolean | Promise<boolean>;
|
||||
/**
|
||||
* Flags a transaction as completed.
|
||||
* @param {string} transactionId The transaction ID.
|
||||
* @returns {Promise<any>|void} Resolves when complete.
|
||||
*/
|
||||
setTransactionCompleted(transactionId: string): Promise<any> | void;
|
||||
/**
|
||||
* Determines if a transaction has been flagged as completed.
|
||||
* @param {string} transactionId The transaction ID to check.
|
||||
* @returns {boolean} True if the transaction has been completed. This may be a promise.
|
||||
*/
|
||||
isTransactionCompleted(transactionId: string): boolean | Promise<boolean>;
|
||||
/**
|
||||
* Gets a storage provider to use for the given user ID.
|
||||
* @param {string} userId The user ID.
|
||||
* @returns {ICryptoStorageProvider} The storage provider.
|
||||
*/
|
||||
storageForUser?(userId: string): IStorageProvider;
|
||||
}
|
||||
/**
|
||||
* A storage provider capable of only providing crypto-related storage to appservices.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export interface IAppserviceCryptoStorageProvider {
|
||||
/**
|
||||
* Gets a storage provider to use for the given user ID.
|
||||
* @param {string} userId The user ID.
|
||||
* @returns {ICryptoStorageProvider} The storage provider.
|
||||
*/
|
||||
storageForUser(userId: string): ICryptoStorageProvider;
|
||||
}
|
3
node_modules/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.js
generated
vendored
Normal file
3
node_modules/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//# sourceMappingURL=IAppserviceStorageProvider.js.map
|
1
node_modules/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"IAppserviceStorageProvider.js","sourceRoot":"","sources":["../../src/storage/IAppserviceStorageProvider.ts"],"names":[],"mappings":""}
|
32
node_modules/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.d.ts
generated
vendored
Normal file
32
node_modules/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
import { ICryptoRoomInformation } from "../e2ee/ICryptoRoomInformation";
|
||||
/**
|
||||
* A storage provider capable of only providing crypto-related storage.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export interface ICryptoStorageProvider {
|
||||
/**
|
||||
* Sets the client's device ID.
|
||||
* @param {string} deviceId The device ID.
|
||||
* @returns {Promise<void>} Resolves when complete.
|
||||
*/
|
||||
setDeviceId(deviceId: string): Promise<void>;
|
||||
/**
|
||||
* Gets the client's device ID, if known.
|
||||
* @returns {Promise<string>} Resolves to the device ID, or falsy if not known.
|
||||
*/
|
||||
getDeviceId(): Promise<string>;
|
||||
/**
|
||||
* Stores a room's configuration.
|
||||
* @param {string} roomId The room ID to store the configuration for.
|
||||
* @param {ICryptoRoomInformation} config The room's encryption config. May be empty.
|
||||
* @returns {Promise<void>} Resolves when complete.
|
||||
*/
|
||||
storeRoom(roomId: string, config: ICryptoRoomInformation): Promise<void>;
|
||||
/**
|
||||
* Gets a room's configuration. If the room is unknown, a falsy value is returned.
|
||||
* @param {string} roomId The room ID to get the configuration for.
|
||||
* @returns {Promise<ICryptoRoomInformation>} Resolves to the room's configuration, or
|
||||
* to falsy if the room is unknown.
|
||||
*/
|
||||
getRoom(roomId: string): Promise<ICryptoRoomInformation>;
|
||||
}
|
3
node_modules/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.js
generated
vendored
Normal file
3
node_modules/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//# sourceMappingURL=ICryptoStorageProvider.js.map
|
1
node_modules/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ICryptoStorageProvider.js","sourceRoot":"","sources":["../../src/storage/ICryptoStorageProvider.ts"],"names":[],"mappings":""}
|
47
node_modules/matrix-bot-sdk/lib/storage/IStorageProvider.d.ts
generated
vendored
Normal file
47
node_modules/matrix-bot-sdk/lib/storage/IStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
import { IFilterInfo } from "../IFilter";
|
||||
/**
|
||||
* Represents a storage provider for the matrix client
|
||||
* @category Storage providers
|
||||
*/
|
||||
export interface IStorageProvider {
|
||||
/**
|
||||
* Sets the sync token, saving it for later retrieval
|
||||
* @param {string} token The token to save
|
||||
* @returns {Promise<any>|void} Resolves when complete.
|
||||
*/
|
||||
setSyncToken(token: string | null): Promise<any> | void;
|
||||
/**
|
||||
* Gets the last saved sync token, or null if none has been persisted.
|
||||
* @returns {String|Promise<String>} The last sync token, or null. This can
|
||||
* also be a promise for the value.
|
||||
*/
|
||||
getSyncToken(): string | Promise<string | null> | null;
|
||||
/**
|
||||
* Sets the filter to be used by future clients
|
||||
* @param {IFilterInfo} filter The filter to store
|
||||
* @returns {Promise<any>|void} Resolves when complete.
|
||||
*/
|
||||
setFilter(filter: IFilterInfo): Promise<any> | void;
|
||||
/**
|
||||
* Gets the last preferred filter for this client
|
||||
* @returns {IFilterInfo|Promise<IFilterInfo>} The last saved filter, or null.
|
||||
* This can also be a promise for the filter.
|
||||
*/
|
||||
getFilter(): IFilterInfo | Promise<IFilterInfo>;
|
||||
/**
|
||||
* Store a simple string value into the provided key.
|
||||
* @param {string} key The key to store the value under.
|
||||
* @param {string} value The value to store.
|
||||
* @returns {Promise<any> | void} Resolves when complete.
|
||||
*/
|
||||
storeValue(key: string, value: string): Promise<any> | void;
|
||||
/**
|
||||
* Reads a previously stored value under the given key. If the
|
||||
* key does not exist, null or undefined is returned.
|
||||
* @param {string} key The key to read.
|
||||
* @returns {string|Promise<string|null|undefined>|null|undefined} The
|
||||
* value, or null/undefined if not found. This may also return a promise
|
||||
* of those same values.
|
||||
*/
|
||||
readValue(key: string): string | Promise<string | null | undefined> | null | undefined;
|
||||
}
|
3
node_modules/matrix-bot-sdk/lib/storage/IStorageProvider.js
generated
vendored
Normal file
3
node_modules/matrix-bot-sdk/lib/storage/IStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//# sourceMappingURL=IStorageProvider.js.map
|
1
node_modules/matrix-bot-sdk/lib/storage/IStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/matrix-bot-sdk/lib/storage/IStorageProvider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"IStorageProvider.js","sourceRoot":"","sources":["../../src/storage/IStorageProvider.ts"],"names":[],"mappings":""}
|
26
node_modules/matrix-bot-sdk/lib/storage/MemoryStorageProvider.d.ts
generated
vendored
Normal file
26
node_modules/matrix-bot-sdk/lib/storage/MemoryStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
import { IStorageProvider } from "./IStorageProvider";
|
||||
import { IFilterInfo } from "../IFilter";
|
||||
import { IAppserviceStorageProvider } from "./IAppserviceStorageProvider";
|
||||
/**
|
||||
* A storage provider that persists no information by keeping it all in memory.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export declare class MemoryStorageProvider implements IStorageProvider, IAppserviceStorageProvider {
|
||||
private namespaced;
|
||||
private syncToken;
|
||||
private filter;
|
||||
private appserviceUsers;
|
||||
private appserviceTransactions;
|
||||
private kvStore;
|
||||
setSyncToken(token: string | null): void;
|
||||
getSyncToken(): string | null;
|
||||
setFilter(filter: IFilterInfo): void;
|
||||
getFilter(): IFilterInfo;
|
||||
addRegisteredUser(userId: string): void;
|
||||
isUserRegistered(userId: string): boolean;
|
||||
isTransactionCompleted(transactionId: string): boolean;
|
||||
setTransactionCompleted(transactionId: string): void;
|
||||
readValue(key: string): string | null | undefined;
|
||||
storeValue(key: string, value: string): void;
|
||||
storageForUser(userId: string): IStorageProvider;
|
||||
}
|
55
node_modules/matrix-bot-sdk/lib/storage/MemoryStorageProvider.js
generated
vendored
Normal file
55
node_modules/matrix-bot-sdk/lib/storage/MemoryStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.MemoryStorageProvider = void 0;
|
||||
/**
|
||||
* A storage provider that persists no information by keeping it all in memory.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class MemoryStorageProvider {
|
||||
constructor() {
|
||||
this.namespaced = new Map();
|
||||
this.appserviceUsers = {};
|
||||
this.appserviceTransactions = {};
|
||||
this.kvStore = {};
|
||||
}
|
||||
setSyncToken(token) {
|
||||
this.syncToken = token;
|
||||
}
|
||||
getSyncToken() {
|
||||
return this.syncToken;
|
||||
}
|
||||
setFilter(filter) {
|
||||
this.filter = filter;
|
||||
}
|
||||
getFilter() {
|
||||
return this.filter;
|
||||
}
|
||||
addRegisteredUser(userId) {
|
||||
this.appserviceUsers[userId] = {
|
||||
registered: true,
|
||||
};
|
||||
}
|
||||
isUserRegistered(userId) {
|
||||
return this.appserviceUsers[userId] && this.appserviceUsers[userId].registered;
|
||||
}
|
||||
isTransactionCompleted(transactionId) {
|
||||
return !!this.appserviceTransactions[transactionId];
|
||||
}
|
||||
setTransactionCompleted(transactionId) {
|
||||
this.appserviceTransactions[transactionId] = true;
|
||||
}
|
||||
readValue(key) {
|
||||
return this.kvStore[key];
|
||||
}
|
||||
storeValue(key, value) {
|
||||
this.kvStore[key] = value;
|
||||
}
|
||||
storageForUser(userId) {
|
||||
if (!this.namespaced.has(userId)) {
|
||||
this.namespaced.set(userId, new MemoryStorageProvider());
|
||||
}
|
||||
return this.namespaced.get(userId);
|
||||
}
|
||||
}
|
||||
exports.MemoryStorageProvider = MemoryStorageProvider;
|
||||
//# sourceMappingURL=MemoryStorageProvider.js.map
|
1
node_modules/matrix-bot-sdk/lib/storage/MemoryStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/matrix-bot-sdk/lib/storage/MemoryStorageProvider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"MemoryStorageProvider.js","sourceRoot":"","sources":["../../src/storage/MemoryStorageProvider.ts"],"names":[],"mappings":";;;AAIA;;;GAGG;AACH,MAAa,qBAAqB;IAAlC;QACY,eAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;QAGtD,oBAAe,GAAkD,EAAE,CAAC;QACpE,2BAAsB,GAAiC,EAAE,CAAC;QAC1D,YAAO,GAA8B,EAAE,CAAC;IAkDpD,CAAC;IAhDG,YAAY,CAAC,KAAoB;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,MAAmB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG;YAC3B,UAAU,EAAE,IAAI;SACnB,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC;IACnF,CAAC;IAED,sBAAsB,CAAC,aAAqB;QACxC,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC;IAED,uBAAuB,CAAC,aAAqB;QACzC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACtD,CAAC;IAED,SAAS,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,KAAa;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,MAAc;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;SAC5D;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;CACJ;AAxDD,sDAwDC"}
|
38
node_modules/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.d.ts
generated
vendored
Normal file
38
node_modules/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
import { StoreType as RustSdkCryptoStoreType } from "@matrix-org/matrix-sdk-crypto-nodejs";
|
||||
import { ICryptoStorageProvider } from "./ICryptoStorageProvider";
|
||||
import { IAppserviceCryptoStorageProvider } from "./IAppserviceStorageProvider";
|
||||
import { ICryptoRoomInformation } from "../e2ee/ICryptoRoomInformation";
|
||||
export { RustSdkCryptoStoreType };
|
||||
/**
|
||||
* A crypto storage provider for the file-based rust-sdk store.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export declare class RustSdkCryptoStorageProvider implements ICryptoStorageProvider {
|
||||
readonly storagePath: string;
|
||||
readonly storageType: RustSdkCryptoStoreType;
|
||||
private db;
|
||||
/**
|
||||
* Creates a new rust-sdk storage provider.
|
||||
* @param storagePath The *directory* to persist database details to.
|
||||
* @param storageType The storage type to use. Must be supported by the rust-sdk.
|
||||
*/
|
||||
constructor(storagePath: string, storageType?: RustSdkCryptoStoreType);
|
||||
getDeviceId(): Promise<string>;
|
||||
setDeviceId(deviceId: string): Promise<void>;
|
||||
getRoom(roomId: string): Promise<ICryptoRoomInformation>;
|
||||
storeRoom(roomId: string, config: ICryptoRoomInformation): Promise<void>;
|
||||
}
|
||||
/**
|
||||
* An appservice crypto storage provider for the file-based rust-sdk store.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export declare class RustSdkAppserviceCryptoStorageProvider extends RustSdkCryptoStorageProvider implements IAppserviceCryptoStorageProvider {
|
||||
private baseStoragePath;
|
||||
/**
|
||||
* Creates a new rust-sdk storage provider.
|
||||
* @param baseStoragePath The *directory* to persist database details to.
|
||||
* @param storageType The storage type to use. Must be supported by the rust-sdk.
|
||||
*/
|
||||
constructor(baseStoragePath: string, storageType?: RustSdkCryptoStoreType);
|
||||
storageForUser(userId: string): ICryptoStorageProvider;
|
||||
}
|
69
node_modules/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.js
generated
vendored
Normal file
69
node_modules/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.RustSdkAppserviceCryptoStorageProvider = exports.RustSdkCryptoStorageProvider = void 0;
|
||||
const lowdb = require("lowdb");
|
||||
const FileSync = require("lowdb/adapters/FileSync");
|
||||
const mkdirp = require("mkdirp");
|
||||
const path = require("path");
|
||||
const sha512 = require("hash.js/lib/hash/sha/512");
|
||||
const sha256 = require("hash.js/lib/hash/sha/256");
|
||||
/**
|
||||
* A crypto storage provider for the file-based rust-sdk store.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class RustSdkCryptoStorageProvider {
|
||||
/**
|
||||
* Creates a new rust-sdk storage provider.
|
||||
* @param storagePath The *directory* to persist database details to.
|
||||
* @param storageType The storage type to use. Must be supported by the rust-sdk.
|
||||
*/
|
||||
constructor(storagePath, storageType = 0 /* RustSdkCryptoStoreType.Sled */) {
|
||||
this.storagePath = storagePath;
|
||||
this.storageType = storageType;
|
||||
this.storagePath = path.resolve(this.storagePath);
|
||||
mkdirp.sync(storagePath);
|
||||
const adapter = new FileSync(path.join(storagePath, "bot-sdk.json"));
|
||||
this.db = lowdb(adapter);
|
||||
this.db.defaults({
|
||||
deviceId: null,
|
||||
rooms: {},
|
||||
});
|
||||
}
|
||||
async getDeviceId() {
|
||||
return this.db.get('deviceId').value();
|
||||
}
|
||||
async setDeviceId(deviceId) {
|
||||
this.db.set('deviceId', deviceId).write();
|
||||
}
|
||||
async getRoom(roomId) {
|
||||
const key = sha512().update(roomId).digest('hex');
|
||||
return this.db.get(`rooms.${key}`).value();
|
||||
}
|
||||
async storeRoom(roomId, config) {
|
||||
const key = sha512().update(roomId).digest('hex');
|
||||
this.db.set(`rooms.${key}`, config).write();
|
||||
}
|
||||
}
|
||||
exports.RustSdkCryptoStorageProvider = RustSdkCryptoStorageProvider;
|
||||
/**
|
||||
* An appservice crypto storage provider for the file-based rust-sdk store.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class RustSdkAppserviceCryptoStorageProvider extends RustSdkCryptoStorageProvider {
|
||||
/**
|
||||
* Creates a new rust-sdk storage provider.
|
||||
* @param baseStoragePath The *directory* to persist database details to.
|
||||
* @param storageType The storage type to use. Must be supported by the rust-sdk.
|
||||
*/
|
||||
constructor(baseStoragePath, storageType = 0 /* RustSdkCryptoStoreType.Sled */) {
|
||||
super(path.join(baseStoragePath, "_default"), storageType);
|
||||
this.baseStoragePath = baseStoragePath;
|
||||
}
|
||||
storageForUser(userId) {
|
||||
// sha256 because sha512 is a bit big for some operating systems
|
||||
const key = sha256().update(userId).digest('hex');
|
||||
return new RustSdkCryptoStorageProvider(path.join(this.baseStoragePath, key), this.storageType);
|
||||
}
|
||||
}
|
||||
exports.RustSdkAppserviceCryptoStorageProvider = RustSdkAppserviceCryptoStorageProvider;
|
||||
//# sourceMappingURL=RustSdkCryptoStorageProvider.js.map
|
1
node_modules/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"RustSdkCryptoStorageProvider.js","sourceRoot":"","sources":["../../src/storage/RustSdkCryptoStorageProvider.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,oDAAoD;AACpD,iCAAiC;AACjC,6BAA6B;AAC7B,mDAAmD;AACnD,mDAAmD;AASnD;;;GAGG;AACH,MAAa,4BAA4B;IAGrC;;;;OAIG;IACH,YACoB,WAAmB,EACnB,iDAAiE;QADjE,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAsD;QAEjF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzB,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YACb,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,WAAW;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,QAAgB;QACrC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,MAA8B;QACjE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;CACJ;AAzCD,oEAyCC;AAED;;;GAGG;AACH,MAAa,sCAAuC,SAAQ,4BAA4B;IACpF;;;;OAIG;IACH,YAA2B,eAAuB,EAAE,iDAAiE;QACjH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;QADpC,oBAAe,GAAf,eAAe,CAAQ;IAElD,CAAC;IAEM,cAAc,CAAC,MAAc;QAChC,gEAAgE;QAChE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACpG,CAAC;CACJ;AAfD,wFAeC"}
|
31
node_modules/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.d.ts
generated
vendored
Normal file
31
node_modules/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
import { IAppserviceStorageProvider } from "./IAppserviceStorageProvider";
|
||||
import { IFilterInfo } from "../IFilter";
|
||||
import { IStorageProvider } from "./IStorageProvider";
|
||||
/**
|
||||
* A storage provider that uses the disk to store information.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export declare class SimpleFsStorageProvider implements IStorageProvider, IAppserviceStorageProvider {
|
||||
private trackTransactionsInMemory;
|
||||
private maxInMemoryTransactions;
|
||||
private db;
|
||||
private completedTransactions;
|
||||
/**
|
||||
* Creates a new simple file system storage provider.
|
||||
* @param {string} filename The file name (typically 'storage.json') to store data within.
|
||||
* @param {boolean} trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
|
||||
* @param {int} maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
|
||||
*/
|
||||
constructor(filename: string, trackTransactionsInMemory?: boolean, maxInMemoryTransactions?: number);
|
||||
setSyncToken(token: string | null): void;
|
||||
getSyncToken(): string | null;
|
||||
setFilter(filter: IFilterInfo): void;
|
||||
getFilter(): IFilterInfo;
|
||||
addRegisteredUser(userId: string): void;
|
||||
isUserRegistered(userId: string): boolean;
|
||||
isTransactionCompleted(transactionId: string): boolean;
|
||||
setTransactionCompleted(transactionId: string): void;
|
||||
readValue(key: string): string | null | undefined;
|
||||
storeValue(key: string, value: string): void;
|
||||
storageForUser(userId: string): IStorageProvider;
|
||||
}
|
122
node_modules/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.js
generated
vendored
Normal file
122
node_modules/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SimpleFsStorageProvider = void 0;
|
||||
const lowdb = require("lowdb");
|
||||
const FileSync = require("lowdb/adapters/FileSync");
|
||||
const sha512 = require("hash.js/lib/hash/sha/512");
|
||||
const mkdirp = require("mkdirp");
|
||||
const path = require("path");
|
||||
/**
|
||||
* A storage provider that uses the disk to store information.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class SimpleFsStorageProvider {
|
||||
/**
|
||||
* Creates a new simple file system storage provider.
|
||||
* @param {string} filename The file name (typically 'storage.json') to store data within.
|
||||
* @param {boolean} trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
|
||||
* @param {int} maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
|
||||
*/
|
||||
constructor(filename, trackTransactionsInMemory = true, maxInMemoryTransactions = 20) {
|
||||
this.trackTransactionsInMemory = trackTransactionsInMemory;
|
||||
this.maxInMemoryTransactions = maxInMemoryTransactions;
|
||||
this.completedTransactions = [];
|
||||
mkdirp.sync(path.dirname(filename));
|
||||
const adapter = new FileSync(filename);
|
||||
this.db = lowdb(adapter);
|
||||
this.db.defaults({
|
||||
syncToken: null,
|
||||
filter: null,
|
||||
appserviceUsers: {},
|
||||
appserviceTransactions: {},
|
||||
kvStore: {}, // key => value (str)
|
||||
}).write();
|
||||
}
|
||||
setSyncToken(token) {
|
||||
this.db.set('syncToken', token).write();
|
||||
}
|
||||
getSyncToken() {
|
||||
return this.db.get('syncToken').value();
|
||||
}
|
||||
setFilter(filter) {
|
||||
this.db.set('filter', filter).write();
|
||||
}
|
||||
getFilter() {
|
||||
return this.db.get('filter').value();
|
||||
}
|
||||
addRegisteredUser(userId) {
|
||||
const key = sha512().update(userId).digest('hex');
|
||||
this.db
|
||||
.set(`appserviceUsers.${key}.userId`, userId)
|
||||
.set(`appserviceUsers.${key}.registered`, true)
|
||||
.write();
|
||||
}
|
||||
isUserRegistered(userId) {
|
||||
const key = sha512().update(userId).digest('hex');
|
||||
return this.db.get(`appserviceUsers.${key}.registered`).value();
|
||||
}
|
||||
isTransactionCompleted(transactionId) {
|
||||
if (this.trackTransactionsInMemory) {
|
||||
return this.completedTransactions.indexOf(transactionId) !== -1;
|
||||
}
|
||||
const key = sha512().update(transactionId).digest('hex');
|
||||
return this.db.get(`appserviceTransactions.${key}.completed`).value();
|
||||
}
|
||||
setTransactionCompleted(transactionId) {
|
||||
if (this.trackTransactionsInMemory) {
|
||||
if (this.completedTransactions.indexOf(transactionId) === -1) {
|
||||
this.completedTransactions.push(transactionId);
|
||||
}
|
||||
if (this.completedTransactions.length > this.maxInMemoryTransactions) {
|
||||
this.completedTransactions = this.completedTransactions.reverse().slice(0, this.maxInMemoryTransactions).reverse();
|
||||
}
|
||||
return;
|
||||
}
|
||||
const key = sha512().update(transactionId).digest('hex');
|
||||
this.db
|
||||
.set(`appserviceTransactions.${key}.txnId`, transactionId)
|
||||
.set(`appserviceTransactions.${key}.completed`, true)
|
||||
.write();
|
||||
}
|
||||
readValue(key) {
|
||||
return this.db.get("kvStore").value()[key];
|
||||
}
|
||||
storeValue(key, value) {
|
||||
const kvStore = this.db.get("kvStore").value();
|
||||
kvStore[key] = value;
|
||||
this.db.set("kvStore", kvStore).write();
|
||||
}
|
||||
storageForUser(userId) {
|
||||
return new NamespacedFsProvider(userId, this);
|
||||
}
|
||||
}
|
||||
exports.SimpleFsStorageProvider = SimpleFsStorageProvider;
|
||||
/**
|
||||
* A namespaced storage provider that uses the disk to store information.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class NamespacedFsProvider {
|
||||
constructor(prefix, parent) {
|
||||
this.prefix = prefix;
|
||||
this.parent = parent;
|
||||
}
|
||||
setFilter(filter) {
|
||||
return this.parent.storeValue(`${this.prefix}_int_filter`, JSON.stringify(filter));
|
||||
}
|
||||
getFilter() {
|
||||
return Promise.resolve(this.parent.readValue(`${this.prefix}_int_filter`)).then(r => r ? JSON.parse(r) : r);
|
||||
}
|
||||
setSyncToken(token) {
|
||||
return this.parent.storeValue(`${this.prefix}_int_syncToken`, token);
|
||||
}
|
||||
getSyncToken() {
|
||||
return Promise.resolve(this.parent.readValue(`${this.prefix}_int_syncToken`)).then(r => r ?? null);
|
||||
}
|
||||
readValue(key) {
|
||||
return this.parent.readValue(`${this.prefix}_kv_${key}`);
|
||||
}
|
||||
storeValue(key, value) {
|
||||
return this.parent.storeValue(`${this.prefix}_kv_${key}`, value);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=SimpleFsStorageProvider.js.map
|
1
node_modules/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"SimpleFsStorageProvider.js","sourceRoot":"","sources":["../../src/storage/SimpleFsStorageProvider.ts"],"names":[],"mappings":"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"}
|
32
node_modules/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.d.ts
generated
vendored
Normal file
32
node_modules/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
import { IStorageProvider } from "./IStorageProvider";
|
||||
import { IAppserviceStorageProvider } from "./IAppserviceStorageProvider";
|
||||
import { IFilterInfo } from "../IFilter";
|
||||
/**
|
||||
* A barebones postgresql storage provider. It is not efficient, but it does work.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export declare class SimplePostgresStorageProvider implements IStorageProvider, IAppserviceStorageProvider {
|
||||
private trackTransactionsInMemory;
|
||||
private maxInMemoryTransactions;
|
||||
private readonly db;
|
||||
private readonly waitPromise;
|
||||
private completedTransactions;
|
||||
/**
|
||||
* Creates a new simple postgresql storage provider.
|
||||
* @param connectionString The `postgres://` connection string to use.
|
||||
* @param trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
|
||||
* @param maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
|
||||
*/
|
||||
constructor(connectionString: string, trackTransactionsInMemory?: boolean, maxInMemoryTransactions?: number);
|
||||
setSyncToken(token: string | null): Promise<any>;
|
||||
getSyncToken(): Promise<string | null>;
|
||||
setFilter(filter: IFilterInfo): Promise<any>;
|
||||
getFilter(): Promise<IFilterInfo>;
|
||||
addRegisteredUser(userId: string): Promise<any>;
|
||||
isUserRegistered(userId: string): Promise<boolean>;
|
||||
setTransactionCompleted(transactionId: string): Promise<any>;
|
||||
isTransactionCompleted(transactionId: string): Promise<boolean>;
|
||||
readValue(key: string): Promise<string | null | undefined>;
|
||||
storeValue(key: string, value: string): Promise<void>;
|
||||
storageForUser(userId: string): IStorageProvider;
|
||||
}
|
148
node_modules/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.js
generated
vendored
Normal file
148
node_modules/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SimplePostgresStorageProvider = void 0;
|
||||
const postgres = require("postgres");
|
||||
/**
|
||||
* A barebones postgresql storage provider. It is not efficient, but it does work.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class SimplePostgresStorageProvider {
|
||||
/**
|
||||
* Creates a new simple postgresql storage provider.
|
||||
* @param connectionString The `postgres://` connection string to use.
|
||||
* @param trackTransactionsInMemory True (default) to track all received appservice transactions rather than on disk.
|
||||
* @param maxInMemoryTransactions The maximum number of transactions to hold in memory before rotating the oldest out. Defaults to 20.
|
||||
*/
|
||||
constructor(connectionString, trackTransactionsInMemory = true, maxInMemoryTransactions = 20) {
|
||||
this.trackTransactionsInMemory = trackTransactionsInMemory;
|
||||
this.maxInMemoryTransactions = maxInMemoryTransactions;
|
||||
this.completedTransactions = [];
|
||||
this.db = postgres(connectionString);
|
||||
this.waitPromise = Promise.all([
|
||||
this.db `
|
||||
CREATE TABLE IF NOT EXISTS bot_metadata (key TEXT NOT NULL PRIMARY KEY, value TEXT);
|
||||
`,
|
||||
this.db `
|
||||
CREATE TABLE IF NOT EXISTS bot_kv (key TEXT NOT NULL PRIMARY KEY, value TEXT);
|
||||
`,
|
||||
this.db `
|
||||
CREATE TABLE IF NOT EXISTS appservice_users (user_id TEXT NOT NULL PRIMARY KEY, registered BOOLEAN NOT NULL);
|
||||
`,
|
||||
this.db `
|
||||
CREATE TABLE IF NOT EXISTS appservice_transactions (txn_id TEXT NOT NULL PRIMARY KEY, completed BOOLEAN NOT NULL);
|
||||
`,
|
||||
]).then();
|
||||
}
|
||||
async setSyncToken(token) {
|
||||
await this.waitPromise;
|
||||
return this.db `
|
||||
INSERT INTO bot_metadata (key, value) VALUES ('syncToken', ${token})
|
||||
ON CONFLICT (key) DO UPDATE SET value = ${token};
|
||||
`;
|
||||
}
|
||||
async getSyncToken() {
|
||||
await this.waitPromise;
|
||||
return (await this.db `
|
||||
SELECT value FROM bot_metadata WHERE key = 'syncToken';
|
||||
`)[0]?.value;
|
||||
}
|
||||
async setFilter(filter) {
|
||||
await this.waitPromise;
|
||||
const filterStr = filter ? JSON.stringify(filter) : null;
|
||||
return this.db `
|
||||
INSERT INTO bot_metadata (key, value) VALUES ('filter', ${filterStr})
|
||||
ON CONFLICT (key) DO UPDATE SET value = ${filterStr};
|
||||
`;
|
||||
}
|
||||
async getFilter() {
|
||||
await this.waitPromise;
|
||||
const value = (await this.db `
|
||||
SELECT value FROM bot_metadata WHERE key = 'filter';
|
||||
`)[0]?.value;
|
||||
return typeof value === "string" ? JSON.parse(value) : value;
|
||||
}
|
||||
async addRegisteredUser(userId) {
|
||||
await this.waitPromise;
|
||||
return this.db `
|
||||
INSERT INTO appservice_users (user_id, registered) VALUES (${userId}, TRUE)
|
||||
ON CONFLICT (user_id) DO UPDATE SET registered = TRUE;
|
||||
`;
|
||||
}
|
||||
async isUserRegistered(userId) {
|
||||
await this.waitPromise;
|
||||
return !!(await this.db `
|
||||
SELECT registered FROM appservice_users WHERE user_id = ${userId};
|
||||
`)[0]?.registered;
|
||||
}
|
||||
async setTransactionCompleted(transactionId) {
|
||||
await this.waitPromise;
|
||||
if (this.trackTransactionsInMemory) {
|
||||
if (this.completedTransactions.indexOf(transactionId) === -1) {
|
||||
this.completedTransactions.push(transactionId);
|
||||
}
|
||||
if (this.completedTransactions.length > this.maxInMemoryTransactions) {
|
||||
this.completedTransactions = this.completedTransactions.reverse().slice(0, this.maxInMemoryTransactions).reverse();
|
||||
}
|
||||
return;
|
||||
}
|
||||
return this.db `
|
||||
INSERT INTO appservice_transactions (txn_id, completed) VALUES (${transactionId}, TRUE)
|
||||
ON CONFLICT (txn_id) DO UPDATE SET completed = TRUE;
|
||||
`;
|
||||
}
|
||||
async isTransactionCompleted(transactionId) {
|
||||
await this.waitPromise;
|
||||
if (this.trackTransactionsInMemory) {
|
||||
return this.completedTransactions.includes(transactionId);
|
||||
}
|
||||
return (await this.db `
|
||||
SELECT completed FROM appservice_transactions WHERE txn_id = ${transactionId};
|
||||
`)[0]?.completed;
|
||||
}
|
||||
async readValue(key) {
|
||||
await this.waitPromise;
|
||||
return (await this.db `
|
||||
SELECT value FROM bot_kv WHERE key = ${key};
|
||||
`)[0]?.value;
|
||||
}
|
||||
async storeValue(key, value) {
|
||||
await this.waitPromise;
|
||||
return this.db `
|
||||
INSERT INTO bot_kv (key, value) VALUES (${key}, ${value})
|
||||
ON CONFLICT (key) DO UPDATE SET value = ${value};
|
||||
`.then();
|
||||
}
|
||||
storageForUser(userId) {
|
||||
return new NamespacedPostgresProvider(userId, this);
|
||||
}
|
||||
}
|
||||
exports.SimplePostgresStorageProvider = SimplePostgresStorageProvider;
|
||||
/**
|
||||
* A namespaced storage provider that uses postgres to store information.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class NamespacedPostgresProvider {
|
||||
constructor(prefix, parent) {
|
||||
this.prefix = prefix;
|
||||
this.parent = parent;
|
||||
}
|
||||
setFilter(filter) {
|
||||
return this.parent.storeValue(`${this.prefix}_internal_filter`, JSON.stringify(filter));
|
||||
}
|
||||
async getFilter() {
|
||||
return this.parent.readValue(`${this.prefix}_internal_filter`).then(r => r ? JSON.parse(r) : r);
|
||||
}
|
||||
setSyncToken(token) {
|
||||
return this.parent.storeValue(`${this.prefix}_internal_syncToken`, token ?? "");
|
||||
}
|
||||
async getSyncToken() {
|
||||
return this.parent.readValue(`${this.prefix}_internal_syncToken`).then(r => r === "" ? null : r);
|
||||
}
|
||||
storeValue(key, value) {
|
||||
return this.parent.storeValue(`${this.prefix}_internal_kv_${key}`, value);
|
||||
}
|
||||
readValue(key) {
|
||||
return this.parent.readValue(`${this.prefix}_internal_kv_${key}`);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=SimplePostgresStorageProvider.js.map
|
1
node_modules/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"SimplePostgresStorageProvider.js","sourceRoot":"","sources":["../../src/storage/SimplePostgresStorageProvider.ts"],"names":[],"mappings":"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"}
|
74
node_modules/matrix-bot-sdk/lib/storage/SqliteCryptoStorageProvider.d.ts
generated
vendored
Normal file
74
node_modules/matrix-bot-sdk/lib/storage/SqliteCryptoStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
import { ICryptoStorageProvider } from "./ICryptoStorageProvider";
|
||||
import { EncryptionEventContent } from "../models/events/EncryptionEvent";
|
||||
import { IInboundGroupSession, IOlmSession, IOutboundGroupSession, StoredUserDevice, UserDevice } from "../models/Crypto";
|
||||
/**
|
||||
* Sqlite crypto storage provider. Requires `better-sqlite3` package to be installed.
|
||||
* @category Storage providers
|
||||
*/
|
||||
export declare class SqliteCryptoStorageProvider implements ICryptoStorageProvider {
|
||||
private db;
|
||||
private kvUpsert;
|
||||
private kvSelect;
|
||||
private roomUpsert;
|
||||
private roomSelect;
|
||||
private userUpsert;
|
||||
private userSelect;
|
||||
private userDeviceUpsert;
|
||||
private userDevicesDelete;
|
||||
private userDevicesSelect;
|
||||
private userActiveDevicesSelect;
|
||||
private userActiveDeviceSelect;
|
||||
private obGroupSessionUpsert;
|
||||
private obGroupSessionSelect;
|
||||
private obGroupCurrentSessionSelect;
|
||||
private obGroupSessionMarkAllInactive;
|
||||
private obSentGroupSessionUpsert;
|
||||
private obSentSelectLastSent;
|
||||
private olmSessionUpsert;
|
||||
private olmSessionCurrentSelect;
|
||||
private olmSessionSelect;
|
||||
private ibGroupSessionUpsert;
|
||||
private ibGroupSessionSelect;
|
||||
private deMetadataUpsert;
|
||||
private deMetadataSelect;
|
||||
/**
|
||||
* Creates a new Sqlite storage provider.
|
||||
* @param {string} path The file path to store the database at. Use ":memory:" to
|
||||
* store the database entirely in memory, or an empty string to do the equivalent
|
||||
* on the disk.
|
||||
*/
|
||||
constructor(path: string);
|
||||
setDeviceId(deviceId: string): Promise<void>;
|
||||
getDeviceId(): Promise<string>;
|
||||
setPickleKey(pickleKey: string): Promise<void>;
|
||||
getPickleKey(): Promise<string>;
|
||||
setPickledAccount(pickled: string): Promise<void>;
|
||||
getPickledAccount(): Promise<string>;
|
||||
storeRoom(roomId: string, config: Partial<EncryptionEventContent>): Promise<void>;
|
||||
getRoom(roomId: string): Promise<Partial<EncryptionEventContent>>;
|
||||
setActiveUserDevices(userId: string, devices: UserDevice[]): Promise<void>;
|
||||
getActiveUserDevices(userId: string): Promise<UserDevice[]>;
|
||||
getActiveUserDevice(userId: string, deviceId: string): Promise<UserDevice>;
|
||||
getAllUserDevices(userId: string): Promise<StoredUserDevice[]>;
|
||||
flagUsersOutdated(userIds: string[]): Promise<void>;
|
||||
isUserOutdated(userId: string): Promise<boolean>;
|
||||
storeOutboundGroupSession(session: IOutboundGroupSession): Promise<void>;
|
||||
getOutboundGroupSession(sessionId: string, roomId: string): Promise<IOutboundGroupSession>;
|
||||
getCurrentOutboundGroupSession(roomId: string): Promise<IOutboundGroupSession>;
|
||||
storeSentOutboundGroupSession(session: IOutboundGroupSession, index: number, device: UserDevice): Promise<void>;
|
||||
getLastSentOutboundGroupSession(userId: string, deviceId: string, roomId: string): Promise<{
|
||||
sessionId: string;
|
||||
index: number;
|
||||
}>;
|
||||
storeOlmSession(userId: string, deviceId: string, session: IOlmSession): Promise<void>;
|
||||
getCurrentOlmSession(userId: string, deviceId: string): Promise<IOlmSession>;
|
||||
getOlmSessions(userId: string, deviceId: string): Promise<IOlmSession[]>;
|
||||
storeInboundGroupSession(session: IInboundGroupSession): Promise<void>;
|
||||
getInboundGroupSession(senderUserId: string, senderDeviceId: string, roomId: string, sessionId: string): Promise<IInboundGroupSession>;
|
||||
setMessageIndexForEvent(roomId: string, eventId: string, sessionId: string, messageIndex: number): Promise<void>;
|
||||
getEventForMessageIndex(roomId: string, sessionId: string, messageIndex: number): Promise<string>;
|
||||
/**
|
||||
* Closes the crypto store. Primarily for testing purposes.
|
||||
*/
|
||||
close(): Promise<void>;
|
||||
}
|
332
node_modules/matrix-bot-sdk/lib/storage/SqliteCryptoStorageProvider.js
generated
vendored
Normal file
332
node_modules/matrix-bot-sdk/lib/storage/SqliteCryptoStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,332 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SqliteCryptoStorageProvider = void 0;
|
||||
const Database = require("better-sqlite3");
|
||||
/**
|
||||
* Sqlite crypto storage provider. Requires `better-sqlite3` package to be installed.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class SqliteCryptoStorageProvider {
|
||||
/**
|
||||
* Creates a new Sqlite storage provider.
|
||||
* @param {string} path The file path to store the database at. Use ":memory:" to
|
||||
* store the database entirely in memory, or an empty string to do the equivalent
|
||||
* on the disk.
|
||||
*/
|
||||
constructor(path) {
|
||||
this.db = new Database(path);
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS kv (name TEXT PRIMARY KEY NOT NULL, value TEXT NOT NULL)");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS rooms (room_id TEXT PRIMARY KEY NOT NULL, config TEXT NOT NULL)");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS users (user_id TEXT PRIMARY KEY NOT NULL, outdated TINYINT NOT NULL)");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS user_devices (user_id TEXT NOT NULL, device_id TEXT NOT NULL, device TEXT NOT NULL, active TINYINT NOT NULL, PRIMARY KEY (user_id, device_id))");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS outbound_group_sessions (session_id TEXT NOT NULL, room_id TEXT NOT NULL, current TINYINT NOT NULL, pickled TEXT NOT NULL, uses_left NUMBER NOT NULL, expires_ts NUMBER NOT NULL, PRIMARY KEY (session_id, room_id))");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS sent_outbound_group_sessions (session_id TEXT NOT NULL, room_id TEXT NOT NULL, session_index INT NOT NULL, user_id TEXT NOT NULL, device_id TEXT NOT NULL, PRIMARY KEY (session_id, room_id, user_id, device_id, session_index))");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS olm_sessions (user_id TEXT NOT NULL, device_id TEXT NOT NULL, session_id TEXT NOT NULL, last_decryption_ts NUMBER NOT NULL, pickled TEXT NOT NULL, PRIMARY KEY (user_id, device_id, session_id))");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS inbound_group_sessions (session_id TEXT NOT NULL, room_id TEXT NOT NULL, user_id TEXT NOT NULL, device_id TEXT NOT NULL, pickled TEXT NOT NULL, PRIMARY KEY (session_id, room_id, user_id, device_id))");
|
||||
this.db.exec("CREATE TABLE IF NOT EXISTS decrypted_event_metadata (room_id TEXT NOT NULL, event_id TEXT NOT NULL, session_id TEXT NOT NULL, message_index INT NOT NULL, PRIMARY KEY (room_id, event_id))");
|
||||
this.db.exec("CREATE INDEX IF NOT EXISTS idx_decrypted_event_metadata_by_message_index ON decrypted_event_metadata (room_id, session_id, message_index)");
|
||||
this.kvUpsert = this.db.prepare("INSERT INTO kv (name, value) VALUES (@name, @value) ON CONFLICT (name) DO UPDATE SET value = @value");
|
||||
this.kvSelect = this.db.prepare("SELECT name, value FROM kv WHERE name = @name");
|
||||
this.roomUpsert = this.db.prepare("INSERT INTO rooms (room_id, config) VALUES (@roomId, @config) ON CONFLICT (room_id) DO UPDATE SET config = @config");
|
||||
this.roomSelect = this.db.prepare("SELECT room_id, config FROM rooms WHERE room_id = @roomId");
|
||||
this.userUpsert = this.db.prepare("INSERT INTO users (user_id, outdated) VALUES (@userId, @outdated) ON CONFLICT (user_id) DO UPDATE SET outdated = @outdated");
|
||||
this.userSelect = this.db.prepare("SELECT user_id, outdated FROM users WHERE user_id = @userId");
|
||||
this.userDeviceUpsert = this.db.prepare("INSERT INTO user_devices (user_id, device_id, device, active) VALUES (@userId, @deviceId, @device, @active) ON CONFLICT (user_id, device_id) DO UPDATE SET device = @device, active = @active");
|
||||
this.userDevicesDelete = this.db.prepare("UPDATE user_devices SET active = 0 WHERE user_id = @userId");
|
||||
this.userDevicesSelect = this.db.prepare("SELECT user_id, device_id, device, active FROM user_devices WHERE user_id = @userId");
|
||||
this.userActiveDevicesSelect = this.db.prepare("SELECT user_id, device_id, device, active FROM user_devices WHERE user_id = @userId AND active = 1");
|
||||
this.userActiveDeviceSelect = this.db.prepare("SELECT user_id, device_id, device, active FROM user_devices WHERE user_id = @userId AND device_id = @deviceId AND active = 1");
|
||||
this.obGroupSessionUpsert = this.db.prepare("INSERT INTO outbound_group_sessions (session_id, room_id, current, pickled, uses_left, expires_ts) VALUES (@sessionId, @roomId, @current, @pickled, @usesLeft, @expiresTs) ON CONFLICT (session_id, room_id) DO UPDATE SET pickled = @pickled, current = @current, uses_left = @usesLeft, expires_ts = @expiresTs");
|
||||
this.obGroupSessionSelect = this.db.prepare("SELECT session_id, room_id, current, pickled, uses_left, expires_ts FROM outbound_group_sessions WHERE session_id = @sessionId AND room_id = @roomId");
|
||||
this.obGroupCurrentSessionSelect = this.db.prepare("SELECT session_id, room_id, current, pickled, uses_left, expires_ts FROM outbound_group_sessions WHERE room_id = @roomId AND current = 1");
|
||||
this.obGroupSessionMarkAllInactive = this.db.prepare("UPDATE outbound_group_sessions SET current = 0 WHERE room_id = @roomId");
|
||||
this.obSentGroupSessionUpsert = this.db.prepare("INSERT INTO sent_outbound_group_sessions (session_id, room_id, session_index, user_id, device_id) VALUES (@sessionId, @roomId, @sessionIndex, @userId, @deviceId) ON CONFLICT (session_id, room_id, user_id, device_id, session_index) DO NOTHING");
|
||||
this.obSentSelectLastSent = this.db.prepare("SELECT session_id, room_id, session_index, user_id, device_id FROM sent_outbound_group_sessions WHERE user_id = @userId AND device_id = @deviceId AND room_id = @roomId");
|
||||
this.olmSessionUpsert = this.db.prepare("INSERT INTO olm_sessions (user_id, device_id, session_id, last_decryption_ts, pickled) VALUES (@userId, @deviceId, @sessionId, @lastDecryptionTs, @pickled) ON CONFLICT (user_id, device_id, session_id) DO UPDATE SET last_decryption_ts = @lastDecryptionTs, pickled = @pickled");
|
||||
this.olmSessionCurrentSelect = this.db.prepare("SELECT user_id, device_id, session_id, last_decryption_ts, pickled FROM olm_sessions WHERE user_id = @userId AND device_id = @deviceId ORDER BY last_decryption_ts DESC LIMIT 1");
|
||||
this.olmSessionSelect = this.db.prepare("SELECT user_id, device_id, session_id, last_decryption_ts, pickled FROM olm_sessions WHERE user_id = @userId AND device_id = @deviceId");
|
||||
this.ibGroupSessionUpsert = this.db.prepare("INSERT INTO inbound_group_sessions (session_id, room_id, user_id, device_id, pickled) VALUES (@sessionId, @roomId, @userId, @deviceId, @pickled) ON CONFLICT (session_id, room_id, user_id, device_id) DO UPDATE SET pickled = @pickled");
|
||||
this.ibGroupSessionSelect = this.db.prepare("SELECT session_id, room_id, user_id, device_id, pickled FROM inbound_group_sessions WHERE session_id = @sessionId AND room_id = @roomId AND user_id = @userId AND device_id = @deviceId");
|
||||
this.deMetadataUpsert = this.db.prepare("INSERT INTO decrypted_event_metadata (room_id, event_id, session_id, message_index) VALUES (@roomId, @eventId, @sessionId, @messageIndex) ON CONFLICT (room_id, event_id) DO UPDATE SET message_index = @messageIndex, session_id = @sessionId");
|
||||
this.deMetadataSelect = this.db.prepare("SELECT room_id, event_id, session_id, message_index FROM decrypted_event_metadata WHERE room_id = @roomId AND session_id = @sessionId AND message_index = @messageIndex LIMIT 1");
|
||||
}
|
||||
setDeviceId(deviceId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.kvUpsert.run({
|
||||
name: 'deviceId',
|
||||
value: deviceId,
|
||||
});
|
||||
});
|
||||
}
|
||||
getDeviceId() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const row = this.kvSelect.get({ name: 'deviceId' });
|
||||
return row === null || row === void 0 ? void 0 : row.value;
|
||||
});
|
||||
}
|
||||
setPickleKey(pickleKey) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.kvUpsert.run({
|
||||
name: 'pickleKey',
|
||||
value: pickleKey,
|
||||
});
|
||||
});
|
||||
}
|
||||
getPickleKey() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const row = this.kvSelect.get({ name: 'pickleKey' });
|
||||
return row === null || row === void 0 ? void 0 : row.value;
|
||||
});
|
||||
}
|
||||
setPickledAccount(pickled) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.kvUpsert.run({
|
||||
name: 'pickled',
|
||||
value: pickled,
|
||||
});
|
||||
});
|
||||
}
|
||||
getPickledAccount() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const row = this.kvSelect.get({ name: 'pickled' });
|
||||
return row === null || row === void 0 ? void 0 : row.value;
|
||||
});
|
||||
}
|
||||
storeRoom(roomId, config) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.roomUpsert.run({
|
||||
roomId: roomId,
|
||||
config: JSON.stringify(config),
|
||||
});
|
||||
});
|
||||
}
|
||||
getRoom(roomId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const row = this.roomSelect.get({ roomId: roomId });
|
||||
const val = row === null || row === void 0 ? void 0 : row.config;
|
||||
return val ? JSON.parse(val) : null;
|
||||
});
|
||||
}
|
||||
setActiveUserDevices(userId, devices) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.db.transaction(() => {
|
||||
this.userUpsert.run({ userId: userId, outdated: 0 });
|
||||
this.userDevicesDelete.run({ userId: userId });
|
||||
for (const device of devices) {
|
||||
this.userDeviceUpsert.run({ userId: userId, deviceId: device.device_id, device: JSON.stringify(device), active: 1 });
|
||||
}
|
||||
})();
|
||||
});
|
||||
}
|
||||
getActiveUserDevices(userId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const results = this.userActiveDevicesSelect.all({ userId: userId });
|
||||
if (!results)
|
||||
return [];
|
||||
return results.map(d => JSON.parse(d.device));
|
||||
});
|
||||
}
|
||||
getActiveUserDevice(userId, deviceId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.userActiveDeviceSelect.get({ userId: userId, deviceId: deviceId });
|
||||
if (!result)
|
||||
return null;
|
||||
return JSON.parse(result.device);
|
||||
});
|
||||
}
|
||||
getAllUserDevices(userId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const results = this.userDevicesSelect.all({ userId: userId });
|
||||
if (!results)
|
||||
return [];
|
||||
return results.map(d => Object.assign({}, JSON.parse(d.device), { unsigned: { bsdkIsActive: d.active === 1 } }));
|
||||
});
|
||||
}
|
||||
flagUsersOutdated(userIds) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.db.transaction(() => {
|
||||
for (const userId of userIds) {
|
||||
this.userUpsert.run({ userId: userId, outdated: 1 });
|
||||
}
|
||||
})();
|
||||
});
|
||||
}
|
||||
isUserOutdated(userId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const user = this.userSelect.get({ userId: userId });
|
||||
return user ? Boolean(user.outdated) : true;
|
||||
});
|
||||
}
|
||||
storeOutboundGroupSession(session) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.db.transaction(() => {
|
||||
if (session.isCurrent) {
|
||||
this.obGroupSessionMarkAllInactive.run({
|
||||
roomId: session.roomId,
|
||||
});
|
||||
}
|
||||
this.obGroupSessionUpsert.run({
|
||||
sessionId: session.sessionId,
|
||||
roomId: session.roomId,
|
||||
pickled: session.pickled,
|
||||
current: session.isCurrent ? 1 : 0,
|
||||
usesLeft: session.usesLeft,
|
||||
expiresTs: session.expiresTs,
|
||||
});
|
||||
})();
|
||||
});
|
||||
}
|
||||
getOutboundGroupSession(sessionId, roomId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.obGroupSessionSelect.get({ sessionId: sessionId, roomId: roomId });
|
||||
if (result) {
|
||||
return {
|
||||
sessionId: result.session_id,
|
||||
roomId: result.room_id,
|
||||
pickled: result.pickled,
|
||||
isCurrent: result.current === 1,
|
||||
usesLeft: result.uses_left,
|
||||
expiresTs: result.expires_ts,
|
||||
};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
getCurrentOutboundGroupSession(roomId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.obGroupCurrentSessionSelect.get({ roomId: roomId });
|
||||
if (result) {
|
||||
return {
|
||||
sessionId: result.session_id,
|
||||
roomId: result.room_id,
|
||||
pickled: result.pickled,
|
||||
isCurrent: result.current === 1,
|
||||
usesLeft: result.uses_left,
|
||||
expiresTs: result.expires_ts,
|
||||
};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
storeSentOutboundGroupSession(session, index, device) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.obSentGroupSessionUpsert.run({
|
||||
sessionId: session.sessionId,
|
||||
roomId: session.roomId,
|
||||
sessionIndex: index,
|
||||
userId: device.user_id,
|
||||
deviceId: device.device_id,
|
||||
});
|
||||
});
|
||||
}
|
||||
getLastSentOutboundGroupSession(userId, deviceId, roomId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.obSentSelectLastSent.get({ userId: userId, deviceId: deviceId, roomId: roomId });
|
||||
if (result) {
|
||||
return { sessionId: result.session_id, index: result.session_index };
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
storeOlmSession(userId, deviceId, session) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.olmSessionUpsert.run({
|
||||
userId: userId,
|
||||
deviceId: deviceId,
|
||||
sessionId: session.sessionId,
|
||||
lastDecryptionTs: session.lastDecryptionTs,
|
||||
pickled: session.pickled,
|
||||
});
|
||||
});
|
||||
}
|
||||
getCurrentOlmSession(userId, deviceId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.olmSessionCurrentSelect.get({ userId: userId, deviceId: deviceId });
|
||||
if (!result)
|
||||
return null;
|
||||
return {
|
||||
sessionId: result.session_id,
|
||||
pickled: result.pickled,
|
||||
lastDecryptionTs: result.last_decryption_ts,
|
||||
};
|
||||
});
|
||||
}
|
||||
getOlmSessions(userId, deviceId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.olmSessionSelect.all({
|
||||
userId: userId,
|
||||
deviceId: deviceId,
|
||||
});
|
||||
return (result || []).map(r => ({
|
||||
sessionId: r.session_id,
|
||||
pickled: r.pickled,
|
||||
lastDecryptionTs: r.last_decryption_ts,
|
||||
}));
|
||||
});
|
||||
}
|
||||
storeInboundGroupSession(session) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.ibGroupSessionUpsert.run({
|
||||
sessionId: session.sessionId,
|
||||
roomId: session.roomId,
|
||||
userId: session.senderUserId,
|
||||
deviceId: session.senderDeviceId,
|
||||
pickled: session.pickled,
|
||||
});
|
||||
});
|
||||
}
|
||||
getInboundGroupSession(senderUserId, senderDeviceId, roomId, sessionId) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.ibGroupSessionSelect.get({
|
||||
sessionId: sessionId,
|
||||
roomId: roomId,
|
||||
userId: senderUserId,
|
||||
deviceId: senderDeviceId,
|
||||
});
|
||||
if (result) {
|
||||
return {
|
||||
sessionId: result.session_id,
|
||||
roomId: result.room_id,
|
||||
senderUserId: result.user_id,
|
||||
senderDeviceId: result.device_id,
|
||||
pickled: result.pickled,
|
||||
};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
setMessageIndexForEvent(roomId, eventId, sessionId, messageIndex) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.deMetadataUpsert.run({
|
||||
roomId: roomId,
|
||||
eventId: eventId,
|
||||
sessionId: sessionId,
|
||||
messageIndex: messageIndex,
|
||||
});
|
||||
});
|
||||
}
|
||||
getEventForMessageIndex(roomId, sessionId, messageIndex) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = this.deMetadataSelect.get({ roomId: roomId, sessionId: sessionId, messageIndex: messageIndex });
|
||||
return result === null || result === void 0 ? void 0 : result.event_id;
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Closes the crypto store. Primarily for testing purposes.
|
||||
*/
|
||||
close() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.db.close();
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.SqliteCryptoStorageProvider = SqliteCryptoStorageProvider;
|
Reference in New Issue
Block a user