@haex-space/vault-sdk 3.2.6 → 3.2.8
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/dist/{client-Bbm83Oy6.d.mts → client-BBD-YsPv.d.ts} +2 -1
- package/dist/{client-exZiz0Ph.d.ts → client-DaS2fAf-.d.mts} +2 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +139 -221
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +139 -221
- package/dist/index.mjs.map +1 -1
- package/dist/node.d.mts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/react.d.mts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +143 -225
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +143 -225
- package/dist/react.mjs.map +1 -1
- package/dist/runtime/nuxt.plugin.client.d.mts +2 -2
- package/dist/runtime/nuxt.plugin.client.d.ts +2 -2
- package/dist/runtime/nuxt.plugin.client.js +143 -225
- package/dist/runtime/nuxt.plugin.client.js.map +1 -1
- package/dist/runtime/nuxt.plugin.client.mjs +143 -225
- package/dist/runtime/nuxt.plugin.client.mjs.map +1 -1
- package/dist/svelte.d.mts +2 -2
- package/dist/svelte.d.ts +2 -2
- package/dist/svelte.js +143 -225
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +143 -225
- package/dist/svelte.mjs.map +1 -1
- package/dist/{types-CDMBvvjl.d.mts → types-Cji-mUN0.d.mts} +4 -0
- package/dist/{types-CDMBvvjl.d.ts → types-Cji-mUN0.d.ts} +4 -0
- package/dist/vue.d.mts +2 -2
- package/dist/vue.d.ts +2 -2
- package/dist/vue.js +143 -225
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +143 -225
- package/dist/vue.mjs.map +1 -1
- package/package.json +1 -1
package/dist/vue.mjs
CHANGED
|
@@ -396,16 +396,17 @@ var HAEXTENSION_EVENTS = {
|
|
|
396
396
|
/** File system change detected (from native file watcher) */
|
|
397
397
|
FILE_CHANGED: "filesync:file-changed",
|
|
398
398
|
/** Tables have been updated via sync (CRDT pull from server) */
|
|
399
|
-
SYNC_TABLES_UPDATED: "haextension:sync:tables-updated"
|
|
399
|
+
SYNC_TABLES_UPDATED: "haextension:sync:tables-updated",
|
|
400
|
+
/** A runtime permission prompt was resolved (granted/denied) by the user.
|
|
401
|
+
* The SDK uses this to auto-retry the original request; extensions may also
|
|
402
|
+
* subscribe via `client.on(HAEXTENSION_EVENTS.PERMISSION_RESOLVED, ...)`. */
|
|
403
|
+
PERMISSION_RESOLVED: "extension:permission-resolved"
|
|
400
404
|
};
|
|
401
405
|
var EXTERNAL_EVENTS = {
|
|
402
406
|
/** External request from authorized client */
|
|
403
407
|
REQUEST: "haextension:external:request",
|
|
404
408
|
/** AI action request (tool calls from AI assistant) */
|
|
405
|
-
ACTION_REQUEST: "haextension:action:request"
|
|
406
|
-
/** New external client requesting authorization */
|
|
407
|
-
AUTHORIZATION_REQUEST: "external:authorization-request"
|
|
408
|
-
};
|
|
409
|
+
ACTION_REQUEST: "haextension:action:request"};
|
|
409
410
|
var SHELL_EVENTS = {
|
|
410
411
|
/** PTY output data from a shell session */
|
|
411
412
|
OUTPUT: "shell:output",
|
|
@@ -419,6 +420,9 @@ var TABLE_SEPARATOR = "__";
|
|
|
419
420
|
function getTableName(publicKey, extensionName, tableName) {
|
|
420
421
|
return `${publicKey}${TABLE_SEPARATOR}${extensionName}${TABLE_SEPARATOR}${tableName}`;
|
|
421
422
|
}
|
|
423
|
+
function isPermissionPromptError(error) {
|
|
424
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === 1004 /* PROMPT_REQUIRED */;
|
|
425
|
+
}
|
|
422
426
|
var HaexVaultSdkError = class extends Error {
|
|
423
427
|
constructor(code, messageKey, details) {
|
|
424
428
|
super(messageKey);
|
|
@@ -1057,7 +1061,10 @@ var WebAPI = class {
|
|
|
1057
1061
|
} else if (options.body instanceof Blob) {
|
|
1058
1062
|
bodyParam = await this.blobToBase64(options.body);
|
|
1059
1063
|
} else {
|
|
1060
|
-
|
|
1064
|
+
const bytes = new TextEncoder().encode(options.body);
|
|
1065
|
+
bodyParam = this.arrayBufferToBase64(
|
|
1066
|
+
bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
|
|
1067
|
+
);
|
|
1061
1068
|
}
|
|
1062
1069
|
}
|
|
1063
1070
|
const response = await this.client.request(WEB_COMMANDS.fetch, {
|
|
@@ -1870,6 +1877,21 @@ async function initNativeMode(ctx, log, onEvent, onContextChange) {
|
|
|
1870
1877
|
await setupTauriEventListeners(ctx, log, onEvent, onContextChange);
|
|
1871
1878
|
return { extensionInfo: extensionInfo2, context: context2 };
|
|
1872
1879
|
}
|
|
1880
|
+
async function forwardEvent(listen, log, onEvent, listenOptions, eventName, shape) {
|
|
1881
|
+
try {
|
|
1882
|
+
await listen(eventName, (event) => {
|
|
1883
|
+
if (event.payload == null) {
|
|
1884
|
+
log(`Event '${eventName}' received with no payload`);
|
|
1885
|
+
return;
|
|
1886
|
+
}
|
|
1887
|
+
const extra = shape ? shape(event.payload) : { data: event.payload };
|
|
1888
|
+
onEvent({ type: eventName, timestamp: Date.now(), ...extra });
|
|
1889
|
+
}, listenOptions);
|
|
1890
|
+
log(`Listener registered: ${eventName}`);
|
|
1891
|
+
} catch (error) {
|
|
1892
|
+
log(`Failed to register listener '${eventName}':`, error);
|
|
1893
|
+
}
|
|
1894
|
+
}
|
|
1873
1895
|
async function setupTauriEventListeners(ctx, log, onEvent, onContextChange) {
|
|
1874
1896
|
const { listen } = getTauriEvent();
|
|
1875
1897
|
const webviewLabel = getCurrentWebviewLabel();
|
|
@@ -1901,207 +1923,29 @@ async function setupTauriEventListeners(ctx, log, onEvent, onContextChange) {
|
|
|
1901
1923
|
} catch (error) {
|
|
1902
1924
|
log("Failed to setup context change listener:", error);
|
|
1903
1925
|
}
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
onEvent({
|
|
1928
|
-
type: EXTERNAL_EVENTS.ACTION_REQUEST,
|
|
1929
|
-
data: event.payload,
|
|
1930
|
-
timestamp: Date.now()
|
|
1931
|
-
});
|
|
1932
|
-
} else {
|
|
1933
|
-
log("AI action request event has no payload!");
|
|
1934
|
-
}
|
|
1935
|
-
}, listenOptions);
|
|
1936
|
-
log("AI action request listener registered successfully");
|
|
1937
|
-
} catch (error) {
|
|
1938
|
-
log("Failed to setup AI action request listener:", error);
|
|
1939
|
-
}
|
|
1940
|
-
log("Registering file change listener for:", HAEXTENSION_EVENTS.FILE_CHANGED);
|
|
1941
|
-
try {
|
|
1942
|
-
await listen(HAEXTENSION_EVENTS.FILE_CHANGED, (event) => {
|
|
1943
|
-
log("File change event received:", event.payload);
|
|
1944
|
-
if (event.payload) {
|
|
1945
|
-
const payload = event.payload;
|
|
1946
|
-
onEvent({
|
|
1947
|
-
type: HAEXTENSION_EVENTS.FILE_CHANGED,
|
|
1948
|
-
ruleId: payload.ruleId,
|
|
1949
|
-
changeType: payload.changeType,
|
|
1950
|
-
path: payload.path,
|
|
1951
|
-
timestamp: Date.now()
|
|
1952
|
-
});
|
|
1953
|
-
}
|
|
1954
|
-
}, listenOptions);
|
|
1955
|
-
log("File change listener registered successfully");
|
|
1956
|
-
} catch (error) {
|
|
1957
|
-
log("Failed to setup file change listener:", error);
|
|
1958
|
-
}
|
|
1959
|
-
log("Registering sync tables updated listener for:", HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED);
|
|
1960
|
-
try {
|
|
1961
|
-
await listen(HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED, (event) => {
|
|
1962
|
-
log("Sync tables updated event received:", event.payload);
|
|
1963
|
-
if (event.payload) {
|
|
1964
|
-
const payload = event.payload;
|
|
1965
|
-
onEvent({
|
|
1966
|
-
type: HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED,
|
|
1967
|
-
data: { tables: payload.tables },
|
|
1968
|
-
timestamp: Date.now()
|
|
1969
|
-
});
|
|
1970
|
-
}
|
|
1971
|
-
}, listenOptions);
|
|
1972
|
-
log("Sync tables updated listener registered successfully");
|
|
1973
|
-
} catch (error) {
|
|
1974
|
-
log("Failed to setup sync tables updated listener:", error);
|
|
1975
|
-
}
|
|
1976
|
-
log("Setting up LocalSend event listeners");
|
|
1977
|
-
try {
|
|
1978
|
-
await setupLocalSendEventListeners(log, onEvent, listenOptions);
|
|
1979
|
-
log("LocalSend event listeners setup complete");
|
|
1980
|
-
} catch (error) {
|
|
1981
|
-
log("Failed to setup LocalSend event listeners:", error);
|
|
1982
|
-
}
|
|
1983
|
-
log("Setting up Shell event listeners");
|
|
1984
|
-
try {
|
|
1985
|
-
await listen(SHELL_EVENTS.OUTPUT, (event) => {
|
|
1986
|
-
if (event.payload) {
|
|
1987
|
-
const payload = event.payload;
|
|
1988
|
-
onEvent({
|
|
1989
|
-
type: SHELL_EVENTS.OUTPUT,
|
|
1990
|
-
timestamp: Date.now(),
|
|
1991
|
-
sessionId: payload.sessionId,
|
|
1992
|
-
data: payload.data
|
|
1993
|
-
});
|
|
1994
|
-
}
|
|
1995
|
-
}, listenOptions);
|
|
1996
|
-
log("Shell output listener registered");
|
|
1997
|
-
await listen(SHELL_EVENTS.EXIT, (event) => {
|
|
1998
|
-
if (event.payload) {
|
|
1999
|
-
const payload = event.payload;
|
|
2000
|
-
onEvent({
|
|
2001
|
-
type: SHELL_EVENTS.EXIT,
|
|
2002
|
-
timestamp: Date.now(),
|
|
2003
|
-
sessionId: payload.sessionId,
|
|
2004
|
-
exitCode: payload.exitCode
|
|
2005
|
-
});
|
|
2006
|
-
}
|
|
2007
|
-
}, listenOptions);
|
|
2008
|
-
log("Shell exit listener registered");
|
|
2009
|
-
} catch (error) {
|
|
2010
|
-
log("Failed to setup Shell event listeners:", error);
|
|
2011
|
-
}
|
|
2012
|
-
}
|
|
2013
|
-
async function setupLocalSendEventListeners(log, onEvent, listenOptions) {
|
|
2014
|
-
const { listen } = getTauriEvent();
|
|
2015
|
-
try {
|
|
2016
|
-
await listen(LOCALSEND_EVENTS.deviceDiscovered, (event) => {
|
|
2017
|
-
log("LocalSend device discovered:", event.payload);
|
|
2018
|
-
if (event.payload) {
|
|
2019
|
-
onEvent({
|
|
2020
|
-
type: LOCALSEND_EVENTS.deviceDiscovered,
|
|
2021
|
-
data: event.payload,
|
|
2022
|
-
timestamp: Date.now()
|
|
2023
|
-
});
|
|
2024
|
-
}
|
|
2025
|
-
}, listenOptions);
|
|
2026
|
-
log("LocalSend device discovered listener registered");
|
|
2027
|
-
} catch (error) {
|
|
2028
|
-
log("Failed to setup LocalSend device discovered listener:", error);
|
|
2029
|
-
}
|
|
2030
|
-
try {
|
|
2031
|
-
await listen(LOCALSEND_EVENTS.deviceLost, (event) => {
|
|
2032
|
-
log("LocalSend device lost:", event.payload);
|
|
2033
|
-
if (event.payload) {
|
|
2034
|
-
onEvent({
|
|
2035
|
-
type: LOCALSEND_EVENTS.deviceLost,
|
|
2036
|
-
data: event.payload,
|
|
2037
|
-
timestamp: Date.now()
|
|
2038
|
-
});
|
|
2039
|
-
}
|
|
2040
|
-
}, listenOptions);
|
|
2041
|
-
log("LocalSend device lost listener registered");
|
|
2042
|
-
} catch (error) {
|
|
2043
|
-
log("Failed to setup LocalSend device lost listener:", error);
|
|
2044
|
-
}
|
|
2045
|
-
try {
|
|
2046
|
-
await listen(LOCALSEND_EVENTS.transferRequest, (event) => {
|
|
2047
|
-
log("LocalSend transfer request:", event.payload);
|
|
2048
|
-
if (event.payload) {
|
|
2049
|
-
onEvent({
|
|
2050
|
-
type: LOCALSEND_EVENTS.transferRequest,
|
|
2051
|
-
data: event.payload,
|
|
2052
|
-
timestamp: Date.now()
|
|
2053
|
-
});
|
|
2054
|
-
}
|
|
2055
|
-
}, listenOptions);
|
|
2056
|
-
log("LocalSend transfer request listener registered");
|
|
2057
|
-
} catch (error) {
|
|
2058
|
-
log("Failed to setup LocalSend transfer request listener:", error);
|
|
2059
|
-
}
|
|
2060
|
-
try {
|
|
2061
|
-
await listen(LOCALSEND_EVENTS.transferProgress, (event) => {
|
|
2062
|
-
log("LocalSend transfer progress event:", event);
|
|
2063
|
-
if (event.payload) {
|
|
2064
|
-
onEvent({
|
|
2065
|
-
type: LOCALSEND_EVENTS.transferProgress,
|
|
2066
|
-
data: event.payload,
|
|
2067
|
-
timestamp: Date.now()
|
|
2068
|
-
});
|
|
2069
|
-
}
|
|
2070
|
-
}, listenOptions);
|
|
2071
|
-
log("LocalSend transfer progress listener registered");
|
|
2072
|
-
} catch (error) {
|
|
2073
|
-
log("Failed to setup LocalSend transfer progress listener:", error);
|
|
2074
|
-
}
|
|
2075
|
-
try {
|
|
2076
|
-
await listen(LOCALSEND_EVENTS.transferComplete, (event) => {
|
|
2077
|
-
log("LocalSend transfer complete:", event.payload);
|
|
2078
|
-
if (event.payload) {
|
|
2079
|
-
onEvent({
|
|
2080
|
-
type: LOCALSEND_EVENTS.transferComplete,
|
|
2081
|
-
data: event.payload,
|
|
2082
|
-
timestamp: Date.now()
|
|
2083
|
-
});
|
|
2084
|
-
}
|
|
2085
|
-
}, listenOptions);
|
|
2086
|
-
log("LocalSend transfer complete listener registered");
|
|
2087
|
-
} catch (error) {
|
|
2088
|
-
log("Failed to setup LocalSend transfer complete listener:", error);
|
|
2089
|
-
}
|
|
2090
|
-
try {
|
|
2091
|
-
await listen(LOCALSEND_EVENTS.transferFailed, (event) => {
|
|
2092
|
-
log("LocalSend transfer failed:", event.payload);
|
|
2093
|
-
if (event.payload) {
|
|
2094
|
-
onEvent({
|
|
2095
|
-
type: LOCALSEND_EVENTS.transferFailed,
|
|
2096
|
-
data: event.payload,
|
|
2097
|
-
timestamp: Date.now()
|
|
2098
|
-
});
|
|
2099
|
-
}
|
|
2100
|
-
}, listenOptions);
|
|
2101
|
-
log("LocalSend transfer failed listener registered");
|
|
2102
|
-
} catch (error) {
|
|
2103
|
-
log("Failed to setup LocalSend transfer failed listener:", error);
|
|
2104
|
-
}
|
|
1926
|
+
for (const eventName of [
|
|
1927
|
+
HAEXTENSION_EVENTS.PERMISSION_RESOLVED,
|
|
1928
|
+
EXTERNAL_EVENTS.REQUEST,
|
|
1929
|
+
EXTERNAL_EVENTS.ACTION_REQUEST,
|
|
1930
|
+
...Object.values(LOCALSEND_EVENTS)
|
|
1931
|
+
]) {
|
|
1932
|
+
await forwardEvent(listen, log, onEvent, listenOptions, eventName);
|
|
1933
|
+
}
|
|
1934
|
+
await forwardEvent(listen, log, onEvent, listenOptions, HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED, (payload) => ({
|
|
1935
|
+
data: { tables: payload.tables }
|
|
1936
|
+
}));
|
|
1937
|
+
await forwardEvent(listen, log, onEvent, listenOptions, HAEXTENSION_EVENTS.FILE_CHANGED, (payload) => {
|
|
1938
|
+
const { ruleId, changeType, path } = payload;
|
|
1939
|
+
return { ruleId, changeType, path };
|
|
1940
|
+
});
|
|
1941
|
+
await forwardEvent(listen, log, onEvent, listenOptions, SHELL_EVENTS.OUTPUT, (payload) => {
|
|
1942
|
+
const { sessionId, data } = payload;
|
|
1943
|
+
return { sessionId, data };
|
|
1944
|
+
});
|
|
1945
|
+
await forwardEvent(listen, log, onEvent, listenOptions, SHELL_EVENTS.EXIT, (payload) => {
|
|
1946
|
+
const { sessionId, exitCode } = payload;
|
|
1947
|
+
return { sessionId, exitCode };
|
|
1948
|
+
});
|
|
2105
1949
|
}
|
|
2106
1950
|
async function initIframeMode(ctx, log, messageHandler) {
|
|
2107
1951
|
if (!isInIframe()) {
|
|
@@ -2445,6 +2289,68 @@ var AI_COMMANDS = {
|
|
|
2445
2289
|
actionRespond: "ai_action_respond"
|
|
2446
2290
|
};
|
|
2447
2291
|
|
|
2292
|
+
// src/client/permissionRetry.ts
|
|
2293
|
+
var PERMISSION_DECISION_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
2294
|
+
var MAX_PERMISSION_RETRIES = 3;
|
|
2295
|
+
function permissionKey(resourceType, action, target) {
|
|
2296
|
+
return `${resourceType}:${action}:${target}`;
|
|
2297
|
+
}
|
|
2298
|
+
var PermissionWaiterRegistry = class {
|
|
2299
|
+
constructor() {
|
|
2300
|
+
this.waiters = /* @__PURE__ */ new Map();
|
|
2301
|
+
}
|
|
2302
|
+
/** Wait for a decision on `key`; resolves "timeout" if none arrives in time. */
|
|
2303
|
+
wait(key, timeoutMs = PERMISSION_DECISION_TIMEOUT_MS) {
|
|
2304
|
+
return new Promise((resolve) => {
|
|
2305
|
+
const set = this.waiters.get(key) ?? /* @__PURE__ */ new Set();
|
|
2306
|
+
this.waiters.set(key, set);
|
|
2307
|
+
const settle = (outcome) => {
|
|
2308
|
+
if (!set.has(callback)) return;
|
|
2309
|
+
set.delete(callback);
|
|
2310
|
+
if (set.size === 0) this.waiters.delete(key);
|
|
2311
|
+
clearTimeout(timer);
|
|
2312
|
+
resolve(outcome);
|
|
2313
|
+
};
|
|
2314
|
+
const callback = (outcome) => settle(outcome);
|
|
2315
|
+
const timer = setTimeout(() => settle("timeout"), timeoutMs);
|
|
2316
|
+
set.add(callback);
|
|
2317
|
+
});
|
|
2318
|
+
}
|
|
2319
|
+
/** Resolve everyone waiting on `key` with the user's decision. */
|
|
2320
|
+
resolve(key, decision) {
|
|
2321
|
+
const set = this.waiters.get(key);
|
|
2322
|
+
if (!set) return;
|
|
2323
|
+
for (const callback of [...set]) callback(decision);
|
|
2324
|
+
}
|
|
2325
|
+
};
|
|
2326
|
+
function toDeniedError(error) {
|
|
2327
|
+
return { ...error, code: 1002 /* DENIED */ };
|
|
2328
|
+
}
|
|
2329
|
+
async function withPermissionRetry(send, registry, log, timeoutMs = PERMISSION_DECISION_TIMEOUT_MS) {
|
|
2330
|
+
for (let attempt = 0; ; attempt++) {
|
|
2331
|
+
try {
|
|
2332
|
+
return await send();
|
|
2333
|
+
} catch (error) {
|
|
2334
|
+
if (!isPermissionPromptError(error) || attempt >= MAX_PERMISSION_RETRIES) {
|
|
2335
|
+
throw error;
|
|
2336
|
+
}
|
|
2337
|
+
const key = permissionKey(error.resourceType, error.action, error.target);
|
|
2338
|
+
log(`Permission prompt required for ${key} \u2014 waiting for user decision`);
|
|
2339
|
+
const outcome = await registry.wait(key, timeoutMs);
|
|
2340
|
+
if (outcome === "granted") {
|
|
2341
|
+
log(`Permission ${key} granted \u2014 retrying request`);
|
|
2342
|
+
continue;
|
|
2343
|
+
}
|
|
2344
|
+
if (outcome === "denied") {
|
|
2345
|
+
log(`Permission ${key} denied`);
|
|
2346
|
+
throw toDeniedError(error);
|
|
2347
|
+
}
|
|
2348
|
+
log(`Permission ${key} prompt timed out`);
|
|
2349
|
+
throw error;
|
|
2350
|
+
}
|
|
2351
|
+
}
|
|
2352
|
+
}
|
|
2353
|
+
|
|
2448
2354
|
// src/client.ts
|
|
2449
2355
|
var HaexVaultSdk = class {
|
|
2450
2356
|
constructor(config = {}) {
|
|
@@ -2460,6 +2366,7 @@ var HaexVaultSdk = class {
|
|
|
2460
2366
|
this.eventListeners = /* @__PURE__ */ new Map();
|
|
2461
2367
|
this.externalRequestHandlers = /* @__PURE__ */ new Map();
|
|
2462
2368
|
this.reactiveSubscribers = /* @__PURE__ */ new Set();
|
|
2369
|
+
this.permissionWaiters = new PermissionWaiterRegistry();
|
|
2463
2370
|
// Handlers
|
|
2464
2371
|
this.messageHandler = null;
|
|
2465
2372
|
/**
|
|
@@ -2496,6 +2403,14 @@ var HaexVaultSdk = class {
|
|
|
2496
2403
|
this.passwords = new PasswordsAPI(this);
|
|
2497
2404
|
this.mail = new MailAPI(this);
|
|
2498
2405
|
installConsoleForwarding(this.config.debug);
|
|
2406
|
+
this.on(HAEXTENSION_EVENTS.PERMISSION_RESOLVED, (event) => {
|
|
2407
|
+
const data = event.data;
|
|
2408
|
+
if (!data) return;
|
|
2409
|
+
this.permissionWaiters.resolve(
|
|
2410
|
+
permissionKey(data.resourceType, data.action, data.target),
|
|
2411
|
+
data.decision === "denied" ? "denied" : "granted"
|
|
2412
|
+
);
|
|
2413
|
+
});
|
|
2499
2414
|
this.readyPromise = new Promise((resolve, reject) => {
|
|
2500
2415
|
this.resolveReady = resolve;
|
|
2501
2416
|
this.rejectReady = reject;
|
|
@@ -2644,24 +2559,27 @@ var HaexVaultSdk = class {
|
|
|
2644
2559
|
// ==========================================================================
|
|
2645
2560
|
async request(method, params) {
|
|
2646
2561
|
const resolvedParams = params ?? {};
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2562
|
+
const send = () => {
|
|
2563
|
+
if (this.isNativeWindow && hasTauri()) {
|
|
2564
|
+
const paramsWithCredentials = {
|
|
2565
|
+
...resolvedParams,
|
|
2566
|
+
publicKey: this._extensionInfo?.publicKey,
|
|
2567
|
+
name: this._extensionInfo?.name
|
|
2568
|
+
};
|
|
2569
|
+
return sendInvoke(method, paramsWithCredentials, this.config, this.log.bind(this));
|
|
2570
|
+
}
|
|
2571
|
+
const requestId = generateRequestId(++this.requestCounter);
|
|
2572
|
+
return sendPostMessage(
|
|
2573
|
+
method,
|
|
2574
|
+
resolvedParams,
|
|
2575
|
+
requestId,
|
|
2576
|
+
this.config,
|
|
2577
|
+
this._extensionInfo,
|
|
2578
|
+
this.pendingRequests,
|
|
2579
|
+
this.hostPort
|
|
2580
|
+
);
|
|
2581
|
+
};
|
|
2582
|
+
return withPermissionRetry(send, this.permissionWaiters, this.log.bind(this));
|
|
2665
2583
|
}
|
|
2666
2584
|
// ==========================================================================
|
|
2667
2585
|
// Private: Initialization
|