@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
|
@@ -13,16 +13,17 @@ var HAEXTENSION_EVENTS = {
|
|
|
13
13
|
/** File system change detected (from native file watcher) */
|
|
14
14
|
FILE_CHANGED: "filesync:file-changed",
|
|
15
15
|
/** Tables have been updated via sync (CRDT pull from server) */
|
|
16
|
-
SYNC_TABLES_UPDATED: "haextension:sync:tables-updated"
|
|
16
|
+
SYNC_TABLES_UPDATED: "haextension:sync:tables-updated",
|
|
17
|
+
/** A runtime permission prompt was resolved (granted/denied) by the user.
|
|
18
|
+
* The SDK uses this to auto-retry the original request; extensions may also
|
|
19
|
+
* subscribe via `client.on(HAEXTENSION_EVENTS.PERMISSION_RESOLVED, ...)`. */
|
|
20
|
+
PERMISSION_RESOLVED: "extension:permission-resolved"
|
|
17
21
|
};
|
|
18
22
|
var EXTERNAL_EVENTS = {
|
|
19
23
|
/** External request from authorized client */
|
|
20
24
|
REQUEST: "haextension:external:request",
|
|
21
25
|
/** AI action request (tool calls from AI assistant) */
|
|
22
|
-
ACTION_REQUEST: "haextension:action:request"
|
|
23
|
-
/** New external client requesting authorization */
|
|
24
|
-
AUTHORIZATION_REQUEST: "external:authorization-request"
|
|
25
|
-
};
|
|
26
|
+
ACTION_REQUEST: "haextension:action:request"};
|
|
26
27
|
var SHELL_EVENTS = {
|
|
27
28
|
/** PTY output data from a shell session */
|
|
28
29
|
OUTPUT: "shell:output",
|
|
@@ -36,6 +37,9 @@ var TABLE_SEPARATOR = "__";
|
|
|
36
37
|
function getTableName(publicKey, extensionName, tableName) {
|
|
37
38
|
return `${publicKey}${TABLE_SEPARATOR}${extensionName}${TABLE_SEPARATOR}${tableName}`;
|
|
38
39
|
}
|
|
40
|
+
function isPermissionPromptError(error) {
|
|
41
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === 1004 /* PROMPT_REQUIRED */;
|
|
42
|
+
}
|
|
39
43
|
var HaexVaultSdkError = class extends Error {
|
|
40
44
|
constructor(code, messageKey, details) {
|
|
41
45
|
super(messageKey);
|
|
@@ -700,7 +704,10 @@ var WebAPI = class {
|
|
|
700
704
|
} else if (options.body instanceof Blob) {
|
|
701
705
|
bodyParam = await this.blobToBase64(options.body);
|
|
702
706
|
} else {
|
|
703
|
-
|
|
707
|
+
const bytes = new TextEncoder().encode(options.body);
|
|
708
|
+
bodyParam = this.arrayBufferToBase64(
|
|
709
|
+
bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
|
|
710
|
+
);
|
|
704
711
|
}
|
|
705
712
|
}
|
|
706
713
|
const response = await this.client.request(WEB_COMMANDS.fetch, {
|
|
@@ -1603,6 +1610,21 @@ async function initNativeMode(ctx, log, onEvent, onContextChange) {
|
|
|
1603
1610
|
await setupTauriEventListeners(ctx, log, onEvent, onContextChange);
|
|
1604
1611
|
return { extensionInfo, context };
|
|
1605
1612
|
}
|
|
1613
|
+
async function forwardEvent(listen, log, onEvent, listenOptions, eventName, shape) {
|
|
1614
|
+
try {
|
|
1615
|
+
await listen(eventName, (event) => {
|
|
1616
|
+
if (event.payload == null) {
|
|
1617
|
+
log(`Event '${eventName}' received with no payload`);
|
|
1618
|
+
return;
|
|
1619
|
+
}
|
|
1620
|
+
const extra = shape ? shape(event.payload) : { data: event.payload };
|
|
1621
|
+
onEvent({ type: eventName, timestamp: Date.now(), ...extra });
|
|
1622
|
+
}, listenOptions);
|
|
1623
|
+
log(`Listener registered: ${eventName}`);
|
|
1624
|
+
} catch (error) {
|
|
1625
|
+
log(`Failed to register listener '${eventName}':`, error);
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1606
1628
|
async function setupTauriEventListeners(ctx, log, onEvent, onContextChange) {
|
|
1607
1629
|
const { listen } = getTauriEvent();
|
|
1608
1630
|
const webviewLabel = getCurrentWebviewLabel();
|
|
@@ -1634,207 +1656,29 @@ async function setupTauriEventListeners(ctx, log, onEvent, onContextChange) {
|
|
|
1634
1656
|
} catch (error) {
|
|
1635
1657
|
log("Failed to setup context change listener:", error);
|
|
1636
1658
|
}
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
onEvent({
|
|
1661
|
-
type: EXTERNAL_EVENTS.ACTION_REQUEST,
|
|
1662
|
-
data: event.payload,
|
|
1663
|
-
timestamp: Date.now()
|
|
1664
|
-
});
|
|
1665
|
-
} else {
|
|
1666
|
-
log("AI action request event has no payload!");
|
|
1667
|
-
}
|
|
1668
|
-
}, listenOptions);
|
|
1669
|
-
log("AI action request listener registered successfully");
|
|
1670
|
-
} catch (error) {
|
|
1671
|
-
log("Failed to setup AI action request listener:", error);
|
|
1672
|
-
}
|
|
1673
|
-
log("Registering file change listener for:", HAEXTENSION_EVENTS.FILE_CHANGED);
|
|
1674
|
-
try {
|
|
1675
|
-
await listen(HAEXTENSION_EVENTS.FILE_CHANGED, (event) => {
|
|
1676
|
-
log("File change event received:", event.payload);
|
|
1677
|
-
if (event.payload) {
|
|
1678
|
-
const payload = event.payload;
|
|
1679
|
-
onEvent({
|
|
1680
|
-
type: HAEXTENSION_EVENTS.FILE_CHANGED,
|
|
1681
|
-
ruleId: payload.ruleId,
|
|
1682
|
-
changeType: payload.changeType,
|
|
1683
|
-
path: payload.path,
|
|
1684
|
-
timestamp: Date.now()
|
|
1685
|
-
});
|
|
1686
|
-
}
|
|
1687
|
-
}, listenOptions);
|
|
1688
|
-
log("File change listener registered successfully");
|
|
1689
|
-
} catch (error) {
|
|
1690
|
-
log("Failed to setup file change listener:", error);
|
|
1691
|
-
}
|
|
1692
|
-
log("Registering sync tables updated listener for:", HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED);
|
|
1693
|
-
try {
|
|
1694
|
-
await listen(HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED, (event) => {
|
|
1695
|
-
log("Sync tables updated event received:", event.payload);
|
|
1696
|
-
if (event.payload) {
|
|
1697
|
-
const payload = event.payload;
|
|
1698
|
-
onEvent({
|
|
1699
|
-
type: HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED,
|
|
1700
|
-
data: { tables: payload.tables },
|
|
1701
|
-
timestamp: Date.now()
|
|
1702
|
-
});
|
|
1703
|
-
}
|
|
1704
|
-
}, listenOptions);
|
|
1705
|
-
log("Sync tables updated listener registered successfully");
|
|
1706
|
-
} catch (error) {
|
|
1707
|
-
log("Failed to setup sync tables updated listener:", error);
|
|
1708
|
-
}
|
|
1709
|
-
log("Setting up LocalSend event listeners");
|
|
1710
|
-
try {
|
|
1711
|
-
await setupLocalSendEventListeners(log, onEvent, listenOptions);
|
|
1712
|
-
log("LocalSend event listeners setup complete");
|
|
1713
|
-
} catch (error) {
|
|
1714
|
-
log("Failed to setup LocalSend event listeners:", error);
|
|
1715
|
-
}
|
|
1716
|
-
log("Setting up Shell event listeners");
|
|
1717
|
-
try {
|
|
1718
|
-
await listen(SHELL_EVENTS.OUTPUT, (event) => {
|
|
1719
|
-
if (event.payload) {
|
|
1720
|
-
const payload = event.payload;
|
|
1721
|
-
onEvent({
|
|
1722
|
-
type: SHELL_EVENTS.OUTPUT,
|
|
1723
|
-
timestamp: Date.now(),
|
|
1724
|
-
sessionId: payload.sessionId,
|
|
1725
|
-
data: payload.data
|
|
1726
|
-
});
|
|
1727
|
-
}
|
|
1728
|
-
}, listenOptions);
|
|
1729
|
-
log("Shell output listener registered");
|
|
1730
|
-
await listen(SHELL_EVENTS.EXIT, (event) => {
|
|
1731
|
-
if (event.payload) {
|
|
1732
|
-
const payload = event.payload;
|
|
1733
|
-
onEvent({
|
|
1734
|
-
type: SHELL_EVENTS.EXIT,
|
|
1735
|
-
timestamp: Date.now(),
|
|
1736
|
-
sessionId: payload.sessionId,
|
|
1737
|
-
exitCode: payload.exitCode
|
|
1738
|
-
});
|
|
1739
|
-
}
|
|
1740
|
-
}, listenOptions);
|
|
1741
|
-
log("Shell exit listener registered");
|
|
1742
|
-
} catch (error) {
|
|
1743
|
-
log("Failed to setup Shell event listeners:", error);
|
|
1744
|
-
}
|
|
1745
|
-
}
|
|
1746
|
-
async function setupLocalSendEventListeners(log, onEvent, listenOptions) {
|
|
1747
|
-
const { listen } = getTauriEvent();
|
|
1748
|
-
try {
|
|
1749
|
-
await listen(LOCALSEND_EVENTS.deviceDiscovered, (event) => {
|
|
1750
|
-
log("LocalSend device discovered:", event.payload);
|
|
1751
|
-
if (event.payload) {
|
|
1752
|
-
onEvent({
|
|
1753
|
-
type: LOCALSEND_EVENTS.deviceDiscovered,
|
|
1754
|
-
data: event.payload,
|
|
1755
|
-
timestamp: Date.now()
|
|
1756
|
-
});
|
|
1757
|
-
}
|
|
1758
|
-
}, listenOptions);
|
|
1759
|
-
log("LocalSend device discovered listener registered");
|
|
1760
|
-
} catch (error) {
|
|
1761
|
-
log("Failed to setup LocalSend device discovered listener:", error);
|
|
1762
|
-
}
|
|
1763
|
-
try {
|
|
1764
|
-
await listen(LOCALSEND_EVENTS.deviceLost, (event) => {
|
|
1765
|
-
log("LocalSend device lost:", event.payload);
|
|
1766
|
-
if (event.payload) {
|
|
1767
|
-
onEvent({
|
|
1768
|
-
type: LOCALSEND_EVENTS.deviceLost,
|
|
1769
|
-
data: event.payload,
|
|
1770
|
-
timestamp: Date.now()
|
|
1771
|
-
});
|
|
1772
|
-
}
|
|
1773
|
-
}, listenOptions);
|
|
1774
|
-
log("LocalSend device lost listener registered");
|
|
1775
|
-
} catch (error) {
|
|
1776
|
-
log("Failed to setup LocalSend device lost listener:", error);
|
|
1777
|
-
}
|
|
1778
|
-
try {
|
|
1779
|
-
await listen(LOCALSEND_EVENTS.transferRequest, (event) => {
|
|
1780
|
-
log("LocalSend transfer request:", event.payload);
|
|
1781
|
-
if (event.payload) {
|
|
1782
|
-
onEvent({
|
|
1783
|
-
type: LOCALSEND_EVENTS.transferRequest,
|
|
1784
|
-
data: event.payload,
|
|
1785
|
-
timestamp: Date.now()
|
|
1786
|
-
});
|
|
1787
|
-
}
|
|
1788
|
-
}, listenOptions);
|
|
1789
|
-
log("LocalSend transfer request listener registered");
|
|
1790
|
-
} catch (error) {
|
|
1791
|
-
log("Failed to setup LocalSend transfer request listener:", error);
|
|
1792
|
-
}
|
|
1793
|
-
try {
|
|
1794
|
-
await listen(LOCALSEND_EVENTS.transferProgress, (event) => {
|
|
1795
|
-
log("LocalSend transfer progress event:", event);
|
|
1796
|
-
if (event.payload) {
|
|
1797
|
-
onEvent({
|
|
1798
|
-
type: LOCALSEND_EVENTS.transferProgress,
|
|
1799
|
-
data: event.payload,
|
|
1800
|
-
timestamp: Date.now()
|
|
1801
|
-
});
|
|
1802
|
-
}
|
|
1803
|
-
}, listenOptions);
|
|
1804
|
-
log("LocalSend transfer progress listener registered");
|
|
1805
|
-
} catch (error) {
|
|
1806
|
-
log("Failed to setup LocalSend transfer progress listener:", error);
|
|
1807
|
-
}
|
|
1808
|
-
try {
|
|
1809
|
-
await listen(LOCALSEND_EVENTS.transferComplete, (event) => {
|
|
1810
|
-
log("LocalSend transfer complete:", event.payload);
|
|
1811
|
-
if (event.payload) {
|
|
1812
|
-
onEvent({
|
|
1813
|
-
type: LOCALSEND_EVENTS.transferComplete,
|
|
1814
|
-
data: event.payload,
|
|
1815
|
-
timestamp: Date.now()
|
|
1816
|
-
});
|
|
1817
|
-
}
|
|
1818
|
-
}, listenOptions);
|
|
1819
|
-
log("LocalSend transfer complete listener registered");
|
|
1820
|
-
} catch (error) {
|
|
1821
|
-
log("Failed to setup LocalSend transfer complete listener:", error);
|
|
1822
|
-
}
|
|
1823
|
-
try {
|
|
1824
|
-
await listen(LOCALSEND_EVENTS.transferFailed, (event) => {
|
|
1825
|
-
log("LocalSend transfer failed:", event.payload);
|
|
1826
|
-
if (event.payload) {
|
|
1827
|
-
onEvent({
|
|
1828
|
-
type: LOCALSEND_EVENTS.transferFailed,
|
|
1829
|
-
data: event.payload,
|
|
1830
|
-
timestamp: Date.now()
|
|
1831
|
-
});
|
|
1832
|
-
}
|
|
1833
|
-
}, listenOptions);
|
|
1834
|
-
log("LocalSend transfer failed listener registered");
|
|
1835
|
-
} catch (error) {
|
|
1836
|
-
log("Failed to setup LocalSend transfer failed listener:", error);
|
|
1837
|
-
}
|
|
1659
|
+
for (const eventName of [
|
|
1660
|
+
HAEXTENSION_EVENTS.PERMISSION_RESOLVED,
|
|
1661
|
+
EXTERNAL_EVENTS.REQUEST,
|
|
1662
|
+
EXTERNAL_EVENTS.ACTION_REQUEST,
|
|
1663
|
+
...Object.values(LOCALSEND_EVENTS)
|
|
1664
|
+
]) {
|
|
1665
|
+
await forwardEvent(listen, log, onEvent, listenOptions, eventName);
|
|
1666
|
+
}
|
|
1667
|
+
await forwardEvent(listen, log, onEvent, listenOptions, HAEXTENSION_EVENTS.SYNC_TABLES_UPDATED, (payload) => ({
|
|
1668
|
+
data: { tables: payload.tables }
|
|
1669
|
+
}));
|
|
1670
|
+
await forwardEvent(listen, log, onEvent, listenOptions, HAEXTENSION_EVENTS.FILE_CHANGED, (payload) => {
|
|
1671
|
+
const { ruleId, changeType, path } = payload;
|
|
1672
|
+
return { ruleId, changeType, path };
|
|
1673
|
+
});
|
|
1674
|
+
await forwardEvent(listen, log, onEvent, listenOptions, SHELL_EVENTS.OUTPUT, (payload) => {
|
|
1675
|
+
const { sessionId, data } = payload;
|
|
1676
|
+
return { sessionId, data };
|
|
1677
|
+
});
|
|
1678
|
+
await forwardEvent(listen, log, onEvent, listenOptions, SHELL_EVENTS.EXIT, (payload) => {
|
|
1679
|
+
const { sessionId, exitCode } = payload;
|
|
1680
|
+
return { sessionId, exitCode };
|
|
1681
|
+
});
|
|
1838
1682
|
}
|
|
1839
1683
|
async function initIframeMode(ctx, log, messageHandler) {
|
|
1840
1684
|
if (!isInIframe()) {
|
|
@@ -2178,6 +2022,68 @@ var AI_COMMANDS = {
|
|
|
2178
2022
|
actionRespond: "ai_action_respond"
|
|
2179
2023
|
};
|
|
2180
2024
|
|
|
2025
|
+
// src/client/permissionRetry.ts
|
|
2026
|
+
var PERMISSION_DECISION_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
2027
|
+
var MAX_PERMISSION_RETRIES = 3;
|
|
2028
|
+
function permissionKey(resourceType, action, target) {
|
|
2029
|
+
return `${resourceType}:${action}:${target}`;
|
|
2030
|
+
}
|
|
2031
|
+
var PermissionWaiterRegistry = class {
|
|
2032
|
+
constructor() {
|
|
2033
|
+
this.waiters = /* @__PURE__ */ new Map();
|
|
2034
|
+
}
|
|
2035
|
+
/** Wait for a decision on `key`; resolves "timeout" if none arrives in time. */
|
|
2036
|
+
wait(key, timeoutMs = PERMISSION_DECISION_TIMEOUT_MS) {
|
|
2037
|
+
return new Promise((resolve) => {
|
|
2038
|
+
const set = this.waiters.get(key) ?? /* @__PURE__ */ new Set();
|
|
2039
|
+
this.waiters.set(key, set);
|
|
2040
|
+
const settle = (outcome) => {
|
|
2041
|
+
if (!set.has(callback)) return;
|
|
2042
|
+
set.delete(callback);
|
|
2043
|
+
if (set.size === 0) this.waiters.delete(key);
|
|
2044
|
+
clearTimeout(timer);
|
|
2045
|
+
resolve(outcome);
|
|
2046
|
+
};
|
|
2047
|
+
const callback = (outcome) => settle(outcome);
|
|
2048
|
+
const timer = setTimeout(() => settle("timeout"), timeoutMs);
|
|
2049
|
+
set.add(callback);
|
|
2050
|
+
});
|
|
2051
|
+
}
|
|
2052
|
+
/** Resolve everyone waiting on `key` with the user's decision. */
|
|
2053
|
+
resolve(key, decision) {
|
|
2054
|
+
const set = this.waiters.get(key);
|
|
2055
|
+
if (!set) return;
|
|
2056
|
+
for (const callback of [...set]) callback(decision);
|
|
2057
|
+
}
|
|
2058
|
+
};
|
|
2059
|
+
function toDeniedError(error) {
|
|
2060
|
+
return { ...error, code: 1002 /* DENIED */ };
|
|
2061
|
+
}
|
|
2062
|
+
async function withPermissionRetry(send, registry, log, timeoutMs = PERMISSION_DECISION_TIMEOUT_MS) {
|
|
2063
|
+
for (let attempt = 0; ; attempt++) {
|
|
2064
|
+
try {
|
|
2065
|
+
return await send();
|
|
2066
|
+
} catch (error) {
|
|
2067
|
+
if (!isPermissionPromptError(error) || attempt >= MAX_PERMISSION_RETRIES) {
|
|
2068
|
+
throw error;
|
|
2069
|
+
}
|
|
2070
|
+
const key = permissionKey(error.resourceType, error.action, error.target);
|
|
2071
|
+
log(`Permission prompt required for ${key} \u2014 waiting for user decision`);
|
|
2072
|
+
const outcome = await registry.wait(key, timeoutMs);
|
|
2073
|
+
if (outcome === "granted") {
|
|
2074
|
+
log(`Permission ${key} granted \u2014 retrying request`);
|
|
2075
|
+
continue;
|
|
2076
|
+
}
|
|
2077
|
+
if (outcome === "denied") {
|
|
2078
|
+
log(`Permission ${key} denied`);
|
|
2079
|
+
throw toDeniedError(error);
|
|
2080
|
+
}
|
|
2081
|
+
log(`Permission ${key} prompt timed out`);
|
|
2082
|
+
throw error;
|
|
2083
|
+
}
|
|
2084
|
+
}
|
|
2085
|
+
}
|
|
2086
|
+
|
|
2181
2087
|
// src/client.ts
|
|
2182
2088
|
var HaexVaultSdk = class {
|
|
2183
2089
|
constructor(config = {}) {
|
|
@@ -2193,6 +2099,7 @@ var HaexVaultSdk = class {
|
|
|
2193
2099
|
this.eventListeners = /* @__PURE__ */ new Map();
|
|
2194
2100
|
this.externalRequestHandlers = /* @__PURE__ */ new Map();
|
|
2195
2101
|
this.reactiveSubscribers = /* @__PURE__ */ new Set();
|
|
2102
|
+
this.permissionWaiters = new PermissionWaiterRegistry();
|
|
2196
2103
|
// Handlers
|
|
2197
2104
|
this.messageHandler = null;
|
|
2198
2105
|
/**
|
|
@@ -2229,6 +2136,14 @@ var HaexVaultSdk = class {
|
|
|
2229
2136
|
this.passwords = new PasswordsAPI(this);
|
|
2230
2137
|
this.mail = new MailAPI(this);
|
|
2231
2138
|
installConsoleForwarding(this.config.debug);
|
|
2139
|
+
this.on(HAEXTENSION_EVENTS.PERMISSION_RESOLVED, (event) => {
|
|
2140
|
+
const data = event.data;
|
|
2141
|
+
if (!data) return;
|
|
2142
|
+
this.permissionWaiters.resolve(
|
|
2143
|
+
permissionKey(data.resourceType, data.action, data.target),
|
|
2144
|
+
data.decision === "denied" ? "denied" : "granted"
|
|
2145
|
+
);
|
|
2146
|
+
});
|
|
2232
2147
|
this.readyPromise = new Promise((resolve, reject) => {
|
|
2233
2148
|
this.resolveReady = resolve;
|
|
2234
2149
|
this.rejectReady = reject;
|
|
@@ -2377,24 +2292,27 @@ var HaexVaultSdk = class {
|
|
|
2377
2292
|
// ==========================================================================
|
|
2378
2293
|
async request(method, params) {
|
|
2379
2294
|
const resolvedParams = params ?? {};
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
2295
|
+
const send = () => {
|
|
2296
|
+
if (this.isNativeWindow && hasTauri()) {
|
|
2297
|
+
const paramsWithCredentials = {
|
|
2298
|
+
...resolvedParams,
|
|
2299
|
+
publicKey: this._extensionInfo?.publicKey,
|
|
2300
|
+
name: this._extensionInfo?.name
|
|
2301
|
+
};
|
|
2302
|
+
return sendInvoke(method, paramsWithCredentials, this.config, this.log.bind(this));
|
|
2303
|
+
}
|
|
2304
|
+
const requestId = generateRequestId(++this.requestCounter);
|
|
2305
|
+
return sendPostMessage(
|
|
2306
|
+
method,
|
|
2307
|
+
resolvedParams,
|
|
2308
|
+
requestId,
|
|
2309
|
+
this.config,
|
|
2310
|
+
this._extensionInfo,
|
|
2311
|
+
this.pendingRequests,
|
|
2312
|
+
this.hostPort
|
|
2313
|
+
);
|
|
2314
|
+
};
|
|
2315
|
+
return withPermissionRetry(send, this.permissionWaiters, this.log.bind(this));
|
|
2398
2316
|
}
|
|
2399
2317
|
// ==========================================================================
|
|
2400
2318
|
// Private: Initialization
|