@webda/core 4.0.0-beta.3 → 4.0.0-beta.5
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/lib/application/application.d.ts +31 -0
- package/lib/application/application.d.ts.map +1 -1
- package/lib/application/application.js +55 -2
- package/lib/application/application.js.map +1 -1
- package/lib/application/deployment.d.ts +93 -0
- package/lib/application/deployment.d.ts.map +1 -0
- package/lib/application/deployment.js +99 -0
- package/lib/application/deployment.js.map +1 -0
- package/lib/application/unpackedapplication.d.ts.map +1 -1
- package/lib/application/unpackedapplication.js +9 -1
- package/lib/application/unpackedapplication.js.map +1 -1
- package/lib/bin/cli.d.ts +36 -1
- package/lib/bin/cli.d.ts.map +1 -1
- package/lib/bin/cli.js +108 -2
- package/lib/bin/cli.js.map +1 -1
- package/lib/contexts/execution.js +1 -1
- package/lib/contexts/execution.js.map +1 -1
- package/lib/contexts/operationcontext.d.ts +3 -0
- package/lib/contexts/operationcontext.d.ts.map +1 -1
- package/lib/contexts/operationcontext.js +6 -3
- package/lib/contexts/operationcontext.js.map +1 -1
- package/lib/core/core.js +1 -1
- package/lib/core/core.js.map +1 -1
- package/lib/core/hooks.d.ts +22 -0
- package/lib/core/hooks.d.ts.map +1 -1
- package/lib/core/hooks.js +24 -0
- package/lib/core/hooks.js.map +1 -1
- package/lib/core/operations.d.ts.map +1 -1
- package/lib/core/operations.js +13 -11
- package/lib/core/operations.js.map +1 -1
- package/lib/deployers/deployer.d.ts +157 -0
- package/lib/deployers/deployer.d.ts.map +1 -0
- package/lib/deployers/deployer.js +81 -0
- package/lib/deployers/deployer.js.map +1 -0
- package/lib/deployers/git.d.ts +27 -0
- package/lib/deployers/git.d.ts.map +1 -0
- package/lib/deployers/git.js +66 -0
- package/lib/deployers/git.js.map +1 -0
- package/lib/deployers/packager.d.ts +85 -0
- package/lib/deployers/packager.d.ts.map +1 -0
- package/lib/deployers/packager.js +259 -0
- package/lib/deployers/packager.js.map +1 -0
- package/lib/index.d.ts +10 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -4
- package/lib/index.js.map +1 -1
- package/lib/models/aclmodel.d.ts +32 -5
- package/lib/models/aclmodel.d.ts.map +1 -1
- package/lib/models/aclmodel.js +34 -9
- package/lib/models/aclmodel.js.map +1 -1
- package/lib/models/coremodel.model.d.ts.map +1 -1
- package/lib/models/coremodel.model.js.map +1 -1
- package/lib/models/decorator.d.ts +4 -0
- package/lib/models/decorator.d.ts.map +1 -1
- package/lib/models/decorator.js +4 -0
- package/lib/models/decorator.js.map +1 -1
- package/lib/models/deployment.d.ts +2 -21
- package/lib/models/deployment.d.ts.map +1 -1
- package/lib/models/encrypted.model.d.ts +46 -0
- package/lib/models/encrypted.model.d.ts.map +1 -0
- package/lib/models/encrypted.model.js +87 -0
- package/lib/models/encrypted.model.js.map +1 -0
- package/lib/models/ident.model.d.ts +103 -64
- package/lib/models/ident.model.d.ts.map +1 -1
- package/lib/models/ident.model.js +168 -76
- package/lib/models/ident.model.js.map +1 -1
- package/lib/models/ownermodel.model.d.ts +25 -3
- package/lib/models/ownermodel.model.d.ts.map +1 -1
- package/lib/models/ownermodel.model.js +46 -10
- package/lib/models/ownermodel.model.js.map +1 -1
- package/lib/models/password.model.d.ts +78 -0
- package/lib/models/password.model.d.ts.map +1 -0
- package/lib/models/password.model.js +171 -0
- package/lib/models/password.model.js.map +1 -0
- package/lib/models/permissions.d.ts +236 -0
- package/lib/models/permissions.d.ts.map +1 -0
- package/lib/models/permissions.js +495 -0
- package/lib/models/permissions.js.map +1 -0
- package/lib/models/refreshtoken.model.d.ts +30 -0
- package/lib/models/refreshtoken.model.d.ts.map +1 -0
- package/lib/models/refreshtoken.model.js +29 -0
- package/lib/models/refreshtoken.model.js.map +1 -0
- package/lib/models/registry.model.d.ts.map +1 -1
- package/lib/models/registry.model.js.map +1 -1
- package/lib/models/rolemodel.model.d.ts.map +1 -1
- package/lib/models/rolemodel.model.js +1 -2
- package/lib/models/rolemodel.model.js.map +1 -1
- package/lib/models/simpleuser.model.d.ts.map +1 -1
- package/lib/models/simpleuser.model.js +2 -1
- package/lib/models/simpleuser.model.js.map +1 -1
- package/lib/models/user.model.d.ts +33 -21
- package/lib/models/user.model.d.ts.map +1 -1
- package/lib/models/user.model.js +81 -26
- package/lib/models/user.model.js.map +1 -1
- package/lib/rest/restoperationstransport.service.d.ts.map +1 -1
- package/lib/rest/restoperationstransport.service.js +7 -5
- package/lib/rest/restoperationstransport.service.js.map +1 -1
- package/lib/services/audit.model.d.ts +2 -2
- package/lib/services/audit.model.d.ts.map +1 -1
- package/lib/services/audit.model.js +16 -6
- package/lib/services/audit.model.js.map +1 -1
- package/lib/services/binary.service.d.ts +42 -4
- package/lib/services/binary.service.d.ts.map +1 -1
- package/lib/services/binary.service.js +33 -13
- package/lib/services/binary.service.js.map +1 -1
- package/lib/services/domainservice.service.d.ts +111 -1
- package/lib/services/domainservice.service.d.ts.map +1 -1
- package/lib/services/domainservice.service.js +303 -50
- package/lib/services/domainservice.service.js.map +1 -1
- package/lib/services/iauthentication.d.ts +196 -3
- package/lib/services/iauthentication.d.ts.map +1 -1
- package/lib/services/servicecommands.d.ts.map +1 -1
- package/lib/services/servicecommands.js +17 -11
- package/lib/services/servicecommands.js.map +1 -1
- package/lib/services/token.service.d.ts +95 -0
- package/lib/services/token.service.d.ts.map +1 -0
- package/lib/services/token.service.js +182 -0
- package/lib/services/token.service.js.map +1 -0
- package/lib/session/manager.model.d.ts +16 -0
- package/lib/session/manager.model.d.ts.map +1 -1
- package/lib/session/manager.model.js +58 -1
- package/lib/session/manager.model.js.map +1 -1
- package/lib/session/session.d.ts +44 -1
- package/lib/session/session.d.ts.map +1 -1
- package/lib/session/session.js +51 -2
- package/lib/session/session.js.map +1 -1
- package/lib/stores/memory.service.d.ts.map +1 -1
- package/lib/stores/memory.service.js +4 -3
- package/lib/stores/memory.service.js.map +1 -1
- package/lib/templates/templates.d.ts +8 -0
- package/lib/templates/templates.d.ts.map +1 -1
- package/lib/templates/templates.js +10 -1
- package/lib/templates/templates.js.map +1 -1
- package/lib/test/behavior-fixture.model.d.ts +30 -0
- package/lib/test/behavior-fixture.model.d.ts.map +1 -0
- package/lib/test/behavior-fixture.model.js +63 -0
- package/lib/test/behavior-fixture.model.js.map +1 -0
- package/lib/test/legacyident.fixture.model.d.ts +98 -0
- package/lib/test/legacyident.fixture.model.d.ts.map +1 -0
- package/lib/test/legacyident.fixture.model.js +125 -0
- package/lib/test/legacyident.fixture.model.js.map +1 -0
- package/lib/test/objects.d.ts +2 -2
- package/lib/test/objects.d.ts.map +1 -1
- package/lib/test/objects.js +2 -2
- package/lib/test/objects.js.map +1 -1
- package/package.json +32 -11
- package/test/config-cached.json +2 -1
- package/test/config.json +3 -1
- package/test/my-cnf.json +1 -1
- package/webda.module.json +656 -390
- package/lib/services/authentication.service.d.ts +0 -442
- package/lib/services/authentication.service.d.ts.map +0 -1
- package/lib/services/authentication.service.js +0 -932
- package/lib/services/authentication.service.js.map +0 -1
- package/lib/services/oauth.d.ts +0 -250
- package/lib/services/oauth.d.ts.map +0 -1
- package/lib/services/oauth.js +0 -405
- package/lib/services/oauth.js.map +0 -1
|
@@ -1,9 +1,202 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { EventWithContext } from "../events/events.js";
|
|
2
|
+
import type { Ident } from "../models/ident.model.js";
|
|
3
|
+
import type { User } from "../models/user.model.js";
|
|
4
|
+
import type { Service } from "./service.js";
|
|
5
|
+
import type { IssuedTokens } from "./token.service.js";
|
|
6
|
+
/**
|
|
7
|
+
* Describe an authentication provider exposed by an authentication service
|
|
8
|
+
*/
|
|
9
|
+
export interface ProviderInfo {
|
|
10
|
+
/**
|
|
11
|
+
* Provider name
|
|
12
|
+
*/
|
|
13
|
+
name: string;
|
|
14
|
+
/**
|
|
15
|
+
* Provider type
|
|
16
|
+
*/
|
|
17
|
+
type: "password" | "oauth" | "passwordless";
|
|
18
|
+
/**
|
|
19
|
+
* URL to start the authentication flow (oauth, passwordless)
|
|
20
|
+
*/
|
|
21
|
+
startUrl?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Identity resolved by a provider, before being linked to a user
|
|
25
|
+
*/
|
|
26
|
+
export interface ResolvedIdentity {
|
|
27
|
+
/**
|
|
28
|
+
* Provider name
|
|
29
|
+
*/
|
|
30
|
+
provider: string;
|
|
31
|
+
/**
|
|
32
|
+
* Unique identifier of the identity within the provider
|
|
33
|
+
*/
|
|
34
|
+
providerUid: string;
|
|
35
|
+
/**
|
|
36
|
+
* Email if known
|
|
37
|
+
*/
|
|
38
|
+
email?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Whether the provider verified the email
|
|
41
|
+
*/
|
|
42
|
+
emailVerified: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Provider profile
|
|
45
|
+
*/
|
|
46
|
+
profile?: any;
|
|
47
|
+
/**
|
|
48
|
+
* Provider tokens
|
|
49
|
+
*/
|
|
50
|
+
tokens?: any;
|
|
51
|
+
/**
|
|
52
|
+
* Authentication methods references
|
|
53
|
+
*/
|
|
54
|
+
amr: string[];
|
|
55
|
+
/**
|
|
56
|
+
* User already resolved if any
|
|
57
|
+
*/
|
|
58
|
+
user?: User;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Result of an authentication completion
|
|
62
|
+
*/
|
|
63
|
+
export type AuthResult = ({
|
|
64
|
+
status: "ok";
|
|
65
|
+
user: any;
|
|
66
|
+
} & IssuedTokens) | {
|
|
67
|
+
status: "mfa_required";
|
|
68
|
+
methods: string[];
|
|
69
|
+
};
|
|
3
70
|
/**
|
|
4
71
|
* Authentication service interface
|
|
5
72
|
*/
|
|
6
73
|
export interface IAuthenticationService extends Service {
|
|
7
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Complete the authentication of a resolved identity within the current context
|
|
76
|
+
* @param identity resolved by a provider
|
|
77
|
+
*/
|
|
78
|
+
complete(identity: ResolvedIdentity): Promise<AuthResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Logout the current session
|
|
81
|
+
*/
|
|
82
|
+
logout(): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* List the providers available
|
|
85
|
+
*/
|
|
86
|
+
getProviders(): ProviderInfo[];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Emitted when the /me route is called
|
|
90
|
+
*/
|
|
91
|
+
export interface EventAuthenticationGetMe<T extends User = User> extends EventWithContext {
|
|
92
|
+
/**
|
|
93
|
+
* Current user
|
|
94
|
+
*/
|
|
95
|
+
user: T;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Emitted when new user registered
|
|
99
|
+
*/
|
|
100
|
+
export interface EventAuthenticationRegister<T extends User = User> extends EventAuthenticationGetMe<T> {
|
|
101
|
+
/**
|
|
102
|
+
* Registration data
|
|
103
|
+
*/
|
|
104
|
+
data: any;
|
|
105
|
+
/**
|
|
106
|
+
* Ident identifier
|
|
107
|
+
*/
|
|
108
|
+
identId: string;
|
|
109
|
+
/**
|
|
110
|
+
* Identity used to register
|
|
111
|
+
*/
|
|
112
|
+
identity?: ResolvedIdentity;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Emitted when user logout
|
|
116
|
+
*/
|
|
117
|
+
export interface EventAuthenticationLogout extends EventWithContext {
|
|
8
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Sent when a user update his password
|
|
121
|
+
*/
|
|
122
|
+
export interface EventAuthenticationPasswordUpdate<T extends User = User> extends EventAuthenticationGetMe<T> {
|
|
123
|
+
/**
|
|
124
|
+
* New password
|
|
125
|
+
*/
|
|
126
|
+
password: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Emitted when user login
|
|
130
|
+
*/
|
|
131
|
+
export interface EventAuthenticationLogin<T extends User = User> extends EventWithContext {
|
|
132
|
+
/**
|
|
133
|
+
* User identifier
|
|
134
|
+
*/
|
|
135
|
+
userId: string;
|
|
136
|
+
/**
|
|
137
|
+
* User if loaded
|
|
138
|
+
*/
|
|
139
|
+
user?: T;
|
|
140
|
+
/**
|
|
141
|
+
* Ident identifier
|
|
142
|
+
*/
|
|
143
|
+
identId: string;
|
|
144
|
+
/**
|
|
145
|
+
* Ident used
|
|
146
|
+
*/
|
|
147
|
+
ident: any;
|
|
148
|
+
/**
|
|
149
|
+
* Provider used
|
|
150
|
+
*/
|
|
151
|
+
provider: string;
|
|
152
|
+
/**
|
|
153
|
+
* Identity used to login
|
|
154
|
+
*/
|
|
155
|
+
identity?: ResolvedIdentity;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Emitted when a user failed to authenticate
|
|
159
|
+
*/
|
|
160
|
+
export interface EventAuthenticationLoginFailed<T extends User = User> extends EventAuthenticationGetMe<T> {
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Emitted when an ident is linked to a user
|
|
164
|
+
*/
|
|
165
|
+
export interface EventAuthenticationLinked<T extends User = User> extends EventWithContext {
|
|
166
|
+
/**
|
|
167
|
+
* User
|
|
168
|
+
*/
|
|
169
|
+
user: T;
|
|
170
|
+
/**
|
|
171
|
+
* Ident linked
|
|
172
|
+
*/
|
|
173
|
+
ident: Ident;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Emitted when an ident is unlinked from a user
|
|
177
|
+
*/
|
|
178
|
+
export interface EventAuthenticationUnlinked<T extends User = User> extends EventWithContext {
|
|
179
|
+
/**
|
|
180
|
+
* User
|
|
181
|
+
*/
|
|
182
|
+
user: T;
|
|
183
|
+
/**
|
|
184
|
+
* Ident unlinked
|
|
185
|
+
*/
|
|
186
|
+
ident: Ident;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Authentication events map
|
|
190
|
+
*/
|
|
191
|
+
export type AuthenticationEvents = {
|
|
192
|
+
"Authentication.GetMe": EventAuthenticationGetMe;
|
|
193
|
+
"Authentication.Register": EventAuthenticationRegister;
|
|
194
|
+
"Authentication.PasswordUpdate": EventAuthenticationPasswordUpdate;
|
|
195
|
+
"Authentication.PasswordCreate": EventAuthenticationPasswordUpdate;
|
|
196
|
+
"Authentication.Logout": EventAuthenticationLogout;
|
|
197
|
+
"Authentication.Login": EventAuthenticationLogin;
|
|
198
|
+
"Authentication.LoginFailed": EventAuthenticationLoginFailed;
|
|
199
|
+
"Authentication.Linked": EventAuthenticationLinked;
|
|
200
|
+
"Authentication.Unlinked": EventAuthenticationUnlinked;
|
|
201
|
+
};
|
|
9
202
|
//# sourceMappingURL=iauthentication.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iauthentication.d.ts","sourceRoot":"","sources":["../../src/services/iauthentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"iauthentication.d.ts","sourceRoot":"","sources":["../../src/services/iauthentication.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servicecommands.d.ts","sourceRoot":"","sources":["../../src/services/servicecommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAqB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,oDAAoD;IACpD,IAAI,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE,CAAC;IAC/C,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;;;OASG;IACH,MAAM,EAAE,KAAK,CAAC,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAAE,CAoC/F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC5B,QAAQ,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,EAC5C,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"servicecommands.d.ts","sourceRoot":"","sources":["../../src/services/servicecommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAqB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,oDAAoD;IACpD,IAAI,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE,CAAC;IAC/C,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;;;OASG;IACH,MAAM,EAAE,KAAK,CAAC,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAAE,CAoC/F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC5B,QAAQ,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,EAC5C,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,CA8EjB"}
|
|
@@ -86,15 +86,10 @@ export function collectServiceCommands(app) {
|
|
|
86
86
|
* ```
|
|
87
87
|
*/
|
|
88
88
|
export async function executeServiceCommand(cmdName, cmdInfo, args, services, serviceFilter) {
|
|
89
|
-
// Filter services if requested
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (targetServices.length === 0) {
|
|
94
|
-
useLog("ERROR", `No services match filter '${serviceFilter.join(",")}' for command '${cmdName}'`);
|
|
95
|
-
return 1;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
89
|
+
// Filter services if requested, by type (e.g. "HttpServer") or by instance name (e.g. a deployment unit)
|
|
90
|
+
const filtered = serviceFilter && serviceFilter.length > 0;
|
|
91
|
+
const typeMatches = (svc) => !filtered || serviceFilter.some(f => svc.name.endsWith(f) || svc.name === f);
|
|
92
|
+
const instanceMatches = (service) => filtered && typeof service.getName === "function" && serviceFilter.includes(service.getName());
|
|
98
93
|
// Build positional args from command arg definitions; an omitted argument keeps
|
|
99
94
|
// its slot as undefined so the following ones stay in position
|
|
100
95
|
const commandArgs = Object.keys(cmdInfo.args).map(argName => args[argName] !== undefined ? args[argName] : cmdInfo.args[argName].default);
|
|
@@ -106,8 +101,9 @@ export async function executeServiceCommand(cmdName, cmdInfo, args, services, se
|
|
|
106
101
|
// Execute each matching service handler. A single target type can map to
|
|
107
102
|
// multiple configured instances (e.g. two HttpServer services on different
|
|
108
103
|
// ports); dispatch to every instance whose constructor matches the type.
|
|
109
|
-
|
|
110
|
-
|
|
104
|
+
let filterMatched = !filtered;
|
|
105
|
+
for (const svc of cmdInfo.services) {
|
|
106
|
+
let matches = [];
|
|
111
107
|
// Direct lookup — works when the modda name is used verbatim as service key
|
|
112
108
|
if (services[svc.name])
|
|
113
109
|
matches.push(services[svc.name]);
|
|
@@ -120,6 +116,12 @@ export async function executeServiceCommand(cmdName, cmdInfo, args, services, se
|
|
|
120
116
|
matches.push(instanceService);
|
|
121
117
|
}
|
|
122
118
|
}
|
|
119
|
+
if (!typeMatches(svc)) {
|
|
120
|
+
matches = matches.filter(instanceMatches);
|
|
121
|
+
if (matches.length === 0)
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
filterMatched = true;
|
|
123
125
|
if (matches.length === 0) {
|
|
124
126
|
useLog("WARN", `Service '${svc.name}' not found, skipping`);
|
|
125
127
|
continue;
|
|
@@ -140,6 +142,10 @@ export async function executeServiceCommand(cmdName, cmdInfo, args, services, se
|
|
|
140
142
|
executed++;
|
|
141
143
|
}
|
|
142
144
|
}
|
|
145
|
+
if (!filterMatched) {
|
|
146
|
+
useLog("ERROR", `No services match filter '${serviceFilter.join(",")}' for command '${cmdName}'`);
|
|
147
|
+
return 1;
|
|
148
|
+
}
|
|
143
149
|
if (executed === 0) {
|
|
144
150
|
useLog("ERROR", `No service instance found to run command '${cmdName}'`);
|
|
145
151
|
return 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servicecommands.js","sourceRoot":"","sources":["../../src/services/servicecommands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAuCxC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAgB;IACrD,MAAM,QAAQ,GAA2C,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;IAEjC,KAAK,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAU,EAAE,CAAC;QAChE,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAAE,SAAS;YACjC,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClE,QAAQ,CAAC,OAAO,CAAC,KAAK;oBACpB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,QAAQ,EAAE,EAAE;oBACZ,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE;oBACxB,QAAQ,EAAE,EAAE;oBACZ,MAAM,EAAE,EAAE;iBACX,CAAC;gBACF,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAC9B,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,QAAQ;iBACf,CAAC,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5C,+DAA+D;gBAC/D,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5D,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;gBAC7C,CAAC;gBACD,wCAAwC;gBACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACxC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9C,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,OAA2B,EAC3B,IAA4B,EAC5B,QAA4C,EAC5C,aAAwB;IAExB
|
|
1
|
+
{"version":3,"file":"servicecommands.js","sourceRoot":"","sources":["../../src/services/servicecommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import * as WebdaError from "../errors/errors.js";
|
|
2
|
+
import { Service } from "./service.js";
|
|
3
|
+
import { ServiceParameters } from "./serviceparameters.js";
|
|
4
|
+
import { MfaState, Session } from "../session/session.js";
|
|
5
|
+
/** Raised for unknown, expired, revoked or reused tokens (403 TOKEN_INVALID) */
|
|
6
|
+
export declare class TokenInvalid extends WebdaError.HttpError {
|
|
7
|
+
/** @param message - error message */
|
|
8
|
+
constructor(message?: string);
|
|
9
|
+
}
|
|
10
|
+
/** Tokens returned by a successful login or refresh */
|
|
11
|
+
export interface IssuedTokens {
|
|
12
|
+
accessToken: string;
|
|
13
|
+
refreshToken: string;
|
|
14
|
+
expiresIn: number;
|
|
15
|
+
}
|
|
16
|
+
/** Claims carried by an access token */
|
|
17
|
+
export interface AccessClaims {
|
|
18
|
+
sub: string;
|
|
19
|
+
ident: string;
|
|
20
|
+
provider?: string;
|
|
21
|
+
amr: string[];
|
|
22
|
+
roles?: string[];
|
|
23
|
+
fam: string;
|
|
24
|
+
mfa: MfaState;
|
|
25
|
+
/** When the session was authenticated (ms): checked against the user's last password change */
|
|
26
|
+
authAt?: number;
|
|
27
|
+
}
|
|
28
|
+
/** TokenService parameters */
|
|
29
|
+
export declare class TokenServiceParameters extends ServiceParameters {
|
|
30
|
+
/**
|
|
31
|
+
* Access token lifetime in seconds
|
|
32
|
+
* @default 900
|
|
33
|
+
*/
|
|
34
|
+
accessTtl: number;
|
|
35
|
+
/**
|
|
36
|
+
* Refresh token lifetime in seconds
|
|
37
|
+
* @default 2592000
|
|
38
|
+
*/
|
|
39
|
+
refreshTtl: number;
|
|
40
|
+
/**
|
|
41
|
+
* @param params - raw parameters
|
|
42
|
+
* @returns this
|
|
43
|
+
*/
|
|
44
|
+
load(params?: any): this;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Issues access tokens (JWT) and rotating refresh tokens
|
|
48
|
+
* @WebdaModda TokenService
|
|
49
|
+
*/
|
|
50
|
+
export declare class TokenService<T extends TokenServiceParameters = TokenServiceParameters> extends Service<T> {
|
|
51
|
+
/**
|
|
52
|
+
* @param token - raw refresh token
|
|
53
|
+
* @returns SHA-256 hex
|
|
54
|
+
*/
|
|
55
|
+
protected hash(token: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Issue an access + refresh token pair for a logged session
|
|
58
|
+
*
|
|
59
|
+
* Roles are not persisted: refreshed access tokens carry no roles until they are re-derived.
|
|
60
|
+
* @param session - logged session (must not be anonymous nor pending MFA)
|
|
61
|
+
* @param family - existing family when rotating
|
|
62
|
+
* @returns the tokens
|
|
63
|
+
*/
|
|
64
|
+
issue(session: Session, family?: string): Promise<IssuedTokens>;
|
|
65
|
+
/**
|
|
66
|
+
* @param token - access token
|
|
67
|
+
* @returns claims, or undefined when invalid/expired
|
|
68
|
+
*/
|
|
69
|
+
verifyAccess(token: string): Promise<AccessClaims | undefined>;
|
|
70
|
+
/**
|
|
71
|
+
* Exchange a refresh token (rotation with reuse detection)
|
|
72
|
+
*
|
|
73
|
+
* The token is only ever looked up by its hash, so an access token or any
|
|
74
|
+
* arbitrary string simply does not match a stored record.
|
|
75
|
+
* @param refreshToken - raw refresh token
|
|
76
|
+
* @returns new tokens and the rebuilt session
|
|
77
|
+
*/
|
|
78
|
+
refresh(refreshToken: string): Promise<IssuedTokens & {
|
|
79
|
+
session: Session;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* @param err - error thrown by a conditional write
|
|
83
|
+
* @returns true if the error is a failed write condition
|
|
84
|
+
*/
|
|
85
|
+
protected isConditionFailure(err: any): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* @param family - family to revoke
|
|
88
|
+
*/
|
|
89
|
+
revokeFamily(family: string): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* @param userId - user whose tokens are revoked
|
|
92
|
+
*/
|
|
93
|
+
revokeUser(userId: string): Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=token.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.service.d.ts","sourceRoot":"","sources":["../../src/services/token.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAI1D,gFAAgF;AAChF,qBAAa,YAAa,SAAQ,UAAU,CAAC,SAAS;IACpD,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAAwB,EAE5C;CACF;AAED,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,QAAQ,CAAC;IACd,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8BAA8B;AAC9B,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,IAAI,CAAC,MAAM,GAAE,GAAQ,GAAG,IAAI,CAK3B;CACF;AAED;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,sBAAsB,GAAG,sBAAsB,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACrG;;;OAGG;IACH,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpC;IAED;;;;;;;OAOG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,MAA0B,GAAG,OAAO,CAAC,YAAY,CAAC,CAiCvF;IAED;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAMnE;IAED;;;;;;;OAOG;IACG,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CA0ChF;IAED;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAE9C;IAED;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhD;IAED;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9C;CACF"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { getUuid } from "@webda/utils";
|
|
3
|
+
import * as WebdaError from "../errors/errors.js";
|
|
4
|
+
import { Service } from "./service.js";
|
|
5
|
+
import { ServiceParameters } from "./serviceparameters.js";
|
|
6
|
+
import { useCrypto } from "./cryptoservice.service.js";
|
|
7
|
+
import { RefreshToken } from "../models/refreshtoken.model.js";
|
|
8
|
+
import { Session } from "../session/session.js";
|
|
9
|
+
const ACCESS_AUDIENCE = "webda-access";
|
|
10
|
+
/** Raised for unknown, expired, revoked or reused tokens (403 TOKEN_INVALID) */
|
|
11
|
+
export class TokenInvalid extends WebdaError.HttpError {
|
|
12
|
+
/** @param message - error message */
|
|
13
|
+
constructor(message = "Invalid token") {
|
|
14
|
+
super(message, 403);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** TokenService parameters */
|
|
18
|
+
export class TokenServiceParameters extends ServiceParameters {
|
|
19
|
+
/**
|
|
20
|
+
* Access token lifetime in seconds
|
|
21
|
+
* @default 900
|
|
22
|
+
*/
|
|
23
|
+
accessTtl;
|
|
24
|
+
/**
|
|
25
|
+
* Refresh token lifetime in seconds
|
|
26
|
+
* @default 2592000
|
|
27
|
+
*/
|
|
28
|
+
refreshTtl;
|
|
29
|
+
/**
|
|
30
|
+
* @param params - raw parameters
|
|
31
|
+
* @returns this
|
|
32
|
+
*/
|
|
33
|
+
load(params = {}) {
|
|
34
|
+
super.load(params);
|
|
35
|
+
this.accessTtl ??= 900;
|
|
36
|
+
this.refreshTtl ??= 2592000;
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Issues access tokens (JWT) and rotating refresh tokens
|
|
42
|
+
* @WebdaModda TokenService
|
|
43
|
+
*/
|
|
44
|
+
export class TokenService extends Service {
|
|
45
|
+
/**
|
|
46
|
+
* @param token - raw refresh token
|
|
47
|
+
* @returns SHA-256 hex
|
|
48
|
+
*/
|
|
49
|
+
hash(token) {
|
|
50
|
+
return createHash("sha256").update(token).digest("hex");
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Issue an access + refresh token pair for a logged session
|
|
54
|
+
*
|
|
55
|
+
* Roles are not persisted: refreshed access tokens carry no roles until they are re-derived.
|
|
56
|
+
* @param session - logged session (must not be anonymous nor pending MFA)
|
|
57
|
+
* @param family - existing family when rotating
|
|
58
|
+
* @returns the tokens
|
|
59
|
+
*/
|
|
60
|
+
async issue(session, family = getUuid("base64")) {
|
|
61
|
+
if (!session.isLogged()) {
|
|
62
|
+
throw new TokenInvalid("Session is not fully authenticated");
|
|
63
|
+
}
|
|
64
|
+
const refreshToken = randomBytes(32).toString("base64url");
|
|
65
|
+
await RefreshToken.create({
|
|
66
|
+
hash: this.hash(refreshToken),
|
|
67
|
+
userId: session.userId,
|
|
68
|
+
identId: session.identUsed,
|
|
69
|
+
provider: session.provider,
|
|
70
|
+
amr: session.amr ?? [],
|
|
71
|
+
mfa: session.mfa ?? "none",
|
|
72
|
+
family,
|
|
73
|
+
expiresAt: Date.now() + this.parameters.refreshTtl * 1000
|
|
74
|
+
});
|
|
75
|
+
session.refreshFamily = family;
|
|
76
|
+
// A refreshed session is re-authenticated by its (unrevoked) refresh token
|
|
77
|
+
session.authAt ??= Date.now();
|
|
78
|
+
const claims = {
|
|
79
|
+
sub: session.userId,
|
|
80
|
+
ident: session.identUsed,
|
|
81
|
+
provider: session.provider,
|
|
82
|
+
amr: session.amr ?? [],
|
|
83
|
+
roles: session.roles,
|
|
84
|
+
fam: family,
|
|
85
|
+
mfa: session.mfa ?? "none",
|
|
86
|
+
authAt: session.authAt
|
|
87
|
+
};
|
|
88
|
+
const accessToken = await useCrypto().jwtSign(claims, {
|
|
89
|
+
audience: ACCESS_AUDIENCE,
|
|
90
|
+
expiresIn: this.parameters.accessTtl
|
|
91
|
+
});
|
|
92
|
+
return { accessToken, refreshToken, expiresIn: this.parameters.accessTtl };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @param token - access token
|
|
96
|
+
* @returns claims, or undefined when invalid/expired
|
|
97
|
+
*/
|
|
98
|
+
async verifyAccess(token) {
|
|
99
|
+
try {
|
|
100
|
+
return await useCrypto().jwtVerify(token, { audience: ACCESS_AUDIENCE });
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Exchange a refresh token (rotation with reuse detection)
|
|
108
|
+
*
|
|
109
|
+
* The token is only ever looked up by its hash, so an access token or any
|
|
110
|
+
* arbitrary string simply does not match a stored record.
|
|
111
|
+
* @param refreshToken - raw refresh token
|
|
112
|
+
* @returns new tokens and the rebuilt session
|
|
113
|
+
*/
|
|
114
|
+
async refresh(refreshToken) {
|
|
115
|
+
if (typeof refreshToken !== "string" || !refreshToken) {
|
|
116
|
+
throw new TokenInvalid();
|
|
117
|
+
}
|
|
118
|
+
const ref = RefreshToken.ref({ hash: this.hash(refreshToken) });
|
|
119
|
+
if (!(await ref.exists())) {
|
|
120
|
+
throw new TokenInvalid();
|
|
121
|
+
}
|
|
122
|
+
const stored = await ref.get();
|
|
123
|
+
if (stored.revokedAt || stored.expiresAt < Date.now()) {
|
|
124
|
+
throw new TokenInvalid();
|
|
125
|
+
}
|
|
126
|
+
if (stored.rotatedAt) {
|
|
127
|
+
await this.revokeFamily(stored.family);
|
|
128
|
+
throw new TokenInvalid("Refresh token reused");
|
|
129
|
+
}
|
|
130
|
+
// Compare-and-set: only one caller can move rotatedAt from undefined to a value
|
|
131
|
+
try {
|
|
132
|
+
await ref.patch({ rotatedAt: Date.now() }, "rotatedAt", undefined);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
if (!this.isConditionFailure(err)) {
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
// Lost the race: treat as reuse and kill the family
|
|
139
|
+
await this.revokeFamily(stored.family);
|
|
140
|
+
throw new TokenInvalid("Refresh token reused");
|
|
141
|
+
}
|
|
142
|
+
const session = new Session();
|
|
143
|
+
session.login(stored.userId, stored.identId, {
|
|
144
|
+
provider: stored.provider,
|
|
145
|
+
amr: stored.amr,
|
|
146
|
+
mfa: stored.mfa ?? "none"
|
|
147
|
+
});
|
|
148
|
+
const tokens = await this.issue(session, stored.family);
|
|
149
|
+
// A revocation may have run between our read and the issue: its scan would have missed the new record
|
|
150
|
+
for await (const _ of RefreshToken.iterate("family = ? AND revokedAt IS NOT NULL LIMIT 1", [stored.family])) {
|
|
151
|
+
await RefreshToken.ref({ hash: this.hash(tokens.refreshToken) }).patch({
|
|
152
|
+
revokedAt: Date.now()
|
|
153
|
+
});
|
|
154
|
+
throw new TokenInvalid("Refresh token revoked");
|
|
155
|
+
}
|
|
156
|
+
return { ...tokens, session };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* @param err - error thrown by a conditional write
|
|
160
|
+
* @returns true if the error is a failed write condition
|
|
161
|
+
*/
|
|
162
|
+
isConditionFailure(err) {
|
|
163
|
+
return /condition/i.test(`${err?.name} ${err?.message}`);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @param family - family to revoke
|
|
167
|
+
*/
|
|
168
|
+
async revokeFamily(family) {
|
|
169
|
+
for await (const token of RefreshToken.iterate("family = ? AND revokedAt IS NULL", [family])) {
|
|
170
|
+
await token.ref().patch({ revokedAt: Date.now() });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* @param userId - user whose tokens are revoked
|
|
175
|
+
*/
|
|
176
|
+
async revokeUser(userId) {
|
|
177
|
+
for await (const token of RefreshToken.iterate("userId = ? AND revokedAt IS NULL", [userId])) {
|
|
178
|
+
await token.ref().patch({ revokedAt: Date.now() });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=token.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.service.js","sourceRoot":"","sources":["../../src/services/token.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,22 @@ export declare abstract class SessionManager<T extends ServiceParameters = Servi
|
|
|
21
21
|
* @param session
|
|
22
22
|
*/
|
|
23
23
|
abstract save(context: Context, session: Session): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Build a stateless session from an access token (any transport)
|
|
26
|
+
* @param context - the context
|
|
27
|
+
* @param token - access token
|
|
28
|
+
* @returns the session, anonymous when the token is invalid
|
|
29
|
+
*/
|
|
30
|
+
loadFromToken(context: Context, token: string): Promise<Session>;
|
|
31
|
+
/**
|
|
32
|
+
* Whether the user of an authenticated session changed their password after the session was authenticated
|
|
33
|
+
*
|
|
34
|
+
* Costs one user read (through the registered user resolver) per load of a session carrying `authAt`. A failing
|
|
35
|
+
* read counts as outdated: the session is then anonymous for that request.
|
|
36
|
+
* @param session - loaded session
|
|
37
|
+
* @returns true when the session must be treated as anonymous
|
|
38
|
+
*/
|
|
39
|
+
protected isOutdated(session: Session): Promise<boolean>;
|
|
24
40
|
}
|
|
25
41
|
/** Persistent session data stored in a model with a TTL */
|
|
26
42
|
export declare class SessionModel extends UuidModel {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.model.d.ts","sourceRoot":"","sources":["../../src/session/manager.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAU,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAgB,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.model.d.ts","sourceRoot":"","sources":["../../src/session/manager.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAU,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAgB,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE5E;;GAEG;AACH,8BAAsB,cAAc,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACtG;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;;;;OAKG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcrE;IAED;;;;;;;OAOG;IACH,UAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAY7D;CACF;AAED,2DAA2D;AAC3D,qBAAa,YAAa,SAAQ,SAAS;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC;IACb;;OAEG;IACH,YAAY,IAAI,EAAE,GAAG,EAIpB;CACF;AAED,sDAAsD;AACtD,qBAAa,uBAAwB,SAAQ,iBAAiB;IAC5D;;OAEG;IACH,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;;;OAIG;IACH,IAAI,CAAC,MAAM,GAAE,GAAQ,GAAG,IAAI,CAI3B;CACF;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAoB,CAC/B,CAAC,SAAS,uBAAuB,GAAG,uBAAuB,CAC3D,SAAQ,cAAc,CAAC,CAAC,CAAC;IAEzB,aAAa,EAAE,aAAa,CAAC;IAE7B,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnD;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB7C;IAED;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,iBAgC5C;CACF"}
|