@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.
Files changed (158) hide show
  1. package/lib/application/application.d.ts +31 -0
  2. package/lib/application/application.d.ts.map +1 -1
  3. package/lib/application/application.js +55 -2
  4. package/lib/application/application.js.map +1 -1
  5. package/lib/application/deployment.d.ts +93 -0
  6. package/lib/application/deployment.d.ts.map +1 -0
  7. package/lib/application/deployment.js +99 -0
  8. package/lib/application/deployment.js.map +1 -0
  9. package/lib/application/unpackedapplication.d.ts.map +1 -1
  10. package/lib/application/unpackedapplication.js +9 -1
  11. package/lib/application/unpackedapplication.js.map +1 -1
  12. package/lib/bin/cli.d.ts +36 -1
  13. package/lib/bin/cli.d.ts.map +1 -1
  14. package/lib/bin/cli.js +108 -2
  15. package/lib/bin/cli.js.map +1 -1
  16. package/lib/contexts/execution.js +1 -1
  17. package/lib/contexts/execution.js.map +1 -1
  18. package/lib/contexts/operationcontext.d.ts +3 -0
  19. package/lib/contexts/operationcontext.d.ts.map +1 -1
  20. package/lib/contexts/operationcontext.js +6 -3
  21. package/lib/contexts/operationcontext.js.map +1 -1
  22. package/lib/core/core.js +1 -1
  23. package/lib/core/core.js.map +1 -1
  24. package/lib/core/hooks.d.ts +22 -0
  25. package/lib/core/hooks.d.ts.map +1 -1
  26. package/lib/core/hooks.js +24 -0
  27. package/lib/core/hooks.js.map +1 -1
  28. package/lib/core/operations.d.ts.map +1 -1
  29. package/lib/core/operations.js +13 -11
  30. package/lib/core/operations.js.map +1 -1
  31. package/lib/deployers/deployer.d.ts +157 -0
  32. package/lib/deployers/deployer.d.ts.map +1 -0
  33. package/lib/deployers/deployer.js +81 -0
  34. package/lib/deployers/deployer.js.map +1 -0
  35. package/lib/deployers/git.d.ts +27 -0
  36. package/lib/deployers/git.d.ts.map +1 -0
  37. package/lib/deployers/git.js +66 -0
  38. package/lib/deployers/git.js.map +1 -0
  39. package/lib/deployers/packager.d.ts +85 -0
  40. package/lib/deployers/packager.d.ts.map +1 -0
  41. package/lib/deployers/packager.js +259 -0
  42. package/lib/deployers/packager.js.map +1 -0
  43. package/lib/index.d.ts +10 -4
  44. package/lib/index.d.ts.map +1 -1
  45. package/lib/index.js +10 -4
  46. package/lib/index.js.map +1 -1
  47. package/lib/models/aclmodel.d.ts +32 -5
  48. package/lib/models/aclmodel.d.ts.map +1 -1
  49. package/lib/models/aclmodel.js +34 -9
  50. package/lib/models/aclmodel.js.map +1 -1
  51. package/lib/models/coremodel.model.d.ts.map +1 -1
  52. package/lib/models/coremodel.model.js.map +1 -1
  53. package/lib/models/decorator.d.ts +4 -0
  54. package/lib/models/decorator.d.ts.map +1 -1
  55. package/lib/models/decorator.js +4 -0
  56. package/lib/models/decorator.js.map +1 -1
  57. package/lib/models/deployment.d.ts +2 -21
  58. package/lib/models/deployment.d.ts.map +1 -1
  59. package/lib/models/encrypted.model.d.ts +46 -0
  60. package/lib/models/encrypted.model.d.ts.map +1 -0
  61. package/lib/models/encrypted.model.js +87 -0
  62. package/lib/models/encrypted.model.js.map +1 -0
  63. package/lib/models/ident.model.d.ts +103 -64
  64. package/lib/models/ident.model.d.ts.map +1 -1
  65. package/lib/models/ident.model.js +168 -76
  66. package/lib/models/ident.model.js.map +1 -1
  67. package/lib/models/ownermodel.model.d.ts +25 -3
  68. package/lib/models/ownermodel.model.d.ts.map +1 -1
  69. package/lib/models/ownermodel.model.js +46 -10
  70. package/lib/models/ownermodel.model.js.map +1 -1
  71. package/lib/models/password.model.d.ts +78 -0
  72. package/lib/models/password.model.d.ts.map +1 -0
  73. package/lib/models/password.model.js +171 -0
  74. package/lib/models/password.model.js.map +1 -0
  75. package/lib/models/permissions.d.ts +236 -0
  76. package/lib/models/permissions.d.ts.map +1 -0
  77. package/lib/models/permissions.js +495 -0
  78. package/lib/models/permissions.js.map +1 -0
  79. package/lib/models/refreshtoken.model.d.ts +30 -0
  80. package/lib/models/refreshtoken.model.d.ts.map +1 -0
  81. package/lib/models/refreshtoken.model.js +29 -0
  82. package/lib/models/refreshtoken.model.js.map +1 -0
  83. package/lib/models/registry.model.d.ts.map +1 -1
  84. package/lib/models/registry.model.js.map +1 -1
  85. package/lib/models/rolemodel.model.d.ts.map +1 -1
  86. package/lib/models/rolemodel.model.js +1 -2
  87. package/lib/models/rolemodel.model.js.map +1 -1
  88. package/lib/models/simpleuser.model.d.ts.map +1 -1
  89. package/lib/models/simpleuser.model.js +2 -1
  90. package/lib/models/simpleuser.model.js.map +1 -1
  91. package/lib/models/user.model.d.ts +33 -21
  92. package/lib/models/user.model.d.ts.map +1 -1
  93. package/lib/models/user.model.js +81 -26
  94. package/lib/models/user.model.js.map +1 -1
  95. package/lib/rest/restoperationstransport.service.d.ts.map +1 -1
  96. package/lib/rest/restoperationstransport.service.js +7 -5
  97. package/lib/rest/restoperationstransport.service.js.map +1 -1
  98. package/lib/services/audit.model.d.ts +2 -2
  99. package/lib/services/audit.model.d.ts.map +1 -1
  100. package/lib/services/audit.model.js +16 -6
  101. package/lib/services/audit.model.js.map +1 -1
  102. package/lib/services/binary.service.d.ts +42 -4
  103. package/lib/services/binary.service.d.ts.map +1 -1
  104. package/lib/services/binary.service.js +33 -13
  105. package/lib/services/binary.service.js.map +1 -1
  106. package/lib/services/domainservice.service.d.ts +111 -1
  107. package/lib/services/domainservice.service.d.ts.map +1 -1
  108. package/lib/services/domainservice.service.js +303 -50
  109. package/lib/services/domainservice.service.js.map +1 -1
  110. package/lib/services/iauthentication.d.ts +196 -3
  111. package/lib/services/iauthentication.d.ts.map +1 -1
  112. package/lib/services/servicecommands.d.ts.map +1 -1
  113. package/lib/services/servicecommands.js +17 -11
  114. package/lib/services/servicecommands.js.map +1 -1
  115. package/lib/services/token.service.d.ts +95 -0
  116. package/lib/services/token.service.d.ts.map +1 -0
  117. package/lib/services/token.service.js +182 -0
  118. package/lib/services/token.service.js.map +1 -0
  119. package/lib/session/manager.model.d.ts +16 -0
  120. package/lib/session/manager.model.d.ts.map +1 -1
  121. package/lib/session/manager.model.js +58 -1
  122. package/lib/session/manager.model.js.map +1 -1
  123. package/lib/session/session.d.ts +44 -1
  124. package/lib/session/session.d.ts.map +1 -1
  125. package/lib/session/session.js +51 -2
  126. package/lib/session/session.js.map +1 -1
  127. package/lib/stores/memory.service.d.ts.map +1 -1
  128. package/lib/stores/memory.service.js +4 -3
  129. package/lib/stores/memory.service.js.map +1 -1
  130. package/lib/templates/templates.d.ts +8 -0
  131. package/lib/templates/templates.d.ts.map +1 -1
  132. package/lib/templates/templates.js +10 -1
  133. package/lib/templates/templates.js.map +1 -1
  134. package/lib/test/behavior-fixture.model.d.ts +30 -0
  135. package/lib/test/behavior-fixture.model.d.ts.map +1 -0
  136. package/lib/test/behavior-fixture.model.js +63 -0
  137. package/lib/test/behavior-fixture.model.js.map +1 -0
  138. package/lib/test/legacyident.fixture.model.d.ts +98 -0
  139. package/lib/test/legacyident.fixture.model.d.ts.map +1 -0
  140. package/lib/test/legacyident.fixture.model.js +125 -0
  141. package/lib/test/legacyident.fixture.model.js.map +1 -0
  142. package/lib/test/objects.d.ts +2 -2
  143. package/lib/test/objects.d.ts.map +1 -1
  144. package/lib/test/objects.js +2 -2
  145. package/lib/test/objects.js.map +1 -1
  146. package/package.json +32 -11
  147. package/test/config-cached.json +2 -1
  148. package/test/config.json +3 -1
  149. package/test/my-cnf.json +1 -1
  150. package/webda.module.json +656 -390
  151. package/lib/services/authentication.service.d.ts +0 -442
  152. package/lib/services/authentication.service.d.ts.map +0 -1
  153. package/lib/services/authentication.service.js +0 -932
  154. package/lib/services/authentication.service.js.map +0 -1
  155. package/lib/services/oauth.d.ts +0 -250
  156. package/lib/services/oauth.d.ts.map +0 -1
  157. package/lib/services/oauth.js +0 -405
  158. package/lib/services/oauth.js.map +0 -1
@@ -1,9 +1,202 @@
1
- import { Context } from "../contexts/icontext.js";
2
- import { Service } from "./service.js";
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
- onIdentLogin(ctx: Context, provider: string, identId: string, profile: any, tokens?: any): Promise<void>;
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;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,OAAO;IACrD,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1G"}
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,CA0EjB"}
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
- let targetServices = cmdInfo.services;
91
- if (serviceFilter && serviceFilter.length > 0) {
92
- targetServices = targetServices.filter(s => serviceFilter.some(f => s.name.endsWith(f) || s.name === f));
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
- for (const svc of targetServices) {
110
- const matches = [];
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":"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"}
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;AACvC,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;CAClE;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,CAgB7C;IAED;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,iBA6B5C;CACF"}
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"}