openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
107 lines (106 loc) • 4.27 kB
JavaScript
import { i as executeSqliteQuerySync, o as getNodeSqliteKysely, s as iterateSqliteQuerySync } from "./kysely-sync-DUWzQvCU.mjs";
import { i as tableExists } from "./openclaw-state-db-schema-helpers-DKz5xGgh.mjs";
import { createHash } from "node:crypto";
//#region src/gateway/github-repository-publication.kernel.ts
const table = "github_repository_publication_requests";
const query = (db) => getNodeSqliteKysely(db);
function repositoryGitHubPublicationDigest(row) {
return createHash("sha256").update(JSON.stringify([
row.request_id,
row.owner_profile_id,
row.connection_generation,
row.idempotency_key,
row.session_id,
row.session_lifecycle_revision,
row.session_key,
row.agent_id,
row.workspace_id,
row.identity_source,
row.identity_profile_id,
row.identity_account_id,
row.identity_login,
row.title,
row.body,
row.push_repository,
row.repository,
row.branch,
row.base_branch,
row.checkpoint_ref,
row.checkpoint_digest,
row.source_head_commit,
row.source_index_tree,
row.workspace_tree,
row.previous_head_commit,
row.created_at_ms,
...row.requester_authority_json !== null ? [row.requester_authority_json] : []
])).digest("hex");
}
function checkRepositoryGitHubPublication(row) {
if (repositoryGitHubPublicationDigest(row) !== row.request_digest || row.identity_source === "personal" !== (row.owner_profile_id !== null) || row.owner_profile_id !== null && row.requester_authority_json !== null) throw new Error("GitHub repository publication receipt is corrupt.");
return row;
}
function projectRepositoryGitHubPublicationStatus(row) {
return {
request_id: row.request_id,
owner_profile_id: row.owner_profile_id,
connection_generation: row.connection_generation,
request_digest: row.request_digest,
session_id: row.session_id,
session_lifecycle_revision: row.session_lifecycle_revision,
session_key: row.session_key,
agent_id: row.agent_id,
workspace_id: row.workspace_id,
identity_source: row.identity_source,
identity_account_id: row.identity_account_id,
identity_login: row.identity_login,
status: row.status,
gateway_instance_id: row.gateway_instance_id,
execution_id: row.execution_id,
push_repository: row.push_repository,
repository: row.repository,
branch: row.branch,
base_branch: row.base_branch,
source_head_commit: row.source_head_commit,
source_index_tree: row.source_index_tree,
workspace_tree: row.workspace_tree,
head_commit: row.head_commit,
pull_request_url: row.pull_request_url,
error_code: row.error_code,
next_action: row.next_action,
last_effect: row.last_effect,
effect_state: row.effect_state
};
}
function selectRepositoryGitHubPublications(db, filter) {
let selection = query(db).selectFrom(table).selectAll();
for (const [column, value] of [
["session_id", filter.sessionId],
["session_key", filter.sessionKey],
["agent_id", filter.agentId],
["workspace_id", filter.workspaceId],
["owner_profile_id", filter.ownerProfileId],
["idempotency_key", filter.idempotencyKey]
]) if (value !== void 0) selection = selection.where(column, value === null ? "is" : "=", value);
if (filter.pending !== void 0) selection = selection.where("status", "in", filter.pending ? [
"requested",
"publishing",
"needs_confirmation"
] : ["published", "failed"]);
if (filter.unreported) selection = selection.where("reported_at_ms", "is", null);
return selection.orderBy("updated_at_ms").orderBy("request_id");
}
function listRepositoryGitHubPublicationsInDatabase(db, filter) {
if (!tableExists(db, table)) return [];
return executeSqliteQuerySync(db, selectRepositoryGitHubPublications(db, filter)).rows.map(checkRepositoryGitHubPublication);
}
function readPendingRepositoryGitHubPublicationInDatabase(db, input) {
if (!tableExists(db, table)) return;
let latest;
for (const row of iterateSqliteQuerySync(db, selectRepositoryGitHubPublications(db, {
...input,
pending: true
}))) latest = checkRepositoryGitHubPublication(row);
return latest && projectRepositoryGitHubPublicationStatus(latest);
}
//#endregion
export { repositoryGitHubPublicationDigest as i, listRepositoryGitHubPublicationsInDatabase as n, readPendingRepositoryGitHubPublicationInDatabase as r, checkRepositoryGitHubPublication as t };