@spinajs/session-provider-dynamodb 2.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # `jobs`
2
+
3
+ > TODO: description
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ const jobs = require('jobs');
9
+
10
+ // TODO: DEMONSTRATE API
11
+ ```
package/lib/index.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import * as AWS from 'aws-sdk';
2
+ import { SessionProvider, Session, ISession } from '@spinajs/rbac';
3
+ import { Log } from '@spinajs/log';
4
+ export declare class DynamoDbSessionProvider extends SessionProvider {
5
+ protected Log: Log;
6
+ protected Table: string;
7
+ protected AwsConfig: any;
8
+ protected DefaultExpirationTime: number;
9
+ protected ConfigPath: any;
10
+ protected ReadCapacityUnits: any;
11
+ protected WriteCapacityUnits: any;
12
+ protected DynamoDb: AWS.DynamoDB;
13
+ resolve(): Promise<void>;
14
+ protected updateTimeToLive(): Promise<import("aws-sdk/lib/request").PromiseResult<AWS.DynamoDB.UpdateTimeToLiveOutput, AWS.AWSError>>;
15
+ protected createSessionTable(): Promise<import("aws-sdk/lib/request").PromiseResult<AWS.DynamoDB.CreateTableOutput, AWS.AWSError>>;
16
+ protected checkSessionTable(): Promise<import("aws-sdk/lib/request").PromiseResult<AWS.DynamoDB.DescribeTableOutput, AWS.AWSError>>;
17
+ restore(sessionId: string): Promise<Session>;
18
+ delete(sessionId: string): Promise<void>;
19
+ touch(session: ISession): Promise<void>;
20
+ truncate(): Promise<void>;
21
+ protected deleteSessionTable(): Promise<void>;
22
+ save(sessionOrId: string | ISession, data?: object): Promise<void>;
23
+ }
package/lib/index.js ADDED
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.DynamoDbSessionProvider = void 0;
39
+ const AWS = __importStar(require("aws-sdk"));
40
+ const luxon_1 = require("luxon");
41
+ const rbac_1 = require("@spinajs/rbac");
42
+ const di_1 = require("@spinajs/di");
43
+ const configuration_1 = require("@spinajs/configuration");
44
+ const log_1 = require("@spinajs/log");
45
+ const util_1 = require("@spinajs/util");
46
+ const lodash_1 = __importDefault(require("lodash"));
47
+ let DynamoDbSessionProvider = class DynamoDbSessionProvider extends rbac_1.SessionProvider {
48
+ // tslint:disable-next-line: no-empty
49
+ async resolve() {
50
+ AWS.config.update(this.AwsConfig);
51
+ if (this.ConfigPath) {
52
+ AWS.config.loadFromPath(this.ConfigPath);
53
+ }
54
+ else if (this.AwsConfig) {
55
+ AWS.config.update(this.AwsConfig);
56
+ }
57
+ this.DynamoDb = new AWS.DynamoDB({ apiVersion: '2012-08-10' });
58
+ const table = await this.checkSessionTable();
59
+ if (!table) {
60
+ await this.createSessionTable();
61
+ await this.updateTimeToLive();
62
+ }
63
+ }
64
+ updateTimeToLive() {
65
+ return this.DynamoDb.updateTimeToLive({
66
+ TableName: this.Table,
67
+ TimeToLiveSpecification: {
68
+ AttributeName: 'Expiration',
69
+ Enabled: true,
70
+ },
71
+ }).promise();
72
+ }
73
+ createSessionTable() {
74
+ return this.DynamoDb.createTable({
75
+ TableName: this.Table,
76
+ AttributeDefinitions: [
77
+ {
78
+ AttributeName: 'SessionId',
79
+ AttributeType: 'S',
80
+ },
81
+ ],
82
+ KeySchema: [
83
+ {
84
+ AttributeName: 'SessionId',
85
+ KeyType: 'HASH',
86
+ },
87
+ ],
88
+ ProvisionedThroughput: {
89
+ ReadCapacityUnits: this.ReadCapacityUnits,
90
+ WriteCapacityUnits: this.WriteCapacityUnits,
91
+ },
92
+ }).promise();
93
+ }
94
+ async checkSessionTable() {
95
+ try {
96
+ return await this.DynamoDb.describeTable({
97
+ TableName: this.Table,
98
+ }).promise();
99
+ }
100
+ catch (err) {
101
+ if (err.code === 'ResourceNotFoundException') {
102
+ return null;
103
+ }
104
+ }
105
+ }
106
+ async restore(sessionId) {
107
+ const params = {
108
+ TableName: this.Table,
109
+ Key: {
110
+ SessionId: { S: sessionId },
111
+ },
112
+ };
113
+ const result = await this.DynamoDb.getItem(params).promise();
114
+ if (!result.Item) {
115
+ return null;
116
+ }
117
+ else {
118
+ // DynamoDB ttl takes time, sometimes
119
+ // we receive session before ttl mark result as expired
120
+ // and deletes it
121
+ const ttl = parseInt(result.Item.Expiration.N);
122
+ if (ttl < luxon_1.DateTime.now().toMillis()) {
123
+ return null;
124
+ }
125
+ const data = JSON.parse(result.Item.Data.S);
126
+ return new rbac_1.Session({
127
+ Creation: luxon_1.DateTime.fromISO(result.Item.Creation.S),
128
+ Expiration: luxon_1.DateTime.fromMillis(ttl),
129
+ SessionId: result.Item.SessionId.S,
130
+ Data: new Map(Object.entries(data)),
131
+ });
132
+ }
133
+ }
134
+ async delete(sessionId) {
135
+ const params = {
136
+ TableName: this.Table,
137
+ Key: {
138
+ SessionId: { S: sessionId },
139
+ },
140
+ };
141
+ await this.DynamoDb.deleteItem(params).promise();
142
+ }
143
+ async touch(session) {
144
+ const params = {
145
+ TableName: this.Table,
146
+ Key: {
147
+ SessionId: { S: session.SessionId },
148
+ },
149
+ UpdateExpression: 'set Expiration = :e',
150
+ ExpressionAttributeValues: {
151
+ ':e': {
152
+ N: `${session.Expiration.toMillis()}`,
153
+ },
154
+ },
155
+ ReturnValues: 'UPDATED_NEW',
156
+ };
157
+ await this.DynamoDb.updateItem(params).promise();
158
+ }
159
+ async truncate() {
160
+ await this.deleteSessionTable();
161
+ await this.createSessionTable();
162
+ await this.updateTimeToLive();
163
+ }
164
+ async deleteSessionTable() {
165
+ await this.DynamoDb.deleteTable({
166
+ TableName: this.Table,
167
+ }).promise();
168
+ }
169
+ async save(sessionOrId, data) {
170
+ let sId = '';
171
+ let sData = null;
172
+ let sCreationTime = luxon_1.DateTime.now();
173
+ let sExpirationTime = luxon_1.DateTime.now().plus({ minutes: this.DefaultExpirationTime });
174
+ if (lodash_1.default.isString(sessionOrId)) {
175
+ sId = sessionOrId;
176
+ sData = JSON.stringify(data);
177
+ }
178
+ else {
179
+ sId = sessionOrId.SessionId;
180
+ sData = JSON.stringify(Object.fromEntries(sessionOrId.Data), util_1.replacer);
181
+ sCreationTime = sessionOrId.Creation;
182
+ sExpirationTime = sessionOrId.Expiration;
183
+ }
184
+ const params = {
185
+ TableName: this.Table,
186
+ Item: {
187
+ SessionId: { S: sId },
188
+ Data: {
189
+ S: sData,
190
+ },
191
+ Creation: { S: sCreationTime.toISO() },
192
+ Expiration: { N: `${sExpirationTime.toMillis()}` },
193
+ },
194
+ };
195
+ await this.DynamoDb.putItem(params).promise();
196
+ }
197
+ };
198
+ __decorate([
199
+ (0, log_1.Logger)('dynamo-session-store'),
200
+ __metadata("design:type", log_1.Log)
201
+ ], DynamoDbSessionProvider.prototype, "Log", void 0);
202
+ __decorate([
203
+ (0, configuration_1.Config)('rbac.session.aws.table'),
204
+ __metadata("design:type", String)
205
+ ], DynamoDbSessionProvider.prototype, "Table", void 0);
206
+ __decorate([
207
+ (0, configuration_1.Config)('rbac.session.aws.config'),
208
+ __metadata("design:type", Object)
209
+ ], DynamoDbSessionProvider.prototype, "AwsConfig", void 0);
210
+ __decorate([
211
+ (0, configuration_1.Config)('rbac.session.expiration'),
212
+ __metadata("design:type", Number)
213
+ ], DynamoDbSessionProvider.prototype, "DefaultExpirationTime", void 0);
214
+ __decorate([
215
+ (0, configuration_1.Config)('rbac.session.aws.configPath'),
216
+ __metadata("design:type", Object)
217
+ ], DynamoDbSessionProvider.prototype, "ConfigPath", void 0);
218
+ __decorate([
219
+ (0, configuration_1.Config)('rbac.session.aws.readCapacityUnits', {
220
+ defaultValue: 10,
221
+ }),
222
+ __metadata("design:type", Object)
223
+ ], DynamoDbSessionProvider.prototype, "ReadCapacityUnits", void 0);
224
+ __decorate([
225
+ (0, configuration_1.Config)('rbac.session.aws.writeCapacityUnits', {
226
+ defaultValue: 10,
227
+ }),
228
+ __metadata("design:type", Object)
229
+ ], DynamoDbSessionProvider.prototype, "WriteCapacityUnits", void 0);
230
+ DynamoDbSessionProvider = __decorate([
231
+ (0, di_1.Injectable)(rbac_1.SessionProvider)
232
+ ], DynamoDbSessionProvider);
233
+ exports.DynamoDbSessionProvider = DynamoDbSessionProvider;
234
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/jobs.js ADDED
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ module.exports = jobs;
4
+
5
+ function jobs() {
6
+ // TODO
7
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@spinajs/session-provider-dynamodb",
3
+ "version": "2.0.44",
4
+ "description": "dynamo db session store",
5
+ "main": "lib/index.js",
6
+ "private": false,
7
+ "scripts": {
8
+ "build": "npm run clean && npm run compile && cpx src/views/**/* lib/views && cpx src/static/**/* lib/static",
9
+ "compile": "tsc -p tsconfig.build.json",
10
+ "clean": "",
11
+ "test": "ts-mocha -p tsconfig.json test/**/*.test.ts",
12
+ "coverage": "nyc npm run test",
13
+ "build-docs": "rimraf docs && typedoc --options typedoc.json src/",
14
+ "prepare": "npm run build",
15
+ "format": "prettier --write \"src/**/*.ts\"",
16
+ "lint": "eslint -c .eslintrc.js --ext .ts src --fix",
17
+ "prepublishOnly": "npm test && npm run lint",
18
+ "preversion": "npm run lint",
19
+ "version": "npm run format && git add -A src",
20
+ "postversion": "git push && git push --tags"
21
+ },
22
+ "files": [
23
+ "lib/**/*"
24
+ ],
25
+ "types": "lib",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/spinajs/main.git"
29
+ },
30
+ "keywords": [
31
+ "spinajs",
32
+ "http"
33
+ ],
34
+ "author": "SpinaJS <spinajs@coderush.pl> (https://github.com/spinajs/main)",
35
+ "license": "MIT",
36
+ "bugs": {
37
+ "url": "https://github.com/spinajs/main/issues"
38
+ },
39
+ "homepage": "https://github.com/spinajs/main#readme",
40
+ "devDependencies": {
41
+ "@types/luxon": "^2.3.1",
42
+ "@types/node": "^16.11.11",
43
+ "@types/nodemailer": "^6.4.4",
44
+ "@types/pug": "^2.0.4"
45
+ },
46
+ "dependencies": {
47
+ "@spinajs/configuration": "^2.0.44",
48
+ "@spinajs/di": "^2.0.44",
49
+ "@spinajs/exceptions": "^2.0.39",
50
+ "@spinajs/internal-logger": "^2.0.44",
51
+ "@spinajs/log": "^2.0.44",
52
+ "aws-sdk": "^2.1218.0"
53
+ },
54
+ "gitHead": "1857a6e3626e0fed22ffb0b44b48d587c79898db"
55
+ }