@synoikia/core 0.14.2 → 0.16.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.
Files changed (63) hide show
  1. package/dist/app.d.ts +8 -0
  2. package/dist/app.js +7 -5
  3. package/dist/app.js.map +1 -1
  4. package/dist/approvals/grants.d.ts +4 -1
  5. package/dist/approvals/grants.js +4 -4
  6. package/dist/approvals/grants.js.map +1 -1
  7. package/dist/approvals/service.d.ts +28 -10
  8. package/dist/approvals/service.js +5 -2
  9. package/dist/approvals/service.js.map +1 -1
  10. package/dist/auth/external-cloudflare.js +5 -3
  11. package/dist/auth/external-cloudflare.js.map +1 -1
  12. package/dist/auth/external.d.ts +6 -2
  13. package/dist/auth/external.js.map +1 -1
  14. package/dist/auth/mcp-auth.js +1 -1
  15. package/dist/auth/mcp-auth.js.map +1 -1
  16. package/dist/auth/oidc.d.ts +4 -3
  17. package/dist/auth/oidc.js +18 -6
  18. package/dist/auth/oidc.js.map +1 -1
  19. package/dist/auth/sessions.d.ts +2 -2
  20. package/dist/auth/sessions.js +2 -2
  21. package/dist/auth/sessions.js.map +1 -1
  22. package/dist/auth/throttle.d.ts +2 -1
  23. package/dist/auth/throttle.js +16 -6
  24. package/dist/auth/throttle.js.map +1 -1
  25. package/dist/auth/users.d.ts +19 -1
  26. package/dist/auth/users.js +45 -11
  27. package/dist/auth/users.js.map +1 -1
  28. package/dist/catalog/role-levels.d.ts +1 -1
  29. package/dist/catalog/role-levels.js +5 -3
  30. package/dist/catalog/role-levels.js.map +1 -1
  31. package/dist/db/schema.d.ts +24 -0
  32. package/dist/db/schema.js +2 -0
  33. package/dist/db/schema.js.map +1 -1
  34. package/dist/errors.d.ts +10 -2
  35. package/dist/errors.js +12 -0
  36. package/dist/errors.js.map +1 -1
  37. package/dist/gate/pipeline.d.ts +2 -2
  38. package/dist/gate/pipeline.js +53 -18
  39. package/dist/gate/pipeline.js.map +1 -1
  40. package/dist/http/admin/auth.js +64 -28
  41. package/dist/http/admin/auth.js.map +1 -1
  42. package/dist/http/admin/system.js +27 -3
  43. package/dist/http/admin/system.js.map +1 -1
  44. package/dist/http/common.d.ts +1 -1
  45. package/dist/http/mcp/approval-routes.js +2 -1
  46. package/dist/http/mcp/approval-routes.js.map +1 -1
  47. package/dist/http/mcp/endpoint.js +5 -5
  48. package/dist/http/mcp/endpoint.js.map +1 -1
  49. package/dist/http/mcp/oauth-routes.js +16 -7
  50. package/dist/http/mcp/oauth-routes.js.map +1 -1
  51. package/dist/instances/manager.d.ts +4 -0
  52. package/dist/instances/manager.js +30 -13
  53. package/dist/instances/manager.js.map +1 -1
  54. package/dist/notify/service.d.ts +32 -2
  55. package/dist/notify/service.js +40 -12
  56. package/dist/notify/service.js.map +1 -1
  57. package/dist/plugins/repos.d.ts +70 -1
  58. package/dist/plugins/repos.js +234 -61
  59. package/dist/plugins/repos.js.map +1 -1
  60. package/drizzle/0018_plugin_manual.sql +1 -0
  61. package/drizzle/meta/0018_snapshot.json +2862 -0
  62. package/drizzle/meta/_journal.json +7 -0
  63. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/notify/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG9D;6CAC6C;AAE7C,MAAM,aAAa,GAAG;IACpB,gBAAgB;IAChB,oBAAoB;IACpB,gBAAgB;IAChB,aAAa;IACb,qBAAqB;IACrB,cAAc;CACN,CAAC;AAGX,6FAA6F;AAC7F,MAAM,WAAW,GAAG,CAAC,MAAgB,EAAE,EAAE,CACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAgB,CAAC,CAAC,CAAC;AAEnF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;CAC7E,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACtD,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACnC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,CAAC;aACP,MAAM,CAAC;YACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SAChE,CAAC;aACD,OAAO,CAAC,EAAE,CAAC;QACd,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACnC,CAAC;CACH,CAAC,CAAC;AAkBH,MAAM,OAAO,eAAe;IAIP;IACA;IACA;IALF,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExD,YACmB,EAAM,EACN,GAAc,EACd,OAIb,EAAE;QANW,OAAE,GAAF,EAAE,CAAI;QACN,QAAG,GAAH,GAAG,CAAW;QACd,SAAI,GAAJ,IAAI,CAIf;IACL,CAAC;IAEI,SAAS,CAAC,GAAe;QAC/B,OAAO,GAAG,CAAC,UAAU;YACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAU,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,mBAAmB,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAChG,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAEO,SAAS,CAAC,GAAe;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO;YACL,GAAG,GAAG;YACN,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE;gBACP,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS;oBACxB,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;oBAC7G,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAC;IACJ,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,gBAAgB,CAAC;aACtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACnC,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAEO,YAAY,CAAC,OAAgB,EAAE,KAA8B;QACnE,MAAM,IAAI,GAAY,EAAE,GAAG,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAC,CAAkB,CAAC,CAAC;;gBACtD,IAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAY,EAAE,OAAqD,EAAE;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;YACtB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YACvF,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC;gBACE,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpC,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,GAAI,GAAc;aACnB;YACH,CAAC,CAAC,GAAG,CAAC;QACR,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO;YACjB,MAAM,IAAI,eAAe,CACvB,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CACpE,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAC1C,MAAM,IAAI,eAAe,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;QAChF,MAAM,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAC/B,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EACxC,KAAK,CAAC,OAAkC,CACzC,CAAC;QACF,MAAM,MAAM,GAAG;YACb,EAAE;YACF,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;gBACrC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,mBAAmB,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC5E,CAAC,CAAC,IAAI;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE;YACzB,IAAI,QAAQ;gBAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;;gBAC1F,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YACtD,UAAU,CAAC,EAAE,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB;gBAC5D,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM;gBAC3B,MAAM,EAAE;oBACN,EAAE;oBACF,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;iBAC3C;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,QAA6B,EAAE;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7F,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1E,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE;YACzB,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACrE,UAAU,CAAC,EAAE,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,kBAAkB;gBAC5B,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,IAAI,CAAC,EAAU;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7F,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACvB,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,0CAA0C;YACnD,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,SAAS,CAAC,MAAkB;QAC1B,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,CAA0B,IAAO,EAAE,CAAqC,EAAE,EAAE;YACrF,MAAM,QAAQ,GAAG,CAAU,CAAC;YAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7C,KAAK,IAAI,CAAC,QAAQ,CAAC;oBACjB,KAAK,EAAE,gBAAgB;oBACvB,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;oBAC5C,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,UAAU;oBAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,cAAc;oBAClC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;iBACjC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACpD,KAAK,IAAI,CAAC,QAAQ,CAAC;oBACjB,KAAK,EAAE,oBAAoB;oBAC3B,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;oBAC5C,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,YAAY;oBAC7B,OAAO,EAAE,8BAA8B;oBACvC,IAAI,EAAE,EAAE;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CACA,gBAAgB,EAChB,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,gBAAgB;YACvB,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC5C,KAAK,EAAE,eAAe,CAAC,CAAC,IAAI,UAAU;YACtC,OAAO,EAAE,CAAC,CAAC,KAAK;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;SACzB,CAAC,CACL,CAAC;QACF,EAAE,CACA,aAAa,EACb,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC5C,KAAK,EAAE,4BAA4B,CAAC,CAAC,IAAI,EAAE;YAC3C,OAAO,EAAE,CAAC,CAAC,KAAK;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;SACzB,CAAC,CACL,CAAC;QACF,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE;YACzB,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC;gBAAE,OAAO;YAChE,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBAC5B,KAAK,CAAC,IAAI,CACR,0FAA0F,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/K,CAAC;YACJ,IAAI,aAAa,GAAG,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,wEAAwE,CAAC,CAAC;YACvG,KAAK,IAAI,CAAC,QAAQ,CAAC;gBACjB,KAAK,EAAE,qBAAqB;gBAC5B,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC5C,KAAK,EACH,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;oBACxB,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,qCAAqC,CAAC,CAAC,IAAI,EAAE;oBACxE,CAAC,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE;gBACjD,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE;aACrD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,EAAE,CACA,cAAc,EACd,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,iCAAiC,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;YACrK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE;SAChF,CAAC,CACL,CAAC;QACF,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,GAAG,EAAE,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC;IAED,+FAA+F;IAC/F,KAAK,CAAC,QAAQ,CAAC,CAAe;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;aACrB,MAAM,EAAE;aACR,IAAI,CAAC,gBAAgB,CAAC;aACtB,GAAG,EAAE;aACL,MAAM,CACL,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,OAAO;YACV,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3B,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAC5F,CAAC;QACJ,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAe,EAAE,CAAe;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,OAAuE,CAAC;QAC5E,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,GAAG;gBACR,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnC,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvE;gBACD,+DAA+D;gBAC/D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChF,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAClC,CAAC;aACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,EAAE,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gBACpD,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;gBAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;YACH,OAAO,GAAG;gBACR,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE;oBACP,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC1B,cAAc,EAAE,kBAAkB;oBAClC,kBAAkB,EAAE,CAAC,CAAC,KAAK;oBAC3B,sBAAsB,EAAE,SAAS;oBACjC,GAAG,CAAC,OAAO,CAAC,UAAU;wBACpB,CAAC,CAAC;4BACE,sBAAsB,EAAE,UAAU,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;yBAC1H;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR;gBACD,IAAI;aACL,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAc,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;oBACrC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;iBACpC,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;oBACX,IAAI,CAAC,EAAE;yBACJ,MAAM,CAAC,gBAAgB,CAAC;yBACxB,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;yBACrE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;yBACtC,GAAG,EAAE,CAAC;oBACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACtB,CAAC;gBACD,SAAS,GAAG,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;oBAAE,MAAM,CAAC,yBAAyB;YACnG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,IAAI,CAAC,EAAE;aACJ,MAAM,CAAC,gBAAgB,CAAC;aACxB,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;aAC3C,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;aACtC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;CACF"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/notify/service.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,13 @@
1
1
  import { z } from 'zod';
2
2
  import type { Db } from '../db/index.js';
3
+ /** Plugin repositories and installs (design §4.2–4.3): explicit installs of pinned versions, verified by
4
+ * sha256 and, for signed repos, a minisign signature from the admin-pinned key. */
5
+ export declare const LIMITS: {
6
+ indexBytes: number;
7
+ tarballBytes: number;
8
+ extractedBytes: number;
9
+ entries: number;
10
+ };
3
11
  export declare const IndexSchema: z.ZodObject<{
4
12
  schema: z.ZodLiteral<1>;
5
13
  name: z.ZodString;
@@ -24,7 +32,6 @@ export declare const InstallSchema: z.ZodObject<{
24
32
  repoId: z.ZodString;
25
33
  pluginId: z.ZodString;
26
34
  version: z.ZodString;
27
- confirm: z.ZodOptional<z.ZodString>;
28
35
  }, z.core.$strip>;
29
36
  export type FetchBytes = (url: string, init?: {
30
37
  signal?: AbortSignal;
@@ -52,6 +59,8 @@ export declare function swapDirectory(next: string, target: string, backup: stri
52
59
  export declare class PluginRepoService {
53
60
  private readonly opts;
54
61
  private readonly installing;
62
+ private upload;
63
+ private staging;
55
64
  constructor(opts: RepoServiceOptions);
56
65
  private get db();
57
66
  private now;
@@ -174,6 +183,7 @@ export declare class PluginRepoService {
174
183
  version: string;
175
184
  fromThisRepo: boolean;
176
185
  managed: boolean;
186
+ manual: boolean;
177
187
  } | null;
178
188
  updateAvailable: boolean;
179
189
  blocked: string | null;
@@ -195,9 +205,68 @@ export declare class PluginRepoService {
195
205
  statusError: string | null;
196
206
  instructions: string | null;
197
207
  enabled: boolean;
208
+ manual: import("../db/schema.js").ManualInstall | null;
198
209
  installedAt: Date;
199
210
  }>;
211
+ private locked;
212
+ private pluginByPluginId;
213
+ private pluginRow;
200
214
  private installLocked;
215
+ /** The step every install shares: stop, swap the files in, rediscover, record, start again. */
216
+ private swapIn;
217
+ private dropUpload;
218
+ /** Extracts and inspects an uploaded tarball, and describes what installing it would change. */
219
+ stageUpload(bytes: Buffer, rawFileName: unknown): Promise<{
220
+ uploadId: `${string}-${string}-${string}-${string}-${string}`;
221
+ pluginId: string;
222
+ version: string;
223
+ sdk: string;
224
+ sha256: string;
225
+ fileName: string;
226
+ sdkCompatible: boolean;
227
+ expiresAt: Date;
228
+ replaces: {
229
+ version: string;
230
+ repoName: string | null;
231
+ manual: boolean;
232
+ enabled: boolean;
233
+ } | null;
234
+ permissionChanges: string[];
235
+ }>;
236
+ /** Installs the staged upload over the plugin with its id, keeping the row, its repository and endpoints. */
237
+ installUpload(uploadId: string, actor?: Actor): Promise<{
238
+ id: string;
239
+ pluginId: string;
240
+ version: string;
241
+ repoId: string | null;
242
+ path: string;
243
+ sha256: string | null;
244
+ signatureVerified: boolean;
245
+ manifest: unknown;
246
+ status: "ok" | "invalid" | "incompatible";
247
+ statusError: string | null;
248
+ instructions: string | null;
249
+ enabled: boolean;
250
+ manual: import("../db/schema.js").ManualInstall | null;
251
+ installedAt: Date;
252
+ }>;
253
+ /** Reinstalls the repository version a manual install replaced, through the normal install. */
254
+ revert(rowOrPluginId: string, actor?: Actor): Promise<{
255
+ id: string;
256
+ pluginId: string;
257
+ version: string;
258
+ repoId: string | null;
259
+ path: string;
260
+ sha256: string | null;
261
+ signatureVerified: boolean;
262
+ manifest: unknown;
263
+ status: "ok" | "invalid" | "incompatible";
264
+ statusError: string | null;
265
+ instructions: string | null;
266
+ enabled: boolean;
267
+ manual: import("../db/schema.js").ManualInstall | null;
268
+ installedAt: Date;
269
+ }>;
201
270
  /** Removes an installed plugin. Blocked while any instance uses it. */
202
271
  uninstall(pluginRowOrId: string, actor?: Actor): void;
203
272
  }
@@ -16,7 +16,7 @@ import { inspectPluginDir } from './discovery.js';
16
16
  import { MinisignError, parsePublicKey, verifySignature } from './minisign.js';
17
17
  /** Plugin repositories and installs (design §4.2–4.3): explicit installs of pinned versions, verified by
18
18
  * sha256 and, for signed repos, a minisign signature from the admin-pinned key. */
19
- const LIMITS = {
19
+ export const LIMITS = {
20
20
  indexBytes: 2 * 1024 * 1024,
21
21
  tarballBytes: 50 * 1024 * 1024,
22
22
  extractedBytes: 200 * 1024 * 1024,
@@ -54,9 +54,17 @@ export const InstallSchema = z.object({
54
54
  repoId: z.string(),
55
55
  pluginId: z.string(),
56
56
  version: z.string(),
57
- /** Unsigned repos: must equal the plugin id. */
58
- confirm: z.string().optional(),
59
57
  });
58
+ const FileNameSchema = z
59
+ .string()
60
+ .trim()
61
+ .min(1)
62
+ .max(255)
63
+ .regex(/^[^/\\\0]+$/, 'must be a file name');
64
+ // Control characters and bidi overrides would make the name display as another name in the portal and audit.
65
+ const UNSAFE_NAME_CHARS = /[\p{Cc}\u202A-\u202E\u2066-\u2069]/u;
66
+ const UPLOAD_PREFIX = 'upload-';
67
+ const UPLOAD_TTL_MS = 15 * 60_000;
60
68
  const MAX_REDIRECTS = 5;
61
69
  /** `settings` row recording that the pre-configured repository was added once. */
62
70
  const DEFAULT_REPO_MARKER = 'plugin_repos.preconfigured';
@@ -95,8 +103,16 @@ export function swapDirectory(next, target, backup, rename = renameSync) {
95
103
  export class PluginRepoService {
96
104
  opts;
97
105
  installing = new Set();
106
+ upload = null;
107
+ staging = false;
98
108
  constructor(opts) {
99
109
  this.opts = opts;
110
+ // Staged uploads do not survive a restart.
111
+ if (existsSync(this.stagingDir)) {
112
+ for (const name of readdirSync(this.stagingDir))
113
+ if (name.startsWith(UPLOAD_PREFIX))
114
+ rmSync(path.join(this.stagingDir, name), { recursive: true, force: true });
115
+ }
100
116
  }
101
117
  get db() {
102
118
  return this.opts.db;
@@ -412,7 +428,9 @@ export class PluginRepoService {
412
428
  description: p.description ?? null,
413
429
  versions: p.versions.map((v) => ({ version: v.version, compatible: compatible.includes(v.version) })),
414
430
  latest,
415
- installed: current ? { version: current.version, fromThisRepo: fromHere, managed: !!current.repoId } : null,
431
+ installed: current
432
+ ? { version: current.version, fromThisRepo: fromHere, managed: !!current.repoId, manual: !!current.manual }
433
+ : null,
416
434
  updateAvailable: !!(fromHere && latest && semver.gt(latest, current.version)),
417
435
  blocked: current?.repoId && !fromHere
418
436
  ? 'installed_from_elsewhere'
@@ -475,18 +493,30 @@ export class PluginRepoService {
475
493
  }
476
494
  async install(raw, actor = {}) {
477
495
  const input = InstallSchema.parse(raw);
478
- if (this.installing.has(input.pluginId)) {
479
- throw new ConflictError('install_in_progress', `"${input.pluginId}" is already being installed`);
496
+ return this.locked(input.pluginId, () => this.installLocked(input, actor));
497
+ }
498
+ async locked(pluginId, fn) {
499
+ if (this.installing.has(pluginId)) {
500
+ throw new ConflictError('install_in_progress', `"${pluginId}" is already being installed`);
480
501
  }
481
- this.installing.add(input.pluginId);
502
+ this.installing.add(pluginId);
482
503
  try {
483
- return await this.installLocked(input, actor);
504
+ return await fn();
484
505
  }
485
506
  finally {
486
- this.installing.delete(input.pluginId);
507
+ this.installing.delete(pluginId);
487
508
  }
488
509
  }
489
- async installLocked(input, actor) {
510
+ pluginByPluginId(pluginId) {
511
+ return this.db.select().from(plugins).where(eq(plugins.pluginId, pluginId)).get();
512
+ }
513
+ pluginRow(rowOrPluginId) {
514
+ const row = this.db.select().from(plugins).where(eq(plugins.id, rowOrPluginId)).get() ?? this.pluginByPluginId(rowOrPluginId);
515
+ if (!row)
516
+ throw new NotFoundError('plugin_not_found', 'No such plugin');
517
+ return row;
518
+ }
519
+ async installLocked(input, actor, reverting = false) {
490
520
  const repo = this.repoRow(input.repoId);
491
521
  if (repo.keyStatus === 'key_changed') {
492
522
  throw new ConflictError('key_changed', 'The repository signing key changed; confirm the new key before installing');
@@ -502,16 +532,13 @@ export class PluginRepoService {
502
532
  if (version.minCoreVersion && !semver.gte(CORE_VERSION, version.minCoreVersion)) {
503
533
  throw new ConflictError('incompatible', `${input.pluginId}@${input.version} needs core ${version.minCoreVersion} or newer`);
504
534
  }
505
- const current = this.db.select().from(plugins).where(eq(plugins.pluginId, input.pluginId)).get();
535
+ const current = this.pluginByPluginId(input.pluginId);
506
536
  if (current?.repoId && current.repoId !== repo.id) {
507
537
  throw new ConflictError('installed_from_elsewhere', `"${input.pluginId}" is installed from another repository; uninstall it first`);
508
538
  }
509
539
  // A plugin no repository manages (a built-in plugin from before 0.3.0, or one copied in by hand) is
510
540
  // adopted: this install replaces its files and keeps its row, so its endpoints carry over.
511
541
  const adopting = !!current && !current.repoId;
512
- if (repo.signingMode === 'unsigned' && input.confirm !== input.pluginId) {
513
- throw new ConflictError('confirm_required', `This repository is unsigned. Type "${input.pluginId}" to install anyway`);
514
- }
515
542
  const tarballUrl = this.checkUrl(version.url, repo.url);
516
543
  const tarball = await this.download(tarballUrl, LIMITS.tarballBytes);
517
544
  const sha256 = createHash('sha256').update(tarball).digest('hex');
@@ -541,63 +568,209 @@ export class PluginRepoService {
541
568
  if (inspected.manifest.id !== input.pluginId || inspected.manifest.version !== input.version) {
542
569
  throw new ValidationError('manifest_mismatch', `The archive contains ${inspected.manifest.id}@${inspected.manifest.version}, not ${input.pluginId}@${input.version}`);
543
570
  }
544
- // Swap directories with instances stopped, then let discovery update the registry row.
571
+ return await this.swapIn({
572
+ root,
573
+ manifest: inspected.manifest,
574
+ current,
575
+ // Adopted code comes from a new source, so it waits for the admin's review like a new install.
576
+ keepEnabled: !adopting,
577
+ set: { repoId: repo.id, sha256, signatureVerified, manual: null },
578
+ decision: reverting
579
+ ? 'plugin_manual_reverted'
580
+ : adopting
581
+ ? 'plugin_adopted'
582
+ : current
583
+ ? 'plugin_updated'
584
+ : 'plugin_installed',
585
+ detail: {
586
+ pluginId: input.pluginId,
587
+ version: input.version,
588
+ previousVersion: current?.version ?? null,
589
+ repo: repo.url,
590
+ sha256,
591
+ signatureVerified,
592
+ ...(current?.manual ? { replacedFile: current.manual.fileName, replacedSha256: current.sha256 } : {}),
593
+ },
594
+ actor,
595
+ });
596
+ }
597
+ finally {
598
+ rmSync(work, { recursive: true, force: true });
599
+ }
600
+ }
601
+ /** The step every install shares: stop, swap the files in, rediscover, record, start again. */
602
+ async swapIn(a) {
603
+ const { current } = a;
604
+ if (current)
605
+ await this.opts.stopPlugin(current.id);
606
+ mkdirSync(this.pluginsDir, { recursive: true });
607
+ try {
608
+ swapDirectory(a.root, path.join(this.pluginsDir, a.manifest.id), path.join(this.stagingDir, `${randomUUID()}-old`));
609
+ }
610
+ catch (err) {
611
+ // The old version is back in place: bring its instances back up before reporting the failure.
545
612
  if (current)
546
- await this.opts.stopPlugin(current.id);
547
- mkdirSync(this.pluginsDir, { recursive: true });
548
- const target = path.join(this.pluginsDir, input.pluginId);
613
+ await this.opts.startPlugin(current.id);
614
+ throw err;
615
+ }
616
+ this.opts.discover();
617
+ const row = this.pluginByPluginId(a.manifest.id);
618
+ // New installs start disabled, and an update that changes what the plugin may do is disabled
619
+ // again: enabling it is the admin's review of its binding, capabilities and hosts (design §4.2).
620
+ const review = current ? permissionChanges(current.manifest, a.manifest) : [];
621
+ const enabled = current && a.keepEnabled ? current.enabled && review.length === 0 : false;
622
+ this.db.transaction((tx) => {
623
+ tx.update(plugins)
624
+ .set({ ...a.set, enabled })
625
+ .where(eq(plugins.id, row.id))
626
+ .run();
627
+ writeAudit(tx, {
628
+ kind: 'config',
629
+ decision: a.decision,
630
+ actorKind: 'user',
631
+ actorId: a.actor.userId,
632
+ detail: { ...a.detail, enabled, ...(review.length ? { needsReview: review } : {}) },
633
+ });
634
+ });
635
+ if (enabled)
636
+ await this.opts.startPlugin(row.id);
637
+ return this.db.select().from(plugins).where(eq(plugins.id, row.id)).get();
638
+ }
639
+ // ── manual plugins (design §4.6) ──
640
+ dropUpload() {
641
+ if (this.upload)
642
+ rmSync(this.upload.work, { recursive: true, force: true });
643
+ this.upload = null;
644
+ }
645
+ /** Extracts and inspects an uploaded tarball, and describes what installing it would change. */
646
+ async stageUpload(bytes, rawFileName) {
647
+ const fileName = FileNameSchema.parse(rawFileName);
648
+ if (UNSAFE_NAME_CHARS.test(fileName)) {
649
+ throw new ValidationError('invalid_file_name', 'The file name contains control or bidi characters');
650
+ }
651
+ if (bytes.length > LIMITS.tarballBytes)
652
+ throw new ValidationError('too_large', 'The file is too large');
653
+ // One extraction at a time, so overlapping uploads cannot fill the disk.
654
+ if (this.staging)
655
+ throw new ConflictError('upload_in_progress', 'Another upload is being processed');
656
+ this.staging = true;
657
+ const sha256 = createHash('sha256').update(bytes).digest('hex');
658
+ const id = randomUUID();
659
+ const work = path.join(this.stagingDir, `${UPLOAD_PREFIX}${id}`);
660
+ let root;
661
+ let manifest;
662
+ let sdkCompatible;
663
+ try {
664
+ root = await this.extract(bytes, work);
665
+ const inspected = inspectPluginDir(root);
666
+ if (inspected.status === 'invalid')
667
+ throw new ValidationError('invalid_plugin', inspected.error);
668
+ if (!inspected.manifest)
669
+ throw new ValidationError('invalid_plugin', 'manifest.json is missing');
670
+ manifest = inspected.manifest;
671
+ sdkCompatible = inspected.status === 'ok';
672
+ }
673
+ catch (err) {
674
+ rmSync(work, { recursive: true, force: true });
675
+ throw err;
676
+ }
677
+ finally {
678
+ this.staging = false;
679
+ }
680
+ // One staged upload at a time: a new one replaces the last, which bounds the disk they use.
681
+ this.dropUpload();
682
+ const expiresAt = new Date(this.now().getTime() + UPLOAD_TTL_MS);
683
+ this.upload = { id, work, root, fileName, sha256, manifest, sdkCompatible, expiresAt };
684
+ setTimeout(() => {
685
+ if (this.upload?.id === id)
686
+ this.dropUpload();
687
+ }, UPLOAD_TTL_MS).unref();
688
+ const current = this.pluginByPluginId(manifest.id);
689
+ return {
690
+ uploadId: id,
691
+ pluginId: manifest.id,
692
+ version: manifest.version,
693
+ sdk: manifest.sdk,
694
+ sha256,
695
+ fileName,
696
+ sdkCompatible,
697
+ expiresAt,
698
+ replaces: current
699
+ ? {
700
+ version: current.version,
701
+ repoName: current.repoId ? this.repoRow(current.repoId).name : null,
702
+ manual: !!current.manual,
703
+ enabled: current.enabled,
704
+ }
705
+ : null,
706
+ permissionChanges: current ? permissionChanges(current.manifest, manifest) : [],
707
+ };
708
+ }
709
+ /** Installs the staged upload over the plugin with its id, keeping the row, its repository and endpoints. */
710
+ async installUpload(uploadId, actor = {}) {
711
+ const upload = this.upload;
712
+ if (!upload || upload.id !== uploadId)
713
+ throw new NotFoundError('upload_not_found', 'No such upload');
714
+ if (this.now() >= upload.expiresAt) {
715
+ this.dropUpload();
716
+ throw new ConflictError('upload_expired', 'This upload expired; upload the file again');
717
+ }
718
+ const { id: pluginId, version, sdk } = upload.manifest;
719
+ if (!upload.sdkCompatible)
720
+ throw new ConflictError('incompatible', `${pluginId}@${version} needs plugin SDK ${sdk}`);
721
+ return this.locked(pluginId, async () => {
722
+ this.upload = null;
549
723
  try {
550
- swapDirectory(root, target, path.join(this.stagingDir, `${randomUUID()}-old`));
551
- }
552
- catch (err) {
553
- // The old version is back in place: bring its instances back up before reporting the failure.
554
- if (current)
555
- await this.opts.startPlugin(current.id);
556
- throw err;
557
- }
558
- this.opts.discover();
559
- const row = this.db.select().from(plugins).where(eq(plugins.pluginId, input.pluginId)).get();
560
- // New installs start disabled, and an update that changes what the plugin may do is disabled
561
- // again: enabling it is the admin's review of its binding, capabilities and hosts (design §4.2).
562
- const review = current ? permissionChanges(current.manifest, inspected.manifest) : [];
563
- // Adopted code comes from a new source, so it waits for the admin's review like a new install.
564
- const enabled = current && !adopting ? current.enabled && review.length === 0 : false;
565
- this.db.transaction((tx) => {
566
- tx.update(plugins)
567
- .set({ repoId: repo.id, sha256, signatureVerified, enabled })
568
- .where(eq(plugins.id, row.id))
569
- .run();
570
- writeAudit(tx, {
571
- kind: 'config',
572
- decision: adopting ? 'plugin_adopted' : current ? 'plugin_updated' : 'plugin_installed',
573
- actorKind: 'user',
574
- actorId: actor.userId,
724
+ const current = this.pluginByPluginId(pluginId);
725
+ const releasedVersion = current?.manual
726
+ ? current.manual.releasedVersion
727
+ : current?.repoId
728
+ ? current.version
729
+ : null;
730
+ const manual = { fileName: upload.fileName, uploadedAt: this.now().toISOString(), releasedVersion };
731
+ return await this.swapIn({
732
+ root: upload.root,
733
+ manifest: upload.manifest,
734
+ current,
735
+ // Installing after the unsigned warning is the admin's review of the code; permission changes still disable it.
736
+ keepEnabled: true,
737
+ set: { sha256: upload.sha256, signatureVerified: false, manual },
738
+ decision: 'plugin_manual_installed',
575
739
  detail: {
576
- pluginId: input.pluginId,
577
- version: input.version,
740
+ pluginId,
741
+ version,
578
742
  previousVersion: current?.version ?? null,
579
- repo: repo.url,
580
- sha256,
581
- signatureVerified,
582
- enabled,
583
- ...(review.length ? { needsReview: review } : {}),
743
+ sha256: upload.sha256,
744
+ fileName: upload.fileName,
745
+ releasedVersion,
584
746
  },
747
+ actor,
585
748
  });
586
- });
587
- if (enabled)
588
- await this.opts.startPlugin(row.id);
589
- return this.db.select().from(plugins).where(eq(plugins.id, row.id)).get();
590
- }
591
- finally {
592
- rmSync(work, { recursive: true, force: true });
749
+ }
750
+ finally {
751
+ rmSync(upload.work, { recursive: true, force: true });
752
+ }
753
+ });
754
+ }
755
+ /** Reinstalls the repository version a manual install replaced, through the normal install. */
756
+ async revert(rowOrPluginId, actor = {}) {
757
+ const row = this.pluginRow(rowOrPluginId);
758
+ const released = row.manual?.releasedVersion;
759
+ if (!released || !row.repoId) {
760
+ throw new ConflictError('not_manual', 'This plugin has no released version to revert to');
761
+ }
762
+ const repo = this.repoRow(row.repoId);
763
+ const index = repo.indexCache;
764
+ const entry = index?.plugins.find((p) => p.id === row.pluginId);
765
+ if (!entry?.versions.some((v) => v.version === released)) {
766
+ throw new ConflictError('released_version_gone', `${row.pluginId}@${released} is no longer in ${repo.name}`);
593
767
  }
768
+ const input = { repoId: repo.id, pluginId: row.pluginId, version: released };
769
+ return this.locked(row.pluginId, () => this.installLocked(input, actor, true));
594
770
  }
595
771
  /** Removes an installed plugin. Blocked while any instance uses it. */
596
772
  uninstall(pluginRowOrId, actor = {}) {
597
- const row = this.db.select().from(plugins).where(eq(plugins.id, pluginRowOrId)).get() ??
598
- this.db.select().from(plugins).where(eq(plugins.pluginId, pluginRowOrId)).get();
599
- if (!row)
600
- throw new NotFoundError('plugin_not_found', 'No such plugin');
773
+ const row = this.pluginRow(pluginRowOrId);
601
774
  const instances = this.db.select().from(pluginInstances).where(eq(pluginInstances.pluginId, row.id)).all();
602
775
  if (instances.length) {
603
776
  throw new ConflictError('plugin_has_instances', 'Delete this plugin’s endpoints first', {