@duckcodeailabs/dql-project 1.3.5 → 1.4.0
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/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/persona-variables.d.ts +30 -0
- package/dist/persona-variables.d.ts.map +1 -0
- package/dist/persona-variables.js +46 -0
- package/dist/persona-variables.js.map +1 -0
- package/dist/persona-variables.test.d.ts +2 -0
- package/dist/persona-variables.test.d.ts.map +1 -0
- package/dist/persona-variables.test.js +30 -0
- package/dist/persona-variables.test.js.map +1 -0
- package/dist/persona.d.ts +81 -0
- package/dist/persona.d.ts.map +1 -0
- package/dist/persona.js +104 -0
- package/dist/persona.js.map +1 -0
- package/dist/persona.test.d.ts +2 -0
- package/dist/persona.test.d.ts.map +1 -0
- package/dist/persona.test.js +63 -0
- package/dist/persona.test.js.map +1 -0
- package/dist/sqlite-storage.d.ts +45 -0
- package/dist/sqlite-storage.d.ts.map +1 -1
- package/dist/sqlite-storage.js +128 -0
- package/dist/sqlite-storage.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -7,4 +7,9 @@ export { MemoryStorage } from './memory-storage.js';
|
|
|
7
7
|
export { SQLiteStorage } from './sqlite-storage.js';
|
|
8
8
|
export { ManifestCache } from './manifest-cache.js';
|
|
9
9
|
export type { TrackedFile, CacheHit, CacheMiss, CacheLookup, ManifestCacheOptions, } from './manifest-cache.js';
|
|
10
|
+
export { PersonaRegistry, defaultPersonaRegistry, personaFromMember, OWNER_DEFAULT, } from './persona.js';
|
|
11
|
+
export type { ActivePersona, UserContextLike } from './persona.js';
|
|
12
|
+
export { personaVariables, mergePersonaVariables, } from './persona-variables.js';
|
|
13
|
+
export { parseAppDocument, loadAppDocument, findAppDocuments, resolveRlsContext, memberAttributes, appFolderRelPath, suggestAppId, parseDashboardDocument, loadDashboardDocument, findDashboardsForApp, findAllDashboards, isBlockIdRef, extractDashboardBlockRefs, } from '@duckcodeailabs/dql-core';
|
|
14
|
+
export type { AppDocument, AppMember, AppRole, AppPolicy, AppRlsBinding, AppSchedule, AppScheduleDelivery, AppHomepage, AppDocumentParseError, AppDocumentLoadResult, DashboardDocument, DashboardParam, DashboardFilter, DashboardBlockRef, DashboardVizConfig, DashboardGridItem, DashboardLoadResult, DashboardParseError, } from '@duckcodeailabs/dql-core';
|
|
10
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,WAAW,EACX,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,WAAW,EACX,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,4 +4,12 @@ export { RegistrySync } from './sync.js';
|
|
|
4
4
|
export { MemoryStorage } from './memory-storage.js';
|
|
5
5
|
export { SQLiteStorage } from './sqlite-storage.js';
|
|
6
6
|
export { ManifestCache } from './manifest-cache.js';
|
|
7
|
+
// Persona registry — runtime active-user state used by the governance and
|
|
8
|
+
// RLS layers. The Apps/Dashboards file format itself lives in dql-core
|
|
9
|
+
// (re-exported below for callers that only depend on dql-project).
|
|
10
|
+
export { PersonaRegistry, defaultPersonaRegistry, personaFromMember, OWNER_DEFAULT, } from './persona.js';
|
|
11
|
+
export { personaVariables, mergePersonaVariables, } from './persona-variables.js';
|
|
12
|
+
// Re-exports of the App/Dashboard file formats so consumers can stay on a
|
|
13
|
+
// single import surface.
|
|
14
|
+
export { parseAppDocument, loadAppDocument, findAppDocuments, resolveRlsContext, memberAttributes, appFolderRelPath, suggestAppId, parseDashboardDocument, loadDashboardDocument, findDashboardsForApp, findAllDashboards, isBlockIdRef, extractDashboardBlockRefs, } from '@duckcodeailabs/dql-core';
|
|
7
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASpD,0EAA0E;AAC1E,uEAAuE;AACvE,mEAAmE;AACnE,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,0EAA0E;AAC1E,yBAAyB;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persona → executeQuery variables bridge.
|
|
3
|
+
*
|
|
4
|
+
* The compiler lowers `@rls("col", "{user.var}")` decorators into positional
|
|
5
|
+
* SQL params whose `name` matches `user.<var>`. The runtime executor accepts
|
|
6
|
+
* a `variables` map (third argument) that supplies values for those names.
|
|
7
|
+
*
|
|
8
|
+
* `personaVariables(persona)` returns the right shape for that map. The
|
|
9
|
+
* caller is responsible for merging with any block-level template params
|
|
10
|
+
* before passing into `executor.executeQuery(sql, params, variables, conn)`.
|
|
11
|
+
*
|
|
12
|
+
* When no persona is active, returns an empty object — same as today's
|
|
13
|
+
* behaviour, which is how single-user OSS continues to "just work" with no
|
|
14
|
+
* runtime narrowing.
|
|
15
|
+
*/
|
|
16
|
+
import type { ActivePersona } from './persona.js';
|
|
17
|
+
/**
|
|
18
|
+
* Build the template-variable map for the runtime executor from an active
|
|
19
|
+
* persona. Includes both:
|
|
20
|
+
* - `user.<var>` keys (for compile-time RLS templates the lowering pass produced),
|
|
21
|
+
* - mirror `<var>` keys without the `user.` prefix, so callers that resolve
|
|
22
|
+
* bare identifiers also see the value.
|
|
23
|
+
*/
|
|
24
|
+
export declare function personaVariables(persona: ActivePersona | null): Record<string, unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* Merge two variable maps. The persona side takes precedence so that
|
|
27
|
+
* stakeholders cannot override their own RLS by passing a manual override.
|
|
28
|
+
*/
|
|
29
|
+
export declare function mergePersonaVariables(base: Record<string, unknown>, persona: ActivePersona | null): Record<string, unknown>;
|
|
30
|
+
//# sourceMappingURL=persona-variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-variables.d.ts","sourceRoot":"","sources":["../src/persona-variables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,GAAG,IAAI,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,aAAa,GAAG,IAAI,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persona → executeQuery variables bridge.
|
|
3
|
+
*
|
|
4
|
+
* The compiler lowers `@rls("col", "{user.var}")` decorators into positional
|
|
5
|
+
* SQL params whose `name` matches `user.<var>`. The runtime executor accepts
|
|
6
|
+
* a `variables` map (third argument) that supplies values for those names.
|
|
7
|
+
*
|
|
8
|
+
* `personaVariables(persona)` returns the right shape for that map. The
|
|
9
|
+
* caller is responsible for merging with any block-level template params
|
|
10
|
+
* before passing into `executor.executeQuery(sql, params, variables, conn)`.
|
|
11
|
+
*
|
|
12
|
+
* When no persona is active, returns an empty object — same as today's
|
|
13
|
+
* behaviour, which is how single-user OSS continues to "just work" with no
|
|
14
|
+
* runtime narrowing.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Build the template-variable map for the runtime executor from an active
|
|
18
|
+
* persona. Includes both:
|
|
19
|
+
* - `user.<var>` keys (for compile-time RLS templates the lowering pass produced),
|
|
20
|
+
* - mirror `<var>` keys without the `user.` prefix, so callers that resolve
|
|
21
|
+
* bare identifiers also see the value.
|
|
22
|
+
*/
|
|
23
|
+
export function personaVariables(persona) {
|
|
24
|
+
if (!persona)
|
|
25
|
+
return {};
|
|
26
|
+
const out = {};
|
|
27
|
+
for (const [k, v] of Object.entries(persona.rlsContext)) {
|
|
28
|
+
out[k] = v;
|
|
29
|
+
// Convenience: also expose the bare variable name without the `user.` prefix.
|
|
30
|
+
if (k.startsWith('user.'))
|
|
31
|
+
out[k.slice('user.'.length)] = v;
|
|
32
|
+
}
|
|
33
|
+
// Always expose the user id so blocks can reference `${user.id}` patterns.
|
|
34
|
+
out['user.id'] = persona.userId;
|
|
35
|
+
out['user.userId'] = persona.userId;
|
|
36
|
+
out['user.roles'] = persona.roles;
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Merge two variable maps. The persona side takes precedence so that
|
|
41
|
+
* stakeholders cannot override their own RLS by passing a manual override.
|
|
42
|
+
*/
|
|
43
|
+
export function mergePersonaVariables(base, persona) {
|
|
44
|
+
return { ...base, ...personaVariables(persona) };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=persona-variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-variables.js","sourceRoot":"","sources":["../src/persona-variables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA6B;IAE7B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,8EAA8E;QAC9E,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;IACD,2EAA2E;IAC3E,GAAG,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,GAAG,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC,GAAG,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA6B,EAC7B,OAA6B;IAE7B,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-variables.test.d.ts","sourceRoot":"","sources":["../src/persona-variables.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { personaVariables, mergePersonaVariables } from './persona-variables.js';
|
|
3
|
+
const personaA = {
|
|
4
|
+
userId: 'alice@acme.com',
|
|
5
|
+
roles: ['analyst'],
|
|
6
|
+
attributes: { region: 'NA' },
|
|
7
|
+
rlsContext: { 'user.region': 'NA' },
|
|
8
|
+
appId: 'growth-cxo',
|
|
9
|
+
};
|
|
10
|
+
describe('personaVariables', () => {
|
|
11
|
+
it('returns empty for null persona', () => {
|
|
12
|
+
expect(personaVariables(null)).toEqual({});
|
|
13
|
+
});
|
|
14
|
+
it('exposes user.<var> keys plus convenience bare aliases', () => {
|
|
15
|
+
const vars = personaVariables(personaA);
|
|
16
|
+
expect(vars['user.region']).toBe('NA');
|
|
17
|
+
expect(vars['region']).toBe('NA');
|
|
18
|
+
expect(vars['user.id']).toBe('alice@acme.com');
|
|
19
|
+
expect(vars['user.userId']).toBe('alice@acme.com');
|
|
20
|
+
expect(vars['user.roles']).toEqual(['analyst']);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('mergePersonaVariables', () => {
|
|
24
|
+
it('persona keys override base keys (no self-override of RLS)', () => {
|
|
25
|
+
const merged = mergePersonaVariables({ 'user.region': 'EU', extra: 1 }, personaA);
|
|
26
|
+
expect(merged['user.region']).toBe('NA');
|
|
27
|
+
expect(merged.extra).toBe(1);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=persona-variables.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-variables.test.js","sourceRoot":"","sources":["../src/persona-variables.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGjF,MAAM,QAAQ,GAAkB;IAC9B,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,CAAC,SAAS,CAAC;IAClB,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5B,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;IACnC,KAAK,EAAE,YAAY;CACpB,CAAC;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active-persona registry.
|
|
3
|
+
*
|
|
4
|
+
* The OSS desktop runs as a single local owner, but Apps declare members,
|
|
5
|
+
* roles, policies, and RLS bindings in `dql.app.json`. The persona registry
|
|
6
|
+
* is the runtime source of truth for "who is this query running as right now"
|
|
7
|
+
* — read by the dql-governance PolicyEngine and the @rls deferred resolver.
|
|
8
|
+
*
|
|
9
|
+
* Rules:
|
|
10
|
+
* - Single active persona per process. Switching is explicit.
|
|
11
|
+
* - The registry never writes auth state to disk; persistence (last-used
|
|
12
|
+
* persona) is the UI's job, not the library's.
|
|
13
|
+
* - When no persona is set, the default owner context applies (full access,
|
|
14
|
+
* no RLS narrowing). This matches today's single-user behaviour.
|
|
15
|
+
*/
|
|
16
|
+
import type { AppDocument, AppMember } from '@duckcodeailabs/dql-core';
|
|
17
|
+
export interface ActivePersona {
|
|
18
|
+
/** Stable user id (typically email). */
|
|
19
|
+
userId: string;
|
|
20
|
+
/** Display name surfaced in the UI. */
|
|
21
|
+
displayName?: string;
|
|
22
|
+
/** Roles this persona currently holds within an App. */
|
|
23
|
+
roles: string[];
|
|
24
|
+
/** Free-form attributes. */
|
|
25
|
+
attributes: Record<string, string | number | boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* RLS context resolved from the App's `rlsBindings`. Keys here are the
|
|
28
|
+
* `{user.<key>}` template variables; values are the substitutions.
|
|
29
|
+
* Empty when no App is active or no bindings match.
|
|
30
|
+
*/
|
|
31
|
+
rlsContext: Record<string, string | number | boolean>;
|
|
32
|
+
/** App id this persona is currently scoped to (if any). */
|
|
33
|
+
appId?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface UserContextLike {
|
|
36
|
+
userId: string;
|
|
37
|
+
roles: string[];
|
|
38
|
+
department?: string;
|
|
39
|
+
}
|
|
40
|
+
type Listener = (next: ActivePersona | null) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Process-wide persona registry. Designed to be a single instance per
|
|
43
|
+
* process (use `defaultPersonaRegistry`). Tests can construct fresh
|
|
44
|
+
* instances for isolation.
|
|
45
|
+
*/
|
|
46
|
+
export declare class PersonaRegistry {
|
|
47
|
+
private current;
|
|
48
|
+
private readonly listeners;
|
|
49
|
+
/** Currently active persona, or null when no App is bound. */
|
|
50
|
+
get active(): ActivePersona | null;
|
|
51
|
+
/** Set the active persona to a fully-resolved record. */
|
|
52
|
+
set(next: ActivePersona | null): void;
|
|
53
|
+
/**
|
|
54
|
+
* Resolve and activate a persona from an `AppDocument` + a `userId`.
|
|
55
|
+
* Returns the resolved persona, or `null` if the user is not a member of the App.
|
|
56
|
+
*/
|
|
57
|
+
setFromApp(app: AppDocument, userId: string): ActivePersona | null;
|
|
58
|
+
/** Clear the active persona; downstream code falls back to owner default. */
|
|
59
|
+
clear(): void;
|
|
60
|
+
/** Subscribe to changes. Returns an unsubscribe handle. */
|
|
61
|
+
subscribe(cb: Listener): () => void;
|
|
62
|
+
/** Build the dql-governance UserContext shape. Owner default if unset. */
|
|
63
|
+
toUserContext(ownerFallback?: UserContextLike): UserContextLike;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve a `{user.<var>}` reference against the active RLS context.
|
|
66
|
+
* Returns `undefined` when no value is bound — callers should typically
|
|
67
|
+
* fail-closed (reject the query) rather than leak unfiltered data.
|
|
68
|
+
*/
|
|
69
|
+
resolveUserVar(name: string): string | number | boolean | undefined;
|
|
70
|
+
}
|
|
71
|
+
/** Build a fully-resolved persona from an App + a member. */
|
|
72
|
+
export declare function personaFromMember(app: AppDocument, member: AppMember): ActivePersona;
|
|
73
|
+
/**
|
|
74
|
+
* Default owner context — used when no persona is active. Matches today's
|
|
75
|
+
* single-user behaviour: full read/execute, no RLS narrowing.
|
|
76
|
+
*/
|
|
77
|
+
export declare const OWNER_DEFAULT: UserContextLike;
|
|
78
|
+
/** Process-singleton. Other modules should import this rather than constructing their own. */
|
|
79
|
+
export declare const defaultPersonaRegistry: PersonaRegistry;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../src/persona.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGvE,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACtD;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACtD,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;AAErD;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IAEjD,8DAA8D;IAC9D,IAAI,MAAM,IAAI,aAAa,GAAG,IAAI,CAEjC;IAED,yDAAyD;IACzD,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAKrC;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAYlE,6EAA6E;IAC7E,KAAK,IAAI,IAAI;IAIb,2DAA2D;IAC3D,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI;IAKnC,0EAA0E;IAC1E,aAAa,CAAC,aAAa,GAAE,eAA+B,GAAG,eAAe;IAW9E;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS;CAIpE;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,aAAa,CASpF;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,eAG3B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,sBAAsB,iBAAwB,CAAC"}
|
package/dist/persona.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active-persona registry.
|
|
3
|
+
*
|
|
4
|
+
* The OSS desktop runs as a single local owner, but Apps declare members,
|
|
5
|
+
* roles, policies, and RLS bindings in `dql.app.json`. The persona registry
|
|
6
|
+
* is the runtime source of truth for "who is this query running as right now"
|
|
7
|
+
* — read by the dql-governance PolicyEngine and the @rls deferred resolver.
|
|
8
|
+
*
|
|
9
|
+
* Rules:
|
|
10
|
+
* - Single active persona per process. Switching is explicit.
|
|
11
|
+
* - The registry never writes auth state to disk; persistence (last-used
|
|
12
|
+
* persona) is the UI's job, not the library's.
|
|
13
|
+
* - When no persona is set, the default owner context applies (full access,
|
|
14
|
+
* no RLS narrowing). This matches today's single-user behaviour.
|
|
15
|
+
*/
|
|
16
|
+
import { resolveRlsContext } from '@duckcodeailabs/dql-core';
|
|
17
|
+
/**
|
|
18
|
+
* Process-wide persona registry. Designed to be a single instance per
|
|
19
|
+
* process (use `defaultPersonaRegistry`). Tests can construct fresh
|
|
20
|
+
* instances for isolation.
|
|
21
|
+
*/
|
|
22
|
+
export class PersonaRegistry {
|
|
23
|
+
current = null;
|
|
24
|
+
listeners = new Set();
|
|
25
|
+
/** Currently active persona, or null when no App is bound. */
|
|
26
|
+
get active() {
|
|
27
|
+
return this.current;
|
|
28
|
+
}
|
|
29
|
+
/** Set the active persona to a fully-resolved record. */
|
|
30
|
+
set(next) {
|
|
31
|
+
this.current = next;
|
|
32
|
+
for (const cb of this.listeners)
|
|
33
|
+
cb(next);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve and activate a persona from an `AppDocument` + a `userId`.
|
|
37
|
+
* Returns the resolved persona, or `null` if the user is not a member of the App.
|
|
38
|
+
*/
|
|
39
|
+
setFromApp(app, userId) {
|
|
40
|
+
const member = app.members.find((m) => m.userId === userId);
|
|
41
|
+
if (!member) {
|
|
42
|
+
this.current = null;
|
|
43
|
+
for (const cb of this.listeners)
|
|
44
|
+
cb(null);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const persona = personaFromMember(app, member);
|
|
48
|
+
this.set(persona);
|
|
49
|
+
return persona;
|
|
50
|
+
}
|
|
51
|
+
/** Clear the active persona; downstream code falls back to owner default. */
|
|
52
|
+
clear() {
|
|
53
|
+
this.set(null);
|
|
54
|
+
}
|
|
55
|
+
/** Subscribe to changes. Returns an unsubscribe handle. */
|
|
56
|
+
subscribe(cb) {
|
|
57
|
+
this.listeners.add(cb);
|
|
58
|
+
return () => this.listeners.delete(cb);
|
|
59
|
+
}
|
|
60
|
+
/** Build the dql-governance UserContext shape. Owner default if unset. */
|
|
61
|
+
toUserContext(ownerFallback = OWNER_DEFAULT) {
|
|
62
|
+
if (!this.current)
|
|
63
|
+
return ownerFallback;
|
|
64
|
+
return {
|
|
65
|
+
userId: this.current.userId,
|
|
66
|
+
roles: this.current.roles,
|
|
67
|
+
department: typeof this.current.attributes.department === 'string'
|
|
68
|
+
? this.current.attributes.department
|
|
69
|
+
: undefined,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resolve a `{user.<var>}` reference against the active RLS context.
|
|
74
|
+
* Returns `undefined` when no value is bound — callers should typically
|
|
75
|
+
* fail-closed (reject the query) rather than leak unfiltered data.
|
|
76
|
+
*/
|
|
77
|
+
resolveUserVar(name) {
|
|
78
|
+
if (!this.current)
|
|
79
|
+
return undefined;
|
|
80
|
+
return this.current.rlsContext[name];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** Build a fully-resolved persona from an App + a member. */
|
|
84
|
+
export function personaFromMember(app, member) {
|
|
85
|
+
return {
|
|
86
|
+
userId: member.userId,
|
|
87
|
+
displayName: member.displayName,
|
|
88
|
+
roles: [...member.roles],
|
|
89
|
+
attributes: { ...(member.attributes ?? {}) },
|
|
90
|
+
rlsContext: resolveRlsContext(app, member),
|
|
91
|
+
appId: app.id,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Default owner context — used when no persona is active. Matches today's
|
|
96
|
+
* single-user behaviour: full read/execute, no RLS narrowing.
|
|
97
|
+
*/
|
|
98
|
+
export const OWNER_DEFAULT = {
|
|
99
|
+
userId: '__owner__',
|
|
100
|
+
roles: ['owner'],
|
|
101
|
+
};
|
|
102
|
+
/** Process-singleton. Other modules should import this rather than constructing their own. */
|
|
103
|
+
export const defaultPersonaRegistry = new PersonaRegistry();
|
|
104
|
+
//# sourceMappingURL=persona.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.js","sourceRoot":"","sources":["../src/persona.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.test.d.ts","sourceRoot":"","sources":["../src/persona.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { PersonaRegistry, OWNER_DEFAULT } from './persona.js';
|
|
3
|
+
const app = {
|
|
4
|
+
version: 1,
|
|
5
|
+
id: 'growth-cxo',
|
|
6
|
+
name: 'Growth',
|
|
7
|
+
domain: 'growth',
|
|
8
|
+
owners: ['alice@acme.com'],
|
|
9
|
+
members: [
|
|
10
|
+
{ userId: 'alice@acme.com', roles: ['owner'], attributes: { region: 'NA' } },
|
|
11
|
+
{ userId: 'bob@acme.com', roles: ['viewer'], attributes: { region: 'EU' } },
|
|
12
|
+
],
|
|
13
|
+
roles: [{ id: 'owner' }, { id: 'viewer' }],
|
|
14
|
+
policies: [],
|
|
15
|
+
rlsBindings: [{ role: 'viewer', variable: 'user.region', from: 'region' }],
|
|
16
|
+
};
|
|
17
|
+
describe('PersonaRegistry', () => {
|
|
18
|
+
it('starts with no active persona; toUserContext returns owner default', () => {
|
|
19
|
+
const r = new PersonaRegistry();
|
|
20
|
+
expect(r.active).toBeNull();
|
|
21
|
+
expect(r.toUserContext()).toEqual(OWNER_DEFAULT);
|
|
22
|
+
});
|
|
23
|
+
it('setFromApp resolves a viewer persona with RLS context', () => {
|
|
24
|
+
const r = new PersonaRegistry();
|
|
25
|
+
const persona = r.setFromApp(app, 'bob@acme.com');
|
|
26
|
+
expect(persona?.userId).toBe('bob@acme.com');
|
|
27
|
+
expect(persona?.roles).toEqual(['viewer']);
|
|
28
|
+
expect(persona?.rlsContext).toEqual({ 'user.region': 'EU' });
|
|
29
|
+
expect(r.resolveUserVar('user.region')).toBe('EU');
|
|
30
|
+
});
|
|
31
|
+
it('setFromApp returns null and clears state for unknown userId', () => {
|
|
32
|
+
const r = new PersonaRegistry();
|
|
33
|
+
r.setFromApp(app, 'bob@acme.com');
|
|
34
|
+
const result = r.setFromApp(app, 'eve@acme.com');
|
|
35
|
+
expect(result).toBeNull();
|
|
36
|
+
expect(r.active).toBeNull();
|
|
37
|
+
});
|
|
38
|
+
it('clear() restores the owner-fallback context', () => {
|
|
39
|
+
const r = new PersonaRegistry();
|
|
40
|
+
r.setFromApp(app, 'bob@acme.com');
|
|
41
|
+
r.clear();
|
|
42
|
+
expect(r.active).toBeNull();
|
|
43
|
+
expect(r.toUserContext()).toEqual(OWNER_DEFAULT);
|
|
44
|
+
});
|
|
45
|
+
it('subscribers fire on every change', () => {
|
|
46
|
+
const r = new PersonaRegistry();
|
|
47
|
+
const events = [];
|
|
48
|
+
r.subscribe((next) => events.push(next?.userId ?? null));
|
|
49
|
+
r.setFromApp(app, 'bob@acme.com');
|
|
50
|
+
r.clear();
|
|
51
|
+
expect(events).toEqual(['bob@acme.com', null]);
|
|
52
|
+
});
|
|
53
|
+
it('toUserContext exposes department from attributes when present', () => {
|
|
54
|
+
const r = new PersonaRegistry();
|
|
55
|
+
const withDept = {
|
|
56
|
+
...app,
|
|
57
|
+
members: [{ userId: 'c@acme.com', roles: ['viewer'], attributes: { department: 'finance' } }],
|
|
58
|
+
};
|
|
59
|
+
r.setFromApp(withDept, 'c@acme.com');
|
|
60
|
+
expect(r.toUserContext().department).toBe('finance');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=persona.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.test.js","sourceRoot":"","sources":["../src/persona.test.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite-storage.d.ts
CHANGED
|
@@ -3,6 +3,51 @@ export declare class SQLiteStorage implements RegistryStorage {
|
|
|
3
3
|
private db;
|
|
4
4
|
constructor(dbPath: string);
|
|
5
5
|
private initSchema;
|
|
6
|
+
/**
|
|
7
|
+
* Replace the persisted apps/dashboards rows with the contents of a
|
|
8
|
+
* compiled manifest. Idempotent: clears the registries and re-inserts.
|
|
9
|
+
* Apps and dashboards are file-format-first — the registries exist for
|
|
10
|
+
* fast queries from the UI/API surface, not as a source of truth.
|
|
11
|
+
*/
|
|
12
|
+
upsertAppsAndDashboards(input: {
|
|
13
|
+
apps: Array<{
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
domain: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
owners: string[];
|
|
19
|
+
tags: string[];
|
|
20
|
+
filePath: string;
|
|
21
|
+
members: unknown;
|
|
22
|
+
roles: unknown;
|
|
23
|
+
policies: unknown;
|
|
24
|
+
rlsBindings: unknown;
|
|
25
|
+
schedules: unknown;
|
|
26
|
+
homepage?: unknown;
|
|
27
|
+
gitCommitSha?: string;
|
|
28
|
+
}>;
|
|
29
|
+
dashboards: Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
appId: string;
|
|
32
|
+
title: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
domain?: string;
|
|
35
|
+
tags: string[];
|
|
36
|
+
filePath: string;
|
|
37
|
+
blockIds: string[];
|
|
38
|
+
blockPathRefs: string[];
|
|
39
|
+
unresolvedRefs: string[];
|
|
40
|
+
params: string[];
|
|
41
|
+
filters: string[];
|
|
42
|
+
layout: unknown;
|
|
43
|
+
gitCommitSha?: string;
|
|
44
|
+
}>;
|
|
45
|
+
}): void;
|
|
46
|
+
/** Read all apps from the registry, with their resolved dashboards joined. */
|
|
47
|
+
listAppsWithDashboards(): Array<{
|
|
48
|
+
app: Record<string, unknown>;
|
|
49
|
+
dashboards: Array<Record<string, unknown>>;
|
|
50
|
+
}>;
|
|
6
51
|
getBlock(id: string): Promise<BlockRecord | null>;
|
|
7
52
|
getBlockByName(name: string): Promise<BlockRecord | null>;
|
|
8
53
|
searchBlocks(query: BlockSearchQuery): Promise<BlockSearchResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-storage.d.ts","sourceRoot":"","sources":["../src/sqlite-storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,EAAE,MAAM;IAO1B,OAAO,CAAC,UAAU;IA+
|
|
1
|
+
{"version":3,"file":"sqlite-storage.d.ts","sourceRoot":"","sources":["../src/sqlite-storage.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite-storage.js
CHANGED
|
@@ -51,8 +51,98 @@ export class SQLiteStorage {
|
|
|
51
51
|
|
|
52
52
|
CREATE INDEX IF NOT EXISTS idx_version_block ON block_versions(block_id);
|
|
53
53
|
CREATE INDEX IF NOT EXISTS idx_version_active ON block_versions(block_id, is_active);
|
|
54
|
+
|
|
55
|
+
CREATE TABLE IF NOT EXISTS app_registry (
|
|
56
|
+
id TEXT PRIMARY KEY,
|
|
57
|
+
name TEXT NOT NULL,
|
|
58
|
+
domain TEXT NOT NULL,
|
|
59
|
+
description TEXT,
|
|
60
|
+
owners TEXT NOT NULL DEFAULT '[]',
|
|
61
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
62
|
+
file_path TEXT NOT NULL,
|
|
63
|
+
members TEXT NOT NULL DEFAULT '[]',
|
|
64
|
+
roles TEXT NOT NULL DEFAULT '[]',
|
|
65
|
+
policies TEXT NOT NULL DEFAULT '[]',
|
|
66
|
+
rls_bindings TEXT NOT NULL DEFAULT '[]',
|
|
67
|
+
schedules TEXT NOT NULL DEFAULT '[]',
|
|
68
|
+
homepage TEXT,
|
|
69
|
+
git_commit_sha TEXT NOT NULL DEFAULT '',
|
|
70
|
+
updated_at TEXT NOT NULL
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_app_domain ON app_registry(domain);
|
|
74
|
+
|
|
75
|
+
CREATE TABLE IF NOT EXISTS dashboard_registry (
|
|
76
|
+
id TEXT PRIMARY KEY,
|
|
77
|
+
app_id TEXT NOT NULL REFERENCES app_registry(id) ON DELETE CASCADE,
|
|
78
|
+
title TEXT NOT NULL,
|
|
79
|
+
description TEXT,
|
|
80
|
+
domain TEXT,
|
|
81
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
82
|
+
file_path TEXT NOT NULL,
|
|
83
|
+
block_ids TEXT NOT NULL DEFAULT '[]',
|
|
84
|
+
block_path_refs TEXT NOT NULL DEFAULT '[]',
|
|
85
|
+
unresolved_refs TEXT NOT NULL DEFAULT '[]',
|
|
86
|
+
params TEXT NOT NULL DEFAULT '[]',
|
|
87
|
+
filters TEXT NOT NULL DEFAULT '[]',
|
|
88
|
+
layout TEXT NOT NULL DEFAULT '{}',
|
|
89
|
+
git_commit_sha TEXT NOT NULL DEFAULT '',
|
|
90
|
+
updated_at TEXT NOT NULL
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_dashboard_app ON dashboard_registry(app_id);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_dashboard_domain ON dashboard_registry(domain);
|
|
54
95
|
`);
|
|
55
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Replace the persisted apps/dashboards rows with the contents of a
|
|
99
|
+
* compiled manifest. Idempotent: clears the registries and re-inserts.
|
|
100
|
+
* Apps and dashboards are file-format-first — the registries exist for
|
|
101
|
+
* fast queries from the UI/API surface, not as a source of truth.
|
|
102
|
+
*/
|
|
103
|
+
upsertAppsAndDashboards(input) {
|
|
104
|
+
const now = new Date().toISOString();
|
|
105
|
+
const txn = this.db.transaction(() => {
|
|
106
|
+
this.db.prepare('DELETE FROM dashboard_registry').run();
|
|
107
|
+
this.db.prepare('DELETE FROM app_registry').run();
|
|
108
|
+
const insertApp = this.db.prepare(`
|
|
109
|
+
INSERT INTO app_registry (
|
|
110
|
+
id, name, domain, description, owners, tags, file_path,
|
|
111
|
+
members, roles, policies, rls_bindings, schedules, homepage,
|
|
112
|
+
git_commit_sha, updated_at
|
|
113
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
114
|
+
`);
|
|
115
|
+
for (const a of input.apps) {
|
|
116
|
+
insertApp.run(a.id, a.name, a.domain, a.description ?? null, JSON.stringify(a.owners), JSON.stringify(a.tags), a.filePath, JSON.stringify(a.members), JSON.stringify(a.roles), JSON.stringify(a.policies), JSON.stringify(a.rlsBindings), JSON.stringify(a.schedules), a.homepage ? JSON.stringify(a.homepage) : null, a.gitCommitSha ?? '', now);
|
|
117
|
+
}
|
|
118
|
+
const insertDashboard = this.db.prepare(`
|
|
119
|
+
INSERT INTO dashboard_registry (
|
|
120
|
+
id, app_id, title, description, domain, tags, file_path,
|
|
121
|
+
block_ids, block_path_refs, unresolved_refs,
|
|
122
|
+
params, filters, layout, git_commit_sha, updated_at
|
|
123
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
124
|
+
`);
|
|
125
|
+
for (const d of input.dashboards) {
|
|
126
|
+
insertDashboard.run(d.id, d.appId, d.title, d.description ?? null, d.domain ?? null, JSON.stringify(d.tags), d.filePath, JSON.stringify(d.blockIds), JSON.stringify(d.blockPathRefs), JSON.stringify(d.unresolvedRefs), JSON.stringify(d.params), JSON.stringify(d.filters), JSON.stringify(d.layout), d.gitCommitSha ?? '', now);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
txn();
|
|
130
|
+
}
|
|
131
|
+
/** Read all apps from the registry, with their resolved dashboards joined. */
|
|
132
|
+
listAppsWithDashboards() {
|
|
133
|
+
const apps = this.db.prepare('SELECT * FROM app_registry ORDER BY name').all();
|
|
134
|
+
const dashboards = this.db.prepare('SELECT * FROM dashboard_registry').all();
|
|
135
|
+
const byApp = new Map();
|
|
136
|
+
for (const d of dashboards) {
|
|
137
|
+
if (!byApp.has(d.app_id))
|
|
138
|
+
byApp.set(d.app_id, []);
|
|
139
|
+
byApp.get(d.app_id).push(rowToDashboard(d));
|
|
140
|
+
}
|
|
141
|
+
return apps.map((a) => ({
|
|
142
|
+
app: rowToApp(a),
|
|
143
|
+
dashboards: byApp.get(a.id) ?? [],
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
56
146
|
async getBlock(id) {
|
|
57
147
|
const row = this.db.prepare('SELECT * FROM block_registry WHERE id = ?').get(id);
|
|
58
148
|
return row ? this.rowToBlock(row) : null;
|
|
@@ -254,4 +344,42 @@ function safeParseJSON(value, fallback) {
|
|
|
254
344
|
return fallback;
|
|
255
345
|
}
|
|
256
346
|
}
|
|
347
|
+
function rowToApp(row) {
|
|
348
|
+
return {
|
|
349
|
+
id: row.id,
|
|
350
|
+
name: row.name,
|
|
351
|
+
domain: row.domain,
|
|
352
|
+
description: row.description ?? undefined,
|
|
353
|
+
owners: safeParseJSON(row.owners, []),
|
|
354
|
+
tags: safeParseJSON(row.tags, []),
|
|
355
|
+
filePath: row.file_path,
|
|
356
|
+
members: safeParseJSON(row.members, []),
|
|
357
|
+
roles: safeParseJSON(row.roles, []),
|
|
358
|
+
policies: safeParseJSON(row.policies, []),
|
|
359
|
+
rlsBindings: safeParseJSON(row.rls_bindings, []),
|
|
360
|
+
schedules: safeParseJSON(row.schedules, []),
|
|
361
|
+
homepage: row.homepage ? safeParseJSON(row.homepage, null) : undefined,
|
|
362
|
+
gitCommitSha: row.git_commit_sha ?? '',
|
|
363
|
+
updatedAt: row.updated_at,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
function rowToDashboard(row) {
|
|
367
|
+
return {
|
|
368
|
+
id: row.id,
|
|
369
|
+
appId: row.app_id,
|
|
370
|
+
title: row.title,
|
|
371
|
+
description: row.description ?? undefined,
|
|
372
|
+
domain: row.domain ?? undefined,
|
|
373
|
+
tags: safeParseJSON(row.tags, []),
|
|
374
|
+
filePath: row.file_path,
|
|
375
|
+
blockIds: safeParseJSON(row.block_ids, []),
|
|
376
|
+
blockPathRefs: safeParseJSON(row.block_path_refs, []),
|
|
377
|
+
unresolvedRefs: safeParseJSON(row.unresolved_refs, []),
|
|
378
|
+
params: safeParseJSON(row.params, []),
|
|
379
|
+
filters: safeParseJSON(row.filters, []),
|
|
380
|
+
layout: safeParseJSON(row.layout, {}),
|
|
381
|
+
gitCommitSha: row.git_commit_sha ?? '',
|
|
382
|
+
updatedAt: row.updated_at,
|
|
383
|
+
};
|
|
384
|
+
}
|
|
257
385
|
//# sourceMappingURL=sqlite-storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-storage.js","sourceRoot":"","sources":["../src/sqlite-storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sqlite-storage.js","sourceRoot":"","sources":["../src/sqlite-storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duckcodeailabs/dql-project",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "DQL project and block registry primitives: block metadata, versions, sync, and storage adapters",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@duckcodeailabs/dql-core": "^1.
|
|
27
|
+
"@duckcodeailabs/dql-core": "^1.4.0",
|
|
28
28
|
"better-sqlite3": "^11.7.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|