UNPKG

@kikiutils/nitro-session

Version:
1 lines 3.86 kB
{"version":3,"file":"index.mjs","sources":["../../../src/handlers/data/index.ts"],"sourcesContent":["import { getRequestIP } from 'h3';\nimport type { H3Event } from 'h3';\n\nimport type { PluginOptions } from '../../types/options';\nimport type { PartialH3EventContextSession } from '../../types/session';\n\nimport { CookieOrHeaderDataHandler } from './cookie-or-header';\nimport { UnstorageDataHandler } from './unstorage';\n\nexport type StoredData = [number, PartialH3EventContextSession, ip?: string];\n\nexport class DataHandler {\n #handler: CookieOrHeaderDataHandler | UnstorageDataHandler;\n #maxAgeMilliseconds: number;\n #strictIpValidation: boolean;\n\n private constructor(\n handler: CookieOrHeaderDataHandler | UnstorageDataHandler,\n maxAge: number,\n strictIpValidation: boolean,\n ) {\n this.#handler = handler;\n this.#maxAgeMilliseconds = maxAge * 1000;\n this.#strictIpValidation = strictIpValidation;\n }\n\n #getRequestIp(event: H3Event) {\n return getRequestIP(event, { xForwardedFor: true }) || getRequestIP(event);\n }\n\n static async createInstance(options: PluginOptions) {\n let handler;\n if (options.storage?.data?.driver === 'cookie/header') {\n handler = new CookieOrHeaderDataHandler(options.storage.data.options);\n } else handler = await UnstorageDataHandler.createInstance(options.storage?.data || { driver: 'memory' });\n return new this(handler, options.maxAge ?? 86400, !!options.strictIpValidation);\n }\n\n async delete(token: string) {\n await this.#handler.delete(token);\n }\n\n async get(event: H3Event, token: string) {\n const data = await this.#handler.get(event, token);\n if (data && data[0] + this.#maxAgeMilliseconds >= Date.now()) {\n if (this.#strictIpValidation && this.#getRequestIp(event) !== data[2]) return;\n return data[1];\n }\n }\n\n async setAndGetToken(event: H3Event, data: PartialH3EventContextSession) {\n const toSetData: StoredData = [\n Date.now(),\n data,\n ];\n\n if (this.#strictIpValidation) toSetData.push(this.#getRequestIp(event));\n return await this.#handler.setOrProcessAndGetToken(event, toSetData);\n }\n}\n"],"names":[],"mappings":";;;;MAWa,WAAW,CAAA;AACpB,IAAA,QAAQ;AACR,IAAA,mBAAmB;AACnB,IAAA,mBAAmB;AAEnB,IAAA,WAAA,CACI,OAAyD,EACzD,MAAc,EACd,kBAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,mBAAmB,GAAG,kBAAkB;;AAGjD,IAAA,aAAa,CAAC,KAAc,EAAA;AACxB,QAAA,OAAO,YAAY,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC;;AAG9E,IAAA,aAAa,cAAc,CAAC,OAAsB,EAAA;AAC9C,QAAA,IAAI,OAAO;QACX,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE;AACnD,YAAA,OAAO,GAAG,IAAI,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAClE,YAAA,OAAO,GAAG,MAAM,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACzG,QAAA,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;;IAGnF,MAAM,MAAM,CAAC,KAAa,EAAA;QACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;;AAGrC,IAAA,MAAM,GAAG,CAAC,KAAc,EAAE,KAAa,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AAClD,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AAC1D,YAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;gBAAE;AACvE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC;;;AAItB,IAAA,MAAM,cAAc,CAAC,KAAc,EAAE,IAAkC,EAAA;AACnE,QAAA,MAAM,SAAS,GAAe;YAC1B,IAAI,CAAC,GAAG,EAAE;YACV,IAAI;SACP;QAED,IAAI,IAAI,CAAC,mBAAmB;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC;;AAE3E;;;;"}