@shardworks/nexus-core 0.1.99 → 0.1.101
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/README.md +95 -166
- package/dist/guild-config.d.ts +14 -52
- package/dist/guild-config.d.ts.map +1 -1
- package/dist/guild-config.js +7 -10
- package/dist/guild-config.js.map +1 -1
- package/dist/guild.d.ts +83 -0
- package/dist/guild.d.ts.map +1 -0
- package/dist/guild.js +45 -0
- package/dist/guild.js.map +1 -0
- package/dist/id.d.ts +14 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +19 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +6 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -32
- package/dist/index.js.map +1 -1
- package/dist/nexus-home.d.ts +0 -4
- package/dist/nexus-home.d.ts.map +1 -1
- package/dist/nexus-home.js +1 -9
- package/dist/nexus-home.js.map +1 -1
- package/dist/plugin.d.ts +115 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +39 -0
- package/dist/plugin.js.map +1 -0
- package/dist/resolve-package.d.ts +58 -0
- package/dist/resolve-package.d.ts.map +1 -0
- package/dist/resolve-package.js +123 -0
- package/dist/resolve-package.js.map +1 -0
- package/package.json +5 -14
- package/dist/book.d.ts +0 -110
- package/dist/book.d.ts.map +0 -1
- package/dist/book.js +0 -16
- package/dist/book.js.map +0 -1
- package/dist/legacy/1/anima.d.ts +0 -79
- package/dist/legacy/1/anima.d.ts.map +0 -1
- package/dist/legacy/1/anima.js +0 -285
- package/dist/legacy/1/anima.js.map +0 -1
- package/dist/legacy/1/audit.d.ts +0 -23
- package/dist/legacy/1/audit.d.ts.map +0 -1
- package/dist/legacy/1/audit.js +0 -61
- package/dist/legacy/1/audit.js.map +0 -1
- package/dist/legacy/1/bundle.d.ts +0 -111
- package/dist/legacy/1/bundle.d.ts.map +0 -1
- package/dist/legacy/1/bundle.js +0 -452
- package/dist/legacy/1/bundle.js.map +0 -1
- package/dist/legacy/1/clock-daemon.d.ts +0 -2
- package/dist/legacy/1/clock-daemon.d.ts.map +0 -1
- package/dist/legacy/1/clock-daemon.js +0 -72
- package/dist/legacy/1/clock-daemon.js.map +0 -1
- package/dist/legacy/1/clockworks.d.ts +0 -98
- package/dist/legacy/1/clockworks.d.ts.map +0 -1
- package/dist/legacy/1/clockworks.js +0 -359
- package/dist/legacy/1/clockworks.js.map +0 -1
- package/dist/legacy/1/conversation.d.ts +0 -165
- package/dist/legacy/1/conversation.d.ts.map +0 -1
- package/dist/legacy/1/conversation.js +0 -457
- package/dist/legacy/1/conversation.js.map +0 -1
- package/dist/legacy/1/engine.d.ts +0 -90
- package/dist/legacy/1/engine.d.ts.map +0 -1
- package/dist/legacy/1/engine.js +0 -89
- package/dist/legacy/1/engine.js.map +0 -1
- package/dist/legacy/1/events.d.ts +0 -88
- package/dist/legacy/1/events.d.ts.map +0 -1
- package/dist/legacy/1/events.js +0 -239
- package/dist/legacy/1/events.js.map +0 -1
- package/dist/legacy/1/guild-config.d.ts +0 -74
- package/dist/legacy/1/guild-config.d.ts.map +0 -1
- package/dist/legacy/1/guild-config.js +0 -51
- package/dist/legacy/1/guild-config.js.map +0 -1
- package/dist/legacy/1/id.d.ts +0 -8
- package/dist/legacy/1/id.d.ts.map +0 -1
- package/dist/legacy/1/id.js +0 -27
- package/dist/legacy/1/id.js.map +0 -1
- package/dist/legacy/1/index.d.ts +0 -28
- package/dist/legacy/1/index.d.ts.map +0 -1
- package/dist/legacy/1/index.js +0 -32
- package/dist/legacy/1/index.js.map +0 -1
- package/dist/legacy/1/init-guild.d.ts +0 -24
- package/dist/legacy/1/init-guild.d.ts.map +0 -1
- package/dist/legacy/1/init-guild.js +0 -230
- package/dist/legacy/1/init-guild.js.map +0 -1
- package/dist/legacy/1/install-tool.d.ts +0 -73
- package/dist/legacy/1/install-tool.d.ts.map +0 -1
- package/dist/legacy/1/install-tool.js +0 -436
- package/dist/legacy/1/install-tool.js.map +0 -1
- package/dist/legacy/1/instantiate.d.ts +0 -33
- package/dist/legacy/1/instantiate.d.ts.map +0 -1
- package/dist/legacy/1/instantiate.js +0 -137
- package/dist/legacy/1/instantiate.js.map +0 -1
- package/dist/legacy/1/manifest.d.ts +0 -132
- package/dist/legacy/1/manifest.d.ts.map +0 -1
- package/dist/legacy/1/manifest.js +0 -321
- package/dist/legacy/1/manifest.js.map +0 -1
- package/dist/legacy/1/migrate.d.ts +0 -84
- package/dist/legacy/1/migrate.d.ts.map +0 -1
- package/dist/legacy/1/migrate.js +0 -228
- package/dist/legacy/1/migrate.js.map +0 -1
- package/dist/legacy/1/nexus-home.d.ts +0 -11
- package/dist/legacy/1/nexus-home.d.ts.map +0 -1
- package/dist/legacy/1/nexus-home.js +0 -16
- package/dist/legacy/1/nexus-home.js.map +0 -1
- package/dist/legacy/1/plugin-descriptor.d.ts +0 -3
- package/dist/legacy/1/plugin-descriptor.d.ts.map +0 -1
- package/dist/legacy/1/plugin-descriptor.js +0 -2
- package/dist/legacy/1/plugin-descriptor.js.map +0 -1
- package/dist/legacy/1/preconditions.d.ts +0 -100
- package/dist/legacy/1/preconditions.d.ts.map +0 -1
- package/dist/legacy/1/preconditions.js +0 -189
- package/dist/legacy/1/preconditions.js.map +0 -1
- package/dist/legacy/1/rehydrate.d.ts +0 -22
- package/dist/legacy/1/rehydrate.d.ts.map +0 -1
- package/dist/legacy/1/rehydrate.js +0 -109
- package/dist/legacy/1/rehydrate.js.map +0 -1
- package/dist/legacy/1/remove-tool.d.ts +0 -19
- package/dist/legacy/1/remove-tool.d.ts.map +0 -1
- package/dist/legacy/1/remove-tool.js +0 -105
- package/dist/legacy/1/remove-tool.js.map +0 -1
- package/dist/legacy/1/session.d.ts +0 -343
- package/dist/legacy/1/session.d.ts.map +0 -1
- package/dist/legacy/1/session.js +0 -499
- package/dist/legacy/1/session.js.map +0 -1
- package/dist/legacy/1/tool-registry.d.ts +0 -12
- package/dist/legacy/1/tool-registry.d.ts.map +0 -1
- package/dist/legacy/1/tool-registry.js +0 -28
- package/dist/legacy/1/tool-registry.js.map +0 -1
- package/dist/legacy/1/tool.d.ts +0 -10
- package/dist/legacy/1/tool.d.ts.map +0 -1
- package/dist/legacy/1/tool.js +0 -2
- package/dist/legacy/1/tool.js.map +0 -1
- package/dist/legacy/1/upgrade.d.ts +0 -129
- package/dist/legacy/1/upgrade.d.ts.map +0 -1
- package/dist/legacy/1/upgrade.js +0 -355
- package/dist/legacy/1/upgrade.js.map +0 -1
- package/dist/legacy/1/workshop.d.ts +0 -95
- package/dist/legacy/1/workshop.d.ts.map +0 -1
- package/dist/legacy/1/workshop.js +0 -229
- package/dist/legacy/1/workshop.js.map +0 -1
- package/dist/legacy/1/worktree.d.ts +0 -67
- package/dist/legacy/1/worktree.d.ts.map +0 -1
- package/dist/legacy/1/worktree.js +0 -117
- package/dist/legacy/1/worktree.js.map +0 -1
- package/dist/legacy/1/writ.d.ts +0 -130
- package/dist/legacy/1/writ.d.ts.map +0 -1
- package/dist/legacy/1/writ.js +0 -599
- package/dist/legacy/1/writ.js.map +0 -1
- package/dist/rig-context.d.ts +0 -47
- package/dist/rig-context.d.ts.map +0 -1
- package/dist/rig-context.js +0 -11
- package/dist/rig-context.js.map +0 -1
- package/dist/rig-descriptor.d.ts +0 -39
- package/dist/rig-descriptor.d.ts.map +0 -1
- package/dist/rig-descriptor.js +0 -12
- package/dist/rig-descriptor.js.map +0 -1
- package/dist/rig.d.ts +0 -70
- package/dist/rig.d.ts.map +0 -1
- package/dist/rig.js +0 -14
- package/dist/rig.js.map +0 -1
- package/dist/tool.d.ts +0 -136
- package/dist/tool.d.ts.map +0 -1
- package/dist/tool.js +0 -135
- package/dist/tool.js.map +0 -1
- package/migrations/001-schema.sql +0 -177
- package/migrations/002-writs.sql +0 -44
- package/migrations/003-conversations.sql +0 -43
- package/migrations/004-remove-commissions.sql +0 -24
package/dist/book.d.ts
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Book — the NoSQL document store primitive for rig authors.
|
|
3
|
-
*
|
|
4
|
-
* A Book is a named, schemaless collection of JSON documents. Content types
|
|
5
|
-
* must include `id: string` — rig authors own ID generation and include it
|
|
6
|
-
* as part of their domain type. No framework-managed envelope or timestamps.
|
|
7
|
-
*
|
|
8
|
-
* Books are declared in the rig's `Rig` export via `books?: Record<string, BookOptions>`.
|
|
9
|
-
* Mainspring creates the backing SQLite tables and indexes at startup.
|
|
10
|
-
*
|
|
11
|
-
* Rig authors access books through `RigContext.book()` and `RigContext.rigBook()`.
|
|
12
|
-
* The storage backend (SQLite) is an implementation detail — field names in
|
|
13
|
-
* indexes and queries use plain dot-notation, not JSONPath syntax.
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Pagination options for `Book.find()` and `Book.list()`.
|
|
17
|
-
*
|
|
18
|
-
* `offset` requires `limit` — passing offset alone is a type error.
|
|
19
|
-
* This mirrors SQLite's requirement and makes the constraint explicit at
|
|
20
|
-
* the call site rather than silently patching it in the adapter.
|
|
21
|
-
*/
|
|
22
|
-
export type Pagination = {
|
|
23
|
-
limit: number;
|
|
24
|
-
offset?: number;
|
|
25
|
-
} | {
|
|
26
|
-
limit?: never;
|
|
27
|
-
offset?: never;
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* Query options for `Book.find()`.
|
|
31
|
-
*/
|
|
32
|
-
export type BookQuery = {
|
|
33
|
-
/**
|
|
34
|
-
* Field equality filters, ANDed together.
|
|
35
|
-
*
|
|
36
|
-
* Use plain field names or dot notation for nested fields.
|
|
37
|
-
* The storage adapter handles translation internally.
|
|
38
|
-
*
|
|
39
|
-
* @example { status: 'active', anima: 'vera' }
|
|
40
|
-
* @example { 'parent.id': '123' }
|
|
41
|
-
*/
|
|
42
|
-
where?: Record<string, unknown>;
|
|
43
|
-
/**
|
|
44
|
-
* Field to sort by. Plain name or dot notation for nested fields.
|
|
45
|
-
* @example 'createdAt'
|
|
46
|
-
* @example 'parent.id'
|
|
47
|
-
*/
|
|
48
|
-
orderBy?: string;
|
|
49
|
-
/** Sort direction. Defaults to 'asc'. */
|
|
50
|
-
order?: 'asc' | 'desc';
|
|
51
|
-
} & Pagination;
|
|
52
|
-
/** Options for `Book.list()` — pagination and sorting without a where clause. */
|
|
53
|
-
export type ListOptions = {
|
|
54
|
-
orderBy?: string;
|
|
55
|
-
order?: 'asc' | 'desc';
|
|
56
|
-
} & Pagination;
|
|
57
|
-
/**
|
|
58
|
-
* A document collection — the primary Books API surface for rig authors.
|
|
59
|
-
*
|
|
60
|
-
* `T` must extend `{ id: string }` — the id is part of the content type,
|
|
61
|
-
* not a framework-managed wrapper. Rig authors generate IDs (e.g. ULIDs)
|
|
62
|
-
* and include them in the content passed to `put()`.
|
|
63
|
-
*
|
|
64
|
-
* Obtained via `RigContext.book<T>(name)` for own-rig books or
|
|
65
|
-
* `RigContext.rigBook<T>(rigId, name)` for cross-rig read access.
|
|
66
|
-
*/
|
|
67
|
-
export interface Book<T extends {
|
|
68
|
-
id: string;
|
|
69
|
-
}> {
|
|
70
|
-
/**
|
|
71
|
-
* Upsert a document. Creates if `content.id` is new; replaces the stored
|
|
72
|
-
* document entirely if it already exists.
|
|
73
|
-
*/
|
|
74
|
-
put(content: T): Promise<void>;
|
|
75
|
-
/**
|
|
76
|
-
* Get a document by id. Returns null if not found.
|
|
77
|
-
*/
|
|
78
|
-
get(id: string): Promise<T | null>;
|
|
79
|
-
/**
|
|
80
|
-
* Delete a document by id. Silent no-op if the document does not exist.
|
|
81
|
-
*/
|
|
82
|
-
delete(id: string): Promise<void>;
|
|
83
|
-
/**
|
|
84
|
-
* Find documents matching a query.
|
|
85
|
-
*
|
|
86
|
-
* All `where` conditions are ANDed. Results are returned as `T[]` — no
|
|
87
|
-
* envelope, no metadata wrapper.
|
|
88
|
-
*/
|
|
89
|
-
find(query: BookQuery): Promise<T[]>;
|
|
90
|
-
/**
|
|
91
|
-
* List all documents, optionally paginated and sorted.
|
|
92
|
-
* Equivalent to `find()` with no `where` clause.
|
|
93
|
-
*/
|
|
94
|
-
list(options?: ListOptions): Promise<T[]>;
|
|
95
|
-
/**
|
|
96
|
-
* Count documents matching an optional where clause.
|
|
97
|
-
* Efficient — does not fetch payloads.
|
|
98
|
-
*/
|
|
99
|
-
count(where?: BookQuery['where']): Promise<number>;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Read-only view of a Book — returned by `RigContext.rigBook()` for cross-rig access.
|
|
103
|
-
*
|
|
104
|
-
* Omits write operations (`put`, `delete`). Rig authors should not write to
|
|
105
|
-
* another rig's books.
|
|
106
|
-
*/
|
|
107
|
-
export type ReadOnlyBook<T extends {
|
|
108
|
-
id: string;
|
|
109
|
-
}> = Pick<Book<T>, 'get' | 'find' | 'list' | 'count'>;
|
|
110
|
-
//# sourceMappingURL=book.d.ts.map
|
package/dist/book.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"book.d.ts","sourceRoot":"","sources":["../src/book.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB,GAAG,UAAU,CAAC;AAEf,iFAAiF;AACjF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB,GAAG,UAAU,CAAC;AAEf;;;;;;;;;GASG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAC5C;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAErC;;;OAGG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAE1C;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpD;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,IAAI,IAAI,CACvD,IAAI,CAAC,CAAC,CAAC,EACP,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAClC,CAAC"}
|
package/dist/book.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Book — the NoSQL document store primitive for rig authors.
|
|
3
|
-
*
|
|
4
|
-
* A Book is a named, schemaless collection of JSON documents. Content types
|
|
5
|
-
* must include `id: string` — rig authors own ID generation and include it
|
|
6
|
-
* as part of their domain type. No framework-managed envelope or timestamps.
|
|
7
|
-
*
|
|
8
|
-
* Books are declared in the rig's `Rig` export via `books?: Record<string, BookOptions>`.
|
|
9
|
-
* Mainspring creates the backing SQLite tables and indexes at startup.
|
|
10
|
-
*
|
|
11
|
-
* Rig authors access books through `RigContext.book()` and `RigContext.rigBook()`.
|
|
12
|
-
* The storage backend (SQLite) is an implementation detail — field names in
|
|
13
|
-
* indexes and queries use plain dot-notation, not JSONPath syntax.
|
|
14
|
-
*/
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=book.js.map
|
package/dist/book.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"book.js","sourceRoot":"","sources":["../src/book.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
package/dist/legacy/1/anima.d.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
export interface AnimaSummary {
|
|
2
|
-
id: string;
|
|
3
|
-
name: string;
|
|
4
|
-
status: string;
|
|
5
|
-
roles: string[];
|
|
6
|
-
createdAt: string;
|
|
7
|
-
}
|
|
8
|
-
export interface AnimaDetail {
|
|
9
|
-
id: string;
|
|
10
|
-
name: string;
|
|
11
|
-
status: string;
|
|
12
|
-
roles: string[];
|
|
13
|
-
curriculumName: string;
|
|
14
|
-
curriculumVersion: string;
|
|
15
|
-
temperamentName: string;
|
|
16
|
-
temperamentVersion: string;
|
|
17
|
-
createdAt: string;
|
|
18
|
-
updatedAt: string;
|
|
19
|
-
}
|
|
20
|
-
export interface ListAnimasOptions {
|
|
21
|
-
status?: string;
|
|
22
|
-
role?: string;
|
|
23
|
-
}
|
|
24
|
-
export interface UpdateAnimaOptions {
|
|
25
|
-
status?: string;
|
|
26
|
-
roles?: string[];
|
|
27
|
-
}
|
|
28
|
-
/** Staleness info for a single training content axis (curriculum or temperament). */
|
|
29
|
-
export interface StalenessInfo {
|
|
30
|
-
/** Version baked into the anima's composition. */
|
|
31
|
-
composedVersion: string;
|
|
32
|
-
/** Version currently on disk. */
|
|
33
|
-
currentVersion: string;
|
|
34
|
-
}
|
|
35
|
-
/** Staleness check result for an anima. */
|
|
36
|
-
export interface AnimaStaleness {
|
|
37
|
-
/** Whether the anima has any stale content. */
|
|
38
|
-
stale: boolean;
|
|
39
|
-
/** Curriculum staleness (null if current or no curriculum). */
|
|
40
|
-
curriculum: StalenessInfo | null;
|
|
41
|
-
/** Temperament staleness (null if current or no temperament). */
|
|
42
|
-
temperament: StalenessInfo | null;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Resolve the name of the first active anima holding a given role.
|
|
46
|
-
*
|
|
47
|
-
* If multiple animas share the role, one is selected arbitrarily (lowest id).
|
|
48
|
-
* Throws if no active anima holds the role.
|
|
49
|
-
*/
|
|
50
|
-
export declare function resolveAnimaByRole(home: string, role: string): string;
|
|
51
|
-
/**
|
|
52
|
-
* List animas with optional filters.
|
|
53
|
-
*/
|
|
54
|
-
export declare function listAnimas(home: string, opts?: ListAnimasOptions): AnimaSummary[];
|
|
55
|
-
/**
|
|
56
|
-
* Show detailed information about a single anima by ID.
|
|
57
|
-
*/
|
|
58
|
-
export declare function showAnima(home: string, animaId: string): AnimaDetail | null;
|
|
59
|
-
/**
|
|
60
|
-
* Update an anima's status and/or roles.
|
|
61
|
-
*/
|
|
62
|
-
export declare function updateAnima(home: string, animaId: string, opts: UpdateAnimaOptions): AnimaDetail;
|
|
63
|
-
/**
|
|
64
|
-
* Check whether an anima's composition is stale (using outdated training content).
|
|
65
|
-
*
|
|
66
|
-
* Compares the curriculum and temperament versions baked into the anima's
|
|
67
|
-
* composition against the versions currently on disk.
|
|
68
|
-
*/
|
|
69
|
-
export declare function checkAnimaStaleness(home: string, animaId: string): AnimaStaleness | null;
|
|
70
|
-
/**
|
|
71
|
-
* Check staleness for all active animas at once.
|
|
72
|
-
* Returns a map of anima ID → staleness info, only including stale animas.
|
|
73
|
-
*/
|
|
74
|
-
export declare function checkAllAnimaStaleness(home: string): Map<string, AnimaStaleness>;
|
|
75
|
-
/**
|
|
76
|
-
* Remove (retire) an anima. Sets status to 'retired' and removes roster entries.
|
|
77
|
-
*/
|
|
78
|
-
export declare function removeAnima(home: string, animaId: string): void;
|
|
79
|
-
//# sourceMappingURL=anima.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anima.d.ts","sourceRoot":"","sources":["../../../src/legacy/1/anima.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qFAAqF;AACrF,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,+DAA+D;IAC/D,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,iEAAiE;IACjE,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC;CACnC;AAID;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,YAAY,EAAE,CA2CrF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAuC3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,kBAAkB,GACvB,WAAW,CA0Eb;AA0BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA0BxF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAyDhF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA8B/D"}
|
package/dist/legacy/1/anima.js
DELETED
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Anima CRUD — list, show, update, and remove operations for guild animas.
|
|
3
|
-
*
|
|
4
|
-
* Create is handled by instantiate.ts (complex composition logic).
|
|
5
|
-
* Read-by-name is handled by manifest.ts's readAnima() (used at manifest time).
|
|
6
|
-
* This module provides the remaining CRUD surface.
|
|
7
|
-
*/
|
|
8
|
-
import fs from 'node:fs';
|
|
9
|
-
import path from 'node:path';
|
|
10
|
-
import Database from 'better-sqlite3';
|
|
11
|
-
import { booksPath } from "./nexus-home.js";
|
|
12
|
-
import { generateId } from "./id.js";
|
|
13
|
-
// ── Functions ──────────────────────────────────────────────────────────
|
|
14
|
-
/**
|
|
15
|
-
* Resolve the name of the first active anima holding a given role.
|
|
16
|
-
*
|
|
17
|
-
* If multiple animas share the role, one is selected arbitrarily (lowest id).
|
|
18
|
-
* Throws if no active anima holds the role.
|
|
19
|
-
*/
|
|
20
|
-
export function resolveAnimaByRole(home, role) {
|
|
21
|
-
const db = new Database(booksPath(home));
|
|
22
|
-
db.pragma('foreign_keys = ON');
|
|
23
|
-
try {
|
|
24
|
-
const row = db.prepare(`
|
|
25
|
-
SELECT a.name FROM animas a
|
|
26
|
-
JOIN roster r ON r.anima_id = a.id
|
|
27
|
-
WHERE r.role = ? AND a.status = 'active'
|
|
28
|
-
ORDER BY a.id ASC
|
|
29
|
-
LIMIT 1
|
|
30
|
-
`).get(role);
|
|
31
|
-
if (!row) {
|
|
32
|
-
throw new Error(`No active anima found for role "${role}".`);
|
|
33
|
-
}
|
|
34
|
-
return row.name;
|
|
35
|
-
}
|
|
36
|
-
finally {
|
|
37
|
-
db.close();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* List animas with optional filters.
|
|
42
|
-
*/
|
|
43
|
-
export function listAnimas(home, opts = {}) {
|
|
44
|
-
const db = new Database(booksPath(home));
|
|
45
|
-
db.pragma('foreign_keys = ON');
|
|
46
|
-
try {
|
|
47
|
-
let query = `SELECT a.id, a.name, a.status, a.created_at FROM animas a`;
|
|
48
|
-
const conditions = [];
|
|
49
|
-
const params = [];
|
|
50
|
-
if (opts.role) {
|
|
51
|
-
query += ` JOIN roster r ON r.anima_id = a.id`;
|
|
52
|
-
conditions.push(`r.role = ?`);
|
|
53
|
-
params.push(opts.role);
|
|
54
|
-
}
|
|
55
|
-
if (opts.status) {
|
|
56
|
-
conditions.push(`a.status = ?`);
|
|
57
|
-
params.push(opts.status);
|
|
58
|
-
}
|
|
59
|
-
if (conditions.length > 0) {
|
|
60
|
-
query += ` WHERE ${conditions.join(' AND ')}`;
|
|
61
|
-
}
|
|
62
|
-
query += ` GROUP BY a.id ORDER BY a.created_at`;
|
|
63
|
-
const rows = db.prepare(query).all(...params);
|
|
64
|
-
// Fetch roles for each anima
|
|
65
|
-
const getRoles = db.prepare(`SELECT role FROM roster WHERE anima_id = ? ORDER BY role`);
|
|
66
|
-
return rows.map(row => ({
|
|
67
|
-
id: row.id,
|
|
68
|
-
name: row.name,
|
|
69
|
-
status: row.status,
|
|
70
|
-
roles: getRoles.all(row.id).map(r => r.role),
|
|
71
|
-
createdAt: row.created_at,
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
finally {
|
|
75
|
-
db.close();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Show detailed information about a single anima by ID.
|
|
80
|
-
*/
|
|
81
|
-
export function showAnima(home, animaId) {
|
|
82
|
-
const db = new Database(booksPath(home));
|
|
83
|
-
db.pragma('foreign_keys = ON');
|
|
84
|
-
try {
|
|
85
|
-
const row = db.prepare(`SELECT a.id, a.name, a.status, a.created_at, a.updated_at,
|
|
86
|
-
c.curriculum_name, c.curriculum_version,
|
|
87
|
-
c.temperament_name, c.temperament_version
|
|
88
|
-
FROM animas a
|
|
89
|
-
LEFT JOIN anima_compositions c ON c.anima_id = a.id
|
|
90
|
-
WHERE a.id = ? OR a.name = ?`).get(animaId, animaId);
|
|
91
|
-
if (!row)
|
|
92
|
-
return null;
|
|
93
|
-
const roles = db.prepare(`SELECT role FROM roster WHERE anima_id = ? ORDER BY role`).all(row.id).map(r => r.role);
|
|
94
|
-
return {
|
|
95
|
-
id: row.id,
|
|
96
|
-
name: row.name,
|
|
97
|
-
status: row.status,
|
|
98
|
-
roles,
|
|
99
|
-
curriculumName: row.curriculum_name ?? '',
|
|
100
|
-
curriculumVersion: row.curriculum_version ?? '',
|
|
101
|
-
temperamentName: row.temperament_name ?? '',
|
|
102
|
-
temperamentVersion: row.temperament_version ?? '',
|
|
103
|
-
createdAt: row.created_at,
|
|
104
|
-
updatedAt: row.updated_at,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
finally {
|
|
108
|
-
db.close();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Update an anima's status and/or roles.
|
|
113
|
-
*/
|
|
114
|
-
export function updateAnima(home, animaId, opts) {
|
|
115
|
-
const db = new Database(booksPath(home));
|
|
116
|
-
db.pragma('foreign_keys = ON');
|
|
117
|
-
try {
|
|
118
|
-
return db.transaction(() => {
|
|
119
|
-
// Resolve by id or name
|
|
120
|
-
const existing = db.prepare(`SELECT id, name FROM animas WHERE id = ? OR name = ?`).get(animaId, animaId);
|
|
121
|
-
if (!existing) {
|
|
122
|
-
throw new Error(`Anima "${animaId}" not found.`);
|
|
123
|
-
}
|
|
124
|
-
if (opts.status) {
|
|
125
|
-
db.prepare(`UPDATE animas SET status = ?, updated_at = datetime('now') WHERE id = ?`).run(opts.status, existing.id);
|
|
126
|
-
}
|
|
127
|
-
if (opts.roles) {
|
|
128
|
-
// Replace all roles
|
|
129
|
-
db.prepare(`DELETE FROM roster WHERE anima_id = ?`).run(existing.id);
|
|
130
|
-
const insertRole = db.prepare(`INSERT INTO roster (id, anima_id, role) VALUES (?, ?, ?)`);
|
|
131
|
-
for (const role of opts.roles) {
|
|
132
|
-
insertRole.run(generateId('r'), existing.id, role);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// Audit
|
|
136
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'anima_updated', 'anima', existing.id, JSON.stringify(opts));
|
|
137
|
-
// Read updated record inline (same connection, inside transaction)
|
|
138
|
-
const row = db.prepare(`SELECT a.id, a.name, a.status, a.created_at, a.updated_at,
|
|
139
|
-
c.curriculum_name, c.curriculum_version,
|
|
140
|
-
c.temperament_name, c.temperament_version
|
|
141
|
-
FROM animas a
|
|
142
|
-
LEFT JOIN anima_compositions c ON c.anima_id = a.id
|
|
143
|
-
WHERE a.id = ?`).get(existing.id);
|
|
144
|
-
const roles = db.prepare(`SELECT role FROM roster WHERE anima_id = ? ORDER BY role`).all(existing.id).map(r => r.role);
|
|
145
|
-
return {
|
|
146
|
-
id: row.id,
|
|
147
|
-
name: row.name,
|
|
148
|
-
status: row.status,
|
|
149
|
-
roles,
|
|
150
|
-
curriculumName: row.curriculum_name ?? '',
|
|
151
|
-
curriculumVersion: row.curriculum_version ?? '',
|
|
152
|
-
temperamentName: row.temperament_name ?? '',
|
|
153
|
-
temperamentVersion: row.temperament_version ?? '',
|
|
154
|
-
createdAt: row.created_at,
|
|
155
|
-
updatedAt: row.updated_at,
|
|
156
|
-
};
|
|
157
|
-
})();
|
|
158
|
-
}
|
|
159
|
-
finally {
|
|
160
|
-
db.close();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Read the version from a training content descriptor on disk.
|
|
165
|
-
* Returns 'unknown' if the descriptor is missing or has no version.
|
|
166
|
-
*/
|
|
167
|
-
function readTrainingVersion(home, category, name) {
|
|
168
|
-
const descriptorFile = category === 'curricula'
|
|
169
|
-
? 'nexus-curriculum.json'
|
|
170
|
-
: 'nexus-temperament.json';
|
|
171
|
-
const parentDir = category === 'curricula' ? 'training/curricula' : 'training/temperaments';
|
|
172
|
-
const descriptorPath = path.join(home, parentDir, name, descriptorFile);
|
|
173
|
-
if (!fs.existsSync(descriptorPath))
|
|
174
|
-
return null;
|
|
175
|
-
try {
|
|
176
|
-
const descriptor = JSON.parse(fs.readFileSync(descriptorPath, 'utf-8'));
|
|
177
|
-
return descriptor.version || 'unknown';
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
return null;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Check whether an anima's composition is stale (using outdated training content).
|
|
185
|
-
*
|
|
186
|
-
* Compares the curriculum and temperament versions baked into the anima's
|
|
187
|
-
* composition against the versions currently on disk.
|
|
188
|
-
*/
|
|
189
|
-
export function checkAnimaStaleness(home, animaId) {
|
|
190
|
-
const detail = showAnima(home, animaId);
|
|
191
|
-
if (!detail)
|
|
192
|
-
return null;
|
|
193
|
-
let curriculum = null;
|
|
194
|
-
let temperament = null;
|
|
195
|
-
if (detail.curriculumName) {
|
|
196
|
-
const currentVersion = readTrainingVersion(home, 'curricula', detail.curriculumName);
|
|
197
|
-
if (currentVersion && currentVersion !== detail.curriculumVersion) {
|
|
198
|
-
curriculum = { composedVersion: detail.curriculumVersion, currentVersion };
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (detail.temperamentName) {
|
|
202
|
-
const currentVersion = readTrainingVersion(home, 'temperaments', detail.temperamentName);
|
|
203
|
-
if (currentVersion && currentVersion !== detail.temperamentVersion) {
|
|
204
|
-
temperament = { composedVersion: detail.temperamentVersion, currentVersion };
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return {
|
|
208
|
-
stale: curriculum !== null || temperament !== null,
|
|
209
|
-
curriculum,
|
|
210
|
-
temperament,
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Check staleness for all active animas at once.
|
|
215
|
-
* Returns a map of anima ID → staleness info, only including stale animas.
|
|
216
|
-
*/
|
|
217
|
-
export function checkAllAnimaStaleness(home) {
|
|
218
|
-
const result = new Map();
|
|
219
|
-
// Build the current version map once (avoid repeated disk reads)
|
|
220
|
-
const versionCache = new Map();
|
|
221
|
-
function getCachedVersion(category, name) {
|
|
222
|
-
const key = `${category}:${name}`;
|
|
223
|
-
if (!versionCache.has(key)) {
|
|
224
|
-
versionCache.set(key, readTrainingVersion(home, category, name));
|
|
225
|
-
}
|
|
226
|
-
return versionCache.get(key);
|
|
227
|
-
}
|
|
228
|
-
const db = new Database(booksPath(home));
|
|
229
|
-
db.pragma('foreign_keys = ON');
|
|
230
|
-
try {
|
|
231
|
-
const animas = db.prepare(`
|
|
232
|
-
SELECT a.id, a.name,
|
|
233
|
-
c.curriculum_name, c.curriculum_version,
|
|
234
|
-
c.temperament_name, c.temperament_version
|
|
235
|
-
FROM animas a
|
|
236
|
-
LEFT JOIN anima_compositions c ON c.anima_id = a.id
|
|
237
|
-
WHERE a.status = 'active'
|
|
238
|
-
`).all();
|
|
239
|
-
for (const anima of animas) {
|
|
240
|
-
let curriculum = null;
|
|
241
|
-
let temperament = null;
|
|
242
|
-
if (anima.curriculum_name && anima.curriculum_version) {
|
|
243
|
-
const currentVersion = getCachedVersion('curricula', anima.curriculum_name);
|
|
244
|
-
if (currentVersion && currentVersion !== anima.curriculum_version) {
|
|
245
|
-
curriculum = { composedVersion: anima.curriculum_version, currentVersion };
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
if (anima.temperament_name && anima.temperament_version) {
|
|
249
|
-
const currentVersion = getCachedVersion('temperaments', anima.temperament_name);
|
|
250
|
-
if (currentVersion && currentVersion !== anima.temperament_version) {
|
|
251
|
-
temperament = { composedVersion: anima.temperament_version, currentVersion };
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
if (curriculum || temperament) {
|
|
255
|
-
result.set(anima.id, { stale: true, curriculum, temperament });
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
finally {
|
|
260
|
-
db.close();
|
|
261
|
-
}
|
|
262
|
-
return result;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Remove (retire) an anima. Sets status to 'retired' and removes roster entries.
|
|
266
|
-
*/
|
|
267
|
-
export function removeAnima(home, animaId) {
|
|
268
|
-
const db = new Database(booksPath(home));
|
|
269
|
-
db.pragma('foreign_keys = ON');
|
|
270
|
-
try {
|
|
271
|
-
db.transaction(() => {
|
|
272
|
-
const existing = db.prepare(`SELECT id, name FROM animas WHERE id = ? OR name = ?`).get(animaId, animaId);
|
|
273
|
-
if (!existing) {
|
|
274
|
-
throw new Error(`Anima "${animaId}" not found.`);
|
|
275
|
-
}
|
|
276
|
-
db.prepare(`UPDATE animas SET status = 'retired', updated_at = datetime('now') WHERE id = ?`).run(existing.id);
|
|
277
|
-
db.prepare(`DELETE FROM roster WHERE anima_id = ?`).run(existing.id);
|
|
278
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'anima_removed', 'anima', existing.id, JSON.stringify({ name: existing.name }));
|
|
279
|
-
})();
|
|
280
|
-
}
|
|
281
|
-
finally {
|
|
282
|
-
db.close();
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
//# sourceMappingURL=anima.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anima.js","sourceRoot":"","sources":["../../../src/legacy/1/anima.ts"],"names":[],"mappings":"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"}
|
package/dist/legacy/1/audit.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface AuditEntry {
|
|
2
|
-
id: string;
|
|
3
|
-
actor: string;
|
|
4
|
-
action: string;
|
|
5
|
-
targetType: string | null;
|
|
6
|
-
targetId: string | null;
|
|
7
|
-
detail: string | null;
|
|
8
|
-
timestamp: string;
|
|
9
|
-
}
|
|
10
|
-
export interface ListAuditLogOptions {
|
|
11
|
-
actor?: string;
|
|
12
|
-
action?: string;
|
|
13
|
-
targetType?: string;
|
|
14
|
-
targetId?: string;
|
|
15
|
-
/** Maximum number of results. */
|
|
16
|
-
limit?: number;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* List audit log entries with optional filters.
|
|
20
|
-
* Ordered by timestamp descending (newest first).
|
|
21
|
-
*/
|
|
22
|
-
export declare function listAuditLog(home: string, opts?: ListAuditLogOptions): AuditEntry[];
|
|
23
|
-
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/legacy/1/audit.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,UAAU,EAAE,CAsDvF"}
|
package/dist/legacy/1/audit.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Audit log — read-only queries for the Daybook audit trail.
|
|
3
|
-
*
|
|
4
|
-
* Write operations happen inline in the modules that produce audit entries
|
|
5
|
-
* (commission.ts, anima.ts, work.ts, etc.). This module provides the
|
|
6
|
-
* read surface for dashboard and forensic queries.
|
|
7
|
-
*/
|
|
8
|
-
import Database from 'better-sqlite3';
|
|
9
|
-
import { booksPath } from "./nexus-home.js";
|
|
10
|
-
// ── Functions ──────────────────────────────────────────────────────────
|
|
11
|
-
/**
|
|
12
|
-
* List audit log entries with optional filters.
|
|
13
|
-
* Ordered by timestamp descending (newest first).
|
|
14
|
-
*/
|
|
15
|
-
export function listAuditLog(home, opts = {}) {
|
|
16
|
-
const db = new Database(booksPath(home));
|
|
17
|
-
db.pragma('foreign_keys = ON');
|
|
18
|
-
try {
|
|
19
|
-
let query = `SELECT id, actor, action, target_type, target_id, detail, timestamp FROM audit_log`;
|
|
20
|
-
const conditions = [];
|
|
21
|
-
const params = [];
|
|
22
|
-
if (opts.actor) {
|
|
23
|
-
conditions.push(`actor = ?`);
|
|
24
|
-
params.push(opts.actor);
|
|
25
|
-
}
|
|
26
|
-
if (opts.action) {
|
|
27
|
-
conditions.push(`action = ?`);
|
|
28
|
-
params.push(opts.action);
|
|
29
|
-
}
|
|
30
|
-
if (opts.targetType) {
|
|
31
|
-
conditions.push(`target_type = ?`);
|
|
32
|
-
params.push(opts.targetType);
|
|
33
|
-
}
|
|
34
|
-
if (opts.targetId) {
|
|
35
|
-
conditions.push(`target_id = ?`);
|
|
36
|
-
params.push(opts.targetId);
|
|
37
|
-
}
|
|
38
|
-
if (conditions.length > 0) {
|
|
39
|
-
query += ` WHERE ${conditions.join(' AND ')}`;
|
|
40
|
-
}
|
|
41
|
-
query += ` ORDER BY timestamp DESC`;
|
|
42
|
-
if (opts.limit) {
|
|
43
|
-
query += ` LIMIT ?`;
|
|
44
|
-
params.push(opts.limit);
|
|
45
|
-
}
|
|
46
|
-
const rows = db.prepare(query).all(...params);
|
|
47
|
-
return rows.map(r => ({
|
|
48
|
-
id: r.id,
|
|
49
|
-
actor: r.actor,
|
|
50
|
-
action: r.action,
|
|
51
|
-
targetType: r.target_type,
|
|
52
|
-
targetId: r.target_id,
|
|
53
|
-
detail: r.detail,
|
|
54
|
-
timestamp: r.timestamp,
|
|
55
|
-
}));
|
|
56
|
-
}
|
|
57
|
-
finally {
|
|
58
|
-
db.close();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/legacy/1/audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAuB5C,0EAA0E;AAE1E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAA4B,EAAE;IACvE,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,IAAI,CAAC;QACH,IAAI,KAAK,GAAG,oFAAoF,CAAC;QACjG,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,KAAK,IAAI,UAAU,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,CAAC;QACD,KAAK,IAAI,0BAA0B,CAAC;QAEpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,IAAI,UAAU,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAI1C,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,QAAQ,EAAE,CAAC,CAAC,SAAS;YACrB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|