@rubytech/create-maxy-code 0.1.353 → 0.1.355
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/dist/__tests__/preflight-port-classifier.test.js +52 -0
- package/dist/preflight-port-classifier.js +31 -2
- package/package.json +1 -1
- package/payload/platform/lib/admin-access-password/__tests__/index.test.ts +96 -14
- package/payload/platform/lib/admin-access-password/dist/index.d.ts +20 -4
- package/payload/platform/lib/admin-access-password/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/admin-access-password/dist/index.js +43 -4
- package/payload/platform/lib/admin-access-password/dist/index.js.map +1 -1
- package/payload/platform/lib/admin-access-password/src/index.ts +67 -4
- package/payload/platform/lib/admins-write/__tests__/index.test.ts +182 -0
- package/payload/platform/lib/admins-write/dist/index.d.ts +65 -11
- package/payload/platform/lib/admins-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/admins-write/dist/index.js +93 -31
- package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
- package/payload/platform/lib/admins-write/src/index.ts +133 -36
- package/payload/platform/plugins/admin/PLUGIN.md +4 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +15 -3
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +16 -1
- package/payload/platform/plugins/docs/references/admin-session.md +1 -1
- package/payload/platform/plugins/docs/references/troubleshooting.md +15 -0
- package/payload/platform/scripts/check-no-esm-require.mjs +4 -0
- package/payload/server/{chunk-QAKVFSEJ.js → chunk-7GNXBVGY.js} +38 -11
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/AdminLoginScreens-4I5CdIWl.js +1 -0
- package/payload/server/public/assets/{AdminShell-CC-CuN6Y.js → AdminShell-Bc9F7X_N.js} +1 -1
- package/payload/server/public/assets/{Checkbox-sQBc9xSy.js → Checkbox-DoQV18Ow.js} +1 -1
- package/payload/server/public/assets/OperatorConversations-BJY9FZbr.js +9 -0
- package/payload/server/public/assets/OperatorConversations-C1I78hON.css +1 -0
- package/payload/server/public/assets/{admin-qW6jM6l0.js → admin-DLsMA09F.js} +1 -1
- package/payload/server/public/assets/{browser-BsW6KaxZ.js → browser-w6rY_KAO.js} +1 -1
- package/payload/server/public/assets/{calendar-BPAiN1cL.js → calendar-CvEdDFYd.js} +1 -1
- package/payload/server/public/assets/chat-BlOWMUVI.js +1 -0
- package/payload/server/public/assets/{data-D_cR_NCZ.js → data-p3T_EZFq.js} +1 -1
- package/payload/server/public/assets/{graph-CmpAy2WP.js → graph-BrwfYOr3.js} +1 -1
- package/payload/server/public/assets/{graph-labels-C0SLq_VP.js → graph-labels-BNZ8u8TE.js} +1 -1
- package/payload/server/public/assets/{operator-CrjtJcEY.js → operator-BNY1P_mH.js} +1 -1
- package/payload/server/public/assets/{page-Cf3fVDSo.js → page-CtygoIXt.js} +3 -3
- package/payload/server/public/assets/{public-BkNtvSYp.js → public-CDzw6yjH.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +4 -4
- package/payload/server/public/chat.html +5 -5
- package/payload/server/public/data.html +4 -4
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/operator.html +7 -7
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +1289 -1150
- package/payload/server/public/assets/AdminLoginScreens-CzdOQKyO.js +0 -1
- package/payload/server/public/assets/OperatorConversations-CA_2c3sp.js +0 -9
- package/payload/server/public/assets/OperatorConversations-DPVKGsRS.css +0 -1
- package/payload/server/public/assets/chat-DVD9yoVL.js +0 -1
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { mkdtempSync, writeFileSync, readFileSync, existsSync, mkdirSync } from 'node:fs'
|
|
3
|
+
import { tmpdir } from 'node:os'
|
|
4
|
+
import { dirname, join } from 'node:path'
|
|
5
|
+
import {
|
|
6
|
+
writeAdminEntry,
|
|
7
|
+
removeAdminFromAccount,
|
|
8
|
+
computeAdminStoreDivergence,
|
|
9
|
+
logUsersAudit,
|
|
10
|
+
formatAuditRowIds,
|
|
11
|
+
} from '../src/index'
|
|
12
|
+
|
|
13
|
+
interface Fixture {
|
|
14
|
+
usersFile: string
|
|
15
|
+
accountDir: string
|
|
16
|
+
accountsDir: string
|
|
17
|
+
logFile: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** One account under accountsDir/<id>/account.json plus the persistent users.json. */
|
|
21
|
+
function fixture(opts: {
|
|
22
|
+
users: Array<{ userId: string; pin?: string }>
|
|
23
|
+
admins: Array<{ userId: string; role: 'owner' | 'admin' }>
|
|
24
|
+
accountId?: string
|
|
25
|
+
}): Fixture {
|
|
26
|
+
const root = mkdtempSync(join(tmpdir(), 'admw-'))
|
|
27
|
+
const accountsDir = join(root, 'accounts')
|
|
28
|
+
const accountId = opts.accountId ?? 'acct0001'
|
|
29
|
+
const accountDir = join(accountsDir, accountId)
|
|
30
|
+
mkdirSync(accountDir, { recursive: true })
|
|
31
|
+
const usersFile = join(root, 'users.json')
|
|
32
|
+
writeFileSync(usersFile, JSON.stringify(opts.users.map(u => ({ pin: 'p', ...u })), null, 2) + '\n')
|
|
33
|
+
writeFileSync(join(accountDir, 'account.json'), JSON.stringify({ accountId, admins: opts.admins }, null, 2) + '\n')
|
|
34
|
+
return { usersFile, accountDir, accountsDir, logFile: join(root, 'users-audit.log') }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function readAudit(logFile: string): string[] {
|
|
38
|
+
if (!existsSync(logFile)) return []
|
|
39
|
+
return readFileSync(logFile, 'utf-8').trim().split('\n').filter(Boolean)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function accountAdmins(accountDir: string): string[] {
|
|
43
|
+
const cfg = JSON.parse(readFileSync(join(accountDir, 'account.json'), 'utf-8'))
|
|
44
|
+
return (cfg.admins as Array<{ userId: string }>).map(a => a.userId)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
describe('admins-write — users-audit emission', () => {
|
|
48
|
+
it('writeAdminEntry on a NEW userId emits action=add field=row with the grown row-set', () => {
|
|
49
|
+
const f = fixture({ users: [{ userId: 'aaaaaaaa-1' }], admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }] })
|
|
50
|
+
writeAdminEntry({
|
|
51
|
+
userId: 'bbbbbbbb-2', pin: 'hash', role: 'admin',
|
|
52
|
+
usersFile: f.usersFile, accountDir: f.accountDir, caller: 'admin-add',
|
|
53
|
+
audit: { actor: 'aaaaaaaa-1', logFile: f.logFile },
|
|
54
|
+
})
|
|
55
|
+
const lines = readAudit(f.logFile)
|
|
56
|
+
expect(lines).toHaveLength(1)
|
|
57
|
+
expect(lines[0]).toContain('action=add')
|
|
58
|
+
expect(lines[0]).toContain('field=row')
|
|
59
|
+
expect(lines[0]).toContain('actor=aaaaaaaa')
|
|
60
|
+
expect(lines[0]).toContain('rowsBefore=aaaaaaaa')
|
|
61
|
+
expect(lines[0]).toContain('rowsAfter=aaaaaaaa,bbbbbbbb')
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
it('writeAdminEntry on an EXISTING userId emits action=set-pin field=pin with an unchanged row-set', () => {
|
|
65
|
+
const f = fixture({
|
|
66
|
+
users: [{ userId: 'aaaaaaaa-1' }, { userId: 'bbbbbbbb-2' }],
|
|
67
|
+
admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }, { userId: 'bbbbbbbb-2', role: 'admin' }],
|
|
68
|
+
})
|
|
69
|
+
writeAdminEntry({
|
|
70
|
+
userId: 'bbbbbbbb-2', pin: 'newhash', role: 'admin',
|
|
71
|
+
usersFile: f.usersFile, accountDir: f.accountDir, caller: 'admin-update-pin',
|
|
72
|
+
audit: { actor: 'bbbbbbbb-2', session: 'dddddddd-7', logFile: f.logFile },
|
|
73
|
+
})
|
|
74
|
+
const lines = readAudit(f.logFile)
|
|
75
|
+
expect(lines).toHaveLength(1)
|
|
76
|
+
expect(lines[0]).toContain('action=set-pin')
|
|
77
|
+
expect(lines[0]).toContain('field=pin')
|
|
78
|
+
expect(lines[0]).toContain('session=dddddddd')
|
|
79
|
+
expect(lines[0]).toContain('rowsBefore=aaaaaaaa,bbbbbbbb')
|
|
80
|
+
expect(lines[0]).toContain('rowsAfter=aaaaaaaa,bbbbbbbb')
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('removeAdminFromAccount on a present admin emits action=remove field=row on the account set', () => {
|
|
84
|
+
const f = fixture({
|
|
85
|
+
users: [{ userId: 'aaaaaaaa-1' }, { userId: 'bbbbbbbb-2' }],
|
|
86
|
+
admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }, { userId: 'bbbbbbbb-2', role: 'admin' }],
|
|
87
|
+
})
|
|
88
|
+
removeAdminFromAccount({
|
|
89
|
+
userId: 'bbbbbbbb-2', accountDir: f.accountDir, caller: 'admin-remove',
|
|
90
|
+
audit: { actor: 'aaaaaaaa-1', logFile: f.logFile },
|
|
91
|
+
})
|
|
92
|
+
const lines = readAudit(f.logFile)
|
|
93
|
+
expect(lines).toHaveLength(1)
|
|
94
|
+
expect(lines[0]).toContain('action=remove')
|
|
95
|
+
expect(lines[0]).toContain('field=row')
|
|
96
|
+
expect(lines[0]).toContain('rowsBefore=aaaaaaaa,bbbbbbbb')
|
|
97
|
+
expect(lines[0]).toContain('rowsAfter=aaaaaaaa')
|
|
98
|
+
expect(accountAdmins(f.accountDir)).toEqual(['aaaaaaaa-1'])
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it('removeAdminFromAccount on an absent admin is a noop and emits nothing', () => {
|
|
102
|
+
const f = fixture({ users: [{ userId: 'aaaaaaaa-1' }], admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }] })
|
|
103
|
+
removeAdminFromAccount({
|
|
104
|
+
userId: 'zzzzzzzz-9', accountDir: f.accountDir, caller: 'admin-remove',
|
|
105
|
+
audit: { actor: 'aaaaaaaa-1', logFile: f.logFile },
|
|
106
|
+
})
|
|
107
|
+
expect(readAudit(f.logFile)).toHaveLength(0)
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
describe('admins-write — public audit helper (for direct users.json writers)', () => {
|
|
112
|
+
it('formatAuditRowIds joins 8-char short ids', () => {
|
|
113
|
+
expect(formatAuditRowIds(['aaaaaaaa-1', 'bbbbbbbb-2'])).toBe('aaaaaaaa,bbbbbbbb')
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
it('logUsersAudit writes one canonical set-pin line', () => {
|
|
117
|
+
const root = mkdtempSync(join(tmpdir(), 'admwlog-'))
|
|
118
|
+
const logFile = join(root, 'users-audit.log')
|
|
119
|
+
logUsersAudit(
|
|
120
|
+
{ actor: 'cccccccc-9', session: 'dddddddd-7', logFile },
|
|
121
|
+
{ action: 'set-pin', field: 'pin', rowsBefore: 'aaaaaaaa', rowsAfter: 'aaaaaaaa' },
|
|
122
|
+
)
|
|
123
|
+
const lines = readAudit(logFile)
|
|
124
|
+
expect(lines).toHaveLength(1)
|
|
125
|
+
expect(lines[0]).toContain('action=set-pin')
|
|
126
|
+
expect(lines[0]).toContain('field=pin')
|
|
127
|
+
expect(lines[0]).toContain('actor=cccccccc')
|
|
128
|
+
expect(lines[0]).toContain('session=dddddddd')
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
describe('admins-write — computeAdminStoreDivergence', () => {
|
|
133
|
+
it('flags an admin in account.json with no users.json row (the incident shape)', () => {
|
|
134
|
+
const f = fixture({
|
|
135
|
+
users: [{ userId: 'aaaaaaaa-1' }],
|
|
136
|
+
admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }, { userId: 'bbbbbbbb-2', role: 'admin' }],
|
|
137
|
+
})
|
|
138
|
+
const r = computeAdminStoreDivergence({ usersFile: f.usersFile, accountsDir: f.accountsDir })
|
|
139
|
+
expect(r.divergences).toBe(1)
|
|
140
|
+
expect(r.accountWithoutUsers.map(x => x.userId)).toEqual(['bbbbbbbb-2'])
|
|
141
|
+
expect(r.usersWithoutAccount).toEqual([])
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
it('flags a users.json row no account.json references', () => {
|
|
145
|
+
const f = fixture({
|
|
146
|
+
users: [{ userId: 'aaaaaaaa-1' }, { userId: 'cccccccc-3' }],
|
|
147
|
+
admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }],
|
|
148
|
+
})
|
|
149
|
+
const r = computeAdminStoreDivergence({ usersFile: f.usersFile, accountsDir: f.accountsDir })
|
|
150
|
+
expect(r.divergences).toBe(1)
|
|
151
|
+
expect(r.usersWithoutAccount.map(x => x.userId)).toEqual(['cccccccc-3'])
|
|
152
|
+
expect(r.accountWithoutUsers).toEqual([])
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
it('clean parity → zero divergences', () => {
|
|
156
|
+
const f = fixture({
|
|
157
|
+
users: [{ userId: 'aaaaaaaa-1' }, { userId: 'bbbbbbbb-2' }],
|
|
158
|
+
admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }, { userId: 'bbbbbbbb-2', role: 'admin' }],
|
|
159
|
+
})
|
|
160
|
+
const r = computeAdminStoreDivergence({ usersFile: f.usersFile, accountsDir: f.accountsDir })
|
|
161
|
+
expect(r.divergences).toBe(0)
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
it('an audited remove of the diverging row clears the account-side mismatch', () => {
|
|
165
|
+
const f = fixture({
|
|
166
|
+
users: [{ userId: 'aaaaaaaa-1' }],
|
|
167
|
+
admins: [{ userId: 'aaaaaaaa-1', role: 'owner' }, { userId: 'bbbbbbbb-2', role: 'admin' }],
|
|
168
|
+
})
|
|
169
|
+
// account-without-users divergence present
|
|
170
|
+
expect(computeAdminStoreDivergence({ usersFile: f.usersFile, accountsDir: f.accountsDir }).divergences).toBe(1)
|
|
171
|
+
// audited delete of the orphan account row
|
|
172
|
+
removeAdminFromAccount({
|
|
173
|
+
userId: 'bbbbbbbb-2', accountDir: f.accountDir, caller: 'admin-remove',
|
|
174
|
+
audit: { actor: 'aaaaaaaa-1', logFile: f.logFile },
|
|
175
|
+
})
|
|
176
|
+
expect(readAudit(f.logFile)[0]).toContain('action=remove')
|
|
177
|
+
expect(readAudit(f.logFile)[0]).toContain('actor=aaaaaaaa')
|
|
178
|
+
// account no longer lists it → parity restored
|
|
179
|
+
expect(computeAdminStoreDivergence({ usersFile: f.usersFile, accountsDir: f.accountsDir }).divergences).toBe(0)
|
|
180
|
+
void dirname
|
|
181
|
+
})
|
|
182
|
+
})
|
|
@@ -2,6 +2,34 @@ export interface UserEntry {
|
|
|
2
2
|
userId: string;
|
|
3
3
|
pin: string;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* Identity + destination for one credential-store audit line. The writer is
|
|
7
|
+
* pure (it only knows the file paths); the caller is the only party that knows
|
|
8
|
+
* WHO is acting and WHERE the audit log lives, so it is threaded in. `actor` is
|
|
9
|
+
* an admin userId or a non-user sentinel (`onboarding` | `install` | `boot` |
|
|
10
|
+
* `unknown` when an MCP caller has no resolvable USER_ID); `session` is the
|
|
11
|
+
* spawning agent session (SESSION_NODE_ID) when one drove the write. `logFile`
|
|
12
|
+
* is the absolute path to the append-only users-audit log, distinct from
|
|
13
|
+
* server.log. Mirrored in platform/lib/admin-access-password.
|
|
14
|
+
*/
|
|
15
|
+
export interface AuditContext {
|
|
16
|
+
actor: string;
|
|
17
|
+
session?: string;
|
|
18
|
+
logFile: string;
|
|
19
|
+
}
|
|
20
|
+
/** Format a userId list as the comma-joined short-id set used in audit lines.
|
|
21
|
+
* Exported for direct users.json writers that do not route through
|
|
22
|
+
* writeAdminEntry (the MCP admin-update-pin path). */
|
|
23
|
+
export declare function formatAuditRowIds(userIds: string[]): string;
|
|
24
|
+
/** Public wrapper so a direct users.json writer that cannot route through
|
|
25
|
+
* writeAdminEntry (the MCP admin-update-pin path) still emits the one
|
|
26
|
+
* canonical `[users-audit]` line, keeping every write covered. */
|
|
27
|
+
export declare function logUsersAudit(audit: AuditContext, fields: {
|
|
28
|
+
action: string;
|
|
29
|
+
field: string;
|
|
30
|
+
rowsBefore: string;
|
|
31
|
+
rowsAfter: string;
|
|
32
|
+
}): void;
|
|
5
33
|
export interface AdminEntry {
|
|
6
34
|
userId: string;
|
|
7
35
|
role: "owner" | "admin";
|
|
@@ -13,6 +41,7 @@ export interface AdminWriteInput {
|
|
|
13
41
|
usersFile: string;
|
|
14
42
|
accountDir: string;
|
|
15
43
|
caller: string;
|
|
44
|
+
audit: AuditContext;
|
|
16
45
|
}
|
|
17
46
|
export interface AdminWriteResult {
|
|
18
47
|
usersJsonResult: "ok" | "fail" | "noop";
|
|
@@ -36,6 +65,7 @@ export interface AdminRemoveInput {
|
|
|
36
65
|
userId: string;
|
|
37
66
|
accountDir: string;
|
|
38
67
|
caller: string;
|
|
68
|
+
audit: AuditContext;
|
|
39
69
|
}
|
|
40
70
|
export interface AdminRemoveResult {
|
|
41
71
|
accountJsonResult: "ok" | "fail" | "noop";
|
|
@@ -68,19 +98,43 @@ export interface InvariantCheckResult {
|
|
|
68
98
|
userId: string;
|
|
69
99
|
}>;
|
|
70
100
|
}
|
|
101
|
+
/** Pure divergence computation — read faults collected, never logged. */
|
|
102
|
+
export interface DivergenceResult {
|
|
103
|
+
divergences: number;
|
|
104
|
+
/** Userids in account.json admins[] that have no row in users.json. */
|
|
105
|
+
accountWithoutUsers: Array<{
|
|
106
|
+
userId: string;
|
|
107
|
+
source: string;
|
|
108
|
+
}>;
|
|
109
|
+
/** Userids in users.json that no account.json admins[] references. */
|
|
110
|
+
usersWithoutAccount: Array<{
|
|
111
|
+
userId: string;
|
|
112
|
+
}>;
|
|
113
|
+
/** Read faults encountered during the walk (unreadable users/account file). */
|
|
114
|
+
errors: Array<{
|
|
115
|
+
source: string;
|
|
116
|
+
detail: string;
|
|
117
|
+
}>;
|
|
118
|
+
}
|
|
71
119
|
/**
|
|
72
120
|
* Walk every account.json under accountsDir and compare its admins[] to
|
|
73
|
-
* users.json.
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
121
|
+
* users.json. PURE: returns the divergence sets and any read faults; does no
|
|
122
|
+
* logging and never throws. Shared by `checkAdminAuthInvariant` (the
|
|
123
|
+
* `[admin-invariant]` boot one-shot) and the `[users-reconcile]` standing tick
|
|
124
|
+
* so the two never disagree on the predicate. An absent users.json or accounts
|
|
125
|
+
* dir is a legitimate first-boot state → empty set, not a fault.
|
|
126
|
+
*/
|
|
127
|
+
export declare function computeAdminStoreDivergence(input: {
|
|
128
|
+
usersFile: string;
|
|
129
|
+
accountsDir: string;
|
|
130
|
+
}): DivergenceResult;
|
|
131
|
+
/**
|
|
132
|
+
* `[admin-invariant]` / `[install-invariant]` boot one-shot. Wraps the pure
|
|
133
|
+
* `computeAdminStoreDivergence` and emits the documented grep lines:
|
|
134
|
+
* `direction=…`, the per-fault unreadable line, and the always-emitted
|
|
135
|
+
* `check complete divergences=<n>` summary. Log-only — does NOT throw, does NOT
|
|
136
|
+
* refuse boot or install. The recurring standing check is the separate
|
|
137
|
+
* `[users-reconcile]` tick in the admin server boot.
|
|
84
138
|
*/
|
|
85
139
|
export declare function checkAdminAuthInvariant(input: InvariantCheckInput): InvariantCheckResult;
|
|
86
140
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,11 +20,51 @@
|
|
|
20
20
|
// returns is_error: true with the [admins-write] line; set-pin returns 500
|
|
21
21
|
// with the same). Same trust model as the [admin-auth-store] pair.
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.formatAuditRowIds = formatAuditRowIds;
|
|
24
|
+
exports.logUsersAudit = logUsersAudit;
|
|
23
25
|
exports.writeAdminEntry = writeAdminEntry;
|
|
24
26
|
exports.removeAdminFromAccount = removeAdminFromAccount;
|
|
27
|
+
exports.computeAdminStoreDivergence = computeAdminStoreDivergence;
|
|
25
28
|
exports.checkAdminAuthInvariant = checkAdminAuthInvariant;
|
|
26
29
|
const node_fs_1 = require("node:fs");
|
|
27
30
|
const node_path_1 = require("node:path");
|
|
31
|
+
/** First 8 chars — the short-id convention used across the auth logs. */
|
|
32
|
+
function id8(value) {
|
|
33
|
+
return value.slice(0, 8);
|
|
34
|
+
}
|
|
35
|
+
/** Format a userId list as the comma-joined short-id set used in audit lines.
|
|
36
|
+
* Exported for direct users.json writers that do not route through
|
|
37
|
+
* writeAdminEntry (the MCP admin-update-pin path). */
|
|
38
|
+
function formatAuditRowIds(userIds) {
|
|
39
|
+
return userIds.map(id8).join(",");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Append one canonical `[users-audit]` line. Append failures never propagate —
|
|
43
|
+
* an audit-write fault must not break the credential write it records; the
|
|
44
|
+
* fault is surfaced once on stderr instead.
|
|
45
|
+
*/
|
|
46
|
+
function appendUsersAuditLine(audit, fields) {
|
|
47
|
+
const sess = audit.session ? ` session=${id8(audit.session)}` : "";
|
|
48
|
+
// userIds are uuids (shortened to id8); sentinels (boot|install|onboarding|
|
|
49
|
+
// unknown) carry no dash and are written whole so attribution stays readable.
|
|
50
|
+
const actor = audit.actor.includes("-") ? id8(audit.actor) : audit.actor;
|
|
51
|
+
const line = `[users-audit] action=${fields.action} actor=${actor}${sess} ` +
|
|
52
|
+
`field=${fields.field} rowsBefore=${fields.rowsBefore} rowsAfter=${fields.rowsAfter} ` +
|
|
53
|
+
`ts=${new Date().toISOString()}\n`;
|
|
54
|
+
try {
|
|
55
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(audit.logFile), { recursive: true, mode: 0o700 });
|
|
56
|
+
(0, node_fs_1.appendFileSync)(audit.logFile, line, { mode: 0o600 });
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.error(`[users-audit] op=write-failed logFile=${audit.logFile} error=${err instanceof Error ? err.message : String(err)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Public wrapper so a direct users.json writer that cannot route through
|
|
63
|
+
* writeAdminEntry (the MCP admin-update-pin path) still emits the one
|
|
64
|
+
* canonical `[users-audit]` line, keeping every write covered. */
|
|
65
|
+
function logUsersAudit(audit, fields) {
|
|
66
|
+
appendUsersAuditLine(audit, fields);
|
|
67
|
+
}
|
|
28
68
|
function logLine(input, result) {
|
|
29
69
|
const userIdShort = input.userId.slice(0, 8);
|
|
30
70
|
console.error(`[admins-write] caller=${input.caller} userId=${userIdShort} ` +
|
|
@@ -64,6 +104,7 @@ function writeAdminEntry(input) {
|
|
|
64
104
|
users = parsed;
|
|
65
105
|
}
|
|
66
106
|
}
|
|
107
|
+
const rowsBefore = users.map(u => id8(u.userId)).join(",");
|
|
67
108
|
const existing = users.findIndex(u => u.userId === input.userId);
|
|
68
109
|
if (existing === -1) {
|
|
69
110
|
users.push({ userId: input.userId, pin: input.pin });
|
|
@@ -74,6 +115,13 @@ function writeAdminEntry(input) {
|
|
|
74
115
|
}
|
|
75
116
|
writeFileAtomic(input.usersFile, JSON.stringify(users, null, 2) + "\n", 0o600);
|
|
76
117
|
result.usersJsonResult = "ok";
|
|
118
|
+
// A new userId is a row add; an existing userId is a pin rotation.
|
|
119
|
+
appendUsersAuditLine(input.audit, {
|
|
120
|
+
action: existing === -1 ? "add" : "set-pin",
|
|
121
|
+
field: existing === -1 ? "row" : "pin",
|
|
122
|
+
rowsBefore,
|
|
123
|
+
rowsAfter: users.map(u => id8(u.userId)).join(","),
|
|
124
|
+
});
|
|
77
125
|
}
|
|
78
126
|
catch (err) {
|
|
79
127
|
result.usersJsonResult = "fail";
|
|
@@ -122,6 +170,7 @@ function removeAdminFromAccount(input) {
|
|
|
122
170
|
}
|
|
123
171
|
const config = JSON.parse((0, node_fs_1.readFileSync)(accountJsonPath, "utf-8"));
|
|
124
172
|
const admins = (config.admins ?? []);
|
|
173
|
+
const rowsBefore = admins.map(a => id8(a.userId)).join(",");
|
|
125
174
|
const targetIndex = admins.findIndex(a => a.userId === input.userId);
|
|
126
175
|
if (targetIndex === -1) {
|
|
127
176
|
result.accountJsonResult = "noop";
|
|
@@ -131,6 +180,13 @@ function removeAdminFromAccount(input) {
|
|
|
131
180
|
config.admins = admins;
|
|
132
181
|
writeFileAtomic(accountJsonPath, JSON.stringify(config, null, 2) + "\n");
|
|
133
182
|
result.accountJsonResult = "ok";
|
|
183
|
+
// Removal touches account.json admins[] only; the row-set is that store's.
|
|
184
|
+
appendUsersAuditLine(input.audit, {
|
|
185
|
+
action: "remove",
|
|
186
|
+
field: "row",
|
|
187
|
+
rowsBefore,
|
|
188
|
+
rowsAfter: admins.map(a => id8(a.userId)).join(","),
|
|
189
|
+
});
|
|
134
190
|
}
|
|
135
191
|
}
|
|
136
192
|
catch (err) {
|
|
@@ -144,26 +200,15 @@ function removeAdminFromAccount(input) {
|
|
|
144
200
|
}
|
|
145
201
|
/**
|
|
146
202
|
* Walk every account.json under accountsDir and compare its admins[] to
|
|
147
|
-
* users.json.
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
* always emitted (wired-up assertion); per-divergence lines fire only when
|
|
153
|
-
* divergences > 0. Operators grep `[install-invariant]` or `[admin-invariant]`
|
|
154
|
-
* to detect the regression class without reading every install log.
|
|
155
|
-
*
|
|
156
|
-
* Promotion to refuse-or-degrade is a future sprint; capture as a TODO once
|
|
157
|
-
* the deployed fleet has been audited clean.
|
|
203
|
+
* users.json. PURE: returns the divergence sets and any read faults; does no
|
|
204
|
+
* logging and never throws. Shared by `checkAdminAuthInvariant` (the
|
|
205
|
+
* `[admin-invariant]` boot one-shot) and the `[users-reconcile]` standing tick
|
|
206
|
+
* so the two never disagree on the predicate. An absent users.json or accounts
|
|
207
|
+
* dir is a legitimate first-boot state → empty set, not a fault.
|
|
158
208
|
*/
|
|
159
|
-
function
|
|
160
|
-
const result = {
|
|
161
|
-
|
|
162
|
-
accountWithoutUsers: [],
|
|
163
|
-
usersWithoutAccount: [],
|
|
164
|
-
};
|
|
165
|
-
// Read users.json userIds (persistent file). Absent file == empty set; do
|
|
166
|
-
// not abort — first-boot before set-pin has run is a legitimate state.
|
|
209
|
+
function computeAdminStoreDivergence(input) {
|
|
210
|
+
const result = { divergences: 0, accountWithoutUsers: [], usersWithoutAccount: [], errors: [] };
|
|
211
|
+
// Read users.json userIds (persistent file). Absent file == empty set.
|
|
167
212
|
const usersUserIds = new Set();
|
|
168
213
|
if ((0, node_fs_1.existsSync)(input.usersFile)) {
|
|
169
214
|
try {
|
|
@@ -177,8 +222,7 @@ function checkAdminAuthInvariant(input) {
|
|
|
177
222
|
}
|
|
178
223
|
}
|
|
179
224
|
catch (err) {
|
|
180
|
-
|
|
181
|
-
console.error(`[${input.tag}] users.json unreadable usersFile=${input.usersFile} error=${msg}`);
|
|
225
|
+
result.errors.push({ source: input.usersFile, detail: err instanceof Error ? err.message : String(err) });
|
|
182
226
|
}
|
|
183
227
|
}
|
|
184
228
|
// Walk account dirs. Skip dotfiles (.trash/) and missing account.json.
|
|
@@ -189,9 +233,7 @@ function checkAdminAuthInvariant(input) {
|
|
|
189
233
|
entries = (0, node_fs_1.readdirSync)(input.accountsDir);
|
|
190
234
|
}
|
|
191
235
|
catch (err) {
|
|
192
|
-
|
|
193
|
-
console.error(`[${input.tag}] accounts-dir unreadable accountsDir=${input.accountsDir} error=${msg}`);
|
|
194
|
-
console.error(`[${input.tag}] check complete divergences=0 (accounts-dir unreadable)`);
|
|
236
|
+
result.errors.push({ source: input.accountsDir, detail: err instanceof Error ? err.message : String(err) });
|
|
195
237
|
return result;
|
|
196
238
|
}
|
|
197
239
|
for (const entry of entries) {
|
|
@@ -214,8 +256,7 @@ function checkAdminAuthInvariant(input) {
|
|
|
214
256
|
admins = (config.admins ?? []);
|
|
215
257
|
}
|
|
216
258
|
catch (err) {
|
|
217
|
-
|
|
218
|
-
console.error(`[${input.tag}] account.json unreadable source=${accountJsonPath} error=${msg}`);
|
|
259
|
+
result.errors.push({ source: accountJsonPath, detail: err instanceof Error ? err.message : String(err) });
|
|
219
260
|
continue;
|
|
220
261
|
}
|
|
221
262
|
for (const a of admins) {
|
|
@@ -223,8 +264,6 @@ function checkAdminAuthInvariant(input) {
|
|
|
223
264
|
continue;
|
|
224
265
|
accountUserIds.add(a.userId);
|
|
225
266
|
if (!usersUserIds.has(a.userId)) {
|
|
226
|
-
const userIdShort = a.userId.slice(0, 8);
|
|
227
|
-
console.error(`[${input.tag}] direction=account-without-users userId=${userIdShort} source=${accountJsonPath}`);
|
|
228
267
|
result.accountWithoutUsers.push({ userId: a.userId, source: accountJsonPath });
|
|
229
268
|
result.divergences += 1;
|
|
230
269
|
}
|
|
@@ -233,13 +272,36 @@ function checkAdminAuthInvariant(input) {
|
|
|
233
272
|
}
|
|
234
273
|
for (const uid of usersUserIds) {
|
|
235
274
|
if (!accountUserIds.has(uid)) {
|
|
236
|
-
const userIdShort = uid.slice(0, 8);
|
|
237
|
-
console.error(`[${input.tag}] direction=users-without-account userId=${userIdShort} source=${input.usersFile}`);
|
|
238
275
|
result.usersWithoutAccount.push({ userId: uid });
|
|
239
276
|
result.divergences += 1;
|
|
240
277
|
}
|
|
241
278
|
}
|
|
242
|
-
console.error(`[${input.tag}] check complete divergences=${result.divergences}`);
|
|
243
279
|
return result;
|
|
244
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* `[admin-invariant]` / `[install-invariant]` boot one-shot. Wraps the pure
|
|
283
|
+
* `computeAdminStoreDivergence` and emits the documented grep lines:
|
|
284
|
+
* `direction=…`, the per-fault unreadable line, and the always-emitted
|
|
285
|
+
* `check complete divergences=<n>` summary. Log-only — does NOT throw, does NOT
|
|
286
|
+
* refuse boot or install. The recurring standing check is the separate
|
|
287
|
+
* `[users-reconcile]` tick in the admin server boot.
|
|
288
|
+
*/
|
|
289
|
+
function checkAdminAuthInvariant(input) {
|
|
290
|
+
const d = computeAdminStoreDivergence({ usersFile: input.usersFile, accountsDir: input.accountsDir });
|
|
291
|
+
for (const e of d.errors) {
|
|
292
|
+
console.error(`[${input.tag}] unreadable source=${e.source} error=${e.detail}`);
|
|
293
|
+
}
|
|
294
|
+
for (const a of d.accountWithoutUsers) {
|
|
295
|
+
console.error(`[${input.tag}] direction=account-without-users userId=${a.userId.slice(0, 8)} source=${a.source}`);
|
|
296
|
+
}
|
|
297
|
+
for (const u of d.usersWithoutAccount) {
|
|
298
|
+
console.error(`[${input.tag}] direction=users-without-account userId=${u.userId.slice(0, 8)} source=${input.usersFile}`);
|
|
299
|
+
}
|
|
300
|
+
console.error(`[${input.tag}] check complete divergences=${d.divergences}`);
|
|
301
|
+
return {
|
|
302
|
+
divergences: d.divergences,
|
|
303
|
+
accountWithoutUsers: d.accountWithoutUsers,
|
|
304
|
+
usersWithoutAccount: d.usersWithoutAccount,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
245
307
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|