@adminiumjs/meta 0.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/dist/bootstrap.d.ts +103 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +225 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/columns.d.ts +44 -0
- package/dist/columns.d.ts.map +1 -0
- package/dist/columns.js +57 -0
- package/dist/columns.js.map +1 -0
- package/dist/connect.d.ts +38 -0
- package/dist/connect.d.ts.map +1 -0
- package/dist/connect.js +57 -0
- package/dist/connect.js.map +1 -0
- package/dist/ids.d.ts +79 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/ids.js +165 -0
- package/dist/ids.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/0001_core_auth.d.ts +9 -0
- package/dist/migrations/0001_core_auth.d.ts.map +1 -0
- package/dist/migrations/0001_core_auth.js +102 -0
- package/dist/migrations/0001_core_auth.js.map +1 -0
- package/dist/migrations/0002_rbac.d.ts +8 -0
- package/dist/migrations/0002_rbac.d.ts.map +1 -0
- package/dist/migrations/0002_rbac.js +75 -0
- package/dist/migrations/0002_rbac.js.map +1 -0
- package/dist/migrations/0003_connections_schema.d.ts +9 -0
- package/dist/migrations/0003_connections_schema.d.ts.map +1 -0
- package/dist/migrations/0003_connections_schema.js +100 -0
- package/dist/migrations/0003_connections_schema.js.map +1 -0
- package/dist/migrations/0004_pages_views.d.ts +8 -0
- package/dist/migrations/0004_pages_views.d.ts.map +1 -0
- package/dist/migrations/0004_pages_views.js +59 -0
- package/dist/migrations/0004_pages_views.js.map +1 -0
- package/dist/migrations/0005_ops.d.ts +9 -0
- package/dist/migrations/0005_ops.d.ts.map +1 -0
- package/dist/migrations/0005_ops.js +104 -0
- package/dist/migrations/0005_ops.js.map +1 -0
- package/dist/migrations/0006_platform.d.ts +11 -0
- package/dist/migrations/0006_platform.d.ts.map +1 -0
- package/dist/migrations/0006_platform.js +259 -0
- package/dist/migrations/0006_platform.js.map +1 -0
- package/dist/migrations/0007_llm_runs.d.ts +33 -0
- package/dist/migrations/0007_llm_runs.d.ts.map +1 -0
- package/dist/migrations/0007_llm_runs.js +62 -0
- package/dist/migrations/0007_llm_runs.js.map +1 -0
- package/dist/migrations/0008_llm_overrides.d.ts +18 -0
- package/dist/migrations/0008_llm_overrides.d.ts.map +1 -0
- package/dist/migrations/0008_llm_overrides.js +24 -0
- package/dist/migrations/0008_llm_overrides.js.map +1 -0
- package/dist/migrations/0009_views_kind.d.ts +20 -0
- package/dist/migrations/0009_views_kind.d.ts.map +1 -0
- package/dist/migrations/0009_views_kind.js +24 -0
- package/dist/migrations/0009_views_kind.js.map +1 -0
- package/dist/migrations/0010_llm_prompt_version_width.d.ts +19 -0
- package/dist/migrations/0010_llm_prompt_version_width.d.ts.map +1 -0
- package/dist/migrations/0010_llm_prompt_version_width.js +28 -0
- package/dist/migrations/0010_llm_prompt_version_width.js.map +1 -0
- package/dist/migrations/index.d.ts +29 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +43 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrator.d.ts +83 -0
- package/dist/migrator.d.ts.map +1 -0
- package/dist/migrator.js +173 -0
- package/dist/migrator.js.map +1 -0
- package/dist/prefix.d.ts +19 -0
- package/dist/prefix.d.ts.map +1 -0
- package/dist/prefix.js +33 -0
- package/dist/prefix.js.map +1 -0
- package/dist/repos/api-keys.d.ts +31 -0
- package/dist/repos/api-keys.d.ts.map +1 -0
- package/dist/repos/api-keys.js +62 -0
- package/dist/repos/api-keys.js.map +1 -0
- package/dist/repos/audit.d.ts +51 -0
- package/dist/repos/audit.d.ts.map +1 -0
- package/dist/repos/audit.js +78 -0
- package/dist/repos/audit.js.map +1 -0
- package/dist/repos/connections.d.ts +90 -0
- package/dist/repos/connections.d.ts.map +1 -0
- package/dist/repos/connections.js +191 -0
- package/dist/repos/connections.js.map +1 -0
- package/dist/repos/email-templates.d.ts +47 -0
- package/dist/repos/email-templates.d.ts.map +1 -0
- package/dist/repos/email-templates.js +93 -0
- package/dist/repos/email-templates.js.map +1 -0
- package/dist/repos/exports.d.ts +67 -0
- package/dist/repos/exports.d.ts.map +1 -0
- package/dist/repos/exports.js +132 -0
- package/dist/repos/exports.js.map +1 -0
- package/dist/repos/files.d.ts +52 -0
- package/dist/repos/files.d.ts.map +1 -0
- package/dist/repos/files.js +86 -0
- package/dist/repos/files.js.map +1 -0
- package/dist/repos/imports.d.ts +71 -0
- package/dist/repos/imports.d.ts.map +1 -0
- package/dist/repos/imports.js +111 -0
- package/dist/repos/imports.js.map +1 -0
- package/dist/repos/index.d.ts +26 -0
- package/dist/repos/index.d.ts.map +1 -0
- package/dist/repos/index.js +26 -0
- package/dist/repos/index.js.map +1 -0
- package/dist/repos/jobs.d.ts +71 -0
- package/dist/repos/jobs.d.ts.map +1 -0
- package/dist/repos/jobs.js +187 -0
- package/dist/repos/jobs.js.map +1 -0
- package/dist/repos/llm-overrides.d.ts +89 -0
- package/dist/repos/llm-overrides.d.ts.map +1 -0
- package/dist/repos/llm-overrides.js +205 -0
- package/dist/repos/llm-overrides.js.map +1 -0
- package/dist/repos/llm-runs.d.ts +114 -0
- package/dist/repos/llm-runs.d.ts.map +1 -0
- package/dist/repos/llm-runs.js +214 -0
- package/dist/repos/llm-runs.js.map +1 -0
- package/dist/repos/notification-prefs.d.ts +34 -0
- package/dist/repos/notification-prefs.d.ts.map +1 -0
- package/dist/repos/notification-prefs.js +80 -0
- package/dist/repos/notification-prefs.js.map +1 -0
- package/dist/repos/notifications.d.ts +60 -0
- package/dist/repos/notifications.d.ts.map +1 -0
- package/dist/repos/notifications.js +107 -0
- package/dist/repos/notifications.js.map +1 -0
- package/dist/repos/overrides.d.ts +59 -0
- package/dist/repos/overrides.d.ts.map +1 -0
- package/dist/repos/overrides.js +143 -0
- package/dist/repos/overrides.js.map +1 -0
- package/dist/repos/pages.d.ts +192 -0
- package/dist/repos/pages.d.ts.map +1 -0
- package/dist/repos/pages.js +374 -0
- package/dist/repos/pages.js.map +1 -0
- package/dist/repos/password-resets.d.ts +32 -0
- package/dist/repos/password-resets.d.ts.map +1 -0
- package/dist/repos/password-resets.js +56 -0
- package/dist/repos/password-resets.js.map +1 -0
- package/dist/repos/permissions.d.ts +28 -0
- package/dist/repos/permissions.d.ts.map +1 -0
- package/dist/repos/permissions.js +100 -0
- package/dist/repos/permissions.js.map +1 -0
- package/dist/repos/roles.d.ts +33 -0
- package/dist/repos/roles.d.ts.map +1 -0
- package/dist/repos/roles.js +89 -0
- package/dist/repos/roles.js.map +1 -0
- package/dist/repos/scheduled-reports.d.ts +73 -0
- package/dist/repos/scheduled-reports.d.ts.map +1 -0
- package/dist/repos/scheduled-reports.js +132 -0
- package/dist/repos/scheduled-reports.js.map +1 -0
- package/dist/repos/sessions.d.ts +33 -0
- package/dist/repos/sessions.d.ts.map +1 -0
- package/dist/repos/sessions.js +79 -0
- package/dist/repos/sessions.js.map +1 -0
- package/dist/repos/settings.d.ts +25 -0
- package/dist/repos/settings.d.ts.map +1 -0
- package/dist/repos/settings.js +73 -0
- package/dist/repos/settings.js.map +1 -0
- package/dist/repos/snapshots.d.ts +79 -0
- package/dist/repos/snapshots.d.ts.map +1 -0
- package/dist/repos/snapshots.js +191 -0
- package/dist/repos/snapshots.js.map +1 -0
- package/dist/repos/user-prefs.d.ts +56 -0
- package/dist/repos/user-prefs.d.ts.map +1 -0
- package/dist/repos/user-prefs.js +147 -0
- package/dist/repos/user-prefs.js.map +1 -0
- package/dist/repos/users.d.ts +38 -0
- package/dist/repos/users.d.ts.map +1 -0
- package/dist/repos/users.js +103 -0
- package/dist/repos/users.js.map +1 -0
- package/dist/repos/util.d.ts +45 -0
- package/dist/repos/util.d.ts.map +1 -0
- package/dist/repos/util.js +81 -0
- package/dist/repos/util.js.map +1 -0
- package/dist/repos/views.d.ts +75 -0
- package/dist/repos/views.d.ts.map +1 -0
- package/dist/repos/views.js +180 -0
- package/dist/repos/views.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +4 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/json-payloads.d.ts +479 -0
- package/dist/schema/json-payloads.d.ts.map +1 -0
- package/dist/schema/json-payloads.js +340 -0
- package/dist/schema/json-payloads.js.map +1 -0
- package/dist/schema/settings-registry.d.ts +187 -0
- package/dist/schema/settings-registry.d.ts.map +1 -0
- package/dist/schema/settings-registry.js +183 -0
- package/dist/schema/settings-registry.js.map +1 -0
- package/dist/schema/tables.d.ts +568 -0
- package/dist/schema/tables.d.ts.map +1 -0
- package/dist/schema/tables.js +51 -0
- package/dist/schema/tables.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-overrides.js","sourceRoot":"","sources":["../../src/repos/llm-overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO;IACP,KAAK;IACL,KAAK;IACL,MAAM;IACN,gBAAgB;IAChB,kBAAkB;IAClB,qBAAqB;CACb,CAAC;AAGX,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAEpE,gFAAgF;AAChF,MAAM,aAAa,GAAkC,IAAI,GAAG,CAAmB;IAC7E,OAAO,EAAE,2FAA2F;IACpG,KAAK;IACL,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,KAAuB;IACnD,OAAO,GAAG,SAAS,GAAG,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAA0B,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAyCD,SAAS,MAAM,CAAC,GAA6C;IAC3D,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,mBAAmB,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,KAAK;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,KAAK,EAAE,QAAQ,CAAiC,GAAG,CAAC,KAAK,CAAC;QAC1D,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAA+B;QAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAS,WAAW,CAAC,KAAuB,EAAE,KAAc;IAC1D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,mBAAmB,CAAC,gBAAgB,KAAK,kCAAkC,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAuB,EAAE,UAAyB;IAC3E,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,4EAA4E;IAC5E,iEAAiE;IACjE,IAAI,KAAK,KAAK,OAAO,IAAI,WAAW,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,mBAAmB,CAAC,gBAAgB,KAAK,sBAAsB,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpB,KAAK,UAAU,UAAU,CACvB,YAAoB,EACpB,EAAU,EACV,SAAiB,EACjB,UAAyB;QAEzB,IAAI,CAAC,GAAG,EAAE;aACP,UAAU,CAAC,2BAA2B,CAAC;aACvC,SAAS,EAAE;aACX,KAAK,CAAC,cAAc,EAAE,GAAG,EAAE,YAAY,CAAC;aACxC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC;aAC3B,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;aACpB,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACrG,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO;QACL;;;;;WAKG;QACH,KAAK,CAAC,MAAM,CAAC,KAA6B,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;YACjE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,CAAC,CAAC;YAC/F,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC;YAC5C,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC3C,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAEtC,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACvF,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAErC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAChC,MAAM,EAAE;qBACL,WAAW,CAAC,2BAA2B,CAAC;qBACxC,GAAG,CAAC;oBACH,KAAK,EAAE,MAAM;oBACb,UAAU;oBACV,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;oBAChC,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,EAAE;iBACd,CAAC;qBACD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;qBAC7B,OAAO,EAAE,CAAC;gBACb,OAAO;oBACL,QAAQ,EAAE;wBACR,GAAG,MAAM;wBACT,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,UAAU;wBACV,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;wBAChC,MAAM,EAAE,QAAQ;wBAChB,SAAS,EAAE,EAAE;qBACd;oBACD,MAAM,EAAE,SAAS;oBACjB,MAAM;iBACP,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG;gBACV,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;gBAChB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,EAAE;gBACF,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU;gBACV,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,KAAK;gBACb,UAAU;gBACV,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;gBAChC,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;gBAClC,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,EAAE;aACd,CAAC;YACF,MAAM,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,GAA+C,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjH,CAAC;QAED,yFAAyF;QACzF,KAAK,CAAC,OAAO,CAAC,MAAmB,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;YACxD,MAAM,EAAE;iBACL,WAAW,CAAC,2BAA2B,CAAC;iBACxC,GAAG,CAAC;gBACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,EAAE;aACd,CAAC;iBACD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;iBAC3B,OAAO,EAAE,CAAC;QACf,CAAC;QAED,yEAAyE;QACzE,KAAK,CAAC,UAAU,CAAC,EAAU;YACzB,MAAM,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAClF,CAAC;QAED,4EAA4E;QAC5E,KAAK,CAAC,iBAAiB,CAAC,YAAoB;YAC1C,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,UAAU,CAAC,2BAA2B,CAAC;iBACvC,SAAS,EAAE;iBACX,KAAK,CAAC,cAAc,EAAE,GAAG,EAAE,YAAY,CAAC;iBACxC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC;iBAC3B,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;iBAC3B,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;iBACpB,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* llmRunsRepo — adminium_llm_runs (07-meta-store.md §3.19, 06-llm-assist.md §7.4).
|
|
3
|
+
*
|
|
4
|
+
* One row = one enrichment attempt (provider API or BYO paste). This repo is the
|
|
5
|
+
* thin persistence layer: it round-trips rows and validates the json payloads it
|
|
6
|
+
* writes. The §7.4 run-lifecycle transition rules and run immutability live one
|
|
7
|
+
* layer up in the server run-service — the repo's `updateStatus` accepts an
|
|
8
|
+
* optional `expected` current-status guard so the service can transition
|
|
9
|
+
* atomically, but it does not itself know the legal transition graph.
|
|
10
|
+
*
|
|
11
|
+
* §9 telemetry-free guarantee: for BYO runs `provider`/`model` stay NULL. The
|
|
12
|
+
* repo never fills them; enforcing "BYO ⇒ null" is the run-service's job.
|
|
13
|
+
*/
|
|
14
|
+
import type { MetaDb } from '../connect.js';
|
|
15
|
+
import { type LlmRunReview, type LlmRunStatus } from '../schema/json-payloads.js';
|
|
16
|
+
export type LlmRunMode = 'provider' | 'byo';
|
|
17
|
+
export type LlmValidationStatus = 'pending' | 'valid' | 'partial' | 'invalid';
|
|
18
|
+
export type { LlmRunStatus, LlmRunReview };
|
|
19
|
+
export interface LlmRun {
|
|
20
|
+
id: string;
|
|
21
|
+
connectionId: string;
|
|
22
|
+
snapshotId: string;
|
|
23
|
+
mode: LlmRunMode;
|
|
24
|
+
provider: string | null;
|
|
25
|
+
model: string | null;
|
|
26
|
+
promptVersion: string;
|
|
27
|
+
promptHash: string;
|
|
28
|
+
promptText: string | null;
|
|
29
|
+
sections: string[] | null;
|
|
30
|
+
locales: string[] | null;
|
|
31
|
+
sampling: {
|
|
32
|
+
maxValuesPerColumn: number;
|
|
33
|
+
} | null;
|
|
34
|
+
chunksTotal: number;
|
|
35
|
+
chunksReceived: number;
|
|
36
|
+
responseRaw: string | null;
|
|
37
|
+
responseJson: unknown | null;
|
|
38
|
+
status: LlmRunStatus;
|
|
39
|
+
validationStatus: LlmValidationStatus;
|
|
40
|
+
validationErrors: unknown | null;
|
|
41
|
+
review: LlmRunReview | null;
|
|
42
|
+
tokensIn: number | null;
|
|
43
|
+
tokensOut: number | null;
|
|
44
|
+
durationMs: number | null;
|
|
45
|
+
appliedBy: string | null;
|
|
46
|
+
appliedAt: number | null;
|
|
47
|
+
createdBy: string | null;
|
|
48
|
+
createdAt: number;
|
|
49
|
+
}
|
|
50
|
+
export interface CreateLlmRunInput {
|
|
51
|
+
/** Defaults to `newId('run')`. The run id equals the runId embedded in the prompt (§7.4). */
|
|
52
|
+
id?: string;
|
|
53
|
+
connectionId: string;
|
|
54
|
+
snapshotId: string;
|
|
55
|
+
mode: LlmRunMode;
|
|
56
|
+
provider?: string | null;
|
|
57
|
+
model?: string | null;
|
|
58
|
+
promptVersion: string;
|
|
59
|
+
promptHash: string;
|
|
60
|
+
promptText?: string | null;
|
|
61
|
+
sections?: readonly string[] | null;
|
|
62
|
+
locales?: readonly string[] | null;
|
|
63
|
+
sampling?: {
|
|
64
|
+
maxValuesPerColumn: number;
|
|
65
|
+
} | null;
|
|
66
|
+
chunksTotal?: number;
|
|
67
|
+
chunksReceived?: number;
|
|
68
|
+
status?: LlmRunStatus;
|
|
69
|
+
validationStatus?: LlmValidationStatus;
|
|
70
|
+
createdBy?: string | null;
|
|
71
|
+
}
|
|
72
|
+
/** Fields recordResponse persists after validating a received chunk/response. */
|
|
73
|
+
export interface RecordResponsePatch {
|
|
74
|
+
status: LlmRunStatus;
|
|
75
|
+
validationStatus: LlmValidationStatus;
|
|
76
|
+
responseRaw?: string | null;
|
|
77
|
+
responseJson?: unknown | null;
|
|
78
|
+
validationErrors?: unknown | null;
|
|
79
|
+
chunksReceived?: number;
|
|
80
|
+
tokensIn?: number | null;
|
|
81
|
+
tokensOut?: number | null;
|
|
82
|
+
durationMs?: number | null;
|
|
83
|
+
}
|
|
84
|
+
export interface MarkAppliedInput {
|
|
85
|
+
appliedBy?: string | null;
|
|
86
|
+
/** Terminal status — `applied` or `partially_applied`. */
|
|
87
|
+
status: Extract<LlmRunStatus, 'applied' | 'partially_applied'>;
|
|
88
|
+
review?: LlmRunReview;
|
|
89
|
+
}
|
|
90
|
+
export declare function llmRunsRepo(meta: MetaDb): {
|
|
91
|
+
findById: (id: string) => Promise<LlmRun | null>;
|
|
92
|
+
/** Persist a new run (typically a `draft`). Validates every json payload before writing. */
|
|
93
|
+
create(input: CreateLlmRunInput, at?: number): Promise<LlmRun>;
|
|
94
|
+
/** Run history for a connection, newest first. */
|
|
95
|
+
listForConnection(connectionId: string): Promise<LlmRun[]>;
|
|
96
|
+
/**
|
|
97
|
+
* Set the lifecycle status. When `expected` is given the update only lands if
|
|
98
|
+
* the row is still in that status (optimistic transition) — the server
|
|
99
|
+
* run-service uses this to make transitions atomic. Returns whether a row
|
|
100
|
+
* changed.
|
|
101
|
+
*/
|
|
102
|
+
updateStatus(id: string, status: LlmRunStatus, opts?: {
|
|
103
|
+
expected?: LlmRunStatus;
|
|
104
|
+
at?: number;
|
|
105
|
+
}): Promise<boolean>;
|
|
106
|
+
/** Persist a validated (or fatally-rejected) response and advance the run. */
|
|
107
|
+
recordResponse(id: string, patch: RecordResponsePatch): Promise<boolean>;
|
|
108
|
+
/** Persist the accepted/rejected suggestion-id lists (§8.3). */
|
|
109
|
+
recordReview(id: string, review: LlmRunReview): Promise<boolean>;
|
|
110
|
+
/** Terminal apply: stamp applied_at/applied_by, set the terminal status, persist the review. */
|
|
111
|
+
markApplied(id: string, input: MarkAppliedInput, at?: number): Promise<boolean>;
|
|
112
|
+
};
|
|
113
|
+
export type LlmRunsRepo = ReturnType<typeof llmRunsRepo>;
|
|
114
|
+
//# sourceMappingURL=llm-runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-runs.d.ts","sourceRoot":"","sources":["../../src/repos/llm-runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* llmRunsRepo — adminium_llm_runs (07-meta-store.md §3.19, 06-llm-assist.md §7.4).
|
|
3
|
+
*
|
|
4
|
+
* One row = one enrichment attempt (provider API or BYO paste). This repo is the
|
|
5
|
+
* thin persistence layer: it round-trips rows and validates the json payloads it
|
|
6
|
+
* writes. The §7.4 run-lifecycle transition rules and run immutability live one
|
|
7
|
+
* layer up in the server run-service — the repo's `updateStatus` accepts an
|
|
8
|
+
* optional `expected` current-status guard so the service can transition
|
|
9
|
+
* atomically, but it does not itself know the legal transition graph.
|
|
10
|
+
*
|
|
11
|
+
* §9 telemetry-free guarantee: for BYO runs `provider`/`model` stay NULL. The
|
|
12
|
+
* repo never fills them; enforcing "BYO ⇒ null" is the run-service's job.
|
|
13
|
+
*/
|
|
14
|
+
import { newId } from '../ids.js';
|
|
15
|
+
import { llmRunLocalesSchema, llmRunModeSchema, llmRunReviewSchema, llmRunSamplingSchema, llmRunSectionsSchema, llmRunStatusSchema, llmValidationStatusSchema, } from '../schema/json-payloads.js';
|
|
16
|
+
import { MetaValidationError, packJson, readJsonOrNull } from './util.js';
|
|
17
|
+
function decode(row) {
|
|
18
|
+
return {
|
|
19
|
+
id: row.id,
|
|
20
|
+
connectionId: row.connectionId,
|
|
21
|
+
snapshotId: row.snapshotId,
|
|
22
|
+
mode: row.mode,
|
|
23
|
+
provider: row.provider,
|
|
24
|
+
model: row.model,
|
|
25
|
+
promptVersion: row.promptVersion,
|
|
26
|
+
promptHash: row.promptHash,
|
|
27
|
+
promptText: row.promptText,
|
|
28
|
+
sections: readJsonOrNull(row.sections),
|
|
29
|
+
locales: readJsonOrNull(row.locales),
|
|
30
|
+
sampling: readJsonOrNull(row.sampling),
|
|
31
|
+
chunksTotal: row.chunksTotal,
|
|
32
|
+
chunksReceived: row.chunksReceived,
|
|
33
|
+
responseRaw: row.responseRaw,
|
|
34
|
+
responseJson: readJsonOrNull(row.responseJson),
|
|
35
|
+
status: row.status,
|
|
36
|
+
validationStatus: row.validationStatus,
|
|
37
|
+
validationErrors: readJsonOrNull(row.validationErrors),
|
|
38
|
+
review: readJsonOrNull(row.review),
|
|
39
|
+
tokensIn: row.tokensIn,
|
|
40
|
+
tokensOut: row.tokensOut,
|
|
41
|
+
durationMs: row.durationMs,
|
|
42
|
+
appliedBy: row.appliedBy,
|
|
43
|
+
appliedAt: row.appliedAt,
|
|
44
|
+
createdBy: row.createdBy,
|
|
45
|
+
createdAt: row.createdAt,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function llmRunsRepo(meta) {
|
|
49
|
+
const { db } = meta;
|
|
50
|
+
async function findById(id) {
|
|
51
|
+
const row = await db.selectFrom('adminium_llm_runs').selectAll().where('id', '=', id).executeTakeFirst();
|
|
52
|
+
return row === undefined ? null : decode(row);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
findById,
|
|
56
|
+
/** Persist a new run (typically a `draft`). Validates every json payload before writing. */
|
|
57
|
+
async create(input, at = Date.now()) {
|
|
58
|
+
const mode = llmRunModeSchema.safeParse(input.mode);
|
|
59
|
+
if (!mode.success)
|
|
60
|
+
throw new MetaValidationError('invalid llm run mode', mode.error.issues);
|
|
61
|
+
const status = llmRunStatusSchema.safeParse(input.status ?? 'draft');
|
|
62
|
+
if (!status.success)
|
|
63
|
+
throw new MetaValidationError('invalid llm run status', status.error.issues);
|
|
64
|
+
const validationStatus = llmValidationStatusSchema.safeParse(input.validationStatus ?? 'pending');
|
|
65
|
+
if (!validationStatus.success) {
|
|
66
|
+
throw new MetaValidationError('invalid llm validation status', validationStatus.error.issues);
|
|
67
|
+
}
|
|
68
|
+
let sections = null;
|
|
69
|
+
if (input.sections !== null && input.sections !== undefined) {
|
|
70
|
+
const parsed = llmRunSectionsSchema.safeParse(input.sections);
|
|
71
|
+
if (!parsed.success)
|
|
72
|
+
throw new MetaValidationError('invalid llm run sections', parsed.error.issues);
|
|
73
|
+
sections = packJson(parsed.data);
|
|
74
|
+
}
|
|
75
|
+
let locales = null;
|
|
76
|
+
if (input.locales !== null && input.locales !== undefined) {
|
|
77
|
+
const parsed = llmRunLocalesSchema.safeParse(input.locales);
|
|
78
|
+
if (!parsed.success)
|
|
79
|
+
throw new MetaValidationError('invalid llm run locales', parsed.error.issues);
|
|
80
|
+
locales = packJson(parsed.data);
|
|
81
|
+
}
|
|
82
|
+
let sampling = null;
|
|
83
|
+
if (input.sampling !== undefined) {
|
|
84
|
+
const parsed = llmRunSamplingSchema.safeParse(input.sampling);
|
|
85
|
+
if (!parsed.success)
|
|
86
|
+
throw new MetaValidationError('invalid llm run sampling', parsed.error.issues);
|
|
87
|
+
sampling = packJson(parsed.data);
|
|
88
|
+
}
|
|
89
|
+
const row = {
|
|
90
|
+
id: input.id ?? newId('run'),
|
|
91
|
+
connectionId: input.connectionId,
|
|
92
|
+
snapshotId: input.snapshotId,
|
|
93
|
+
mode: mode.data,
|
|
94
|
+
provider: input.provider ?? null,
|
|
95
|
+
model: input.model ?? null,
|
|
96
|
+
promptVersion: input.promptVersion,
|
|
97
|
+
promptHash: input.promptHash,
|
|
98
|
+
promptText: input.promptText ?? null,
|
|
99
|
+
sections,
|
|
100
|
+
locales,
|
|
101
|
+
sampling,
|
|
102
|
+
chunksTotal: input.chunksTotal ?? 1,
|
|
103
|
+
chunksReceived: input.chunksReceived ?? 0,
|
|
104
|
+
responseRaw: null,
|
|
105
|
+
responseJson: null,
|
|
106
|
+
status: status.data,
|
|
107
|
+
validationStatus: validationStatus.data,
|
|
108
|
+
validationErrors: null,
|
|
109
|
+
review: null,
|
|
110
|
+
tokensIn: null,
|
|
111
|
+
tokensOut: null,
|
|
112
|
+
durationMs: null,
|
|
113
|
+
appliedAt: null,
|
|
114
|
+
appliedBy: null,
|
|
115
|
+
createdBy: input.createdBy ?? null,
|
|
116
|
+
createdAt: at,
|
|
117
|
+
};
|
|
118
|
+
await db.insertInto('adminium_llm_runs').values(row).execute();
|
|
119
|
+
return decode(row);
|
|
120
|
+
},
|
|
121
|
+
/** Run history for a connection, newest first. */
|
|
122
|
+
async listForConnection(connectionId) {
|
|
123
|
+
const rows = await db
|
|
124
|
+
.selectFrom('adminium_llm_runs')
|
|
125
|
+
.selectAll()
|
|
126
|
+
.where('connectionId', '=', connectionId)
|
|
127
|
+
.orderBy('createdAt', 'desc')
|
|
128
|
+
.orderBy('id', 'desc')
|
|
129
|
+
.execute();
|
|
130
|
+
return rows.map(decode);
|
|
131
|
+
},
|
|
132
|
+
/**
|
|
133
|
+
* Set the lifecycle status. When `expected` is given the update only lands if
|
|
134
|
+
* the row is still in that status (optimistic transition) — the server
|
|
135
|
+
* run-service uses this to make transitions atomic. Returns whether a row
|
|
136
|
+
* changed.
|
|
137
|
+
*/
|
|
138
|
+
async updateStatus(id, status, opts = {}) {
|
|
139
|
+
const valid = llmRunStatusSchema.safeParse(status);
|
|
140
|
+
if (!valid.success)
|
|
141
|
+
throw new MetaValidationError('invalid llm run status', valid.error.issues);
|
|
142
|
+
let query = db.updateTable('adminium_llm_runs').set({ status: valid.data }).where('id', '=', id);
|
|
143
|
+
if (opts.expected !== undefined)
|
|
144
|
+
query = query.where('status', '=', opts.expected);
|
|
145
|
+
const res = await query.executeTakeFirst();
|
|
146
|
+
return Number(res.numUpdatedRows) === 1;
|
|
147
|
+
},
|
|
148
|
+
/** Persist a validated (or fatally-rejected) response and advance the run. */
|
|
149
|
+
async recordResponse(id, patch) {
|
|
150
|
+
const status = llmRunStatusSchema.safeParse(patch.status);
|
|
151
|
+
if (!status.success)
|
|
152
|
+
throw new MetaValidationError('invalid llm run status', status.error.issues);
|
|
153
|
+
const validationStatus = llmValidationStatusSchema.safeParse(patch.validationStatus);
|
|
154
|
+
if (!validationStatus.success) {
|
|
155
|
+
throw new MetaValidationError('invalid llm validation status', validationStatus.error.issues);
|
|
156
|
+
}
|
|
157
|
+
const set = {
|
|
158
|
+
status: status.data,
|
|
159
|
+
validationStatus: validationStatus.data,
|
|
160
|
+
};
|
|
161
|
+
if (patch.responseRaw !== undefined)
|
|
162
|
+
set.responseRaw = patch.responseRaw;
|
|
163
|
+
if (patch.responseJson !== undefined) {
|
|
164
|
+
set.responseJson = patch.responseJson === null ? null : packJson(patch.responseJson);
|
|
165
|
+
}
|
|
166
|
+
if (patch.validationErrors !== undefined) {
|
|
167
|
+
set.validationErrors = patch.validationErrors === null ? null : packJson(patch.validationErrors);
|
|
168
|
+
}
|
|
169
|
+
if (patch.chunksReceived !== undefined)
|
|
170
|
+
set.chunksReceived = patch.chunksReceived;
|
|
171
|
+
if (patch.tokensIn !== undefined)
|
|
172
|
+
set.tokensIn = patch.tokensIn;
|
|
173
|
+
if (patch.tokensOut !== undefined)
|
|
174
|
+
set.tokensOut = patch.tokensOut;
|
|
175
|
+
if (patch.durationMs !== undefined)
|
|
176
|
+
set.durationMs = patch.durationMs;
|
|
177
|
+
const res = await db.updateTable('adminium_llm_runs').set(set).where('id', '=', id).executeTakeFirst();
|
|
178
|
+
return Number(res.numUpdatedRows) === 1;
|
|
179
|
+
},
|
|
180
|
+
/** Persist the accepted/rejected suggestion-id lists (§8.3). */
|
|
181
|
+
async recordReview(id, review) {
|
|
182
|
+
const valid = llmRunReviewSchema.safeParse(review);
|
|
183
|
+
if (!valid.success)
|
|
184
|
+
throw new MetaValidationError('invalid llm run review', valid.error.issues);
|
|
185
|
+
const res = await db
|
|
186
|
+
.updateTable('adminium_llm_runs')
|
|
187
|
+
.set({ review: packJson(valid.data) })
|
|
188
|
+
.where('id', '=', id)
|
|
189
|
+
.executeTakeFirst();
|
|
190
|
+
return Number(res.numUpdatedRows) === 1;
|
|
191
|
+
},
|
|
192
|
+
/** Terminal apply: stamp applied_at/applied_by, set the terminal status, persist the review. */
|
|
193
|
+
async markApplied(id, input, at = Date.now()) {
|
|
194
|
+
const status = llmRunStatusSchema.safeParse(input.status);
|
|
195
|
+
if (!status.success || (status.data !== 'applied' && status.data !== 'partially_applied')) {
|
|
196
|
+
throw new MetaValidationError('markApplied status must be applied | partially_applied');
|
|
197
|
+
}
|
|
198
|
+
const set = {
|
|
199
|
+
status: status.data,
|
|
200
|
+
appliedBy: input.appliedBy ?? null,
|
|
201
|
+
appliedAt: at,
|
|
202
|
+
};
|
|
203
|
+
if (input.review !== undefined) {
|
|
204
|
+
const review = llmRunReviewSchema.safeParse(input.review);
|
|
205
|
+
if (!review.success)
|
|
206
|
+
throw new MetaValidationError('invalid llm run review', review.error.issues);
|
|
207
|
+
set.review = packJson(review.data);
|
|
208
|
+
}
|
|
209
|
+
const res = await db.updateTable('adminium_llm_runs').set(set).where('id', '=', id).executeTakeFirst();
|
|
210
|
+
return Number(res.numUpdatedRows) === 1;
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=llm-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-runs.js","sourceRoot":"","sources":["../../src/repos/llm-runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notificationPrefsRepo — adminium_notification_prefs (07-meta-store.md §3.21):
|
|
3
|
+
* composite-PK `(user_id, event_key)` matrix of per-event delivery channels
|
|
4
|
+
* (`notificationChannelsSchema` — inApp / email / push).
|
|
5
|
+
*
|
|
6
|
+
* A missing row means "defaults" ({@link DEFAULT_NOTIFICATION_CHANNELS}), so
|
|
7
|
+
* the table only stores deviations — reads merge, writes upsert. Channel
|
|
8
|
+
* AVAILABILITY (no SMTP ⇒ email undeliverable) is a server concern layered on
|
|
9
|
+
* top; the repo stores the user's intent verbatim so it survives the day a
|
|
10
|
+
* transport appears (§8.2 never-hide-always-explain).
|
|
11
|
+
*/
|
|
12
|
+
import type { MetaDb } from '../connect.js';
|
|
13
|
+
import { type NotificationChannels } from '../schema/json-payloads.js';
|
|
14
|
+
/** Default per-event channels when no row exists (comp: push opt-in). */
|
|
15
|
+
export declare const DEFAULT_NOTIFICATION_CHANNELS: NotificationChannels;
|
|
16
|
+
export interface NotificationPref {
|
|
17
|
+
userId: string;
|
|
18
|
+
eventKey: string;
|
|
19
|
+
channels: NotificationChannels;
|
|
20
|
+
updatedAt: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function notificationPrefsRepo(meta: MetaDb): {
|
|
23
|
+
get: (userId: string, eventKey: string) => Promise<NotificationPref | null>;
|
|
24
|
+
/** Stored channels for one event, defaults when no row exists. */
|
|
25
|
+
channelsFor(userId: string, eventKey: string): Promise<NotificationChannels>;
|
|
26
|
+
listForUser(userId: string): Promise<NotificationPref[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Composite-PK upsert, portably: UPDATE first, INSERT on zero affected
|
|
29
|
+
* rows (the meta store has no cross-dialect ON CONFLICT — repos/util.ts).
|
|
30
|
+
*/
|
|
31
|
+
upsert(userId: string, eventKey: string, channels: NotificationChannels, at?: number): Promise<NotificationPref>;
|
|
32
|
+
};
|
|
33
|
+
export type NotificationPrefsRepo = ReturnType<typeof notificationPrefsRepo>;
|
|
34
|
+
//# sourceMappingURL=notification-prefs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-prefs.d.ts","sourceRoot":"","sources":["../../src/repos/notification-prefs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGnG,yEAAyE;AACzE,eAAO,MAAM,6BAA6B,EAAE,oBAI3C,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM;kBAGrB,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAmBpF,kEAAkE;wBACxC,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;wBAIxD,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAe9D;;;OAGG;mBAEO,MAAM,YACJ,MAAM,YACN,oBAAoB,OAC1B,MAAM,GACT,OAAO,CAAC,gBAAgB,CAAC;EAiB/B;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notificationPrefsRepo — adminium_notification_prefs (07-meta-store.md §3.21):
|
|
3
|
+
* composite-PK `(user_id, event_key)` matrix of per-event delivery channels
|
|
4
|
+
* (`notificationChannelsSchema` — inApp / email / push).
|
|
5
|
+
*
|
|
6
|
+
* A missing row means "defaults" ({@link DEFAULT_NOTIFICATION_CHANNELS}), so
|
|
7
|
+
* the table only stores deviations — reads merge, writes upsert. Channel
|
|
8
|
+
* AVAILABILITY (no SMTP ⇒ email undeliverable) is a server concern layered on
|
|
9
|
+
* top; the repo stores the user's intent verbatim so it survives the day a
|
|
10
|
+
* transport appears (§8.2 never-hide-always-explain).
|
|
11
|
+
*/
|
|
12
|
+
import { notificationChannelsSchema } from '../schema/json-payloads.js';
|
|
13
|
+
import { affected, packJson, readJson } from './util.js';
|
|
14
|
+
/** Default per-event channels when no row exists (comp: push opt-in). */
|
|
15
|
+
export const DEFAULT_NOTIFICATION_CHANNELS = {
|
|
16
|
+
inApp: true,
|
|
17
|
+
email: true,
|
|
18
|
+
push: false,
|
|
19
|
+
};
|
|
20
|
+
export function notificationPrefsRepo(meta) {
|
|
21
|
+
const { db } = meta;
|
|
22
|
+
async function get(userId, eventKey) {
|
|
23
|
+
const row = await db
|
|
24
|
+
.selectFrom('adminium_notification_prefs')
|
|
25
|
+
.selectAll()
|
|
26
|
+
.where('userId', '=', userId)
|
|
27
|
+
.where('eventKey', '=', eventKey)
|
|
28
|
+
.executeTakeFirst();
|
|
29
|
+
if (row === undefined)
|
|
30
|
+
return null;
|
|
31
|
+
return {
|
|
32
|
+
userId: row.userId,
|
|
33
|
+
eventKey: row.eventKey,
|
|
34
|
+
channels: notificationChannelsSchema.parse(readJson(row.channels)),
|
|
35
|
+
updatedAt: row.updatedAt,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
get,
|
|
40
|
+
/** Stored channels for one event, defaults when no row exists. */
|
|
41
|
+
async channelsFor(userId, eventKey) {
|
|
42
|
+
return (await get(userId, eventKey))?.channels ?? { ...DEFAULT_NOTIFICATION_CHANNELS };
|
|
43
|
+
},
|
|
44
|
+
async listForUser(userId) {
|
|
45
|
+
const rows = await db
|
|
46
|
+
.selectFrom('adminium_notification_prefs')
|
|
47
|
+
.selectAll()
|
|
48
|
+
.where('userId', '=', userId)
|
|
49
|
+
.orderBy('eventKey', 'asc')
|
|
50
|
+
.execute();
|
|
51
|
+
return rows.map((row) => ({
|
|
52
|
+
userId: row.userId,
|
|
53
|
+
eventKey: row.eventKey,
|
|
54
|
+
channels: notificationChannelsSchema.parse(readJson(row.channels)),
|
|
55
|
+
updatedAt: row.updatedAt,
|
|
56
|
+
}));
|
|
57
|
+
},
|
|
58
|
+
/**
|
|
59
|
+
* Composite-PK upsert, portably: UPDATE first, INSERT on zero affected
|
|
60
|
+
* rows (the meta store has no cross-dialect ON CONFLICT — repos/util.ts).
|
|
61
|
+
*/
|
|
62
|
+
async upsert(userId, eventKey, channels, at = Date.now()) {
|
|
63
|
+
const packed = packJson(notificationChannelsSchema.parse(channels));
|
|
64
|
+
const res = await db
|
|
65
|
+
.updateTable('adminium_notification_prefs')
|
|
66
|
+
.set({ channels: packed, updatedAt: at })
|
|
67
|
+
.where('userId', '=', userId)
|
|
68
|
+
.where('eventKey', '=', eventKey)
|
|
69
|
+
.executeTakeFirst();
|
|
70
|
+
if (affected(res.numUpdatedRows) === 0) {
|
|
71
|
+
await db
|
|
72
|
+
.insertInto('adminium_notification_prefs')
|
|
73
|
+
.values({ userId, eventKey, channels: packed, updatedAt: at })
|
|
74
|
+
.execute();
|
|
75
|
+
}
|
|
76
|
+
return { userId, eventKey, channels, updatedAt: at };
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=notification-prefs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-prefs.js","sourceRoot":"","sources":["../../src/repos/notification-prefs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* notificationsRepo — adminium_notifications (07-meta-store.md §3.20): one row
|
|
3
|
+
* per in-app notification. Write-once rows read later, so `kind` is the
|
|
4
|
+
* stable, translatable key and `title`/`body` are the en-US fallback for a
|
|
5
|
+
* client that does not know the kind (the backup/notify.ts convention — the
|
|
6
|
+
* first producer — now shared by every producer through this repo).
|
|
7
|
+
*
|
|
8
|
+
* Keyset pagination: `(created_at DESC, id DESC)` — ids are monotonic ULIDs,
|
|
9
|
+
* so the pair is a stable total order (08-server-api.md §1.5).
|
|
10
|
+
*/
|
|
11
|
+
import type { MetaDb } from '../connect.js';
|
|
12
|
+
export interface Notification {
|
|
13
|
+
id: string;
|
|
14
|
+
userId: string;
|
|
15
|
+
/** Stable localization key, e.g. `report.ready`, `desktop.backup.completed`. */
|
|
16
|
+
kind: string;
|
|
17
|
+
actorLabel: string;
|
|
18
|
+
title: string;
|
|
19
|
+
body: string | null;
|
|
20
|
+
/** Kind-specific substitutions the client localizes at RENDER time. */
|
|
21
|
+
entity: Record<string, unknown> | null;
|
|
22
|
+
actionUrl: string | null;
|
|
23
|
+
readAt: number | null;
|
|
24
|
+
createdAt: number;
|
|
25
|
+
}
|
|
26
|
+
export interface CreateNotificationInput {
|
|
27
|
+
userId: string;
|
|
28
|
+
kind: string;
|
|
29
|
+
/** Defaults to the system actor label (ia-mapping keeper). */
|
|
30
|
+
actorLabel?: string | undefined;
|
|
31
|
+
title: string;
|
|
32
|
+
body?: string | null | undefined;
|
|
33
|
+
entity?: Record<string, unknown> | null | undefined;
|
|
34
|
+
actionUrl?: string | null | undefined;
|
|
35
|
+
}
|
|
36
|
+
/** Keyset cursor — the last row of the previous page. */
|
|
37
|
+
export interface NotificationCursor {
|
|
38
|
+
createdAt: number;
|
|
39
|
+
id: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ListNotificationsOptions {
|
|
42
|
+
unreadOnly?: boolean | undefined;
|
|
43
|
+
limit?: number | undefined;
|
|
44
|
+
before?: NotificationCursor | undefined;
|
|
45
|
+
}
|
|
46
|
+
/** System-actor events render actor "Adminium" (09-generated-app.md §5.4). */
|
|
47
|
+
export declare const SYSTEM_ACTOR_LABEL = "Adminium";
|
|
48
|
+
export declare function notificationsRepo(meta: MetaDb): {
|
|
49
|
+
create(input: CreateNotificationInput, at?: number): Promise<Notification>;
|
|
50
|
+
findById(id: string): Promise<Notification | null>;
|
|
51
|
+
/** Newest first; keyset `before` = the previous page's last row. */
|
|
52
|
+
listForUser(userId: string, opts?: ListNotificationsOptions): Promise<Notification[]>;
|
|
53
|
+
/** The nav-badge / bell number (09 §5.4 `unread-count`). */
|
|
54
|
+
unreadCount(userId: string): Promise<number>;
|
|
55
|
+
/** Scoped to the owner — a foreign id is a silent no-op, never a leak. */
|
|
56
|
+
markRead(id: string, userId: string, at?: number): Promise<boolean>;
|
|
57
|
+
markAllRead(userId: string, at?: number): Promise<number>;
|
|
58
|
+
};
|
|
59
|
+
export type NotificationsRepo = ReturnType<typeof notificationsRepo>;
|
|
60
|
+
//# sourceMappingURL=notifications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/repos/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACvC;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACzC;AAED,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAiB7C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM;kBAItB,uBAAuB,OAAM,MAAM,GAAgB,OAAO,CAAC,YAAY,CAAC;iBAiBzE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IASxD,oEAAoE;wBAC1C,MAAM,SAAQ,wBAAwB,GAAQ,OAAO,CAAC,YAAY,EAAE,CAAC;IAoB/F,4DAA4D;wBAClC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlD,0EAA0E;iBACvD,MAAM,UAAU,MAAM,OAAM,MAAM,GAAgB,OAAO,CAAC,OAAO,CAAC;wBAW3D,MAAM,OAAM,MAAM,GAAgB,OAAO,CAAC,MAAM,CAAC;EAU9E;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|