@hapiboo/module-auth 1.0.0

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.
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authorizationService = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const core_1 = require("@hapiboo/core");
6
+ const date_1 = require("@hapiboo/date");
7
+ const models_1 = require("../models");
8
+ const repository_1 = require("./repository");
9
+ const settings_1 = require("./settings");
10
+ var authorizationValidator;
11
+ (function (authorizationValidator) {
12
+ let cache;
13
+ (function (cache) {
14
+ const cacheLoading = new Map();
15
+ const userPermissionCache = new Map();
16
+ //const userRoleCache: Map<string, Map<string, string[]>> = new Map<string, Map<string, string[]>>();
17
+ function checkUserPermission(user_id, permission_id) {
18
+ if (userPermissionCache.has(user_id)) {
19
+ const permissions = userPermissionCache.get(user_id);
20
+ if (settings_1.authSettings.overrulingPermission !== undefined) {
21
+ return permissions.includes(permission_id) || permissions.includes(settings_1.authSettings.overrulingPermission);
22
+ }
23
+ else {
24
+ return permissions.includes(permission_id);
25
+ }
26
+ }
27
+ else {
28
+ if (cacheLoading.has(user_id)) {
29
+ const loadStart = cacheLoading.get(user_id);
30
+ return date_1.DateObject.now().getMilisecondsDifference(loadStart);
31
+ }
32
+ else {
33
+ cacheLoading.set(user_id, date_1.DateObject.now());
34
+ authorizationService.access.getForUser(user_id)
35
+ .then((userPermissions) => {
36
+ fillUserPermissions(user_id, userPermissions);
37
+ })
38
+ .catch((error) => {
39
+ console.error(`Error fetching user permissions for user ${user_id}:`, error);
40
+ cacheLoading.delete(user_id);
41
+ });
42
+ return 0;
43
+ }
44
+ }
45
+ }
46
+ cache.checkUserPermission = checkUserPermission;
47
+ function fillUserPermissions(user_id, permissions) {
48
+ userPermissionCache.set(user_id, permissions.map((item) => { return item.permission_id; }));
49
+ cacheLoading.delete(user_id);
50
+ }
51
+ cache.fillUserPermissions = fillUserPermissions;
52
+ })(cache = authorizationValidator.cache || (authorizationValidator.cache = {}));
53
+ })(authorizationValidator || (authorizationValidator = {}));
54
+ var helper;
55
+ (function (helper) {
56
+ let userAccess;
57
+ (function (userAccess) {
58
+ function assignPermission(account_id, user_id, role_id, permission_id) {
59
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
60
+ const model = new models_1.UserAccess().createFromRole((0, uuid_1.v4)(), account_id, user_id, role_id, permission_id);
61
+ core_1.promise.resolve(repository_1.repository.userAccess.create(model), resolve, reject);
62
+ });
63
+ }
64
+ userAccess.assignPermission = assignPermission;
65
+ function assignPermissions(account_id, user_id, role_id, permission_ids, created) {
66
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
67
+ if (permission_ids.length === 0) {
68
+ resolve(created);
69
+ }
70
+ else {
71
+ core_1.promise.check(assignPermission(account_id, user_id, role_id, permission_ids.pop()), reject)
72
+ .then((data) => {
73
+ created.push(data);
74
+ core_1.promise.resolve(assignPermissions(account_id, user_id, role_id, permission_ids, created), resolve, reject);
75
+ });
76
+ }
77
+ });
78
+ }
79
+ userAccess.assignPermissions = assignPermissions;
80
+ })(userAccess = helper.userAccess || (helper.userAccess = {}));
81
+ })(helper || (helper = {}));
82
+ var authorizationService;
83
+ (function (authorizationService) {
84
+ let permission;
85
+ (function (permission_1) {
86
+ function create(name) {
87
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
88
+ const model = new models_1.Permission().create((0, uuid_1.v4)(), name);
89
+ core_1.promise.resolve(repository_1.repository.permission.create(model), resolve, reject);
90
+ });
91
+ }
92
+ permission_1.create = create;
93
+ function edit(id, name) {
94
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
95
+ core_1.promise.check(repository_1.repository.permission.getById(id), reject)
96
+ .then((permission) => {
97
+ permission.name = name;
98
+ core_1.promise.resolve(repository_1.repository.permission.update(permission), resolve, reject);
99
+ });
100
+ });
101
+ }
102
+ permission_1.edit = edit;
103
+ function all() {
104
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
105
+ core_1.promise.resolve(repository_1.repository.permission.filter(undefined), resolve, reject);
106
+ });
107
+ }
108
+ permission_1.all = all;
109
+ })(permission = authorizationService.permission || (authorizationService.permission = {}));
110
+ let role;
111
+ (function (role_1) {
112
+ function create(name, description, lucide_icon, permissions) {
113
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
114
+ const model = new models_1.Role().create((0, uuid_1.v4)(), name, description, lucide_icon, permissions);
115
+ core_1.promise.resolve(repository_1.repository.role.create(model), resolve, reject);
116
+ });
117
+ }
118
+ role_1.create = create;
119
+ function edit(id, name, description, lucide_icon, permissions) {
120
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
121
+ core_1.promise.check(repository_1.repository.role.getById(id), reject)
122
+ .then((role) => {
123
+ core_1.promise.resolve(repository_1.repository.role.update(role.edit(name, description, lucide_icon, permissions)), resolve, reject);
124
+ });
125
+ });
126
+ }
127
+ role_1.edit = edit;
128
+ function all() {
129
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
130
+ core_1.promise.resolve(repository_1.repository.role.filter(undefined), resolve, reject);
131
+ });
132
+ }
133
+ role_1.all = all;
134
+ })(role = authorizationService.role || (authorizationService.role = {}));
135
+ let access;
136
+ (function (access) {
137
+ let byRole;
138
+ (function (byRole) {
139
+ function assign(account_id, user_id, role_id) {
140
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
141
+ core_1.promise.check(repository_1.repository.role.getById(role_id), reject)
142
+ .then((data) => {
143
+ core_1.promise.resolve(helper.userAccess.assignPermissions(account_id, user_id, role_id, [...data.permissions], []), resolve, reject);
144
+ });
145
+ });
146
+ }
147
+ byRole.assign = assign;
148
+ function assignList(account_id, user_id, role_ids) {
149
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
150
+ core_1.promise.check(repository_1.repository.userAccess.getForUserByRoles(user_id), reject)
151
+ .then((data) => {
152
+ core_1.promise.checkVoid(core_1.promise.all(data.map((item) => { return repository_1.repository.userAccess.remove(item.id); })), reject)
153
+ .then(() => {
154
+ core_1.promise.checkVoid(core_1.promise.all(role_ids.map((role_id) => { return assign(account_id, user_id, role_id); })), reject)
155
+ .then(() => {
156
+ core_1.promise.resolve(getForUser(user_id), resolve, reject);
157
+ });
158
+ });
159
+ });
160
+ });
161
+ }
162
+ byRole.assignList = assignList;
163
+ function remove(account_id, user_id) {
164
+ return assignList(account_id, user_id, []);
165
+ }
166
+ byRole.remove = remove;
167
+ })(byRole = access.byRole || (access.byRole = {}));
168
+ let byPermission;
169
+ (function (byPermission) {
170
+ function assign(_user_id, _permission_id) { }
171
+ byPermission.assign = assign;
172
+ function assignList(_user_id, _permission_id) { }
173
+ byPermission.assignList = assignList;
174
+ function remove(_account_id, _user_id) {
175
+ return core_1.promise.createDelayedVoidPromise((resolve, _reject) => {
176
+ resolve();
177
+ });
178
+ }
179
+ byPermission.remove = remove;
180
+ })(byPermission = access.byPermission || (access.byPermission = {}));
181
+ function removeAllForUser(user_id) {
182
+ return core_1.promise.createDelayedVoidPromise((resolve, reject) => {
183
+ core_1.promise.check(repository_1.repository.userAccess.getForUser(user_id), reject)
184
+ .then((data) => {
185
+ core_1.promise.resolveVoid(core_1.promise.all(data.map((item) => { return repository_1.repository.userAccess.remove(item.id); })), resolve, reject);
186
+ });
187
+ });
188
+ }
189
+ access.removeAllForUser = removeAllForUser;
190
+ function getForAccount(account_id) {
191
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
192
+ core_1.promise.resolve(repository_1.repository.userAccess.getForAccount(account_id), resolve, reject);
193
+ });
194
+ }
195
+ access.getForAccount = getForAccount;
196
+ function getForUser(user_id) {
197
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
198
+ core_1.promise.resolve(repository_1.repository.userAccess.getForUser(user_id), resolve, reject);
199
+ });
200
+ }
201
+ access.getForUser = getForUser;
202
+ function split(user_access) {
203
+ const roles = user_access.filter((item) => { return item.role_id !== undefined; });
204
+ const unique = [...new Map(roles.map(item => [item.role_id, item])).values()];
205
+ const permissions = user_access.filter((item) => { return item.role_id === undefined; });
206
+ return { roles: unique, permissions };
207
+ }
208
+ access.split = split;
209
+ })(access = authorizationService.access || (authorizationService.access = {}));
210
+ let middleware;
211
+ (function (middleware) {
212
+ function check(user_id, permission_id, response, next) {
213
+ const hasPermission = authorizationValidator.cache.checkUserPermission(user_id, permission_id);
214
+ if (hasPermission === true) {
215
+ next();
216
+ }
217
+ else if (hasPermission === false) {
218
+ response.status(403);
219
+ response.json({ error: 'unauthorized' });
220
+ }
221
+ else {
222
+ if (typeof hasPermission === 'number' && hasPermission < 1000) {
223
+ setTimeout(() => {
224
+ check(user_id, permission_id, response, next);
225
+ }, 100);
226
+ }
227
+ else {
228
+ response.status(403);
229
+ response.json({ error: 'permission data loading, try again later' });
230
+ }
231
+ }
232
+ }
233
+ function permission(permission_id) {
234
+ return function (request, response, next) {
235
+ const user_id = request.payload?.user_id;
236
+ if (user_id !== undefined) {
237
+ check(user_id, permission_id, response, next);
238
+ }
239
+ else {
240
+ response.status(403);
241
+ response.json({ error: 'unauthorized' });
242
+ }
243
+ };
244
+ }
245
+ middleware.permission = permission;
246
+ })(middleware = authorizationService.middleware || (authorizationService.middleware = {}));
247
+ })(authorizationService || (exports.authorizationService = authorizationService = {}));
@@ -0,0 +1,44 @@
1
+ import { IResponsePromise, IResponsePromiseVoid } from '@hapiboo/core';
2
+ import { Credential, User, Permission, Role, UserAccess, CredentialType, UserType } from '../models';
3
+ export declare namespace repository {
4
+ namespace permission {
5
+ function create(source: Permission): IResponsePromise<Permission>;
6
+ function update(source: Permission): IResponsePromise<Permission>;
7
+ function remove(id: string): IResponsePromiseVoid;
8
+ function getById(id: string): IResponsePromise<Permission>;
9
+ function filter(id: string | undefined): IResponsePromise<Permission[]>;
10
+ }
11
+ namespace role {
12
+ function create(source: Role): IResponsePromise<Role>;
13
+ function update(source: Role): IResponsePromise<Role>;
14
+ function remove(id: string): IResponsePromiseVoid;
15
+ function getById(id: string): IResponsePromise<Role>;
16
+ function filter(id: string | undefined): IResponsePromise<Role[]>;
17
+ }
18
+ namespace userAccess {
19
+ function create(source: UserAccess): IResponsePromise<UserAccess>;
20
+ function update(source: UserAccess): IResponsePromise<UserAccess>;
21
+ function remove(id: string): IResponsePromiseVoid;
22
+ function getById(id: string): IResponsePromise<UserAccess>;
23
+ function getForUser(user_id: string): IResponsePromise<UserAccess[]>;
24
+ function getForUserByRoles(user_id: string): IResponsePromise<UserAccess[]>;
25
+ function getForUserDirectly(user_id: string): IResponsePromise<UserAccess[]>;
26
+ function getForUserAndPermission(user_id: string, permission_id: string): IResponsePromise<UserAccess[]>;
27
+ function getForAccount(account_id: string): IResponsePromise<UserAccess[]>;
28
+ }
29
+ namespace user {
30
+ function create(source: User): IResponsePromise<User>;
31
+ function update(source: User): IResponsePromise<User>;
32
+ function remove(id: string): IResponsePromiseVoid;
33
+ function getById(id: string): IResponsePromise<User>;
34
+ function count(): IResponsePromise<number>;
35
+ function filter(id: string | undefined, type: UserType | undefined, account_id: string | undefined): IResponsePromise<User[]>;
36
+ }
37
+ namespace credential {
38
+ function create(source: Credential): IResponsePromise<Credential>;
39
+ function update(source: Credential): IResponsePromise<Credential>;
40
+ function remove(id: string): IResponsePromiseVoid;
41
+ function getById(id: string): IResponsePromise<Credential>;
42
+ function filter(name: string | undefined, user_id: string | undefined, confirmationCode: string | undefined, recoveryCode: string | undefined, inviteCode: string | undefined, credential_type: CredentialType | undefined): IResponsePromise<Credential[]>;
43
+ }
44
+ }
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.repository = void 0;
4
+ const flux_1 = require("@hapiboo/flux");
5
+ const models_1 = require("../models");
6
+ const naming_1 = require("../models/naming");
7
+ var repository;
8
+ (function (repository) {
9
+ let permission;
10
+ (function (permission) {
11
+ function create(source) {
12
+ return flux_1.fluxApplication.repository.createModel(models_1.Permission, source);
13
+ }
14
+ permission.create = create;
15
+ function update(source) {
16
+ return flux_1.fluxApplication.repository.updateModel(models_1.Permission, source);
17
+ }
18
+ permission.update = update;
19
+ function remove(id) {
20
+ return flux_1.fluxApplication.repository.deleteModel(models_1.Permission, id);
21
+ }
22
+ permission.remove = remove;
23
+ function getById(id) {
24
+ return flux_1.fluxApplication.repository.readModel(models_1.Permission, id);
25
+ }
26
+ permission.getById = getById;
27
+ function filter(id) {
28
+ const conditions = [];
29
+ if (id) {
30
+ conditions.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition('id', '=', id));
31
+ }
32
+ if (conditions.length > 0) {
33
+ return flux_1.fluxApplication.repository.readArray(models_1.Permission, { condition: flux_1.conditionBuilder.createSubCondition('AND', conditions) }, undefined);
34
+ }
35
+ else {
36
+ return flux_1.fluxApplication.repository.readArray(models_1.Permission, undefined, undefined);
37
+ }
38
+ }
39
+ permission.filter = filter;
40
+ })(permission = repository.permission || (repository.permission = {}));
41
+ let role;
42
+ (function (role) {
43
+ function create(source) {
44
+ return flux_1.fluxApplication.repository.createModel(models_1.Role, source);
45
+ }
46
+ role.create = create;
47
+ function update(source) {
48
+ return flux_1.fluxApplication.repository.updateModel(models_1.Role, source);
49
+ }
50
+ role.update = update;
51
+ function remove(id) {
52
+ return flux_1.fluxApplication.repository.deleteModel(models_1.Role, id);
53
+ }
54
+ role.remove = remove;
55
+ function getById(id) {
56
+ return flux_1.fluxApplication.repository.readModel(models_1.Role, id);
57
+ }
58
+ role.getById = getById;
59
+ function filter(id) {
60
+ const conditions = [];
61
+ if (id) {
62
+ conditions.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition('id', '=', id));
63
+ }
64
+ if (conditions.length > 0) {
65
+ return flux_1.fluxApplication.repository.readArray(models_1.Role, { condition: flux_1.conditionBuilder.createSubCondition('AND', conditions) }, undefined);
66
+ }
67
+ else {
68
+ return flux_1.fluxApplication.repository.readArray(models_1.Role, undefined, undefined);
69
+ }
70
+ }
71
+ role.filter = filter;
72
+ })(role = repository.role || (repository.role = {}));
73
+ let userAccess;
74
+ (function (userAccess) {
75
+ function create(source) {
76
+ return flux_1.fluxApplication.repository.createModel(models_1.UserAccess, source);
77
+ }
78
+ userAccess.create = create;
79
+ function update(source) {
80
+ return flux_1.fluxApplication.repository.updateModel(models_1.UserAccess, source);
81
+ }
82
+ userAccess.update = update;
83
+ function remove(id) {
84
+ return flux_1.fluxApplication.repository.deleteModel(models_1.UserAccess, id);
85
+ }
86
+ userAccess.remove = remove;
87
+ function getById(id) {
88
+ return flux_1.fluxApplication.repository.readModel(models_1.UserAccess, id);
89
+ }
90
+ userAccess.getById = getById;
91
+ function getForUser(user_id) {
92
+ return flux_1.fluxApplication.repository.queryArray(models_1.UserAccess, naming_1.naming.user_access.indexes.user_account, { key: user_id, sort: undefined }, undefined, undefined);
93
+ }
94
+ userAccess.getForUser = getForUser;
95
+ function getForUserByRoles(user_id) {
96
+ return flux_1.fluxApplication.repository.queryArray(models_1.UserAccess, naming_1.naming.user_access.indexes.user_account, { key: user_id, sort: undefined }, { condition: flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.user_access.columns.role_id, 'EXISTS', undefined) }, undefined);
97
+ }
98
+ userAccess.getForUserByRoles = getForUserByRoles;
99
+ function getForUserDirectly(user_id) {
100
+ return flux_1.fluxApplication.repository.queryArray(models_1.UserAccess, naming_1.naming.user_access.indexes.user_account, { key: user_id, sort: undefined }, { condition: flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.user_access.columns.role_id, 'NOT EXISTS', undefined) }, undefined);
101
+ }
102
+ userAccess.getForUserDirectly = getForUserDirectly;
103
+ function getForUserAndPermission(user_id, permission_id) {
104
+ return flux_1.fluxApplication.repository.queryArray(models_1.UserAccess, naming_1.naming.user_access.indexes.user_permission, { key: user_id, sort: permission_id }, undefined, undefined);
105
+ }
106
+ userAccess.getForUserAndPermission = getForUserAndPermission;
107
+ function getForAccount(account_id) {
108
+ return flux_1.fluxApplication.repository.queryArray(models_1.UserAccess, naming_1.naming.user_access.indexes.account_user, { key: account_id, sort: undefined }, undefined, undefined);
109
+ }
110
+ userAccess.getForAccount = getForAccount;
111
+ })(userAccess = repository.userAccess || (repository.userAccess = {}));
112
+ let user;
113
+ (function (user) {
114
+ function create(source) {
115
+ return flux_1.fluxApplication.repository.createModel(models_1.User, source);
116
+ }
117
+ user.create = create;
118
+ function update(source) {
119
+ return flux_1.fluxApplication.repository.updateModel(models_1.User, source);
120
+ }
121
+ user.update = update;
122
+ function remove(id) {
123
+ return flux_1.fluxApplication.repository.deleteModel(models_1.User, id);
124
+ }
125
+ user.remove = remove;
126
+ function getById(id) {
127
+ return flux_1.fluxApplication.repository.readModel(models_1.User, id);
128
+ }
129
+ user.getById = getById;
130
+ function count() {
131
+ return flux_1.fluxApplication.repository.countModel(models_1.User);
132
+ }
133
+ user.count = count;
134
+ function filter(id, type, account_id) {
135
+ const conditions = [];
136
+ if (id) {
137
+ conditions.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition('id', '=', id));
138
+ }
139
+ if (type) {
140
+ conditions.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.users.columns.type, '=', type));
141
+ }
142
+ if (account_id) {
143
+ conditions.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.users.columns.account_id, '=', account_id));
144
+ }
145
+ if (conditions.length > 0) {
146
+ return flux_1.fluxApplication.repository.readArray(models_1.User, { condition: flux_1.conditionBuilder.createSubCondition('AND', conditions) }, undefined);
147
+ }
148
+ else {
149
+ return flux_1.fluxApplication.repository.readArray(models_1.User, undefined, undefined);
150
+ }
151
+ }
152
+ user.filter = filter;
153
+ })(user = repository.user || (repository.user = {}));
154
+ let credential;
155
+ (function (credential) {
156
+ function create(source) {
157
+ return flux_1.fluxApplication.repository.createModel(models_1.Credential, source);
158
+ }
159
+ credential.create = create;
160
+ function update(source) {
161
+ return flux_1.fluxApplication.repository.updateModel(models_1.Credential, source);
162
+ }
163
+ credential.update = update;
164
+ function remove(id) {
165
+ return flux_1.fluxApplication.repository.deleteModel(models_1.Credential, id);
166
+ }
167
+ credential.remove = remove;
168
+ function getById(id) {
169
+ return flux_1.fluxApplication.repository.readModel(models_1.Credential, id);
170
+ }
171
+ credential.getById = getById;
172
+ function filter(name, user_id, confirmationCode, recoveryCode, inviteCode, credential_type) {
173
+ const list = [];
174
+ if (name) {
175
+ list.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.credentials.columns.name, '=', name));
176
+ }
177
+ if (user_id) {
178
+ list.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.credentials.columns.user_id, '=', user_id));
179
+ }
180
+ if (confirmationCode) {
181
+ list.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.credentials.columns.confirmation, '=', confirmationCode));
182
+ }
183
+ if (recoveryCode) {
184
+ list.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.credentials.columns.recovery, '=', recoveryCode));
185
+ }
186
+ if (inviteCode) {
187
+ list.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.credentials.columns.invite, '=', inviteCode));
188
+ }
189
+ if (credential_type) {
190
+ list.push(flux_1.conditionBuilder.createSimpleStringOrNumberCondition(naming_1.naming.credentials.columns.type, '=', credential_type));
191
+ }
192
+ if (list.length > 0) {
193
+ return flux_1.fluxApplication.repository.readArray(models_1.Credential, { condition: flux_1.conditionBuilder.createSubCondition('AND', list) }, undefined);
194
+ }
195
+ else {
196
+ return flux_1.fluxApplication.repository.readArray(models_1.Credential, undefined, undefined);
197
+ }
198
+ }
199
+ credential.filter = filter;
200
+ })(credential = repository.credential || (repository.credential = {}));
201
+ })(repository || (exports.repository = repository = {}));
@@ -0,0 +1,46 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ interface IFluxTokenPayload {
3
+ user_id: string;
4
+ code: string;
5
+ }
6
+ interface IFluxPayload {
7
+ user_id: string;
8
+ account_id: string | undefined;
9
+ admin: boolean;
10
+ }
11
+ interface IFluxDataPayload<TData> extends IFluxPayload {
12
+ data?: TData | undefined;
13
+ }
14
+ export interface IFluxJwt {
15
+ token: string;
16
+ refreshToken: string;
17
+ }
18
+ export interface IFluxTokenRequest extends Request {
19
+ payload?: IFluxTokenPayload;
20
+ }
21
+ export interface IFluxRequest extends Request {
22
+ payload?: IFluxPayload;
23
+ }
24
+ export interface IFluxDataRequest<TData> extends IFluxRequest {
25
+ payload?: IFluxDataPayload<TData>;
26
+ }
27
+ export declare namespace securityService {
28
+ function initialize(jwt_secret: string): void;
29
+ function registerClient(client_secret: string): void;
30
+ namespace token {
31
+ function refresh(user_id: string, refreshCode: string, expirationInHours: number): string;
32
+ function data<TData>(user_id: string, account_id: string | undefined, admin: boolean, expirationInHours: number, data: TData | undefined): string;
33
+ function client(client: string): string;
34
+ }
35
+ namespace middleware {
36
+ function client(request: Request, response: Response, next: NextFunction): void;
37
+ function refresh(request: IFluxTokenRequest, response: Response, next: NextFunction): void;
38
+ function simple(request: IFluxRequest, response: Response, next: NextFunction): void;
39
+ function full<TData>(request: IFluxDataRequest<TData>, response: Response, next: NextFunction): void;
40
+ function admin(request: IFluxRequest, response: Response, next: NextFunction): void;
41
+ function data<TData>(request: IFluxDataRequest<TData>, response: Response, next: NextFunction): void;
42
+ function checkAdmin(request: IFluxRequest, response: Response, next: NextFunction): void;
43
+ function checkData<TData>(request: IFluxDataRequest<TData>, response: Response, next: NextFunction): void;
44
+ }
45
+ }
46
+ export {};