You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

76 lines
2.5 KiB

(function (root, factory) {
if (typeof module === "object" && module.exports) module.exports = factory();
else root.DSH_BRIDGE = factory();
}(typeof globalThis !== "undefined" ? globalThis : this, function () {
"use strict";
const TOKEN_KEY = "dshmem-bridge-token";
const ENABLED_KEY = "dsh-memory-enabled";
function available() {
return typeof chrome !== "undefined" && chrome.runtime && typeof chrome.runtime.sendMessage === "function";
}
function send(payload) {
return new Promise(function (resolve) {
if (!available()) {
resolve({ ok: false, error: { code: "E_NO_RUNTIME", message: "chrome.runtime unavailable" } });
return;
}
chrome.runtime.sendMessage({ type: "DSH_BRIDGE_CALL", payload: payload }, function (resp) {
const last = chrome.runtime.lastError;
if (last) resolve({ ok: false, error: { code: "E_RUNTIME", message: last.message } });
else resolve(resp || { ok: false, error: { code: "E_NO_RESPONSE", message: "empty" } });
});
});
}
function sendCall(call) {
if (!call || typeof call !== "object" || typeof call.tool !== "string") {
return Promise.resolve({ ok: false, error: { code: "E_ARGS_INVALID", message: "call.tool required" } });
}
const payload = { tool: call.tool, args: call.args || {} };
if (call.workspace) payload.workspace = call.workspace;
if (call.confirmToken) payload.confirmToken = call.confirmToken;
return send(payload);
}
function health() {
return new Promise(function (resolve) {
if (!available()) {
resolve({ ok: false, error: { code: "E_NO_RUNTIME", message: "chrome.runtime unavailable" } });
return;
}
chrome.runtime.sendMessage({ type: "DSH_BRIDGE_HEALTH" }, function (resp) {
const last = chrome.runtime.lastError;
if (last) resolve({ ok: false, error: { code: "E_RUNTIME", message: last.message } });
else resolve(resp || { ok: false, error: { code: "E_NO_RESPONSE", message: "empty" } });
});
});
}
function hasToken() {
return new Promise(function (resolve) {
if (typeof chrome === "undefined" || !chrome.storage) { resolve(false); return; }
chrome.storage.local.get(TOKEN_KEY, function (v) { resolve(Boolean(v && v[TOKEN_KEY])); });
});
}
function isEnabled() {
return new Promise(function (resolve) {
if (typeof chrome === "undefined" || !chrome.storage) { resolve(false); return; }
chrome.storage.local.get(ENABLED_KEY, function (v) {
resolve(Boolean(v && v[ENABLED_KEY]));
});
});
}
return {
sendCall: sendCall,
health: health,
hasToken: hasToken,
isEnabled: isEnabled,
available: available,
TOKEN_KEY: TOKEN_KEY,
ENABLED_KEY: ENABLED_KEY
};
}));