connect-mongo
Advanced tools
Comparing version 4.2.0-rc2 to 4.2.0
@@ -19,5 +19,7 @@ import * as session from 'express-session'; | ||
ttl?: number; | ||
createAutoRemoveIdx?: boolean; | ||
touchAfter?: number; | ||
stringify?: boolean; | ||
createAutoRemoveIdx?: boolean; | ||
autoRemove?: 'native' | 'interval' | 'disabled'; | ||
autoRemoveInterval?: number; | ||
serialize?: (a: any) => any; | ||
@@ -29,11 +31,12 @@ unserialize?: (a: any) => any; | ||
}; | ||
declare type ErrorOrNull = Error | null; | ||
export default class MongoStore extends session.Store { | ||
private clientP; | ||
private crypto; | ||
private timer?; | ||
collectionP: Promise<Collection>; | ||
private options; | ||
private transformFunctions; | ||
constructor({ collectionName, ttl, mongoOptions, createAutoRemoveIdx, touchAfter, stringify, crypto, ...required }: ConnectMongoOptions); | ||
constructor({ collectionName, ttl, mongoOptions, autoRemove, autoRemoveInterval, touchAfter, stringify, crypto, ...required }: ConnectMongoOptions); | ||
static create(options: ConnectMongoOptions): MongoStore; | ||
private setAutoRemove; | ||
private computeStorageId; | ||
@@ -44,3 +47,3 @@ /** | ||
*/ | ||
get(sid: string, callback: (err: ErrorOrNull, session?: session.SessionData | null) => void): void; | ||
get(sid: string, callback: (err: any, session?: session.SessionData | null) => void): void; | ||
/** | ||
@@ -51,10 +54,10 @@ * Upsert a session into the store given a session ID (sid) and session (session) object. | ||
*/ | ||
set(sid: string, session: session.SessionData, callback?: (err: ErrorOrNull) => void): void; | ||
set(sid: string, session: session.SessionData, callback?: (err: any) => void): void; | ||
touch(sid: string, session: session.SessionData & { | ||
lastModified?: Date; | ||
}, callback?: (err: ErrorOrNull) => void): void; | ||
}, callback?: (err: any) => void): void; | ||
/** | ||
* Get all sessions in the store as an array | ||
*/ | ||
all(callback: (err: ErrorOrNull, obj?: session.SessionData[] | { | ||
all(callback: (err: any, obj?: session.SessionData[] | { | ||
[sid: string]: session.SessionData; | ||
@@ -66,11 +69,11 @@ } | null) => void): void; | ||
*/ | ||
destroy(sid: string, callback?: (err: ErrorOrNull) => void): void; | ||
destroy(sid: string, callback?: (err: any) => void): void; | ||
/** | ||
* Get the count of all sessions in the store | ||
*/ | ||
length(callback: (err: ErrorOrNull, length: number) => void): void; | ||
length(callback: (err: any, length: number) => void): void; | ||
/** | ||
* Delete all sessions from the store. | ||
*/ | ||
clear(callback?: (err: ErrorOrNull) => void): void; | ||
clear(callback?: (err: any) => void): void; | ||
/** | ||
@@ -81,2 +84,1 @@ * Close database connection | ||
} | ||
export {}; |
@@ -87,3 +87,3 @@ "use strict"; | ||
constructor(_a) { | ||
var { collectionName = 'sessions', ttl = 1209600, mongoOptions = { useUnifiedTopology: true }, createAutoRemoveIdx = true, touchAfter = 0, stringify = true, crypto } = _a, required = __rest(_a, ["collectionName", "ttl", "mongoOptions", "createAutoRemoveIdx", "touchAfter", "stringify", "crypto"]); | ||
var { collectionName = 'sessions', ttl = 1209600, mongoOptions = { useUnifiedTopology: true }, autoRemove = 'native', autoRemoveInterval = 10, touchAfter = 0, stringify = true, crypto } = _a, required = __rest(_a, ["collectionName", "ttl", "mongoOptions", "autoRemove", "autoRemoveInterval", "touchAfter", "stringify", "crypto"]); | ||
super(); | ||
@@ -95,3 +95,4 @@ this.crypto = null; | ||
mongoOptions, | ||
createAutoRemoveIdx, | ||
autoRemove, | ||
autoRemoveInterval, | ||
touchAfter, | ||
@@ -107,3 +108,8 @@ stringify, crypto: Object.assign({ | ||
}, crypto) }, required); | ||
// Check params | ||
console_1.assert(options.mongoUrl || options.clientPromise, 'You must provide either mongoUr|clientPromise in options'); | ||
console_1.assert(options.createAutoRemoveIdx === null || | ||
options.createAutoRemoveIdx === undefined, 'options.createAutoRemoveIdx has been reverted to autoRemove and autoRemoveInterval'); | ||
console_1.assert(!options.autoRemoveInterval || options.autoRemoveInterval <= 71582, | ||
/* (Math.pow(2, 32) - 1) / (1000 * 60) */ 'autoRemoveInterval is too large. options.autoRemoveInterval is in minutes but not seconds nor mills'); | ||
this.transformFunctions = computeTransformFunctions(options); | ||
@@ -126,6 +132,3 @@ let _clientP; | ||
.then((collection) => { | ||
if (options.createAutoRemoveIdx) { | ||
debug('Creating MongoDB TTL index'); | ||
collection.createIndex({ expires: 1 }, Object.assign({ expireAfterSeconds: 0 }, options.writeOperationOptions)); | ||
} | ||
this.setAutoRemove(collection); | ||
return collection; | ||
@@ -140,2 +143,23 @@ }); | ||
} | ||
setAutoRemove(collection) { | ||
const removeQuery = () => ({ | ||
expires: { | ||
$lt: new Date(), | ||
}, | ||
}); | ||
switch (this.options.autoRemove) { | ||
case 'native': | ||
debug('Creating MongoDB TTL index'); | ||
collection.createIndex({ expires: 1 }, Object.assign({ expireAfterSeconds: 0 }, this.options.writeOperationOptions)); | ||
break; | ||
case 'interval': | ||
debug('create Timer to remove expired sessions'); | ||
this.timer = setInterval(() => collection.deleteMany(removeQuery(), Object.assign(Object.assign({}, this.options.writeOperationOptions), { w: 0, j: false })), this.options.autoRemoveInterval * 1000 * 60); | ||
this.timer.unref(); | ||
break; | ||
case 'disabled': | ||
default: | ||
break; | ||
} | ||
} | ||
computeStorageId(sessionId) { | ||
@@ -179,3 +203,3 @@ if (this.options.transformId && | ||
const s = session && this.transformFunctions.unserialize(session.session); | ||
if (this.options.touchAfter > 0 && session.lastModified) { | ||
if (this.options.touchAfter > 0 && (session === null || session === void 0 ? void 0 : session.lastModified)) { | ||
s.lastModified = session.lastModified; | ||
@@ -379,2 +403,2 @@ } | ||
exports.default = MongoStore; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvTW9uZ29TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFDQUFnQztBQUNoQyxnREFBdUI7QUFDdkIseURBQTBDO0FBQzFDLHFDQUtnQjtBQUNoQixrREFBeUI7QUFHekIsTUFBTSxLQUFLLEdBQUcsZUFBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBNERwQyxnRUFBZ0U7QUFDaEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFBO0FBQ3JCLE1BQU0sSUFBSSxHQUFtQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRXJDLFNBQVMsd0JBQXdCLENBQy9CLE9BQTRCO0lBRTVCLG9EQUFvRDtJQUNwRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUE7SUFDZCxJQUFJLElBQUksQ0FBQTtJQUNSLEtBQUssSUFBSSxJQUFJLE9BQU8sRUFBRTtRQUNwQixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDckIsd0RBQXdEO1lBQ3hELDJFQUEyRTtZQUMzRSxvQkFBb0I7WUFDcEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyxvQkFBb0I7b0JBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUN6QixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtTQUNuQjthQUFNO1lBQ0wsb0JBQW9CO1lBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDMUI7S0FDRjtJQUVELE9BQU8sR0FBMEIsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxPQUFtQztJQUNwRSxJQUFJLE9BQU8sQ0FBQyxTQUFT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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvTW9uZ29TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFDQUFnQztBQUNoQyxnREFBdUI7QUFDdkIseURBQTBDO0FBQzFDLHFDQUtnQjtBQUNoQixrREFBeUI7QUFHekIsTUFBTSxLQUFLLEdBQUcsZUFBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBZ0VwQyxnRUFBZ0U7QUFDaEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFBO0FBQ3JCLE1BQU0sSUFBSSxHQUFtQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRXJDLFNBQVMsd0JBQXdCLENBQy9CLE9BQTRCO0lBRTVCLG9EQUFvRDtJQUNwRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUE7SUFDZCxJQUFJLElBQUksQ0FBQTtJQUNSLEtBQUssSUFBSSxJQUFJLE9BQU8sRUFBRTtRQUNwQixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDckIsd0RBQXdEO1lBQ3hELDJFQUEyRTtZQUMzRSxvQkFBb0I7WUFDcEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyxvQkFBb0I7b0JBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUN6QixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtTQUNuQjthQUFNO1lBQ0wsb0JBQW9CO1lBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDMUI7S0FDRjtJQUVELE9BQU8sR0FBMEIsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxPQUFtQztJQUNwRSxJQUFJLE9BQU8sQ0FBQyxTQUFT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 |
@@ -19,5 +19,7 @@ import * as session from 'express-session'; | ||
ttl?: number; | ||
createAutoRemoveIdx?: boolean; | ||
touchAfter?: number; | ||
stringify?: boolean; | ||
createAutoRemoveIdx?: boolean; | ||
autoRemove?: 'native' | 'interval' | 'disabled'; | ||
autoRemoveInterval?: number; | ||
serialize?: (a: any) => any; | ||
@@ -29,11 +31,12 @@ unserialize?: (a: any) => any; | ||
}; | ||
declare type ErrorOrNull = Error | null; | ||
export default class MongoStore extends session.Store { | ||
private clientP; | ||
private crypto; | ||
private timer?; | ||
collectionP: Promise<Collection>; | ||
private options; | ||
private transformFunctions; | ||
constructor({ collectionName, ttl, mongoOptions, createAutoRemoveIdx, touchAfter, stringify, crypto, ...required }: ConnectMongoOptions); | ||
constructor({ collectionName, ttl, mongoOptions, autoRemove, autoRemoveInterval, touchAfter, stringify, crypto, ...required }: ConnectMongoOptions); | ||
static create(options: ConnectMongoOptions): MongoStore; | ||
private setAutoRemove; | ||
private computeStorageId; | ||
@@ -44,3 +47,3 @@ /** | ||
*/ | ||
get(sid: string, callback: (err: ErrorOrNull, session?: session.SessionData | null) => void): void; | ||
get(sid: string, callback: (err: any, session?: session.SessionData | null) => void): void; | ||
/** | ||
@@ -51,10 +54,10 @@ * Upsert a session into the store given a session ID (sid) and session (session) object. | ||
*/ | ||
set(sid: string, session: session.SessionData, callback?: (err: ErrorOrNull) => void): void; | ||
set(sid: string, session: session.SessionData, callback?: (err: any) => void): void; | ||
touch(sid: string, session: session.SessionData & { | ||
lastModified?: Date; | ||
}, callback?: (err: ErrorOrNull) => void): void; | ||
}, callback?: (err: any) => void): void; | ||
/** | ||
* Get all sessions in the store as an array | ||
*/ | ||
all(callback: (err: ErrorOrNull, obj?: session.SessionData[] | { | ||
all(callback: (err: any, obj?: session.SessionData[] | { | ||
[sid: string]: session.SessionData; | ||
@@ -66,11 +69,11 @@ } | null) => void): void; | ||
*/ | ||
destroy(sid: string, callback?: (err: ErrorOrNull) => void): void; | ||
destroy(sid: string, callback?: (err: any) => void): void; | ||
/** | ||
* Get the count of all sessions in the store | ||
*/ | ||
length(callback: (err: ErrorOrNull, length: number) => void): void; | ||
length(callback: (err: any, length: number) => void): void; | ||
/** | ||
* Delete all sessions from the store. | ||
*/ | ||
clear(callback?: (err: ErrorOrNull) => void): void; | ||
clear(callback?: (err: any) => void): void; | ||
/** | ||
@@ -81,2 +84,1 @@ * Close database connection | ||
} | ||
export {}; |
@@ -51,3 +51,3 @@ import { assert } from 'console'; | ||
export default class MongoStore extends session.Store { | ||
constructor({ collectionName = 'sessions', ttl = 1209600, mongoOptions = { useUnifiedTopology: true }, createAutoRemoveIdx = true, touchAfter = 0, stringify = true, crypto, ...required }) { | ||
constructor({ collectionName = 'sessions', ttl = 1209600, mongoOptions = { useUnifiedTopology: true }, autoRemove = 'native', autoRemoveInterval = 10, touchAfter = 0, stringify = true, crypto, ...required }) { | ||
super(); | ||
@@ -60,3 +60,4 @@ this.crypto = null; | ||
mongoOptions, | ||
createAutoRemoveIdx, | ||
autoRemove, | ||
autoRemoveInterval, | ||
touchAfter, | ||
@@ -78,3 +79,8 @@ stringify, | ||
}; | ||
// Check params | ||
assert(options.mongoUrl || options.clientPromise, 'You must provide either mongoUr|clientPromise in options'); | ||
assert(options.createAutoRemoveIdx === null || | ||
options.createAutoRemoveIdx === undefined, 'options.createAutoRemoveIdx has been reverted to autoRemove and autoRemoveInterval'); | ||
assert(!options.autoRemoveInterval || options.autoRemoveInterval <= 71582, | ||
/* (Math.pow(2, 32) - 1) / (1000 * 60) */ 'autoRemoveInterval is too large. options.autoRemoveInterval is in minutes but not seconds nor mills'); | ||
this.transformFunctions = computeTransformFunctions(options); | ||
@@ -97,6 +103,3 @@ let _clientP; | ||
.then((collection) => { | ||
if (options.createAutoRemoveIdx) { | ||
debug('Creating MongoDB TTL index'); | ||
collection.createIndex({ expires: 1 }, { expireAfterSeconds: 0, ...options.writeOperationOptions }); | ||
} | ||
this.setAutoRemove(collection); | ||
return collection; | ||
@@ -111,2 +114,27 @@ }); | ||
} | ||
setAutoRemove(collection) { | ||
const removeQuery = () => ({ | ||
expires: { | ||
$lt: new Date(), | ||
}, | ||
}); | ||
switch (this.options.autoRemove) { | ||
case 'native': | ||
debug('Creating MongoDB TTL index'); | ||
collection.createIndex({ expires: 1 }, { expireAfterSeconds: 0, ...this.options.writeOperationOptions }); | ||
break; | ||
case 'interval': | ||
debug('create Timer to remove expired sessions'); | ||
this.timer = setInterval(() => collection.deleteMany(removeQuery(), { | ||
...this.options.writeOperationOptions, | ||
w: 0, | ||
j: false, | ||
}), this.options.autoRemoveInterval * 1000 * 60); | ||
this.timer.unref(); | ||
break; | ||
case 'disabled': | ||
default: | ||
break; | ||
} | ||
} | ||
computeStorageId(sessionId) { | ||
@@ -150,3 +178,3 @@ if (this.options.transformId && | ||
const s = session && this.transformFunctions.unserialize(session.session); | ||
if (this.options.touchAfter > 0 && session.lastModified) { | ||
if (this.options.touchAfter > 0 && session?.lastModified) { | ||
s.lastModified = session.lastModified; | ||
@@ -350,2 +378,2 @@ } | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvTW9uZ29TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ2hDLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFHTCxXQUFXLEdBRVosTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBR3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQTREcEMsZ0VBQWdFO0FBQ2hFLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtBQUNyQixNQUFNLElBQUksR0FBbUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVyQyxTQUFTLHdCQUF3QixDQUMvQixPQUE0QjtJQUU1QixvREFBb0Q7SUFDcEQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFBO0lBQ2QsSUFBSSxJQUFJLENBQUE7SUFDUixLQUFLLElBQUksSUFBSSxPQUFPLEVBQUU7UUFDcEIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ3JCLHdEQUF3RDtZQUN4RCwyRUFBMkU7WUFDM0Usb0JBQW9CO1lBQ3BCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUNoQyxDQUFDLENBQUMsb0JBQW9CO29CQUNwQixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7U0FDbkI7YUFBTTtZQUNMLG9CQUFvQjtZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFCO0tBQ0Y7SUFF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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvTW9uZ29TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ2hDLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFHTCxXQUFXLEdBRVosTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBR3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQWdFcEMsZ0VBQWdFO0FBQ2hFLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtBQUNyQixNQUFNLElBQUksR0FBbUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVyQyxTQUFTLHdCQUF3QixDQUMvQixPQUE0QjtJQUU1QixvREFBb0Q7SUFDcEQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFBO0lBQ2QsSUFBSSxJQUFJLENBQUE7SUFDUixLQUFLLElBQUksSUFBSSxPQUFPLEVBQUU7UUFDcEIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ3JCLHdEQUF3RDtZQUN4RCwyRUFBMkU7WUFDM0Usb0JBQW9CO1lBQ3BCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUNoQyxDQUFDLENBQUMsb0JBQW9CO29CQUNwQixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7U0FDbkI7YUFBTTtZQUNMLG9CQUFvQjtZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFCO0tBQ0Y7SUFF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 |
@@ -12,2 +12,3 @@ # Changelog | ||
- Added mongoose example | ||
- Revert `createAutoRemoveIdx` and add back `autoRemove` and `autoRemoveInterval` | ||
@@ -18,3 +19,5 @@ ### Fixed | ||
- Fixed `Warning: Accessing non-existent property 'MongoError' of module exports inside circular dependency` by downgrade to `mongodb@3.6.3` | ||
- Revert update session when touch | ||
- Revert update session when touch (#351) | ||
- Fix cannot read property `lastModified` of null | ||
- Fix TS typing error | ||
@@ -21,0 +24,0 @@ ## [4.1.0] - 2021-02-22 |
{ | ||
"name": "connect-mongo", | ||
"version": "4.2.0-rc2", | ||
"version": "4.2.0", | ||
"description": "MongoDB session store for Express and Connect", | ||
@@ -75,2 +75,3 @@ "main": "build/main/index.js", | ||
"@types/node": "^14.14.20", | ||
"@types/supertest": "^2.0.10", | ||
"@typescript-eslint/eslint-plugin": "^4.12.0", | ||
@@ -92,2 +93,3 @@ "@typescript-eslint/parser": "^4.12.0", | ||
"eslint-plugin-standard": "^5.0.0", | ||
"express": "^4.17.1", | ||
"express-session": "^1.17.1", | ||
@@ -102,2 +104,3 @@ "gh-pages": "^3.1.0", | ||
"standard-version": "^9.0.0", | ||
"supertest": "^6.1.3", | ||
"ts-node": "^9.0.0", | ||
@@ -127,3 +130,3 @@ "typedoc": "^0.19.0", | ||
"!build/module/**", | ||
"!src/test/**" | ||
"!src/test/testHelper.ts" | ||
] | ||
@@ -130,0 +133,0 @@ }, |
@@ -12,2 +12,27 @@ # connect-mongo | ||
- [Install](#install) | ||
- [Compatibility](#compatibility) | ||
- [Usage](#usage) | ||
- [Express or Connect integration](#express-or-connect-integration) | ||
- [Connection to MongoDB](#connection-to-mongodb) | ||
- [Known issues](#known-issues) | ||
- [Events](#events) | ||
- [Session expiration](#session-expiration) | ||
- [Remove expired sessions](#remove-expired-sessions) | ||
- [Set MongoDB to clean expired sessions (default mode)](#set-mongodb-to-clean-expired-sessions-default-mode) | ||
- [Set the compatibility mode](#set-the-compatibility-mode) | ||
- [Disable expired sessions cleaning](#disable-expired-sessions-cleaning) | ||
- [Lazy session update](#lazy-session-update) | ||
- [Transparent encryption/decryption of session data](#transparent-encryptiondecryption-of-session-data) | ||
- [Options](#options) | ||
- [Connection-related options (required)](#connection-related-options-required) | ||
- [More options](#more-options) | ||
- [Crypto-related options](#crypto-related-options) | ||
- [Development](#development) | ||
- [Example application](#example-application) | ||
- [Release](#release) | ||
- [License](#license) | ||
## Install | ||
``` | ||
@@ -127,10 +152,14 @@ npm install connect-mongo | ||
## Remove expired sessions | ||
` | ||
By default, `connect-mongo` uses MongoDB's TTL collection feature (2.2+) to have `mongod` automatically remove expired sessions. `connect-mongo` will create a TTL index for you at startup. But you can disable the creation of index with `createAutoRemoveIdx: false` | ||
By default, `connect-mongo` uses MongoDB's TTL collection feature (2.2+) to have mongod automatically remove expired sessions. But you can change this behavior. | ||
### Set MongoDB to clean expired sessions (default mode) | ||
`connect-mongo` will create a TTL index for you at startup. You MUST have MongoDB 2.2+ and administration permissions. | ||
```js | ||
app.use(session({ | ||
store: MongoStore.create({ | ||
store: MongoStore.craete({ | ||
mongoUrl: 'mongodb://localhost/test-app', | ||
createAutoRemoveIdx: false | ||
autoRemove: 'native' // Default | ||
}) | ||
@@ -142,2 +171,31 @@ })); | ||
### Set the compatibility mode | ||
In some cases you can't or don't want to create a TTL index, e.g. Azure Cosmos DB. | ||
`connect-mongo` will take care of removing expired sessions, using defined interval. | ||
```js | ||
app.use(session({ | ||
store: MongoStore.craete({ | ||
mongoUrl: 'mongodb://localhost/test-app', | ||
autoRemove: 'interval', | ||
autoRemoveInterval: 10 // In minutes. Default | ||
}) | ||
})); | ||
``` | ||
### Disable expired sessions cleaning | ||
You are in production environnement and/or you manage the TTL index elsewhere. | ||
```js | ||
app.use(session({ | ||
store: MongoStore.craete({ | ||
mongoUrl: 'mongodb://localhost/test-app', | ||
autoRemove: 'disabled' | ||
}) | ||
})); | ||
``` | ||
## Lazy session update | ||
@@ -144,0 +202,0 @@ |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
91517
937
0
301
39