happy2 0.0.13 → 0.0.14
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/package.json +1 -1
- package/packages/happy2-server/PLUGINS.md +196 -42
- package/packages/happy2-server/dist/index.d.ts +1 -0
- package/packages/happy2-server/dist/index.d.ts.map +1 -1
- package/packages/happy2-server/dist/index.js +1 -0
- package/packages/happy2-server/dist/index.js.map +1 -1
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.d.ts +4 -0
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.js +15 -0
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.js.map +1 -0
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.test.d.ts +2 -0
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.test.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.test.js +17 -0
- package/packages/happy2-server/dist/modules/agent/agentSkillHomeGet.test.js.map +1 -0
- package/packages/happy2-server/dist/modules/agent/agentTurnGetPluginContext.d.ts +23 -0
- package/packages/happy2-server/dist/modules/agent/agentTurnGetPluginContext.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/agent/agentTurnGetPluginContext.js +70 -0
- package/packages/happy2-server/dist/modules/agent/agentTurnGetPluginContext.js.map +1 -0
- package/packages/happy2-server/dist/modules/agents/service.d.ts +2 -4
- package/packages/happy2-server/dist/modules/agents/service.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/agents/service.js +7 -7
- package/packages/happy2-server/dist/modules/agents/service.js.map +1 -1
- package/packages/happy2-server/dist/modules/auth/tokens.d.ts +15 -0
- package/packages/happy2-server/dist/modules/auth/tokens.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/auth/tokens.js +74 -6
- package/packages/happy2-server/dist/modules/auth/tokens.js.map +1 -1
- package/packages/happy2-server/dist/modules/auth/tokens.test.js +57 -0
- package/packages/happy2-server/dist/modules/auth/tokens.test.js.map +1 -1
- package/packages/happy2-server/dist/modules/chat/channelCreateWithMembers.d.ts +19 -0
- package/packages/happy2-server/dist/modules/chat/channelCreateWithMembers.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/chat/channelCreateWithMembers.js +87 -0
- package/packages/happy2-server/dist/modules/chat/channelCreateWithMembers.js.map +1 -0
- package/packages/happy2-server/dist/modules/chat/channelMembersUpdate.d.ts +15 -0
- package/packages/happy2-server/dist/modules/chat/channelMembersUpdate.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/chat/channelMembersUpdate.js +38 -0
- package/packages/happy2-server/dist/modules/chat/channelMembersUpdate.js.map +1 -0
- package/packages/happy2-server/dist/modules/chat/chatAppendAudit.d.ts +1 -1
- package/packages/happy2-server/dist/modules/chat/chatAppendAudit.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/catalog.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/catalog.js +3 -3
- package/packages/happy2-server/dist/modules/plugin/catalog.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/catalog.test.js +2 -2
- package/packages/happy2-server/dist/modules/plugin/catalog.test.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/apiPermissions.d.ts +5 -0
- package/packages/happy2-server/dist/modules/plugin/impl/apiPermissions.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/impl/apiPermissions.js +106 -0
- package/packages/happy2-server/dist/modules/plugin/impl/apiPermissions.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.js +10 -1
- package/packages/happy2-server/dist/modules/plugin/impl/asInstallation.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/asManagementRequest.d.ts +3 -0
- package/packages/happy2-server/dist/modules/plugin/impl/asManagementRequest.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/impl/asManagementRequest.js +68 -0
- package/packages/happy2-server/dist/modules/plugin/impl/asManagementRequest.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js +10 -2
- package/packages/happy2-server/dist/modules/plugin/impl/asPlugin.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.d.ts +19 -0
- package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.js +1 -0
- package/packages/happy2-server/dist/modules/plugin/impl/installationSelection.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js +4 -2
- package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.js +14 -0
- package/packages/happy2-server/dist/modules/plugin/impl/installedManifest.test.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/impl/managementRequestSelection.d.ts +345 -0
- package/packages/happy2-server/dist/modules/plugin/impl/managementRequestSelection.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/impl/managementRequestSelection.js +22 -0
- package/packages/happy2-server/dist/modules/plugin/impl/managementRequestSelection.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/packageLinkDownloader.d.ts +16 -0
- package/packages/happy2-server/dist/modules/plugin/packageLinkDownloader.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/packageLinkDownloader.js +67 -0
- package/packages/happy2-server/dist/modules/plugin/packageLinkDownloader.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/packageStore.d.ts +14 -1
- package/packages/happy2-server/dist/modules/plugin/packageStore.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/packageStore.js +112 -1
- package/packages/happy2-server/dist/modules/plugin/packageStore.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/packageStore.test.d.ts +2 -0
- package/packages/happy2-server/dist/modules/plugin/packageStore.test.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/packageStore.test.js +50 -0
- package/packages/happy2-server/dist/modules/plugin/packageStore.test.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginAgentCallContextGet.d.ts +5 -0
- package/packages/happy2-server/dist/modules/plugin/pluginAgentCallContextGet.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginAgentCallContextGet.js +26 -0
- package/packages/happy2-server/dist/modules/plugin/pluginAgentCallContextGet.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js +7 -3
- package/packages/happy2-server/dist/modules/plugin/pluginCatalogList.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/pluginDeveloperServer.test.d.ts +2 -0
- package/packages/happy2-server/dist/modules/plugin/pluginDeveloperServer.test.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginDeveloperServer.test.js +44 -0
- package/packages/happy2-server/dist/modules/plugin/pluginDeveloperServer.test.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstall.d.ts +4 -2
- package/packages/happy2-server/dist/modules/plugin/pluginInstall.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/pluginInstall.js +19 -2
- package/packages/happy2-server/dist/modules/plugin/pluginInstall.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetContainerName.d.ts +7 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetContainerName.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetContainerName.js +18 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetContainerName.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRequestUninstallContext.d.ts +13 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRequestUninstallContext.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRequestUninstallContext.js +35 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRequestUninstallContext.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js +3 -1
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetRuntimeConfiguration.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetUninstallContext.d.ts +6 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetUninstallContext.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetUninstallContext.js +17 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetUninstallContext.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationPermissionsUpdate.d.ts +18 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationPermissionsUpdate.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationPermissionsUpdate.js +92 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationPermissionsUpdate.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationUninstall.d.ts +16 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationUninstall.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationUninstall.js +71 -0
- package/packages/happy2-server/dist/modules/plugin/pluginInstallationUninstall.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginInstall.d.ts +21 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginInstall.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginInstall.js +71 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginInstall.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginUninstall.d.ts +12 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginUninstall.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginUninstall.js +56 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginUninstall.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteInstall.d.ts +11 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteInstall.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteInstall.js +44 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteInstall.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.d.ts +10 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.js +41 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateInstall.d.ts +26 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateInstall.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateInstall.js +78 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateInstall.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateUninstall.d.ts +25 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateUninstall.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateUninstall.js +76 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateUninstall.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestDeny.d.ts +11 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestDeny.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestDeny.js +48 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestDeny.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestGetPackage.d.ts +12 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestGetPackage.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestGetPackage.js +42 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestGetPackage.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestList.d.ts +5 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestList.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestList.js +18 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestList.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestListTerminalIds.d.ts +4 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestListTerminalIds.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestListTerminalIds.js +11 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestListTerminalIds.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestRecoverProcessing.d.ts +5 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestRecoverProcessing.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestRecoverProcessing.js +75 -0
- package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestRecoverProcessing.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginSkillPackageListReady.d.ts +12 -0
- package/packages/happy2-server/dist/modules/plugin/pluginSkillPackageListReady.d.ts.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/pluginSkillPackageListReady.js +33 -0
- package/packages/happy2-server/dist/modules/plugin/pluginSkillPackageListReady.js.map +1 -0
- package/packages/happy2-server/dist/modules/plugin/service.d.ts +108 -7
- package/packages/happy2-server/dist/modules/plugin/service.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/service.js +463 -26
- package/packages/happy2-server/dist/modules/plugin/service.js.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/types.d.ts +75 -9
- package/packages/happy2-server/dist/modules/plugin/types.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/plugin/types.js +9 -0
- package/packages/happy2-server/dist/modules/plugin/types.js.map +1 -1
- package/packages/happy2-server/dist/modules/schema.d.ts +4224 -3264
- package/packages/happy2-server/dist/modules/schema.d.ts.map +1 -1
- package/packages/happy2-server/dist/modules/schema.js +35 -0
- package/packages/happy2-server/dist/modules/schema.js.map +1 -1
- package/packages/happy2-server/dist/routes/pluginHost.d.ts +2 -1
- package/packages/happy2-server/dist/routes/pluginHost.d.ts.map +1 -1
- package/packages/happy2-server/dist/routes/pluginHost.js +288 -6
- package/packages/happy2-server/dist/routes/pluginHost.js.map +1 -1
- package/packages/happy2-server/dist/routes/plugins.d.ts.map +1 -1
- package/packages/happy2-server/dist/routes/plugins.js +229 -3
- package/packages/happy2-server/dist/routes/plugins.js.map +1 -1
- package/packages/happy2-server/dist/server.d.ts +2 -0
- package/packages/happy2-server/dist/server.d.ts.map +1 -1
- package/packages/happy2-server/dist/server.js +9 -7
- package/packages/happy2-server/dist/server.js.map +1 -1
- package/packages/happy2-server/dist/web/assets/index-Dn5SZu3y.js +39 -0
- package/packages/happy2-server/dist/web/assets/{index-BaPUPGPe.css → index-Dys3sWv8.css} +1 -1
- package/packages/happy2-server/dist/web/index.html +2 -2
- package/packages/happy2-server/drizzle/0028_plugin_api_permissions.sql +1 -0
- package/packages/happy2-server/drizzle/0029_plugin_management_requests.sql +35 -0
- package/packages/happy2-server/drizzle/meta/_journal.json +14 -0
- package/packages/happy2-server/plugins/README.md +7 -3
- package/packages/happy2-server/plugins/chat-management/plugin.json +3 -3
- package/packages/happy2-server/plugins/chat-management/server.mjs +184 -17
- package/packages/happy2-server/plugins/plugin-developer/container/Dockerfile +6 -0
- package/packages/happy2-server/plugins/plugin-developer/plugin.json +17 -0
- package/packages/happy2-server/plugins/plugin-developer/plugin.png +0 -0
- package/packages/happy2-server/plugins/plugin-developer/server.mjs +155 -0
- package/packages/happy2-server/plugins/plugin-developer/skills/happy2-plugin-development/SKILL.md +59 -0
- package/packages/happy2-server/plugins/plugin-developer/skills/happy2-plugin-development/references/host-api.md +63 -0
- package/packages/happy2-server/plugins/plugin-developer/skills/happy2-plugin-development/references/installing.md +86 -0
- package/packages/happy2-server/plugins/plugin-developer/skills/happy2-plugin-development/references/package-format.md +137 -0
- package/packages/happy2-server/dist/modules/agent/agentChatGetIdBySession.d.ts +0 -7
- package/packages/happy2-server/dist/modules/agent/agentChatGetIdBySession.d.ts.map +0 -1
- package/packages/happy2-server/dist/modules/agent/agentChatGetIdBySession.js +0 -15
- package/packages/happy2-server/dist/modules/agent/agentChatGetIdBySession.js.map +0 -1
- package/packages/happy2-server/dist/web/assets/index-BnhFxR3U.js +0 -39
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { pluginInstallations } from "../schema.js";
|
|
3
|
+
import { userRequireServerAdmin } from "../chat/userRequireServerAdmin.js";
|
|
4
|
+
import { PluginError } from "./types.js";
|
|
5
|
+
/** Authorizes an administrator and returns the process-local resources for one installation without mutating durable state. This boundary lets orchestration stop the exact runtime before the later pluginInstallations deletion. */
|
|
6
|
+
export async function pluginInstallationGetUninstallContext(executor, actorUserId, installationId) {
|
|
7
|
+
await userRequireServerAdmin(executor, actorUserId);
|
|
8
|
+
const [row] = await executor
|
|
9
|
+
.select({ containerName: pluginInstallations.containerName })
|
|
10
|
+
.from(pluginInstallations)
|
|
11
|
+
.where(eq(pluginInstallations.id, installationId))
|
|
12
|
+
.limit(1);
|
|
13
|
+
if (!row)
|
|
14
|
+
throw new PluginError("not_found", "Plugin installation was not found");
|
|
15
|
+
return row.containerName ? { containerName: row.containerName } : {};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=pluginInstallationGetUninstallContext.js.map
|
package/packages/happy2-server/dist/modules/plugin/pluginInstallationGetUninstallContext.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginInstallationGetUninstallContext.js","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginInstallationGetUninstallContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,sOAAsO;AACtO,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACvD,QAAyB,EACzB,WAAmB,EACnB,cAAsB;IAEtB,MAAM,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,QAAQ;SACvB,MAAM,CAAC,EAAE,aAAa,EAAE,mBAAmB,CAAC,aAAa,EAAE,CAAC;SAC5D,IAAI,CAAC,mBAAmB,CAAC;SACzB,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;SACjD,KAAK,CAAC,CAAC,CAAC,CAAC;IACd,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;IAClF,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DrizzleExecutor } from "../drizzle.js";
|
|
2
|
+
import type { MutationHint } from "../chat/types.js";
|
|
3
|
+
import type { PluginHostPermission, PluginInstallationSummary } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Replaces one pluginInstallations row's user-approved API grants while enforcing its immutable manifest declarations.
|
|
6
|
+
* A changed grant set invalidates the current container incarnation and queues runtime reactivation in the same audited sync transaction so old tokens stop authorizing immediately.
|
|
7
|
+
*/
|
|
8
|
+
export declare function pluginInstallationPermissionsUpdate(executor: DrizzleExecutor, input: {
|
|
9
|
+
actorUserId: string;
|
|
10
|
+
installationId: string;
|
|
11
|
+
permissions: readonly PluginHostPermission[];
|
|
12
|
+
}): Promise<{
|
|
13
|
+
changed: boolean;
|
|
14
|
+
containerName?: string;
|
|
15
|
+
hint?: MutationHint;
|
|
16
|
+
installation: PluginInstallationSummary;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=pluginInstallationPermissionsUpdate.d.ts.map
|
package/packages/happy2-server/dist/modules/plugin/pluginInstallationPermissionsUpdate.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginInstallationPermissionsUpdate.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginInstallationPermissionsUpdate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAQlF;;;GAGG;AACH,wBAAsB,mCAAmC,CACrD,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAChD,GACF,OAAO,CAAC;IACP,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,yBAAyB,CAAC;CAC3C,CAAC,CAoED"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { eq, sql } from "drizzle-orm";
|
|
2
|
+
import { withTransaction } from "../drizzle.js";
|
|
3
|
+
import { chatAppendAudit } from "../chat/chatAppendAudit.js";
|
|
4
|
+
import { areaHint } from "../chat/areaHint.js";
|
|
5
|
+
import { userRequirePermission } from "../permission/userRequirePermission.js";
|
|
6
|
+
import { pluginInstallations, plugins } from "../schema.js";
|
|
7
|
+
import { syncEventInsert } from "../sync/syncEventInsert.js";
|
|
8
|
+
import { syncSequenceNext } from "../sync/syncSequenceNext.js";
|
|
9
|
+
import { PluginError } from "./types.js";
|
|
10
|
+
import { asPluginInstallation } from "./impl/asInstallation.js";
|
|
11
|
+
import { effectiveContainer } from "./impl/effectiveContainer.js";
|
|
12
|
+
import { installedManifest } from "./impl/installedManifest.js";
|
|
13
|
+
import { pluginInstallationSelection } from "./impl/installationSelection.js";
|
|
14
|
+
import { pluginPermissionsParse, pluginPermissionsValidate } from "./impl/apiPermissions.js";
|
|
15
|
+
/**
|
|
16
|
+
* Replaces one pluginInstallations row's user-approved API grants while enforcing its immutable manifest declarations.
|
|
17
|
+
* A changed grant set invalidates the current container incarnation and queues runtime reactivation in the same audited sync transaction so old tokens stop authorizing immediately.
|
|
18
|
+
*/
|
|
19
|
+
export async function pluginInstallationPermissionsUpdate(executor, input) {
|
|
20
|
+
return withTransaction(executor, async (tx) => {
|
|
21
|
+
await userRequirePermission(tx, input.actorUserId, "managePlugins");
|
|
22
|
+
const [current] = await tx
|
|
23
|
+
.select({
|
|
24
|
+
...pluginInstallationSelection,
|
|
25
|
+
manifestJson: plugins.manifestJson,
|
|
26
|
+
containerName: pluginInstallations.containerName,
|
|
27
|
+
})
|
|
28
|
+
.from(pluginInstallations)
|
|
29
|
+
.innerJoin(plugins, eq(pluginInstallations.pluginId, plugins.id))
|
|
30
|
+
.where(eq(pluginInstallations.id, input.installationId))
|
|
31
|
+
.limit(1);
|
|
32
|
+
if (!current)
|
|
33
|
+
throw new PluginError("not_found", "Plugin installation was not found");
|
|
34
|
+
const manifest = installedManifest(current.manifestJson);
|
|
35
|
+
const declared = effectiveContainer(manifest)?.permissions ?? [];
|
|
36
|
+
const granted = pluginPermissionsValidate(input.permissions, declared);
|
|
37
|
+
const before = pluginPermissionsParse(current.grantedPermissionsJson);
|
|
38
|
+
if (samePermissions(before, granted))
|
|
39
|
+
return {
|
|
40
|
+
changed: false,
|
|
41
|
+
...(current.containerName ? { containerName: current.containerName } : {}),
|
|
42
|
+
installation: asPluginInstallation(current),
|
|
43
|
+
};
|
|
44
|
+
const sequence = await syncSequenceNext(tx);
|
|
45
|
+
await tx
|
|
46
|
+
.update(pluginInstallations)
|
|
47
|
+
.set({
|
|
48
|
+
grantedPermissionsJson: JSON.stringify(granted),
|
|
49
|
+
status: current.containerName ? "preparing" : current.status,
|
|
50
|
+
statusDetail: current.containerName
|
|
51
|
+
? "Plugin runtime is queued to apply changed API permissions."
|
|
52
|
+
: current.statusDetail,
|
|
53
|
+
containerInstanceId: null,
|
|
54
|
+
syncSequence: sequence,
|
|
55
|
+
updatedAt: sql `CURRENT_TIMESTAMP`,
|
|
56
|
+
readyAt: current.containerName ? null : current.readyAt,
|
|
57
|
+
})
|
|
58
|
+
.where(eq(pluginInstallations.id, input.installationId));
|
|
59
|
+
await chatAppendAudit(tx, {
|
|
60
|
+
actorUserId: input.actorUserId,
|
|
61
|
+
action: "plugin.permissions_updated",
|
|
62
|
+
targetType: "plugin_installation",
|
|
63
|
+
targetId: input.installationId,
|
|
64
|
+
before: { grantedPermissions: before },
|
|
65
|
+
after: { grantedPermissions: granted },
|
|
66
|
+
});
|
|
67
|
+
await syncEventInsert(tx, {
|
|
68
|
+
sequence,
|
|
69
|
+
kind: "plugin.permissions_updated",
|
|
70
|
+
entityId: input.installationId,
|
|
71
|
+
actorUserId: input.actorUserId,
|
|
72
|
+
});
|
|
73
|
+
const [updated] = await tx
|
|
74
|
+
.select(pluginInstallationSelection)
|
|
75
|
+
.from(pluginInstallations)
|
|
76
|
+
.innerJoin(plugins, eq(pluginInstallations.pluginId, plugins.id))
|
|
77
|
+
.where(eq(pluginInstallations.id, input.installationId))
|
|
78
|
+
.limit(1);
|
|
79
|
+
if (!updated)
|
|
80
|
+
throw new Error("Plugin installation disappeared after permission update");
|
|
81
|
+
return {
|
|
82
|
+
changed: true,
|
|
83
|
+
...(current.containerName ? { containerName: current.containerName } : {}),
|
|
84
|
+
hint: areaHint(sequence, "plugins"),
|
|
85
|
+
installation: asPluginInstallation(updated),
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function samePermissions(left, right) {
|
|
90
|
+
return left.length === right.length && left.every((permission) => right.includes(permission));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=pluginInstallationPermissionsUpdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginInstallationPermissionsUpdate.js","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginInstallationPermissionsUpdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DrizzleExecutor } from "../drizzle.js";
|
|
2
|
+
import type { MutationHint } from "../chat/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Deletes one authorized plugin installation and its cascade-owned state, removing the plugin row when no installation remains.
|
|
5
|
+
* The transaction records actor provenance and a plugins sync event after PluginService has stopped process/container resources.
|
|
6
|
+
*/
|
|
7
|
+
export declare function pluginInstallationUninstall(executor: DrizzleExecutor, input: {
|
|
8
|
+
installationId: string;
|
|
9
|
+
actorUserId?: string;
|
|
10
|
+
actorInstallationId?: string;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
hint: MutationHint;
|
|
13
|
+
pluginId: string;
|
|
14
|
+
pluginRemoved: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=pluginInstallationUninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginInstallationUninstall.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginInstallationUninstall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC7C,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC,GACF,OAAO,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CAqD3E"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { withTransaction } from "../drizzle.js";
|
|
3
|
+
import { chatAppendAudit } from "../chat/chatAppendAudit.js";
|
|
4
|
+
import { areaHint } from "../chat/areaHint.js";
|
|
5
|
+
import { userRequirePermission } from "../permission/userRequirePermission.js";
|
|
6
|
+
import { pluginInstallations, plugins } from "../schema.js";
|
|
7
|
+
import { syncEventInsert } from "../sync/syncEventInsert.js";
|
|
8
|
+
import { syncSequenceNext } from "../sync/syncSequenceNext.js";
|
|
9
|
+
import { PluginError } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Deletes one authorized plugin installation and its cascade-owned state, removing the plugin row when no installation remains.
|
|
12
|
+
* The transaction records actor provenance and a plugins sync event after PluginService has stopped process/container resources.
|
|
13
|
+
*/
|
|
14
|
+
export async function pluginInstallationUninstall(executor, input) {
|
|
15
|
+
return withTransaction(executor, async (tx) => {
|
|
16
|
+
if (input.actorUserId)
|
|
17
|
+
await userRequirePermission(tx, input.actorUserId, "managePlugins");
|
|
18
|
+
else if (!input.actorInstallationId)
|
|
19
|
+
throw new PluginError("forbidden", "Plugin installation authority is required");
|
|
20
|
+
const [installation] = await tx
|
|
21
|
+
.select({
|
|
22
|
+
id: pluginInstallations.id,
|
|
23
|
+
pluginId: pluginInstallations.pluginId,
|
|
24
|
+
shortName: plugins.shortName,
|
|
25
|
+
sourceVersion: plugins.sourceVersion,
|
|
26
|
+
})
|
|
27
|
+
.from(pluginInstallations)
|
|
28
|
+
.innerJoin(plugins, eq(pluginInstallations.pluginId, plugins.id))
|
|
29
|
+
.where(eq(pluginInstallations.id, input.installationId))
|
|
30
|
+
.limit(1);
|
|
31
|
+
if (!installation)
|
|
32
|
+
throw new PluginError("not_found", "Plugin installation was not found");
|
|
33
|
+
await tx
|
|
34
|
+
.delete(pluginInstallations)
|
|
35
|
+
.where(eq(pluginInstallations.id, input.installationId));
|
|
36
|
+
const [remaining] = await tx
|
|
37
|
+
.select({ id: pluginInstallations.id })
|
|
38
|
+
.from(pluginInstallations)
|
|
39
|
+
.where(eq(pluginInstallations.pluginId, installation.pluginId))
|
|
40
|
+
.limit(1);
|
|
41
|
+
const pluginRemoved = !remaining;
|
|
42
|
+
if (pluginRemoved)
|
|
43
|
+
await tx.delete(plugins).where(eq(plugins.id, installation.pluginId));
|
|
44
|
+
await chatAppendAudit(tx, {
|
|
45
|
+
actorUserId: input.actorUserId,
|
|
46
|
+
action: "plugin.uninstalled",
|
|
47
|
+
targetType: "plugin_installation",
|
|
48
|
+
targetId: input.installationId,
|
|
49
|
+
before: {
|
|
50
|
+
pluginId: installation.pluginId,
|
|
51
|
+
shortName: installation.shortName,
|
|
52
|
+
actorInstallationId: input.actorInstallationId,
|
|
53
|
+
version: installation.sourceVersion,
|
|
54
|
+
},
|
|
55
|
+
after: { pluginRemoved },
|
|
56
|
+
});
|
|
57
|
+
const sequence = await syncSequenceNext(tx);
|
|
58
|
+
await syncEventInsert(tx, {
|
|
59
|
+
sequence,
|
|
60
|
+
kind: "plugin.uninstalled",
|
|
61
|
+
entityId: input.installationId,
|
|
62
|
+
actorUserId: input.actorUserId,
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
hint: areaHint(sequence, "plugins"),
|
|
66
|
+
pluginId: installation.pluginId,
|
|
67
|
+
pluginRemoved,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=pluginInstallationUninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginInstallationUninstall.js","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginInstallationUninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC7C,QAAyB,EACzB,KAIC;IAED,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,WAAW;YAAE,MAAM,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;aACtF,IAAI,CAAC,KAAK,CAAC,mBAAmB;YAC/B,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,2CAA2C,CAAC,CAAC;QACpF,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,EAAE;aAC1B,MAAM,CAAC;YACJ,EAAE,EAAE,mBAAmB,CAAC,EAAE;YAC1B,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;SACvC,CAAC;aACD,IAAI,CAAC,mBAAmB,CAAC;aACzB,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;aAChE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;aACvD,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;QAC3F,MAAM,EAAE;aACH,MAAM,CAAC,mBAAmB,CAAC;aAC3B,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE;aACvB,MAAM,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,EAAE,EAAE,CAAC;aACtC,IAAI,CAAC,mBAAmB,CAAC;aACzB,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;aAC9D,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC;QACjC,IAAI,aAAa;YAAE,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzF,MAAM,eAAe,CAAC,EAAE,EAAE;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,oBAAoB;YAC5B,UAAU,EAAE,qBAAqB;YACjC,QAAQ,EAAE,KAAK,CAAC,cAAc;YAC9B,MAAM,EAAE;gBACJ,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;gBAC9C,OAAO,EAAE,YAAY,CAAC,aAAa;aACtC;YACD,KAAK,EAAE,EAAE,aAAa,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,eAAe,CAAC,EAAE,EAAE;YACtB,QAAQ;YACR,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,KAAK,CAAC,cAAc;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,OAAO;YACH,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;YACnC,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,aAAa;SAChB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DrizzleExecutor } from "../drizzle.js";
|
|
2
|
+
import type { MutationHint } from "../chat/types.js";
|
|
3
|
+
import { type PluginSource } from "./types.js";
|
|
4
|
+
export interface PluginManagementRequestInstallWork {
|
|
5
|
+
id: string;
|
|
6
|
+
chatId: string;
|
|
7
|
+
installationId: string;
|
|
8
|
+
packageDigest: string;
|
|
9
|
+
packageDirectory: string;
|
|
10
|
+
source: Extract<PluginSource, {
|
|
11
|
+
kind: "archive" | "link";
|
|
12
|
+
}>;
|
|
13
|
+
hint: MutationHint;
|
|
14
|
+
}
|
|
15
|
+
/** Claims one pending pluginManagementRequests install by changing it to processing for an active chat-member administrator. This durable state boundary serializes approval before filesystem and runtime side effects begin. */
|
|
16
|
+
export declare function pluginManagementRequestBeginInstall(executor: DrizzleExecutor, input: {
|
|
17
|
+
actorUserId: string;
|
|
18
|
+
chatId: string;
|
|
19
|
+
requestId: string;
|
|
20
|
+
}): Promise<PluginManagementRequestInstallWork>;
|
|
21
|
+
//# sourceMappingURL=pluginManagementRequestBeginInstall.d.ts.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginInstall.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestBeginInstall.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestBeginInstall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIrD,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,kCAAkC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE;QAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,IAAI,EAAE,YAAY,CAAC;CACtB;AAED,kOAAkO;AAClO,wBAAsB,mCAAmC,CACrD,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,kCAAkC,CAAC,CA6E7C"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
2
|
+
import { withTransaction } from "../drizzle.js";
|
|
3
|
+
import { chatGetAccess } from "../chat/chatGetAccess.js";
|
|
4
|
+
import { chatAdvanceWithSequence } from "../chat/chatAdvanceWithSequence.js";
|
|
5
|
+
import { chatHint } from "../chat/chatHint.js";
|
|
6
|
+
import { userRequireServerAdmin } from "../chat/userRequireServerAdmin.js";
|
|
7
|
+
import { pluginManagementRequests } from "../schema.js";
|
|
8
|
+
import { syncSequenceNext } from "../sync/syncSequenceNext.js";
|
|
9
|
+
import { PluginError } from "./types.js";
|
|
10
|
+
/** Claims one pending pluginManagementRequests install by changing it to processing for an active chat-member administrator. This durable state boundary serializes approval before filesystem and runtime side effects begin. */
|
|
11
|
+
export async function pluginManagementRequestBeginInstall(executor, input) {
|
|
12
|
+
return withTransaction(executor, async (tx) => {
|
|
13
|
+
await userRequireServerAdmin(tx, input.actorUserId);
|
|
14
|
+
if (!(await chatGetAccess(tx, input.actorUserId, input.chatId, true)))
|
|
15
|
+
throw new PluginError("forbidden", "Chat membership is required");
|
|
16
|
+
const [row] = await tx
|
|
17
|
+
.select({
|
|
18
|
+
id: pluginManagementRequests.id,
|
|
19
|
+
action: pluginManagementRequests.action,
|
|
20
|
+
status: pluginManagementRequests.status,
|
|
21
|
+
chatId: pluginManagementRequests.chatId,
|
|
22
|
+
sourceKind: pluginManagementRequests.sourceKind,
|
|
23
|
+
sourceReference: pluginManagementRequests.sourceReference,
|
|
24
|
+
packageDigest: pluginManagementRequests.packageDigest,
|
|
25
|
+
packageDirectory: pluginManagementRequests.packageDirectory,
|
|
26
|
+
installationId: pluginManagementRequests.installationId,
|
|
27
|
+
})
|
|
28
|
+
.from(pluginManagementRequests)
|
|
29
|
+
.where(and(eq(pluginManagementRequests.id, input.requestId), eq(pluginManagementRequests.chatId, input.chatId)))
|
|
30
|
+
.limit(1);
|
|
31
|
+
if (!row)
|
|
32
|
+
throw new PluginError("not_found", "Plugin management request was not found");
|
|
33
|
+
if (row.action !== "install")
|
|
34
|
+
throw new PluginError("conflict", "Request is not an install");
|
|
35
|
+
if (row.status !== "pending")
|
|
36
|
+
throw new PluginError("conflict", `Plugin request is already ${row.status}`);
|
|
37
|
+
if ((row.sourceKind !== "archive" && row.sourceKind !== "link") ||
|
|
38
|
+
!row.sourceReference ||
|
|
39
|
+
!row.packageDigest ||
|
|
40
|
+
!row.packageDirectory ||
|
|
41
|
+
!row.installationId)
|
|
42
|
+
throw new Error("Plugin install request has incomplete package metadata");
|
|
43
|
+
const updated = await tx
|
|
44
|
+
.update(pluginManagementRequests)
|
|
45
|
+
.set({
|
|
46
|
+
status: "processing",
|
|
47
|
+
resolvedByUserId: input.actorUserId,
|
|
48
|
+
updatedAt: sql `CURRENT_TIMESTAMP`,
|
|
49
|
+
})
|
|
50
|
+
.where(and(eq(pluginManagementRequests.id, input.requestId), eq(pluginManagementRequests.status, "pending")))
|
|
51
|
+
.returning({ id: pluginManagementRequests.id });
|
|
52
|
+
if (updated.length !== 1)
|
|
53
|
+
throw new PluginError("conflict", "Plugin request was already resolved");
|
|
54
|
+
const sequence = await syncSequenceNext(tx);
|
|
55
|
+
await tx
|
|
56
|
+
.update(pluginManagementRequests)
|
|
57
|
+
.set({ syncSequence: sequence })
|
|
58
|
+
.where(eq(pluginManagementRequests.id, input.requestId));
|
|
59
|
+
const mutation = await chatAdvanceWithSequence(tx, sequence, input.actorUserId, input.chatId, "plugin.install_processing", input.requestId);
|
|
60
|
+
return {
|
|
61
|
+
id: row.id,
|
|
62
|
+
chatId: row.chatId,
|
|
63
|
+
installationId: row.installationId,
|
|
64
|
+
packageDigest: row.packageDigest,
|
|
65
|
+
packageDirectory: row.packageDirectory,
|
|
66
|
+
source: { kind: row.sourceKind, reference: row.sourceReference },
|
|
67
|
+
hint: chatHint(sequence, input.chatId, mutation.pts),
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=pluginManagementRequestBeginInstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestBeginInstall.js","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestBeginInstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAC;AAY5D,kOAAkO;AAClO,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACrD,QAAyB,EACzB,KAAiE;IAEjE,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1C,MAAM,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;aACjB,MAAM,CAAC;YACJ,EAAE,EAAE,wBAAwB,CAAC,EAAE;YAC/B,MAAM,EAAE,wBAAwB,CAAC,MAAM;YACvC,MAAM,EAAE,wBAAwB,CAAC,MAAM;YACvC,MAAM,EAAE,wBAAwB,CAAC,MAAM;YACvC,UAAU,EAAE,wBAAwB,CAAC,UAAU;YAC/C,eAAe,EAAE,wBAAwB,CAAC,eAAe;YACzD,aAAa,EAAE,wBAAwB,CAAC,aAAa;YACrD,gBAAgB,EAAE,wBAAwB,CAAC,gBAAgB;YAC3D,cAAc,EAAE,wBAAwB,CAAC,cAAc;SAC1D,CAAC;aACD,IAAI,CAAC,wBAAwB,CAAC;aAC9B,KAAK,CACF,GAAG,CACC,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,EAChD,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CACpD,CACJ;aACA,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;QACxF,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YACxB,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YACxB,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,6BAA6B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,IACI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC;YAC3D,CAAC,GAAG,CAAC,eAAe;YACpB,CAAC,GAAG,CAAC,aAAa;YAClB,CAAC,GAAG,CAAC,gBAAgB;YACrB,CAAC,GAAG,CAAC,cAAc;YAEnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,EAAE;aACnB,MAAM,CAAC,wBAAwB,CAAC;aAChC,GAAG,CAAC;YACD,MAAM,EAAE,YAAY;YACpB,gBAAgB,EAAE,KAAK,CAAC,WAAW;YACnC,SAAS,EAAE,GAAG,CAAA,mBAAmB;SACpC,CAAC;aACD,KAAK,CACF,GAAG,CACC,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,EAChD,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,CACjD,CACJ;aACA,SAAS,CAAC,EAAE,EAAE,EAAE,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YACpB,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE;aACH,MAAM,CAAC,wBAAwB,CAAC;aAChC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;aAC/B,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC1C,EAAE,EACF,QAAQ,EACR,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,EACZ,2BAA2B,EAC3B,KAAK,CAAC,SAAS,CAClB,CAAC;QACF,OAAO;YACH,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,eAAe,EAAE;YAChE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;SACvD,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DrizzleExecutor } from "../drizzle.js";
|
|
2
|
+
import type { MutationHint } from "../chat/types.js";
|
|
3
|
+
/** Claims one pending pluginManagementRequests uninstall by changing it to processing for a chat-member administrator. This durable state boundary serializes approval and returns the exact installation target for runtime removal. */
|
|
4
|
+
export declare function pluginManagementRequestBeginUninstall(executor: DrizzleExecutor, input: {
|
|
5
|
+
actorUserId: string;
|
|
6
|
+
chatId: string;
|
|
7
|
+
requestId: string;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
targetInstallationId: string;
|
|
10
|
+
hint: MutationHint;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=pluginManagementRequestBeginUninstall.d.ts.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginUninstall.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestBeginUninstall.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestBeginUninstall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrD,yOAAyO;AACzO,wBAAsB,qCAAqC,CACvD,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC;IAAE,oBAAoB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,CA2D/D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
2
|
+
import { withTransaction } from "../drizzle.js";
|
|
3
|
+
import { chatGetAccess } from "../chat/chatGetAccess.js";
|
|
4
|
+
import { chatAdvanceWithSequence } from "../chat/chatAdvanceWithSequence.js";
|
|
5
|
+
import { chatHint } from "../chat/chatHint.js";
|
|
6
|
+
import { userRequireServerAdmin } from "../chat/userRequireServerAdmin.js";
|
|
7
|
+
import { pluginManagementRequests } from "../schema.js";
|
|
8
|
+
import { syncSequenceNext } from "../sync/syncSequenceNext.js";
|
|
9
|
+
import { PluginError } from "./types.js";
|
|
10
|
+
/** Claims one pending pluginManagementRequests uninstall by changing it to processing for a chat-member administrator. This durable state boundary serializes approval and returns the exact installation target for runtime removal. */
|
|
11
|
+
export async function pluginManagementRequestBeginUninstall(executor, input) {
|
|
12
|
+
return withTransaction(executor, async (tx) => {
|
|
13
|
+
await userRequireServerAdmin(tx, input.actorUserId);
|
|
14
|
+
if (!(await chatGetAccess(tx, input.actorUserId, input.chatId, true)))
|
|
15
|
+
throw new PluginError("forbidden", "Chat membership is required");
|
|
16
|
+
const [row] = await tx
|
|
17
|
+
.select({
|
|
18
|
+
action: pluginManagementRequests.action,
|
|
19
|
+
status: pluginManagementRequests.status,
|
|
20
|
+
targetInstallationId: pluginManagementRequests.targetInstallationId,
|
|
21
|
+
})
|
|
22
|
+
.from(pluginManagementRequests)
|
|
23
|
+
.where(and(eq(pluginManagementRequests.id, input.requestId), eq(pluginManagementRequests.chatId, input.chatId)))
|
|
24
|
+
.limit(1);
|
|
25
|
+
if (!row)
|
|
26
|
+
throw new PluginError("not_found", "Plugin management request was not found");
|
|
27
|
+
if (row.action !== "uninstall")
|
|
28
|
+
throw new PluginError("conflict", "Request is not an uninstall");
|
|
29
|
+
if (row.status !== "pending")
|
|
30
|
+
throw new PluginError("conflict", `Plugin request is already ${row.status}`);
|
|
31
|
+
if (!row.targetInstallationId)
|
|
32
|
+
throw new Error("Plugin uninstall request has no target");
|
|
33
|
+
const updated = await tx
|
|
34
|
+
.update(pluginManagementRequests)
|
|
35
|
+
.set({
|
|
36
|
+
status: "processing",
|
|
37
|
+
resolvedByUserId: input.actorUserId,
|
|
38
|
+
updatedAt: sql `CURRENT_TIMESTAMP`,
|
|
39
|
+
})
|
|
40
|
+
.where(and(eq(pluginManagementRequests.id, input.requestId), eq(pluginManagementRequests.status, "pending")))
|
|
41
|
+
.returning({ id: pluginManagementRequests.id });
|
|
42
|
+
if (updated.length !== 1)
|
|
43
|
+
throw new PluginError("conflict", "Plugin request was already resolved");
|
|
44
|
+
const sequence = await syncSequenceNext(tx);
|
|
45
|
+
await tx
|
|
46
|
+
.update(pluginManagementRequests)
|
|
47
|
+
.set({ syncSequence: sequence })
|
|
48
|
+
.where(eq(pluginManagementRequests.id, input.requestId));
|
|
49
|
+
const mutation = await chatAdvanceWithSequence(tx, sequence, input.actorUserId, input.chatId, "plugin.uninstall_processing", input.requestId);
|
|
50
|
+
return {
|
|
51
|
+
targetInstallationId: row.targetInstallationId,
|
|
52
|
+
hint: chatHint(sequence, input.chatId, mutation.pts),
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=pluginManagementRequestBeginUninstall.js.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestBeginUninstall.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestBeginUninstall.js","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestBeginUninstall.ts"],"names":[],"mappings":"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"}
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteInstall.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DrizzleExecutor } from "../drizzle.js";
|
|
2
|
+
import type { MutationHint } from "../chat/types.js";
|
|
3
|
+
/** Finalizes a claimed pluginManagementRequests install as approved or failed and advances the originating chats point in one transaction. This completion boundary makes the runtime outcome, audit evidence, and reactive card resolution converge durably. */
|
|
4
|
+
export declare function pluginManagementRequestCompleteInstall(executor: DrizzleExecutor, input: {
|
|
5
|
+
actorUserId: string;
|
|
6
|
+
requestId: string;
|
|
7
|
+
chatId: string;
|
|
8
|
+
installationId: string;
|
|
9
|
+
error?: string;
|
|
10
|
+
}): Promise<MutationHint>;
|
|
11
|
+
//# sourceMappingURL=pluginManagementRequestCompleteInstall.d.ts.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteInstall.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestCompleteInstall.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestCompleteInstall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIrD,iQAAiQ;AACjQ,wBAAsB,sCAAsC,CACxD,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,GACF,OAAO,CAAC,YAAY,CAAC,CA+CvB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
2
|
+
import { withTransaction } from "../drizzle.js";
|
|
3
|
+
import { chatAdvanceWithSequence } from "../chat/chatAdvanceWithSequence.js";
|
|
4
|
+
import { chatAppendAudit } from "../chat/chatAppendAudit.js";
|
|
5
|
+
import { chatHint } from "../chat/chatHint.js";
|
|
6
|
+
import { pluginManagementRequests } from "../schema.js";
|
|
7
|
+
import { syncSequenceNext } from "../sync/syncSequenceNext.js";
|
|
8
|
+
/** Finalizes a claimed pluginManagementRequests install as approved or failed and advances the originating chats point in one transaction. This completion boundary makes the runtime outcome, audit evidence, and reactive card resolution converge durably. */
|
|
9
|
+
export async function pluginManagementRequestCompleteInstall(executor, input) {
|
|
10
|
+
return withTransaction(executor, async (tx) => {
|
|
11
|
+
const status = input.error ? "failed" : "approved";
|
|
12
|
+
const updated = await tx
|
|
13
|
+
.update(pluginManagementRequests)
|
|
14
|
+
.set({
|
|
15
|
+
status,
|
|
16
|
+
lastError: input.error,
|
|
17
|
+
resolvedAt: sql `CURRENT_TIMESTAMP`,
|
|
18
|
+
updatedAt: sql `CURRENT_TIMESTAMP`,
|
|
19
|
+
})
|
|
20
|
+
.where(and(eq(pluginManagementRequests.id, input.requestId), eq(pluginManagementRequests.chatId, input.chatId), eq(pluginManagementRequests.status, "processing"), eq(pluginManagementRequests.installationId, input.installationId)))
|
|
21
|
+
.returning({ id: pluginManagementRequests.id });
|
|
22
|
+
if (updated.length !== 1)
|
|
23
|
+
throw new Error("Claimed plugin install request was not found");
|
|
24
|
+
await chatAppendAudit(tx, {
|
|
25
|
+
actorUserId: input.actorUserId,
|
|
26
|
+
action: input.error ? "plugin.install_failed" : "plugin.install_approved",
|
|
27
|
+
targetType: "plugin_management_request",
|
|
28
|
+
targetId: input.requestId,
|
|
29
|
+
chatId: input.chatId,
|
|
30
|
+
after: {
|
|
31
|
+
installationId: input.installationId,
|
|
32
|
+
...(input.error ? { error: input.error } : {}),
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
const sequence = await syncSequenceNext(tx);
|
|
36
|
+
await tx
|
|
37
|
+
.update(pluginManagementRequests)
|
|
38
|
+
.set({ syncSequence: sequence })
|
|
39
|
+
.where(eq(pluginManagementRequests.id, input.requestId));
|
|
40
|
+
const mutation = await chatAdvanceWithSequence(tx, sequence, input.actorUserId, input.chatId, input.error ? "plugin.install_failed" : "plugin.install_approved", input.requestId);
|
|
41
|
+
return chatHint(sequence, input.chatId, mutation.pts);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=pluginManagementRequestCompleteInstall.js.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteInstall.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestCompleteInstall.js","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestCompleteInstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,iQAAiQ;AACjQ,MAAM,CAAC,KAAK,UAAU,sCAAsC,CACxD,QAAyB,EACzB,KAMC;IAED,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,EAAE;aACnB,MAAM,CAAC,wBAAwB,CAAC;aAChC,GAAG,CAAC;YACD,MAAM;YACN,SAAS,EAAE,KAAK,CAAC,KAAK;YACtB,UAAU,EAAE,GAAG,CAAA,mBAAmB;YAClC,SAAS,EAAE,GAAG,CAAA,mBAAmB;SACpC,CAAC;aACD,KAAK,CACF,GAAG,CACC,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,EAChD,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EACjD,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,EACjD,EAAE,CAAC,wBAAwB,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,CACpE,CACJ;aACA,SAAS,CAAC,EAAE,EAAE,EAAE,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC1F,MAAM,eAAe,CAAC,EAAE,EAAE;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,yBAAyB;YACzE,UAAU,EAAE,2BAA2B;YACvC,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE;gBACH,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjD;SACJ,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE;aACH,MAAM,CAAC,wBAAwB,CAAC;aAChC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;aAC/B,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC1C,EAAE,EACF,QAAQ,EACR,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,yBAAyB,EACjE,KAAK,CAAC,SAAS,CAClB,CAAC;QACF,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DrizzleExecutor } from "../drizzle.js";
|
|
2
|
+
import type { MutationHint } from "../chat/types.js";
|
|
3
|
+
/** Finalizes a claimed pluginManagementRequests uninstall as approved or failed and advances the originating chats point in one transaction. This completion boundary records the runtime-removal outcome with audit and reactive card evidence. */
|
|
4
|
+
export declare function pluginManagementRequestCompleteUninstall(executor: DrizzleExecutor, input: {
|
|
5
|
+
actorUserId: string;
|
|
6
|
+
chatId: string;
|
|
7
|
+
requestId: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
}): Promise<MutationHint>;
|
|
10
|
+
//# sourceMappingURL=pluginManagementRequestCompleteUninstall.d.ts.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestCompleteUninstall.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestCompleteUninstall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIrD,oPAAoP;AACpP,wBAAsB,wCAAwC,CAC1D,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF,OAAO,CAAC,YAAY,CAAC,CA2CvB"}
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
2
|
+
import { withTransaction } from "../drizzle.js";
|
|
3
|
+
import { chatAdvanceWithSequence } from "../chat/chatAdvanceWithSequence.js";
|
|
4
|
+
import { chatAppendAudit } from "../chat/chatAppendAudit.js";
|
|
5
|
+
import { chatHint } from "../chat/chatHint.js";
|
|
6
|
+
import { pluginManagementRequests } from "../schema.js";
|
|
7
|
+
import { syncSequenceNext } from "../sync/syncSequenceNext.js";
|
|
8
|
+
/** Finalizes a claimed pluginManagementRequests uninstall as approved or failed and advances the originating chats point in one transaction. This completion boundary records the runtime-removal outcome with audit and reactive card evidence. */
|
|
9
|
+
export async function pluginManagementRequestCompleteUninstall(executor, input) {
|
|
10
|
+
return withTransaction(executor, async (tx) => {
|
|
11
|
+
const status = input.error ? "failed" : "approved";
|
|
12
|
+
const updated = await tx
|
|
13
|
+
.update(pluginManagementRequests)
|
|
14
|
+
.set({
|
|
15
|
+
status,
|
|
16
|
+
lastError: input.error,
|
|
17
|
+
resolvedAt: sql `CURRENT_TIMESTAMP`,
|
|
18
|
+
updatedAt: sql `CURRENT_TIMESTAMP`,
|
|
19
|
+
})
|
|
20
|
+
.where(and(eq(pluginManagementRequests.id, input.requestId), eq(pluginManagementRequests.chatId, input.chatId), eq(pluginManagementRequests.status, "processing")))
|
|
21
|
+
.returning({ id: pluginManagementRequests.id });
|
|
22
|
+
if (updated.length !== 1)
|
|
23
|
+
throw new Error("Claimed plugin uninstall request was not found");
|
|
24
|
+
await chatAppendAudit(tx, {
|
|
25
|
+
actorUserId: input.actorUserId,
|
|
26
|
+
action: input.error ? "plugin.uninstall_failed" : "plugin.uninstall_approved",
|
|
27
|
+
targetType: "plugin_management_request",
|
|
28
|
+
targetId: input.requestId,
|
|
29
|
+
chatId: input.chatId,
|
|
30
|
+
after: input.error ? { error: input.error } : undefined,
|
|
31
|
+
});
|
|
32
|
+
const sequence = await syncSequenceNext(tx);
|
|
33
|
+
await tx
|
|
34
|
+
.update(pluginManagementRequests)
|
|
35
|
+
.set({ syncSequence: sequence })
|
|
36
|
+
.where(eq(pluginManagementRequests.id, input.requestId));
|
|
37
|
+
const mutation = await chatAdvanceWithSequence(tx, sequence, input.actorUserId, input.chatId, input.error ? "plugin.uninstall_failed" : "plugin.uninstall_approved", input.requestId);
|
|
38
|
+
return chatHint(sequence, input.chatId, mutation.pts);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=pluginManagementRequestCompleteUninstall.js.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCompleteUninstall.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestCompleteUninstall.js","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestCompleteUninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,oPAAoP;AACpP,MAAM,CAAC,KAAK,UAAU,wCAAwC,CAC1D,QAAyB,EACzB,KAAiF;IAEjF,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,EAAE;aACnB,MAAM,CAAC,wBAAwB,CAAC;aAChC,GAAG,CAAC;YACD,MAAM;YACN,SAAS,EAAE,KAAK,CAAC,KAAK;YACtB,UAAU,EAAE,GAAG,CAAA,mBAAmB;YAClC,SAAS,EAAE,GAAG,CAAA,mBAAmB;SACpC,CAAC;aACD,KAAK,CACF,GAAG,CACC,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,EAChD,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EACjD,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CACpD,CACJ;aACA,SAAS,CAAC,EAAE,EAAE,EAAE,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC5F,MAAM,eAAe,CAAC,EAAE,EAAE;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,2BAA2B;YAC7E,UAAU,EAAE,2BAA2B;YACvC,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;SAC1D,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE;aACH,MAAM,CAAC,wBAAwB,CAAC;aAChC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;aAC/B,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAC1C,EAAE,EACF,QAAQ,EACR,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,2BAA2B,EACrE,KAAK,CAAC,SAAS,CAClB,CAAC;QACF,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DrizzleExecutor } from "../drizzle.js";
|
|
2
|
+
import type { MutationHint } from "../chat/types.js";
|
|
3
|
+
import { type PluginManagementRequestSummary } from "./types.js";
|
|
4
|
+
/** Creates one idempotent pluginManagementRequests install for an immutable staged package and advances the originating chats point in one transaction. This boundary binds audit and reactive approval evidence to the exact agent call before installation authority exists. */
|
|
5
|
+
export declare function pluginManagementRequestCreateInstall(executor: DrizzleExecutor, input: {
|
|
6
|
+
id: string;
|
|
7
|
+
actorUserId: string;
|
|
8
|
+
agentUserId: string;
|
|
9
|
+
callId: string;
|
|
10
|
+
chatId: string;
|
|
11
|
+
requesterInstallationId: string;
|
|
12
|
+
displayName: string;
|
|
13
|
+
shortName: string;
|
|
14
|
+
description: string;
|
|
15
|
+
reason?: string;
|
|
16
|
+
sourceKind: "archive" | "link";
|
|
17
|
+
sourceReference: string;
|
|
18
|
+
packageDigest: string;
|
|
19
|
+
packageDirectory: string;
|
|
20
|
+
installationId: string;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
created: boolean;
|
|
23
|
+
hint?: MutationHint;
|
|
24
|
+
request: PluginManagementRequestSummary;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=pluginManagementRequestCreateInstall.d.ts.map
|
package/packages/happy2-server/dist/modules/plugin/pluginManagementRequestCreateInstall.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManagementRequestCreateInstall.d.ts","sourceRoot":"","sources":["../../../sources/modules/plugin/pluginManagementRequestCreateInstall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKrD,OAAO,EAAe,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAE9E,kRAAkR;AAClR,wBAAsB,oCAAoC,CACtD,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE;IACH,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB,EAAE,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,GAAG,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CAC1B,GACF,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,8BAA8B,CAAA;CAAE,CAAC,CA8E7F"}
|