@antelopejs/interface-dms 0.2.5 → 0.2.7
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/CHANGELOG.md +37 -0
- package/README.md +1 -1
- package/dist/auth/db/models/sessions.model.d.ts +2 -0
- package/dist/auth/db/models/sessions.model.js +70 -4
- package/dist/auth/db/models/sessions.model.js.map +1 -1
- package/dist/auth/db/models/users.model.d.ts +1 -0
- package/dist/auth/db/models/users.model.js +5 -1
- package/dist/auth/db/models/users.model.js.map +1 -1
- package/dist/auth/db/tables/sessions.table.d.ts +2 -0
- package/dist/auth/db/tables/sessions.table.js +9 -0
- package/dist/auth/db/tables/sessions.table.js.map +1 -1
- package/dist/auth/password.d.ts +3 -0
- package/dist/auth/password.js +11 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/db/models/user_invites.model.js +2 -1
- package/dist/db/models/user_invites.model.js.map +1 -1
- package/dist/db/tables/inviteResolutions.table.js +1 -1
- package/dist/db/tables/inviteResolutions.table.js.map +1 -1
- package/dist/db/tables/tenantMembers.table.js +2 -2
- package/dist/db/tables/tenantMembers.table.js.map +1 -1
- package/dist/db/tables/user_invites.table.js +4 -4
- package/dist/db/tables/user_invites.table.js.map +1 -1
- package/dist/invites.js +1 -1
- package/dist/invites.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.2.7
|
|
4
|
+
|
|
5
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.2.6...v0.2.7)
|
|
6
|
+
|
|
7
|
+
### 🔥 Performance
|
|
8
|
+
|
|
9
|
+
- **db:** Mark cross-instance indexes and upgrade the MongoDB driver ([#85](https://github.com/AntelopeJS/dms/pull/85))
|
|
10
|
+
|
|
11
|
+
### 🩹 Fixes
|
|
12
|
+
|
|
13
|
+
- **dms-ui:** Let Escape close modals opened over a table or a tree ([#71](https://github.com/AntelopeJS/dms/pull/71))
|
|
14
|
+
- **db:** Normalize emails, guard email changes and stop storing refresh tokens in plaintext ([#78](https://github.com/AntelopeJS/dms/pull/78))
|
|
15
|
+
|
|
16
|
+
### 🏡 Chore
|
|
17
|
+
|
|
18
|
+
- **release:** @antelopejs/dms v0.4.7 ([dc41912](https://github.com/AntelopeJS/dms/commit/dc41912))
|
|
19
|
+
|
|
20
|
+
### ❤️ Contributors
|
|
21
|
+
|
|
22
|
+
- Antony Rizzitelli <rizzitelli.antony@pm.me>
|
|
23
|
+
|
|
24
|
+
## v0.2.6
|
|
25
|
+
|
|
26
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.2.5...v0.2.6)
|
|
27
|
+
|
|
28
|
+
### 🚀 Enhancements
|
|
29
|
+
|
|
30
|
+
- **interface-dms:** Export the password policy for modules ([#70](https://github.com/AntelopeJS/dms/pull/70))
|
|
31
|
+
|
|
32
|
+
### 🏡 Chore
|
|
33
|
+
|
|
34
|
+
- **release:** @antelopejs/dms v0.4.6 ([5c157dd](https://github.com/AntelopeJS/dms/commit/5c157dd))
|
|
35
|
+
|
|
36
|
+
### ❤️ Contributors
|
|
37
|
+
|
|
38
|
+
- Antony Rizzitelli <rizzitelli.antony@pm.me>
|
|
39
|
+
|
|
3
40
|
## v0.2.5
|
|
4
41
|
|
|
5
42
|
[compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.2.4...v0.2.5)
|
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ pnpm add @antelopejs/interface-dms
|
|
|
26
26
|
| `@antelopejs/interface-dms/html-render` | server-side HTML templates |
|
|
27
27
|
|
|
28
28
|
`/auth`, `/base` and `/notifications` take subpaths of their own
|
|
29
|
-
(`/auth/db`, `/base/table-view`, `/base/data-types`, `/notifications/builder`,
|
|
29
|
+
(`/auth/db`, `/auth/password`, `/base/table-view`, `/base/data-types`, `/notifications/builder`,
|
|
30
30
|
...). The reference documentation lives in the runtime package, under
|
|
31
31
|
`docs/07.interfaces/`.
|
|
32
32
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Session } from "../tables/sessions.table";
|
|
2
2
|
export declare const REFRESH_TOKEN_PREDECESSOR_GRACE_MS = 15000;
|
|
3
|
+
export declare function isCurrentRefreshToken(session: Session, presentedToken: string): boolean;
|
|
3
4
|
export declare function isImmediateRefreshTokenPredecessor(session: Session, presentedToken: string, now: Date): boolean;
|
|
4
5
|
declare const SessionModel_base: {
|
|
5
6
|
new (database: import("@antelopejs/interface-database").SchemaInstance<any>): {
|
|
@@ -22,6 +23,7 @@ declare const SessionModel_base: {
|
|
|
22
23
|
export declare class SessionModel extends SessionModel_base {
|
|
23
24
|
rotateRefreshToken(sessionId: string, presentedToken: string, refreshToken: string, rotatedAt?: Date): Promise<string | null>;
|
|
24
25
|
replaceRefreshToken(sessionId: string, refreshToken: string): Promise<void>;
|
|
26
|
+
deleteInactiveSince(threshold: Date): Promise<void>;
|
|
25
27
|
getByUserId(userId: string): Promise<Session[]>;
|
|
26
28
|
deleteByUserId(userId: string): Promise<void>;
|
|
27
29
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SessionModel = exports.REFRESH_TOKEN_PREDECESSOR_GRACE_MS = void 0;
|
|
4
|
+
exports.isCurrentRefreshToken = isCurrentRefreshToken;
|
|
4
5
|
exports.isImmediateRefreshTokenPredecessor = isImmediateRefreshTokenPredecessor;
|
|
5
6
|
const node_crypto_1 = require("node:crypto");
|
|
6
7
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
@@ -12,6 +13,13 @@ function updatedRows(result) {
|
|
|
12
13
|
const counts = result;
|
|
13
14
|
return Number(counts?.replaced ?? counts?.modifiedCount ?? 0);
|
|
14
15
|
}
|
|
16
|
+
const SEAL_ALGORITHM = "aes-256-gcm";
|
|
17
|
+
const SEAL_IV_BYTES = 12;
|
|
18
|
+
const SEAL_ENCODING = "base64";
|
|
19
|
+
const SEAL_SEPARATOR = ".";
|
|
20
|
+
const SEAL_KEY_DOMAIN = "dms-refresh-successor:";
|
|
21
|
+
const LAST_ACTIVE_AT_INDEX = "lastActiveAt";
|
|
22
|
+
const EPOCH_LOWER_BOUND = new Date(0);
|
|
15
23
|
function hashRefreshToken(token) {
|
|
16
24
|
return (0, node_crypto_1.createHash)("sha256").update(token).digest("hex");
|
|
17
25
|
}
|
|
@@ -21,6 +29,45 @@ function hashesMatch(left, right) {
|
|
|
21
29
|
return (leftBuffer.length === rightBuffer.length &&
|
|
22
30
|
(0, node_crypto_1.timingSafeEqual)(leftBuffer, rightBuffer));
|
|
23
31
|
}
|
|
32
|
+
function sealKey(predecessor) {
|
|
33
|
+
return (0, node_crypto_1.createHash)("sha256")
|
|
34
|
+
.update(SEAL_KEY_DOMAIN + predecessor)
|
|
35
|
+
.digest();
|
|
36
|
+
}
|
|
37
|
+
function sealRefreshToken(token, predecessor) {
|
|
38
|
+
const iv = (0, node_crypto_1.randomBytes)(SEAL_IV_BYTES);
|
|
39
|
+
const cipher = (0, node_crypto_1.createCipheriv)(SEAL_ALGORITHM, sealKey(predecessor), iv);
|
|
40
|
+
const sealed = Buffer.concat([cipher.update(token, "utf8"), cipher.final()]);
|
|
41
|
+
return [iv, cipher.getAuthTag(), sealed]
|
|
42
|
+
.map((part) => part.toString(SEAL_ENCODING))
|
|
43
|
+
.join(SEAL_SEPARATOR);
|
|
44
|
+
}
|
|
45
|
+
function openRefreshToken(sealed, predecessor) {
|
|
46
|
+
const [iv, authTag, ciphertext] = sealed
|
|
47
|
+
.split(SEAL_SEPARATOR)
|
|
48
|
+
.map((part) => Buffer.from(part, SEAL_ENCODING));
|
|
49
|
+
if (!iv || !authTag || !ciphertext)
|
|
50
|
+
return null;
|
|
51
|
+
try {
|
|
52
|
+
const decipher = (0, node_crypto_1.createDecipheriv)(SEAL_ALGORITHM, sealKey(predecessor), iv);
|
|
53
|
+
decipher.setAuthTag(authTag);
|
|
54
|
+
return Buffer.concat([
|
|
55
|
+
decipher.update(ciphertext),
|
|
56
|
+
decipher.final(),
|
|
57
|
+
]).toString("utf8");
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function isCurrentRefreshToken(session, presentedToken) {
|
|
64
|
+
const presentedHash = hashRefreshToken(presentedToken);
|
|
65
|
+
if (session.refreshTokenHash) {
|
|
66
|
+
return hashesMatch(session.refreshTokenHash, presentedHash);
|
|
67
|
+
}
|
|
68
|
+
return (!!session.refreshToken &&
|
|
69
|
+
hashesMatch(hashRefreshToken(session.refreshToken), presentedHash));
|
|
70
|
+
}
|
|
24
71
|
function isImmediateRefreshTokenPredecessor(session, presentedToken, now) {
|
|
25
72
|
if (!session.previousRefreshTokenHash || !session.refreshTokenRotatedAt) {
|
|
26
73
|
return false;
|
|
@@ -30,13 +77,24 @@ function isImmediateRefreshTokenPredecessor(session, presentedToken, now) {
|
|
|
30
77
|
return false;
|
|
31
78
|
return hashesMatch(session.previousRefreshTokenHash, hashRefreshToken(presentedToken));
|
|
32
79
|
}
|
|
80
|
+
function recoverSuccessor(session, presentedToken) {
|
|
81
|
+
if (session.sealedRefreshToken) {
|
|
82
|
+
return openRefreshToken(session.sealedRefreshToken, presentedToken);
|
|
83
|
+
}
|
|
84
|
+
return session.refreshToken || null;
|
|
85
|
+
}
|
|
33
86
|
class SessionModel extends (0, interface_database_decorators_1.BasicDataModel)(sessions_table_1.Session, sessions_table_1.SESSIONS_TABLE_NAME) {
|
|
34
87
|
async rotateRefreshToken(sessionId, presentedToken, refreshToken, rotatedAt = new Date()) {
|
|
35
88
|
const result = await this.table
|
|
36
89
|
.getAll(sessionId)
|
|
37
|
-
.filter((row) => row
|
|
90
|
+
.filter((row) => row
|
|
91
|
+
.key("refreshTokenHash")
|
|
92
|
+
.eq(hashRefreshToken(presentedToken))
|
|
93
|
+
.or(row.key("refreshToken").eq(presentedToken)))
|
|
38
94
|
.update({
|
|
39
|
-
refreshToken,
|
|
95
|
+
refreshToken: "",
|
|
96
|
+
refreshTokenHash: hashRefreshToken(refreshToken),
|
|
97
|
+
sealedRefreshToken: sealRefreshToken(refreshToken, presentedToken),
|
|
40
98
|
previousRefreshTokenHash: hashRefreshToken(presentedToken),
|
|
41
99
|
refreshTokenRotatedAt: rotatedAt,
|
|
42
100
|
lastActiveAt: rotatedAt,
|
|
@@ -49,15 +107,23 @@ class SessionModel extends (0, interface_database_decorators_1.BasicDataModel)(s
|
|
|
49
107
|
!isImmediateRefreshTokenPredecessor(session, presentedToken, rotatedAt)) {
|
|
50
108
|
return null;
|
|
51
109
|
}
|
|
52
|
-
return session
|
|
110
|
+
return recoverSuccessor(session, presentedToken);
|
|
53
111
|
}
|
|
54
112
|
async replaceRefreshToken(sessionId, refreshToken) {
|
|
55
113
|
await this.update(sessionId, {
|
|
56
|
-
refreshToken,
|
|
114
|
+
refreshToken: "",
|
|
115
|
+
refreshTokenHash: hashRefreshToken(refreshToken),
|
|
116
|
+
sealedRefreshToken: null,
|
|
57
117
|
previousRefreshTokenHash: null,
|
|
58
118
|
refreshTokenRotatedAt: null,
|
|
59
119
|
});
|
|
60
120
|
}
|
|
121
|
+
async deleteInactiveSince(threshold) {
|
|
122
|
+
await this.table
|
|
123
|
+
.between(LAST_ACTIVE_AT_INDEX, EPOCH_LOWER_BOUND, threshold)
|
|
124
|
+
.delete()
|
|
125
|
+
.run();
|
|
126
|
+
}
|
|
61
127
|
getByUserId(userId) {
|
|
62
128
|
return this.table
|
|
63
129
|
.getAll(userId, "userId")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.model.js","sourceRoot":"","sources":["../../../../src/auth/db/models/sessions.model.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sessions.model.js","sourceRoot":"","sources":["../../../../src/auth/db/models/sessions.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { User } from "../tables/users.table";
|
|
2
|
+
export declare function normalizeEmail(email: string): string;
|
|
2
3
|
declare const UserModel_base: {
|
|
3
4
|
new (database: import("@antelopejs/interface-database").SchemaInstance<any>): {
|
|
4
5
|
readonly table: import("@antelopejs/interface-database").Table<User>;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UserModel = void 0;
|
|
4
|
+
exports.normalizeEmail = normalizeEmail;
|
|
4
5
|
const interface_database_1 = require("@antelopejs/interface-database");
|
|
5
6
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
6
7
|
const users_table_1 = require("../tables/users.table");
|
|
8
|
+
function normalizeEmail(email) {
|
|
9
|
+
return email.trim().toLowerCase();
|
|
10
|
+
}
|
|
7
11
|
class UserModel extends (0, interface_database_decorators_1.BasicDataModel)(users_table_1.User, users_table_1.USERS_TABLE_NAME) {
|
|
8
12
|
getByEmail(email) {
|
|
9
13
|
return this.table
|
|
10
|
-
.getAll(email, "email")
|
|
14
|
+
.getAll(normalizeEmail(email), "email")
|
|
11
15
|
.nth(0)
|
|
12
16
|
.default(undefined)
|
|
13
17
|
.run()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.model.js","sourceRoot":"","sources":["../../../../src/auth/db/models/users.model.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"users.model.js","sourceRoot":"","sources":["../../../../src/auth/db/models/users.model.ts"],"names":[],"mappings":";;;AAWA,wCAEC;AAbD,uEAA4D;AAC5D,6FAA2E;AAC3E,uDAA+D;AAS/D,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAa,SAAU,SAAQ,IAAA,8CAAc,EAAC,kBAAI,EAAE,8BAAgB,CAAC;IAOnE,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC;aACN,OAAO,CAAC,SAAS,CAAC;aAClB,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,MAAM,IAAI,CAAC,KAAK;aACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;aAC5C,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACZ,GAAG;aACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aAC3C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CACxC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,WAAqB;QAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,KAAK;iBACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;iBAC5C,KAAK,EAAE;iBACP,GAAG,EAAE,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,IAAI;aACD,GAAG,CAAC,OAAO,CAAC;aACZ,EAAE,CAAC,IAAI,CAAC;aACR,GAAG,CACF,+BAAU,CAAC,QAAQ,CAAW,WAAW,CAAC;aACvC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACzB,GAAG,EAAE,CACT,CACJ;aACA,KAAK,EAAE;aACP,GAAG,EAAE,CAAC;IACX,CAAC;CACF;AAhDD,8BAgDC"}
|
|
@@ -4,6 +4,8 @@ export declare class Session extends Table {
|
|
|
4
4
|
_id: string;
|
|
5
5
|
userId: string;
|
|
6
6
|
refreshToken: string;
|
|
7
|
+
refreshTokenHash?: string | null;
|
|
8
|
+
sealedRefreshToken?: string | null;
|
|
7
9
|
previousRefreshTokenHash?: string | null;
|
|
8
10
|
refreshTokenRotatedAt?: Date | null;
|
|
9
11
|
userAgent: string;
|
|
@@ -31,6 +31,14 @@ __decorate([
|
|
|
31
31
|
(0, interface_database_decorators_1.Field)("string"),
|
|
32
32
|
__metadata("design:type", String)
|
|
33
33
|
], Session.prototype, "refreshToken", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, interface_database_decorators_1.Field)("string"),
|
|
36
|
+
__metadata("design:type", Object)
|
|
37
|
+
], Session.prototype, "refreshTokenHash", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, interface_database_decorators_1.Field)("string"),
|
|
40
|
+
__metadata("design:type", Object)
|
|
41
|
+
], Session.prototype, "sealedRefreshToken", void 0);
|
|
34
42
|
__decorate([
|
|
35
43
|
(0, interface_database_decorators_1.Field)("string"),
|
|
36
44
|
__metadata("design:type", Object)
|
|
@@ -70,6 +78,7 @@ __decorate([
|
|
|
70
78
|
__metadata("design:type", Date)
|
|
71
79
|
], Session.prototype, "createdAt", void 0);
|
|
72
80
|
__decorate([
|
|
81
|
+
(0, interface_database_decorators_1.Index)(),
|
|
73
82
|
(0, interface_database_decorators_1.Field)("date"),
|
|
74
83
|
__metadata("design:type", Date)
|
|
75
84
|
], Session.prototype, "lastActiveAt", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.table.js","sourceRoot":"","sources":["../../../../src/auth/db/tables/sessions.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,kDAAsD;AACtD,+CAAqC;AAExB,QAAA,mBAAmB,GAAG,UAAU,CAAC;AAGvC,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,qCAAK;
|
|
1
|
+
{"version":3,"file":"sessions.table.js","sourceRoot":"","sources":["../../../../src/auth/db/tables/sessions.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,kDAAsD;AACtD,+CAAqC;AAExB,QAAA,mBAAmB,GAAG,UAAU,CAAC;AAGvC,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,qCAAK;CA+DjC,CAAA;AA/DY,0BAAO;AAEV;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oCACI;AAKZ;IAHP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC;;uCACN;AAUf;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACa;AAIrB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACyB;AAQjC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDAC2B;AAGnC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yDACiC;AAGzC;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;sDAC8B;AAGpC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;0CACU;AAGlB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mCACG;AAGX;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wCACQ;AAGhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mCACG;AAGX;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;2CACW;AAGnB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACS;AAKjB;IAHP,IAAA,qCAAK,GAAE;IACP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;0CAAC;AAIhB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACQ,IAAI;6CAAC;kBA9DhB,OAAO;IADnB,IAAA,6CAAa,EAAC,2BAAmB,EAAE,4BAAgB,CAAC;GACxC,OAAO,CA+DnB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PASSWORD_PATTERN = exports.PASSWORD_MIN_LENGTH = void 0;
|
|
4
|
+
exports.isPasswordCompliant = isPasswordCompliant;
|
|
5
|
+
exports.PASSWORD_MIN_LENGTH = 8;
|
|
6
|
+
const ALLOWED_SPECIAL_CHARS = "@$!%*?&";
|
|
7
|
+
exports.PASSWORD_PATTERN = new RegExp(`^(?=.*[A-Z])(?=.*\\d)(?=.*[${ALLOWED_SPECIAL_CHARS}])[A-Za-z\\d${ALLOWED_SPECIAL_CHARS}]+$`);
|
|
8
|
+
function isPasswordCompliant(password) {
|
|
9
|
+
return (password.length >= exports.PASSWORD_MIN_LENGTH && exports.PASSWORD_PATTERN.test(password));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":";;;AAgCA,kDAIC;AA5BY,QAAA,mBAAmB,GAAG,CAAC,CAAC;AAMrC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAO3B,QAAA,gBAAgB,GAAG,IAAI,MAAM,CACxC,8BAA8B,qBAAqB,eAAe,qBAAqB,KAAK,CAC7F,CAAC;AASF,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,OAAO,CACL,QAAQ,CAAC,MAAM,IAAI,2BAAmB,IAAI,wBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC1E,CAAC;AACJ,CAAC"}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UserInviteModel = void 0;
|
|
4
4
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
|
+
const users_model_1 = require("../../auth/db/models/users.model");
|
|
5
6
|
const row_instance_1 = require("../../utils/row-instance");
|
|
6
7
|
const user_invites_table_1 = require("../tables/user_invites.table");
|
|
7
8
|
class UserInviteModel extends (0, interface_database_decorators_1.BasicDataModel)(user_invites_table_1.UserInvite, user_invites_table_1.USER_INVITES_TABLE_NAME) {
|
|
8
9
|
getByEmail(email) {
|
|
9
10
|
return this.table
|
|
10
|
-
.getAll(email, "email")
|
|
11
|
+
.getAll((0, users_model_1.normalizeEmail)(email), "email")
|
|
11
12
|
.nth(0)
|
|
12
13
|
.default(undefined)
|
|
13
14
|
.run()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user_invites.model.js","sourceRoot":"","sources":["../../../src/db/models/user_invites.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,2DAA0D;AAC1D,qEAGsC;AAOtC,MAAa,eAAgB,SAAQ,IAAA,8CAAc,EACjD,+BAAU,EACV,4CAAuB,CACxB;IAOC,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"user_invites.model.js","sourceRoot":"","sources":["../../../src/db/models/user_invites.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,kEAAkE;AAClE,2DAA0D;AAC1D,qEAGsC;AAOtC,MAAa,eAAgB,SAAQ,IAAA,8CAAc,EACjD,+BAAU,EACV,4CAAuB,CACxB;IAOC,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,IAAA,4BAAc,EAAC,KAAK,CAAC,EAAE,OAAO,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC;aACN,OAAO,CAAC,SAAS,CAAC;aAClB,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC;IAQD,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;aACtB,GAAG,CAAC,CAAC,CAAC;aACN,OAAO,CAAC,SAAS,CAAC;aAClB,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC;IASD,KAAK,CAAC,oBAAoB,CACxB,KAAa;QAEb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK;aACzB,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;aACtB,GAAG,CAAC,CAAC,CAAC;aACN,OAAO,CAAC,SAAS,CAAC;aAClB,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAA,6BAAc,EAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;IAOD,aAAa,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;CACF;AA/DD,0CA+DC"}
|
|
@@ -57,7 +57,7 @@ __decorate([
|
|
|
57
57
|
__metadata("design:type", String)
|
|
58
58
|
], InviteResolution.prototype, "replacementPhase", void 0);
|
|
59
59
|
__decorate([
|
|
60
|
-
(0, interface_database_decorators_1.Index)(),
|
|
60
|
+
(0, interface_database_decorators_1.Index)({ crossInstance: true }),
|
|
61
61
|
(0, interface_database_decorators_1.Field)("boolean"),
|
|
62
62
|
__metadata("design:type", Boolean)
|
|
63
63
|
], InviteResolution.prototype, "completed", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inviteResolutions.table.js","sourceRoot":"","sources":["../../../src/db/tables/inviteResolutions.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAKmD;AACnD,+CAAqD;AAIxC,QAAA,0BAA0B,GAAG,oBAAoB,CAAC;AAMxD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,qCAAK;CAa1C,CAAA;AAbY,4CAAgB;AACF;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CAAqB;AACZ;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDAA0B;AACjB;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDAAwC;AAC/B;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDAA+B;AACzB;IAArB,IAAA,qCAAK,EAAC,KAAK,CAAC;;gDAA4B;AACnB;IAArB,IAAA,qCAAK,EAAC,KAAK,CAAC;;qDAAwC;AAC1B;IAA1B,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;;uDAAiC;AAC1B;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDAA0B;AACjB;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yDAAgD;AACvC;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;0DAAiD;
|
|
1
|
+
{"version":3,"file":"inviteResolutions.table.js","sourceRoot":"","sources":["../../../src/db/tables/inviteResolutions.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAKmD;AACnD,+CAAqD;AAIxC,QAAA,0BAA0B,GAAG,oBAAoB,CAAC;AAMxD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,qCAAK;CAa1C,CAAA;AAbY,4CAAgB;AACF;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CAAqB;AACZ;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDAA0B;AACjB;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDAAwC;AAC/B;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDAA+B;AACzB;IAArB,IAAA,qCAAK,EAAC,KAAK,CAAC;;gDAA4B;AACnB;IAArB,IAAA,qCAAK,EAAC,KAAK,CAAC;;qDAAwC;AAC1B;IAA1B,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;;uDAAiC;AAC1B;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDAA0B;AACjB;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yDAAgD;AACvC;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;0DAAiD;AACP;IAAzD,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAAE,IAAA,qCAAK,EAAC,SAAS,CAAC;;mDAA4B;AACtD;IAAtB,IAAA,qCAAK,EAAC,MAAM,CAAC;8BAAoB,IAAI;mDAAC;2BAZ5B,gBAAgB;IAD5B,IAAA,6CAAa,EAAC,kCAA0B,EAAE,8BAAkB,CAAC;GACjD,gBAAgB,CAa5B"}
|
|
@@ -23,7 +23,7 @@ __decorate([
|
|
|
23
23
|
__metadata("design:type", String)
|
|
24
24
|
], TenantMember.prototype, "_id", void 0);
|
|
25
25
|
__decorate([
|
|
26
|
-
(0, interface_database_decorators_1.Index)(),
|
|
26
|
+
(0, interface_database_decorators_1.Index)({ crossInstance: true }),
|
|
27
27
|
(0, interface_database_decorators_1.Field)("string"),
|
|
28
28
|
(0, interface_database_decorators_1.Relation)({ to: () => users_table_1.User }),
|
|
29
29
|
__metadata("design:type", String)
|
|
@@ -43,7 +43,7 @@ __decorate([
|
|
|
43
43
|
], TenantMember.prototype, "inviteDeliveryId", void 0);
|
|
44
44
|
__decorate([
|
|
45
45
|
(0, interface_database_decorators_1.CreationTime)(),
|
|
46
|
-
(0, interface_database_decorators_1.Index)(),
|
|
46
|
+
(0, interface_database_decorators_1.Index)({ crossInstance: true }),
|
|
47
47
|
(0, interface_database_decorators_1.Field)("date"),
|
|
48
48
|
__metadata("design:type", Date)
|
|
49
49
|
], TenantMember.prototype, "joinedAt", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenantMembers.table.js","sourceRoot":"","sources":["../../../src/db/tables/tenantMembers.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,+CAAqD;AACrD,kEAAwD;AACxD,+CAAqC;AAExB,QAAA,sBAAsB,GAAG,gBAAgB,CAAC;AAGhD,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,qCAAK;CA6BtC,CAAA;AA7BY,oCAAY;AAEf;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACI;AAKZ;IAHP,IAAA,qCAAK,
|
|
1
|
+
{"version":3,"file":"tenantMembers.table.js","sourceRoot":"","sources":["../../../src/db/tables/tenantMembers.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,+CAAqD;AACrD,kEAAwD;AACxD,+CAAqC;AAExB,QAAA,sBAAsB,GAAG,gBAAgB,CAAC;AAGhD,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,qCAAK;CA6BtC,CAAA;AA7BY,oCAAY;AAEf;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACI;AAKZ;IAHP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC;;4CACN;AAIf;IAFP,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;IACjB,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;6CACf;AAGlB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;mDACc;AAIvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sDACkB;AAK1B;IAHP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACI,IAAI;8CAAC;AAKf;IAHP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC;;+CACI;uBA5BtB,YAAY;IADxB,IAAA,6CAAa,EAAC,8BAAsB,EAAE,8BAAkB,CAAC;GAC7C,YAAY,CA6BxB"}
|
|
@@ -22,13 +22,13 @@ __decorate([
|
|
|
22
22
|
__metadata("design:type", String)
|
|
23
23
|
], UserInvite.prototype, "_id", void 0);
|
|
24
24
|
__decorate([
|
|
25
|
-
(0, interface_database_decorators_1.Index)(),
|
|
25
|
+
(0, interface_database_decorators_1.Index)({ crossInstance: true }),
|
|
26
26
|
(0, interface_database_decorators_1.CreationTime)(),
|
|
27
27
|
(0, interface_database_decorators_1.Field)("date"),
|
|
28
28
|
__metadata("design:type", Date)
|
|
29
29
|
], UserInvite.prototype, "createdAt", void 0);
|
|
30
30
|
__decorate([
|
|
31
|
-
(0, interface_database_decorators_1.Index)(),
|
|
31
|
+
(0, interface_database_decorators_1.Index)({ crossInstance: true }),
|
|
32
32
|
(0, interface_database_decorators_1.Field)("string"),
|
|
33
33
|
__metadata("design:type", String)
|
|
34
34
|
], UserInvite.prototype, "email", void 0);
|
|
@@ -50,7 +50,7 @@ __decorate([
|
|
|
50
50
|
__metadata("design:type", String)
|
|
51
51
|
], UserInvite.prototype, "language", void 0);
|
|
52
52
|
__decorate([
|
|
53
|
-
(0, interface_database_decorators_1.Index)(),
|
|
53
|
+
(0, interface_database_decorators_1.Index)({ crossInstance: true }),
|
|
54
54
|
(0, interface_database_decorators_1.Field)("string"),
|
|
55
55
|
__metadata("design:type", String)
|
|
56
56
|
], UserInvite.prototype, "token", void 0);
|
|
@@ -59,7 +59,7 @@ __decorate([
|
|
|
59
59
|
__metadata("design:type", Boolean)
|
|
60
60
|
], UserInvite.prototype, "asTenantOwner", void 0);
|
|
61
61
|
__decorate([
|
|
62
|
-
(0, interface_database_decorators_1.Index)(),
|
|
62
|
+
(0, interface_database_decorators_1.Index)({ crossInstance: true }),
|
|
63
63
|
(0, interface_database_decorators_1.Field)("date"),
|
|
64
64
|
__metadata("design:type", Date)
|
|
65
65
|
], UserInvite.prototype, "expiresAt", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user_invites.table.js","sourceRoot":"","sources":["../../../src/db/tables/user_invites.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,+CAAqD;AAErD,+CAAqC;AAExB,QAAA,uBAAuB,GAAG,cAAc,CAAC;AAG/C,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,qCAAK;CAoDpC,CAAA;AApDY,gCAAU;AAGb;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uCACI;AAKZ;IAHP,IAAA,qCAAK,
|
|
1
|
+
{"version":3,"file":"user_invites.table.js","sourceRoot":"","sources":["../../../src/db/tables/user_invites.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,+CAAqD;AAErD,+CAAqC;AAExB,QAAA,uBAAuB,GAAG,cAAc,CAAC;AAG/C,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,qCAAK;CAoDpC,CAAA;AApDY,gCAAU;AAGb;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uCACI;AAKZ;IAHP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;6CAAC;AAIhB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACM;AAGd;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACiB;AAGzB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACgB;AAIxB;IAFP,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;IACjB,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;6CACb;AAGpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACS;AAIjB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACM;AAGd;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;iDACc;AAIvB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;6CAAC;AAIhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wDACsB;AAG9B;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;uDACoB;AAQ7B;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;8CACsC;qBAnDxC,UAAU;IADtB,IAAA,6CAAa,EAAC,+BAAuB,EAAE,8BAAkB,CAAC;GAC9C,UAAU,CAoDtB"}
|
package/dist/invites.js
CHANGED
|
@@ -135,7 +135,7 @@ function buildInviteSnapshot(options) {
|
|
|
135
135
|
return db_1.UserInviteModel.fromPlainData({
|
|
136
136
|
_id: (0, node_crypto_1.randomUUID)(),
|
|
137
137
|
createdAt: new Date(),
|
|
138
|
-
email: options.email,
|
|
138
|
+
email: (0, db_2.normalizeEmail)(options.email),
|
|
139
139
|
firstname: options.firstname ?? null,
|
|
140
140
|
lastname: options.lastname ?? null,
|
|
141
141
|
roles_ids: options.roleIds,
|
package/dist/invites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":";;;;;;AAgDA,gDASC;AA6DD,gDAaC;AA0GD,sDAMC;AAnPD,6CAAyC;AACzC,gEAA6D;AAC7D,6FAAqE;AACrE,6BAKc;AACd,iCAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"invites.js","sourceRoot":"","sources":["../src/invites.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/interface-dms",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"description": "Public AntelopeJS interfaces of the DMS: pages, components, permissions, tenancy, auth, notifications and HTML rendering.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"antelopejs",
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"@antelopejs/interface-auth": ">=0.0.6 <1.0.0",
|
|
49
49
|
"@antelopejs/interface-core": ">=0.1.1 <1.0.0",
|
|
50
50
|
"@antelopejs/interface-data-api": ">=0.1.9 <1.0.0",
|
|
51
|
-
"@antelopejs/interface-database": ">=0.1.
|
|
52
|
-
"@antelopejs/interface-database-decorators": ">=0.1.
|
|
51
|
+
"@antelopejs/interface-database": ">=0.1.8 <1.0.0",
|
|
52
|
+
"@antelopejs/interface-database-decorators": ">=0.1.7 <1.0.0",
|
|
53
53
|
"@antelopejs/interface-file-storage": ">=0.1.3 <1.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"@antelopejs/interface-auth": ">=0.0.6 <1.0.0",
|
|
59
59
|
"@antelopejs/interface-core": ">=0.1.1 <1.0.0",
|
|
60
60
|
"@antelopejs/interface-data-api": ">=0.1.9 <1.0.0",
|
|
61
|
-
"@antelopejs/interface-database": ">=0.1.
|
|
62
|
-
"@antelopejs/interface-database-decorators": ">=0.1.
|
|
61
|
+
"@antelopejs/interface-database": ">=0.1.8 <1.0.0",
|
|
62
|
+
"@antelopejs/interface-database-decorators": ">=0.1.7 <1.0.0",
|
|
63
63
|
"@antelopejs/interface-file-storage": ">=0.1.3 <1.0.0",
|
|
64
64
|
"@types/jsonwebtoken": "^9.0.10",
|
|
65
65
|
"@types/node": "^24.0.0",
|