first commit
This commit is contained in:
48
node_modules/@vector-im/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.d.ts
generated
vendored
Normal file
48
node_modules/@vector-im/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 userId The user ID.
|
||||
* @returns The storage provider.
|
||||
*/
|
||||
storageForUser(userId: string): ICryptoStorageProvider;
|
||||
}
|
3
node_modules/@vector-im/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.js
generated
vendored
Normal file
3
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/IAppserviceStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.d.ts
generated
vendored
Normal file
32
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.js
generated
vendored
Normal file
3
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/ICryptoStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/IStorageProvider.d.ts
generated
vendored
Normal file
47
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/IStorageProvider.js
generated
vendored
Normal file
3
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/IStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/MemoryStorageProvider.d.ts
generated
vendored
Normal file
26
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/MemoryStorageProvider.js
generated
vendored
Normal file
55
node_modules/@vector-im/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 {
|
||||
namespaced = new Map();
|
||||
syncToken;
|
||||
filter;
|
||||
appserviceUsers = {};
|
||||
appserviceTransactions = {};
|
||||
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/@vector-im/matrix-bot-sdk/lib/storage/MemoryStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/@vector-im/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;IACtB,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;IACtD,SAAS,CAAS;IAClB,MAAM,CAAc;IACpB,eAAe,GAAkD,EAAE,CAAC;IACpE,sBAAsB,GAAiC,EAAE,CAAC;IAC1D,OAAO,GAA8B,EAAE,CAAC;IAEhD,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"}
|
39
node_modules/@vector-im/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.d.ts
generated
vendored
Normal file
39
node_modules/@vector-im/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.d.ts
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
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);
|
||||
getMachineStoragePath(deviceId: string): Promise<string>;
|
||||
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;
|
||||
}
|
100
node_modules/@vector-im/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.js
generated
vendored
Normal file
100
node_modules/@vector-im/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
"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 promises_1 = require("fs/promises");
|
||||
const sha512 = require("hash.js/lib/hash/sha/512");
|
||||
const sha256 = require("hash.js/lib/hash/sha/256");
|
||||
const LogService_1 = require("../logging/LogService");
|
||||
async function doesFileExist(path) {
|
||||
return (0, promises_1.stat)(path).then(() => true).catch(() => false);
|
||||
}
|
||||
/**
|
||||
* A crypto storage provider for the file-based rust-sdk store.
|
||||
* @category Storage providers
|
||||
*/
|
||||
class RustSdkCryptoStorageProvider {
|
||||
storagePath;
|
||||
storageType;
|
||||
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, storageType) {
|
||||
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 getMachineStoragePath(deviceId) {
|
||||
const newPath = path.join(this.storagePath, sha256().update(deviceId).digest('hex'));
|
||||
if (await doesFileExist(newPath)) {
|
||||
// Already exists, short circuit.
|
||||
return newPath;
|
||||
} // else: If the path does NOT exist we might need to perform a migration.
|
||||
const legacyFilePath = path.join(this.storagePath, 'matrix-sdk-crypto.sqlite3');
|
||||
// XXX: Slightly gross cross-dependency file name expectations.
|
||||
if (await doesFileExist(legacyFilePath) === false) {
|
||||
// No machine files at all, we can skip.
|
||||
return newPath;
|
||||
}
|
||||
const legacyDeviceId = await this.getDeviceId();
|
||||
// We need to move the file.
|
||||
const previousDevicePath = path.join(this.storagePath, sha256().update(legacyDeviceId).digest('hex'));
|
||||
LogService_1.LogService.warn("RustSdkCryptoStorageProvider", `Migrating path for SDK database for legacy device ${legacyDeviceId}`);
|
||||
await (0, promises_1.mkdir)(previousDevicePath);
|
||||
await (0, promises_1.rename)(legacyFilePath, path.join(previousDevicePath, 'matrix-sdk-crypto.sqlite3')).catch((ex) => LogService_1.LogService.warn("RustSdkCryptoStorageProvider", `Could not migrate matrix-sdk-crypto.sqlite3`, ex));
|
||||
await (0, promises_1.rename)(legacyFilePath, path.join(previousDevicePath, 'matrix-sdk-crypto.sqlite3-shm')).catch((ex) => LogService_1.LogService.warn("RustSdkCryptoStorageProvider", `Could not migrate matrix-sdk-crypto.sqlite3-shm`, ex));
|
||||
await (0, promises_1.rename)(legacyFilePath, path.join(previousDevicePath, 'matrix-sdk-crypto.sqlite3-wal')).catch((ex) => LogService_1.LogService.warn("RustSdkCryptoStorageProvider", `Could not migrate matrix-sdk-crypto.sqlite3-wal`, ex));
|
||||
return newPath;
|
||||
}
|
||||
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 {
|
||||
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, storageType) {
|
||||
super(path.join(baseStoragePath, "_default"), storageType);
|
||||
this.baseStoragePath = baseStoragePath;
|
||||
}
|
||||
storageForUser(userId) {
|
||||
// sha256 because sha512 is a bit big for some operating systems
|
||||
const storagePath = path.join(this.baseStoragePath, sha256().update(userId).digest('hex'));
|
||||
return new RustSdkCryptoStorageProvider(storagePath, this.storageType);
|
||||
}
|
||||
}
|
||||
exports.RustSdkAppserviceCryptoStorageProvider = RustSdkAppserviceCryptoStorageProvider;
|
||||
//# sourceMappingURL=RustSdkCryptoStorageProvider.js.map
|
1
node_modules/@vector-im/matrix-bot-sdk/lib/storage/RustSdkCryptoStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/@vector-im/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":"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"}
|
31
node_modules/@vector-im/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.d.ts
generated
vendored
Normal file
31
node_modules/@vector-im/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;
|
||||
}
|
127
node_modules/@vector-im/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.js
generated
vendored
Normal file
127
node_modules/@vector-im/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
"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 {
|
||||
trackTransactionsInMemory;
|
||||
maxInMemoryTransactions;
|
||||
db;
|
||||
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, trackTransactionsInMemory = true, maxInMemoryTransactions = 20) {
|
||||
this.trackTransactionsInMemory = trackTransactionsInMemory;
|
||||
this.maxInMemoryTransactions = maxInMemoryTransactions;
|
||||
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 {
|
||||
prefix;
|
||||
parent;
|
||||
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/@vector-im/matrix-bot-sdk/lib/storage/SimpleFsStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/@vector-im/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/@vector-im/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.d.ts
generated
vendored
Normal file
32
node_modules/@vector-im/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;
|
||||
}
|
154
node_modules/@vector-im/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.js
generated
vendored
Normal file
154
node_modules/@vector-im/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.js
generated
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
"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 {
|
||||
trackTransactionsInMemory;
|
||||
maxInMemoryTransactions;
|
||||
db;
|
||||
waitPromise;
|
||||
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, trackTransactionsInMemory = true, maxInMemoryTransactions = 20) {
|
||||
this.trackTransactionsInMemory = trackTransactionsInMemory;
|
||||
this.maxInMemoryTransactions = maxInMemoryTransactions;
|
||||
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 {
|
||||
prefix;
|
||||
parent;
|
||||
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/@vector-im/matrix-bot-sdk/lib/storage/SimplePostgresStorageProvider.js.map
generated
vendored
Normal file
1
node_modules/@vector-im/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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"}
|
Reference in New Issue
Block a user