@1mcp/agent 0.34.4 → 0.35.0-beta.1

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 (183) hide show
  1. package/build/admin/assets/admin-console-CX5GzncA.css +1 -0
  2. package/build/admin/assets/admin-console-CkZ5lBKg.js +61 -0
  3. package/build/admin/index.html +13 -0
  4. package/build/commands/admin/admin.d.ts +90 -0
  5. package/build/commands/admin/admin.d.ts.map +1 -0
  6. package/build/commands/admin/admin.js +545 -0
  7. package/build/commands/admin/admin.js.map +1 -0
  8. package/build/commands/admin/index.d.ts +3 -0
  9. package/build/commands/admin/index.d.ts.map +1 -0
  10. package/build/commands/admin/index.js +99 -0
  11. package/build/commands/admin/index.js.map +1 -0
  12. package/build/commands/auth/index.d.ts.map +1 -1
  13. package/build/commands/auth/index.js +24 -5
  14. package/build/commands/auth/index.js.map +1 -1
  15. package/build/commands/auth/login.d.ts +1 -0
  16. package/build/commands/auth/login.d.ts.map +1 -1
  17. package/build/commands/auth/login.js +6 -10
  18. package/build/commands/auth/login.js.map +1 -1
  19. package/build/commands/auth/logout.d.ts +3 -0
  20. package/build/commands/auth/logout.d.ts.map +1 -1
  21. package/build/commands/auth/logout.js +19 -32
  22. package/build/commands/auth/logout.js.map +1 -1
  23. package/build/commands/auth/runtimeTargetContext.d.ts +25 -0
  24. package/build/commands/auth/runtimeTargetContext.d.ts.map +1 -0
  25. package/build/commands/auth/runtimeTargetContext.js +69 -0
  26. package/build/commands/auth/runtimeTargetContext.js.map +1 -0
  27. package/build/commands/auth/status.d.ts +1 -0
  28. package/build/commands/auth/status.d.ts.map +1 -1
  29. package/build/commands/auth/status.js +10 -33
  30. package/build/commands/auth/status.js.map +1 -1
  31. package/build/commands/inspect/index.d.ts.map +1 -1
  32. package/build/commands/inspect/index.js +4 -0
  33. package/build/commands/inspect/index.js.map +1 -1
  34. package/build/commands/inspect/inspect.d.ts +1 -0
  35. package/build/commands/inspect/inspect.d.ts.map +1 -1
  36. package/build/commands/inspect/inspect.js +2 -2
  37. package/build/commands/inspect/inspect.js.map +1 -1
  38. package/build/commands/instructions/index.d.ts.map +1 -1
  39. package/build/commands/instructions/index.js +4 -0
  40. package/build/commands/instructions/index.js.map +1 -1
  41. package/build/commands/instructions/instructions.d.ts +1 -0
  42. package/build/commands/instructions/instructions.d.ts.map +1 -1
  43. package/build/commands/instructions/instructions.js.map +1 -1
  44. package/build/commands/instructions/instructionsUtils.js +1 -1
  45. package/build/commands/instructions/instructionsUtils.js.map +1 -1
  46. package/build/commands/mcp/enable.d.ts +89 -2
  47. package/build/commands/mcp/enable.d.ts.map +1 -1
  48. package/build/commands/mcp/enable.js +555 -35
  49. package/build/commands/mcp/enable.js.map +1 -1
  50. package/build/commands/proxy/index.d.ts +1 -0
  51. package/build/commands/proxy/index.d.ts.map +1 -1
  52. package/build/commands/proxy/index.js +4 -0
  53. package/build/commands/proxy/index.js.map +1 -1
  54. package/build/commands/run/index.d.ts.map +1 -1
  55. package/build/commands/run/index.js +4 -0
  56. package/build/commands/run/index.js.map +1 -1
  57. package/build/commands/run/run.d.ts +1 -0
  58. package/build/commands/run/run.d.ts.map +1 -1
  59. package/build/commands/run/run.js +2 -2
  60. package/build/commands/run/run.js.map +1 -1
  61. package/build/commands/serve/serve.d.ts.map +1 -1
  62. package/build/commands/serve/serve.js +4 -0
  63. package/build/commands/serve/serve.js.map +1 -1
  64. package/build/commands/shared/apiClient.d.ts +5 -1
  65. package/build/commands/shared/apiClient.d.ts.map +1 -1
  66. package/build/commands/shared/apiClient.js +17 -9
  67. package/build/commands/shared/apiClient.js.map +1 -1
  68. package/build/commands/shared/clientSurfaceAttachment.d.ts +14 -0
  69. package/build/commands/shared/clientSurfaceAttachment.d.ts.map +1 -1
  70. package/build/commands/shared/clientSurfaceAttachment.js +51 -9
  71. package/build/commands/shared/clientSurfaceAttachment.js.map +1 -1
  72. package/build/commands/shared/commandRunner.d.ts +3 -1
  73. package/build/commands/shared/commandRunner.d.ts.map +1 -1
  74. package/build/commands/shared/commandRunner.js +59 -2
  75. package/build/commands/shared/commandRunner.js.map +1 -1
  76. package/build/commands/shared/serveTargetResolver.d.ts +14 -1
  77. package/build/commands/shared/serveTargetResolver.d.ts.map +1 -1
  78. package/build/commands/shared/serveTargetResolver.js +145 -3
  79. package/build/commands/shared/serveTargetResolver.js.map +1 -1
  80. package/build/commands/target/index.d.ts +3 -0
  81. package/build/commands/target/index.d.ts.map +1 -0
  82. package/build/commands/target/index.js +171 -0
  83. package/build/commands/target/index.js.map +1 -0
  84. package/build/commands/target/target.d.ts +78 -0
  85. package/build/commands/target/target.d.ts.map +1 -0
  86. package/build/commands/target/target.js +471 -0
  87. package/build/commands/target/target.js.map +1 -0
  88. package/build/constants/mcp.d.ts +1 -1
  89. package/build/constants/mcp.d.ts.map +1 -1
  90. package/build/constants/mcp.js +1 -1
  91. package/build/constants/mcp.js.map +1 -1
  92. package/build/core/runtime/runtimeIdentityService.d.ts +30 -0
  93. package/build/core/runtime/runtimeIdentityService.d.ts.map +1 -0
  94. package/build/core/runtime/runtimeIdentityService.js +63 -0
  95. package/build/core/runtime/runtimeIdentityService.js.map +1 -0
  96. package/build/core/server/agentConfig.d.ts +4 -0
  97. package/build/core/server/agentConfig.d.ts.map +1 -1
  98. package/build/core/server/agentConfig.js +3 -0
  99. package/build/core/server/agentConfig.js.map +1 -1
  100. package/build/core/tools/handlers/serverManagementHandler.d.ts +7 -7
  101. package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +2 -2
  102. package/build/core/tools/internal/schemas/discovery.d.ts +1 -1
  103. package/build/core/tools/internal/schemas/index.d.ts +13 -13
  104. package/build/core/tools/internal/schemas/installation.d.ts +7 -7
  105. package/build/core/tools/internal/schemas/management.d.ts +5 -5
  106. package/build/core/types/transport.d.ts +9 -3
  107. package/build/core/types/transport.d.ts.map +1 -1
  108. package/build/core/types/transport.js +5 -0
  109. package/build/core/types/transport.js.map +1 -1
  110. package/build/domains/admin/adminConfiguredServerService.d.ts +275 -0
  111. package/build/domains/admin/adminConfiguredServerService.d.ts.map +1 -0
  112. package/build/domains/admin/adminConfiguredServerService.js +1926 -0
  113. package/build/domains/admin/adminConfiguredServerService.js.map +1 -0
  114. package/build/domains/admin/adminConnectivityChecker.d.ts +7 -0
  115. package/build/domains/admin/adminConnectivityChecker.d.ts.map +1 -0
  116. package/build/domains/admin/adminConnectivityChecker.js +42 -0
  117. package/build/domains/admin/adminConnectivityChecker.js.map +1 -0
  118. package/build/domains/admin/adminDomain.d.ts +29 -0
  119. package/build/domains/admin/adminDomain.d.ts.map +1 -0
  120. package/build/domains/admin/adminDomain.js +39 -0
  121. package/build/domains/admin/adminDomain.js.map +1 -0
  122. package/build/domains/admin/adminIdentityService.d.ts +75 -0
  123. package/build/domains/admin/adminIdentityService.d.ts.map +1 -0
  124. package/build/domains/admin/adminIdentityService.js +321 -0
  125. package/build/domains/admin/adminIdentityService.js.map +1 -0
  126. package/build/domains/admin/adminOperationService.d.ts +202 -0
  127. package/build/domains/admin/adminOperationService.d.ts.map +1 -0
  128. package/build/domains/admin/adminOperationService.js +724 -0
  129. package/build/domains/admin/adminOperationService.js.map +1 -0
  130. package/build/domains/admin/adminPresetService.d.ts +140 -0
  131. package/build/domains/admin/adminPresetService.d.ts.map +1 -0
  132. package/build/domains/admin/adminPresetService.js +248 -0
  133. package/build/domains/admin/adminPresetService.js.map +1 -0
  134. package/build/domains/admin/runtimeScopeAdminLock.d.ts +22 -0
  135. package/build/domains/admin/runtimeScopeAdminLock.d.ts.map +1 -0
  136. package/build/domains/admin/runtimeScopeAdminLock.js +121 -0
  137. package/build/domains/admin/runtimeScopeAdminLock.js.map +1 -0
  138. package/build/domains/config-change/configChange.d.ts +6 -1
  139. package/build/domains/config-change/configChange.d.ts.map +1 -1
  140. package/build/domains/config-change/configChange.js +344 -0
  141. package/build/domains/config-change/configChange.js.map +1 -1
  142. package/build/domains/config-change/types.d.ts +18 -3
  143. package/build/domains/config-change/types.d.ts.map +1 -1
  144. package/build/domains/preset/manager/presetManager.d.ts +1 -0
  145. package/build/domains/preset/manager/presetManager.d.ts.map +1 -1
  146. package/build/domains/preset/manager/presetManager.js +3 -0
  147. package/build/domains/preset/manager/presetManager.js.map +1 -1
  148. package/build/domains/preset/tagAuthoring.d.ts +10 -0
  149. package/build/domains/preset/tagAuthoring.d.ts.map +1 -0
  150. package/build/domains/preset/tagAuthoring.js +94 -0
  151. package/build/domains/preset/tagAuthoring.js.map +1 -0
  152. package/build/domains/runtime-targets/runtimeIdentityVerification.d.ts +51 -0
  153. package/build/domains/runtime-targets/runtimeIdentityVerification.d.ts.map +1 -0
  154. package/build/domains/runtime-targets/runtimeIdentityVerification.js +258 -0
  155. package/build/domains/runtime-targets/runtimeIdentityVerification.js.map +1 -0
  156. package/build/domains/runtime-targets/runtimeTargetStore.d.ts +222 -0
  157. package/build/domains/runtime-targets/runtimeTargetStore.d.ts.map +1 -0
  158. package/build/domains/runtime-targets/runtimeTargetStore.js +1456 -0
  159. package/build/domains/runtime-targets/runtimeTargetStore.js.map +1 -0
  160. package/build/index.d.ts.map +1 -1
  161. package/build/index.js +7 -1
  162. package/build/index.js.map +1 -1
  163. package/build/transport/http/routes/adminRoutes.d.ts +34 -0
  164. package/build/transport/http/routes/adminRoutes.d.ts.map +1 -0
  165. package/build/transport/http/routes/adminRoutes.js +1217 -0
  166. package/build/transport/http/routes/adminRoutes.js.map +1 -0
  167. package/build/transport/http/routes/oauthRoutes.d.ts +2 -0
  168. package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
  169. package/build/transport/http/routes/oauthRoutes.js +5 -185
  170. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  171. package/build/transport/http/routes/runtimeIdentityRoutes.d.ts +7 -0
  172. package/build/transport/http/routes/runtimeIdentityRoutes.d.ts.map +1 -0
  173. package/build/transport/http/routes/runtimeIdentityRoutes.js +9 -0
  174. package/build/transport/http/routes/runtimeIdentityRoutes.js.map +1 -0
  175. package/build/transport/http/server.d.ts +3 -0
  176. package/build/transport/http/server.d.ts.map +1 -1
  177. package/build/transport/http/server.js +92 -3
  178. package/build/transport/http/server.js.map +1 -1
  179. package/build/utils/validation/urlDetection.d.ts +13 -2
  180. package/build/utils/validation/urlDetection.d.ts.map +1 -1
  181. package/build/utils/validation/urlDetection.js +37 -6
  182. package/build/utils/validation/urlDetection.js.map +1 -1
  183. package/package.json +22 -9
@@ -0,0 +1,321 @@
1
+ import { createHash, randomBytes, randomUUID, scrypt as scryptCallback, scryptSync, timingSafeEqual, } from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { promisify } from 'node:util';
5
+ const scrypt = promisify(scryptCallback);
6
+ const ADMIN_STATE_DIR = 'admin';
7
+ const ADMIN_STATE_VERSION = 1;
8
+ const PASSWORD_KEY_LENGTH = 64;
9
+ const PASSWORD_SALT_LENGTH = 16;
10
+ const SESSION_TOKEN_BYTES = 32;
11
+ const CSRF_TOKEN_BYTES = 32;
12
+ const DEFAULT_SESSION_TTL_MS = 24 * 60 * 60 * 1000;
13
+ export const ADMIN_SESSION_COOKIE_NAME = '1mcp_admin_session';
14
+ export class AdminIdentityError extends Error {
15
+ code;
16
+ constructor(code, message) {
17
+ super(message);
18
+ this.code = code;
19
+ this.name = 'AdminIdentityError';
20
+ }
21
+ }
22
+ export class AdminIdentityService {
23
+ runtimeScopeId;
24
+ storageDir;
25
+ now;
26
+ sessionTtlMs;
27
+ createId;
28
+ randomToken;
29
+ constructor(options) {
30
+ this.runtimeScopeId = options.runtimeScopeId;
31
+ this.storageDir = path.join(options.storageDir, ADMIN_STATE_DIR);
32
+ this.now = options.now ?? (() => new Date());
33
+ this.sessionTtlMs = options.sessionTtlMs ?? DEFAULT_SESSION_TTL_MS;
34
+ this.createId = options.createId ?? randomUUID;
35
+ this.randomToken = options.randomToken ?? ((byteLength) => randomBytes(byteLength).toString('base64url'));
36
+ }
37
+ hasAdminAccount() {
38
+ return this.readState().accounts.length > 0;
39
+ }
40
+ async bootstrapFirstAdmin(input) {
41
+ const state = this.readState();
42
+ if (state.accounts.length > 0) {
43
+ throw new AdminIdentityError('admin_account_exists', 'An admin account already exists');
44
+ }
45
+ const now = this.now().toISOString();
46
+ const username = this.normalizeUsername(input.username);
47
+ const passwordHash = await this.hashPassword(input.password);
48
+ const latestState = this.readState();
49
+ if (latestState.accounts.length > 0) {
50
+ throw new AdminIdentityError('admin_account_exists', 'An admin account already exists');
51
+ }
52
+ const account = {
53
+ id: `admin_acct_${this.createId()}`,
54
+ runtimeScopeId: this.runtimeScopeId,
55
+ username,
56
+ passwordHash,
57
+ role: 'full-admin',
58
+ disabled: false,
59
+ createdAt: now,
60
+ updatedAt: now,
61
+ };
62
+ this.writeState({ ...latestState, accounts: [account] });
63
+ return toPublicAccount(account);
64
+ }
65
+ bootstrapFirstAdminFromEnvironment(env = process.env) {
66
+ const username = env.ONE_MCP_ADMIN_USERNAME;
67
+ const password = env.ONE_MCP_ADMIN_PASSWORD;
68
+ if (!username && !password) {
69
+ return null;
70
+ }
71
+ if (!username || !password) {
72
+ throw new AdminIdentityError('admin_bootstrap_env_incomplete', 'Both ONE_MCP_ADMIN_USERNAME and ONE_MCP_ADMIN_PASSWORD are required for admin bootstrap');
73
+ }
74
+ const state = this.readState();
75
+ if (state.accounts.length > 0) {
76
+ return null;
77
+ }
78
+ const now = this.now().toISOString();
79
+ const account = {
80
+ id: `admin_acct_${this.createId()}`,
81
+ runtimeScopeId: this.runtimeScopeId,
82
+ username: this.normalizeUsername(username),
83
+ passwordHash: this.hashPasswordSync(password),
84
+ role: 'full-admin',
85
+ disabled: false,
86
+ createdAt: now,
87
+ updatedAt: now,
88
+ };
89
+ this.writeState({ ...state, accounts: [account] });
90
+ return toPublicAccount(account);
91
+ }
92
+ async login(input) {
93
+ const state = this.readState();
94
+ const username = this.normalizeUsername(input.username);
95
+ const account = state.accounts.find((candidate) => candidate.username === username && !candidate.disabled);
96
+ if (!account || !(await this.verifyPassword(input.password, account.passwordHash))) {
97
+ throw new AdminIdentityError('invalid_credentials', 'Invalid admin credentials');
98
+ }
99
+ const latestState = this.readState();
100
+ const latestAccount = latestState.accounts.find((candidate) => candidate.id === account.id &&
101
+ candidate.runtimeScopeId === this.runtimeScopeId &&
102
+ candidate.username === username &&
103
+ !candidate.disabled &&
104
+ candidate.passwordHash === account.passwordHash);
105
+ if (!latestAccount) {
106
+ throw new AdminIdentityError('invalid_credentials', 'Invalid admin credentials');
107
+ }
108
+ const sessionToken = `admin_sess_${this.randomToken(SESSION_TOKEN_BYTES)}`;
109
+ const csrfToken = `admin_csrf_${this.randomToken(CSRF_TOKEN_BYTES)}`;
110
+ const now = this.now();
111
+ const session = {
112
+ id: `admin_session_${this.createId()}`,
113
+ runtimeScopeId: this.runtimeScopeId,
114
+ accountId: latestAccount.id,
115
+ tokenHash: hashSecret(sessionToken),
116
+ csrfToken,
117
+ createdAt: now.toISOString(),
118
+ expiresAt: new Date(now.getTime() + this.sessionTtlMs).toISOString(),
119
+ };
120
+ this.writeState({ ...latestState, sessions: [...latestState.sessions, session] });
121
+ return {
122
+ account: toPublicAccount(latestAccount),
123
+ sessionToken,
124
+ csrfToken,
125
+ expiresAt: session.expiresAt,
126
+ };
127
+ }
128
+ validateSession(sessionToken) {
129
+ if (!sessionToken) {
130
+ return null;
131
+ }
132
+ const state = this.readState();
133
+ const session = this.findValidSession(state, sessionToken);
134
+ if (!session) {
135
+ return null;
136
+ }
137
+ const account = state.accounts.find((candidate) => candidate.id === session.accountId && candidate.runtimeScopeId === this.runtimeScopeId);
138
+ if (!account || account.disabled) {
139
+ return null;
140
+ }
141
+ return {
142
+ account: toPublicAccount(account),
143
+ csrfToken: session.csrfToken,
144
+ expiresAt: session.expiresAt,
145
+ };
146
+ }
147
+ validateCsrf(sessionToken, csrfToken) {
148
+ if (!sessionToken || !csrfToken || Array.isArray(csrfToken)) {
149
+ return false;
150
+ }
151
+ const state = this.readState();
152
+ const session = this.findValidSession(state, sessionToken);
153
+ if (!session) {
154
+ return false;
155
+ }
156
+ return safeEqual(csrfToken, session.csrfToken);
157
+ }
158
+ revokeSession(sessionToken) {
159
+ if (!sessionToken) {
160
+ return;
161
+ }
162
+ const state = this.readState();
163
+ const tokenHash = hashSecret(sessionToken);
164
+ const revokedAt = this.now().toISOString();
165
+ this.writeState({
166
+ ...state,
167
+ sessions: state.sessions.map((session) => safeEqual(session.tokenHash, tokenHash) && !session.revokedAt ? { ...session, revokedAt } : session),
168
+ });
169
+ }
170
+ revokeAllSessions() {
171
+ const state = this.readState();
172
+ const revokedAt = this.now().toISOString();
173
+ this.writeState({
174
+ ...state,
175
+ sessions: state.sessions.map((session) => (session.revokedAt ? session : { ...session, revokedAt })),
176
+ });
177
+ }
178
+ async changePassword(accountId, password) {
179
+ const state = this.readState();
180
+ const account = this.requireAccount(state, accountId);
181
+ const passwordHash = await this.hashPassword(password);
182
+ const latestState = this.readState();
183
+ const latestAccount = this.requireAccount(latestState, account.id);
184
+ const updatedAccount = {
185
+ ...latestAccount,
186
+ passwordHash,
187
+ updatedAt: this.now().toISOString(),
188
+ };
189
+ this.writeState({
190
+ ...latestState,
191
+ accounts: latestState.accounts.map((candidate) => (candidate.id === account.id ? updatedAccount : candidate)),
192
+ sessions: this.revokeSessionsForAccount(latestState.sessions, account.id),
193
+ });
194
+ return toPublicAccount(updatedAccount);
195
+ }
196
+ disableAccount(accountId) {
197
+ const state = this.readState();
198
+ const account = this.requireAccount(state, accountId);
199
+ const updatedAccount = {
200
+ ...account,
201
+ disabled: true,
202
+ updatedAt: this.now().toISOString(),
203
+ };
204
+ this.writeState({
205
+ ...state,
206
+ accounts: state.accounts.map((candidate) => (candidate.id === account.id ? updatedAccount : candidate)),
207
+ sessions: this.revokeSessionsForAccount(state.sessions, account.id),
208
+ });
209
+ return toPublicAccount(updatedAccount);
210
+ }
211
+ deleteAccount(accountId) {
212
+ const state = this.readState();
213
+ const account = this.requireAccount(state, accountId);
214
+ this.writeState({
215
+ ...state,
216
+ accounts: state.accounts.filter((candidate) => candidate.id !== account.id),
217
+ sessions: this.revokeSessionsForAccount(state.sessions, account.id),
218
+ });
219
+ }
220
+ findValidSession(state, sessionToken) {
221
+ const tokenHash = hashSecret(sessionToken);
222
+ const session = state.sessions.find((candidate) => candidate.runtimeScopeId === this.runtimeScopeId &&
223
+ !candidate.revokedAt &&
224
+ new Date(candidate.expiresAt).getTime() > this.now().getTime() &&
225
+ safeEqual(candidate.tokenHash, tokenHash));
226
+ return session ?? null;
227
+ }
228
+ requireAccount(state, accountId) {
229
+ const account = state.accounts.find((candidate) => candidate.id === accountId && candidate.runtimeScopeId === this.runtimeScopeId);
230
+ if (!account) {
231
+ throw new AdminIdentityError('admin_account_not_found', 'Admin account not found');
232
+ }
233
+ return account;
234
+ }
235
+ revokeSessionsForAccount(sessions, accountId) {
236
+ const revokedAt = this.now().toISOString();
237
+ return sessions.map((session) => session.accountId === accountId && !session.revokedAt ? { ...session, revokedAt } : session);
238
+ }
239
+ normalizeUsername(username) {
240
+ const normalized = username.trim();
241
+ if (!normalized) {
242
+ throw new AdminIdentityError('invalid_username', 'Admin username is required');
243
+ }
244
+ return normalized;
245
+ }
246
+ async hashPassword(password) {
247
+ this.validatePassword(password);
248
+ const salt = randomBytes(PASSWORD_SALT_LENGTH).toString('base64url');
249
+ const key = (await scrypt(password, salt, PASSWORD_KEY_LENGTH));
250
+ return `scrypt:v1:${salt}:${key.toString('base64url')}`;
251
+ }
252
+ hashPasswordSync(password) {
253
+ this.validatePassword(password);
254
+ const salt = randomBytes(PASSWORD_SALT_LENGTH).toString('base64url');
255
+ const key = scryptSync(password, salt, PASSWORD_KEY_LENGTH);
256
+ return `scrypt:v1:${salt}:${key.toString('base64url')}`;
257
+ }
258
+ async verifyPassword(password, passwordHash) {
259
+ const [algorithm, version, salt, encodedHash] = passwordHash.split(':');
260
+ if (algorithm !== 'scrypt' || version !== 'v1' || !salt || !encodedHash) {
261
+ return false;
262
+ }
263
+ const expected = Buffer.from(encodedHash, 'base64url');
264
+ const actual = (await scrypt(password, salt, expected.length));
265
+ return expected.length === actual.length && timingSafeEqual(expected, actual);
266
+ }
267
+ validatePassword(password) {
268
+ if (password.length < 12) {
269
+ throw new AdminIdentityError('weak_password', 'Admin password must be at least 12 characters');
270
+ }
271
+ }
272
+ readState() {
273
+ const filePath = this.stateFilePath();
274
+ if (!fs.existsSync(filePath)) {
275
+ return this.emptyState();
276
+ }
277
+ const parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));
278
+ if (parsed.runtimeScopeId !== this.runtimeScopeId) {
279
+ throw new AdminIdentityError('runtime_scope_mismatch', 'Admin state belongs to a different runtime scope');
280
+ }
281
+ return parsed;
282
+ }
283
+ writeState(state) {
284
+ fs.mkdirSync(this.storageDir, { recursive: true });
285
+ const filePath = this.stateFilePath();
286
+ const tempPath = `${filePath}.${process.pid}.tmp`;
287
+ fs.writeFileSync(tempPath, JSON.stringify(state, null, 2), { encoding: 'utf8', mode: 0o600 });
288
+ fs.renameSync(tempPath, filePath);
289
+ }
290
+ emptyState() {
291
+ return {
292
+ schemaVersion: ADMIN_STATE_VERSION,
293
+ runtimeScopeId: this.runtimeScopeId,
294
+ accounts: [],
295
+ sessions: [],
296
+ };
297
+ }
298
+ stateFilePath() {
299
+ return path.join(this.storageDir, `admin-state-${hashSecret(this.runtimeScopeId).slice(0, 24)}.json`);
300
+ }
301
+ }
302
+ function toPublicAccount(account) {
303
+ return {
304
+ id: account.id,
305
+ runtimeScopeId: account.runtimeScopeId,
306
+ username: account.username,
307
+ role: account.role,
308
+ disabled: account.disabled,
309
+ createdAt: account.createdAt,
310
+ updatedAt: account.updatedAt,
311
+ };
312
+ }
313
+ function hashSecret(secret) {
314
+ return createHash('sha256').update(secret).digest('base64url');
315
+ }
316
+ function safeEqual(a, b) {
317
+ const left = Buffer.from(a);
318
+ const right = Buffer.from(b);
319
+ return left.length === right.length && timingSafeEqual(left, right);
320
+ }
321
+ //# sourceMappingURL=adminIdentityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminIdentityService.js","sourceRoot":"","sources":["../../../src/domains/admin/adminIdentityService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ import type { AdminMutationAvailability } from './runtimeScopeAdminLock.js';
2
+ type AdminOperationOrigin = 'browser' | 'cli';
3
+ export interface AdminOperationContext {
4
+ actor: {
5
+ type: 'admin_account' | 'admin_session';
6
+ accountId: string;
7
+ sessionId?: string;
8
+ };
9
+ origin: AdminOperationOrigin;
10
+ target: AdminOperationTarget;
11
+ runtimeIdentity: {
12
+ runtimeScopeId: string;
13
+ runtimeVersion?: string;
14
+ };
15
+ request: {
16
+ requestId: string;
17
+ jsonMode?: boolean;
18
+ };
19
+ idempotencyKey?: string;
20
+ requestFingerprint?: string;
21
+ deadline?: string;
22
+ confirmationFacts?: Record<string, unknown>;
23
+ }
24
+ export interface AdminOperationTarget {
25
+ type: string;
26
+ id?: string;
27
+ }
28
+ export interface AdminConfirmationRequirement {
29
+ code: string;
30
+ expected?: string | boolean | number;
31
+ target?: AdminOperationTarget;
32
+ }
33
+ export interface AdminAuditFact {
34
+ timestamp: string;
35
+ operationId: string;
36
+ operationName: string;
37
+ result: 'completed' | 'failed';
38
+ actor: {
39
+ type: 'admin_account' | 'admin_session';
40
+ accountIdHash: string;
41
+ sessionIdHash?: string;
42
+ };
43
+ origin: AdminOperationOrigin;
44
+ target: AdminOperationTarget;
45
+ request: {
46
+ requestId: string;
47
+ };
48
+ confirmationFacts?: Record<string, unknown>;
49
+ }
50
+ interface AdminOperationServiceOptions {
51
+ runtimeScopeId: string;
52
+ storageDir: string;
53
+ mutationAvailability?: AdminMutationAvailability;
54
+ now?: () => Date;
55
+ completedRetentionMs?: number;
56
+ auditRetentionMs?: number;
57
+ inFlightWaitMs?: number;
58
+ createOperationId?: () => string;
59
+ }
60
+ interface ExecuteMutationBase {
61
+ context: AdminOperationContext;
62
+ operationName: string;
63
+ }
64
+ interface PreparedMutation<T> {
65
+ confirmationRequirements?: AdminConfirmationRequirement[];
66
+ run: (context: AdminOperationContext) => Promise<T>;
67
+ }
68
+ type ExecuteMutationInput<T> = ExecuteMutationBase & (PreparedMutation<T> | {
69
+ prepare: () => Promise<PreparedMutation<T>>;
70
+ });
71
+ interface ExecuteReadOnlyInput<T> {
72
+ context: AdminOperationContext;
73
+ operationName: string;
74
+ run: (context: AdminOperationContext) => Promise<T>;
75
+ }
76
+ interface ExecuteDryRunInput<T> {
77
+ context: AdminOperationContext;
78
+ operationName: string;
79
+ run: (context: AdminOperationContext) => Promise<T>;
80
+ }
81
+ interface RecentAuditOptions {
82
+ limit?: number;
83
+ }
84
+ export type AdminOperationResult<T = unknown> = {
85
+ ok: true;
86
+ status: 'completed';
87
+ operationId: string;
88
+ operationName: string;
89
+ result: T;
90
+ replayed: boolean;
91
+ } | AdminOperationRecoveryResult;
92
+ export type AdminOperationRecoveryResult = {
93
+ ok: false;
94
+ status: 'idempotency_key_required';
95
+ code: 'idempotency_key_required';
96
+ retryable: false;
97
+ operationName: string;
98
+ } | {
99
+ ok: false;
100
+ status: 'idempotency_conflict';
101
+ code: 'idempotency_conflict';
102
+ retryable: false;
103
+ operationName: string;
104
+ } | {
105
+ ok: false;
106
+ status: 'operation_in_progress';
107
+ code: 'operation_in_progress';
108
+ retryable: true;
109
+ operationName: string;
110
+ retryAfterMs: number;
111
+ } | {
112
+ ok: false;
113
+ status: 'operation_state_unknown';
114
+ code: 'operation_state_unknown';
115
+ retryable: false;
116
+ operationName: string;
117
+ target: AdminOperationTarget;
118
+ reservedAt: string;
119
+ recovery: 'inspect_current_state_and_retry_with_new_idempotency_key';
120
+ } | {
121
+ ok: false;
122
+ status: 'mutation_confirmation_required';
123
+ code: 'mutation_confirmation_required';
124
+ retryable: false;
125
+ operationName: string;
126
+ confirmationRequirements: AdminConfirmationRequirement[];
127
+ } | {
128
+ ok: false;
129
+ status: 'mutation_failed';
130
+ code: 'mutation_failed';
131
+ retryable: false;
132
+ operationName: string;
133
+ error: string;
134
+ } | {
135
+ ok: false;
136
+ status: 'admin_operation_journal_unavailable';
137
+ code: 'admin_operation_journal_unavailable';
138
+ retryable: false;
139
+ operationName: string;
140
+ } | {
141
+ ok: false;
142
+ status: 'runtime_scope_mismatch';
143
+ code: 'runtime_scope_mismatch';
144
+ retryable: false;
145
+ operationName: string;
146
+ } | {
147
+ ok: false;
148
+ status: 'runtime_scope_locked';
149
+ code: 'runtime_scope_locked';
150
+ retryable: true;
151
+ operationName: string;
152
+ reason: 'writer_lock_unavailable';
153
+ };
154
+ export declare class AdminOperationService {
155
+ private readonly runtimeScopeId;
156
+ private readonly storageDir;
157
+ private readonly now;
158
+ private readonly completedRetentionMs;
159
+ private readonly auditRetentionMs;
160
+ private readonly inFlightWaitMs;
161
+ private readonly createOperationId;
162
+ private readonly mutationAvailability;
163
+ private readonly idempotency;
164
+ private readonly recentAuditFacts;
165
+ private readonly mutationState;
166
+ constructor(options: AdminOperationServiceOptions);
167
+ executeReadOnly<T>(input: ExecuteReadOnlyInput<T>): Promise<AdminOperationResult<T>>;
168
+ executeDryRun<T>(input: ExecuteDryRunInput<T>): Promise<AdminOperationResult<T>>;
169
+ getRecentAuditFacts(options?: RecentAuditOptions): AdminAuditFact[];
170
+ executeMutation<T>(input: ExecuteMutationInput<T>): Promise<AdminOperationResult<T>>;
171
+ private prepareAndExecuteMutation;
172
+ private waitForActivePreparation;
173
+ private validateMutationAdmission;
174
+ private validateRuntimeScope;
175
+ private runReservedMutation;
176
+ private recordMutationFailure;
177
+ private enqueueMutation;
178
+ private waitForActiveMutation;
179
+ private retryWaitMs;
180
+ private operationInProgress;
181
+ private journalUnavailableResult;
182
+ private validateConfirmations;
183
+ private replayJournal;
184
+ private applyJournalRecord;
185
+ private entryFromRecord;
186
+ private markStateUnknown;
187
+ private markStateUnknownResult;
188
+ private stateUnknownResult;
189
+ private reservedRecord;
190
+ private appendAuditRecord;
191
+ private appendJournalRecord;
192
+ private scopedKeyHash;
193
+ private isExpired;
194
+ private isAuditExpired;
195
+ private isExpiredTerminal;
196
+ private compactJournal;
197
+ private shouldRetainJournalRecord;
198
+ private readJournalRecords;
199
+ private journalFilePath;
200
+ }
201
+ export {};
202
+ //# sourceMappingURL=adminOperationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminOperationService.d.ts","sourceRoot":"","sources":["../../../src/domains/admin/adminOperationService.ts"],"names":[],"mappings":"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"}