@withbuddi/buddi 0.1.0-pre.41 → 0.1.0-pre.42
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/extension/background.js +11 -0
- package/extension/manifest.json +2 -2
- package/extension/popup.html +1 -1
- package/extension/popup.js +83 -1
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +2 -2
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/cli/package.json +4 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +3 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts +23 -0
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js +116 -10
- package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.js +4 -2
- package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +4 -2
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts +19 -0
- package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/signed-out.js +61 -3
- package/node_modules/@buddi/gateway/dist/web/signed-out.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/widgets.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/web/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/widgets.js +47 -13
- package/node_modules/@buddi/gateway/dist/web/widgets.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/install/dist/cli-shim.d.ts +2 -0
- package/node_modules/@buddi/install/dist/cli-shim.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/cli-shim.js +4 -0
- package/node_modules/@buddi/install/dist/cli-shim.js.map +1 -1
- package/node_modules/@buddi/install/dist/doctor-timezone.js +1 -1
- package/node_modules/@buddi/install/dist/doctor-timezone.js.map +1 -1
- package/node_modules/@buddi/install/dist/kept-data.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/kept-data.js +3 -1
- package/node_modules/@buddi/install/dist/kept-data.js.map +1 -1
- package/node_modules/@buddi/install/dist/launcher.js +93 -3
- package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
- package/node_modules/@buddi/install/dist/supervisor.d.ts +43 -0
- package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/supervisor.js +97 -9
- package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
- package/node_modules/@buddi/install/dist/uninstall.d.ts +17 -0
- package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/uninstall.js +90 -49
- package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/availability.d.ts +2 -2
- package/node_modules/@buddi/tool-browser/dist/availability.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/availability.js +2 -2
- package/node_modules/@buddi/tool-browser/dist/availability.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
- package/node_modules/@zone-eu/mailsplit/package.json +4 -4
- package/node_modules/imapflow/CHANGELOG.md +7 -0
- package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
- package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/package-info.js +1 -1
- package/node_modules/imapflow/package.json +4 -4
- package/node_modules/libbase64/CHANGELOG.md +7 -0
- package/node_modules/libbase64/lib/libbase64.js +110 -58
- package/node_modules/libbase64/package.json +1 -1
- package/node_modules/libmime/CHANGELOG.md +7 -0
- package/node_modules/libmime/package.json +2 -2
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/commands.js +2 -2
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/cli/package.json +4 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +3 -1
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/extension.d.ts +23 -0
- package/packages/gateway/dist/web/extension.d.ts.map +1 -1
- package/packages/gateway/dist/web/extension.js +116 -10
- package/packages/gateway/dist/web/extension.js.map +1 -1
- package/packages/gateway/dist/web/lock.d.ts +6 -0
- package/packages/gateway/dist/web/lock.d.ts.map +1 -1
- package/packages/gateway/dist/web/lock.js +4 -2
- package/packages/gateway/dist/web/lock.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +4 -2
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/signed-out.d.ts +19 -0
- package/packages/gateway/dist/web/signed-out.d.ts.map +1 -1
- package/packages/gateway/dist/web/signed-out.js +61 -3
- package/packages/gateway/dist/web/signed-out.js.map +1 -1
- package/packages/gateway/dist/web/widgets.d.ts +2 -0
- package/packages/gateway/dist/web/widgets.d.ts.map +1 -1
- package/packages/gateway/dist/web/widgets.js +47 -13
- package/packages/gateway/dist/web/widgets.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/install/dist/cli-shim.d.ts +2 -0
- package/packages/install/dist/cli-shim.d.ts.map +1 -1
- package/packages/install/dist/cli-shim.js +4 -0
- package/packages/install/dist/cli-shim.js.map +1 -1
- package/packages/install/dist/doctor-timezone.js +1 -1
- package/packages/install/dist/doctor-timezone.js.map +1 -1
- package/packages/install/dist/kept-data.d.ts.map +1 -1
- package/packages/install/dist/kept-data.js +3 -1
- package/packages/install/dist/kept-data.js.map +1 -1
- package/packages/install/dist/launcher.js +93 -3
- package/packages/install/dist/launcher.js.map +1 -1
- package/packages/install/dist/supervisor.d.ts +43 -0
- package/packages/install/dist/supervisor.d.ts.map +1 -1
- package/packages/install/dist/supervisor.js +97 -9
- package/packages/install/dist/supervisor.js.map +1 -1
- package/packages/install/dist/uninstall.d.ts +17 -0
- package/packages/install/dist/uninstall.d.ts.map +1 -1
- package/packages/install/dist/uninstall.js +90 -49
- package/packages/install/dist/uninstall.js.map +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/availability.d.ts +2 -2
- package/packages/tools/browser/dist/availability.d.ts.map +1 -1
- package/packages/tools/browser/dist/availability.js +2 -2
- package/packages/tools/browser/dist/availability.js.map +1 -1
- package/packages/tools/browser/dist/controller.d.ts +1 -1
- package/packages/tools/browser/dist/controller.d.ts.map +1 -1
- package/packages/tools/browser/dist/controller.js +1 -1
- package/packages/tools/browser/dist/controller.js.map +1 -1
- package/packages/web/dist/assets/{index-D2rOodlH.css → index-BrA8nWN-.css} +1 -1
- package/packages/web/dist/assets/{index-BkxHX_8g.js → index-lmUTDd2T.js} +61 -61
- package/packages/web/dist/assets/{lottie_light-D-P1tn3V.js → lottie_light-CQmEj1as.js} +1 -1
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/precache.json +4 -4
package/extension/background.js
CHANGED
|
@@ -1985,6 +1985,7 @@ var GATEWAY_KEY = "gateway";
|
|
|
1985
1985
|
var MAX_BACKOFF = 3e4;
|
|
1986
1986
|
var KNOCK_MS = 3e3;
|
|
1987
1987
|
var SILENCE = 7e4;
|
|
1988
|
+
var KEEPALIVE_MS = 2e4;
|
|
1988
1989
|
function socketUrl(address) {
|
|
1989
1990
|
const parsed = new URL(address);
|
|
1990
1991
|
if (!["127.0.0.1", "localhost", "[::1]", "::1"].includes(parsed.hostname)) throw new Error("A buddi address has to be on this machine.");
|
|
@@ -2031,6 +2032,7 @@ var commands = new BrowserCommands(chrome, { onFrame: send, onEvent: send, onLog
|
|
|
2031
2032
|
var attempt = 0;
|
|
2032
2033
|
var timer;
|
|
2033
2034
|
var silence;
|
|
2035
|
+
var keepalive;
|
|
2034
2036
|
var last = { connection: "offline", code: null, installation: null, error: null };
|
|
2035
2037
|
var incoming = Promise.resolve();
|
|
2036
2038
|
var protocol = new Protocol({
|
|
@@ -2083,6 +2085,10 @@ async function connect() {
|
|
|
2083
2085
|
attempt = 0;
|
|
2084
2086
|
quiet();
|
|
2085
2087
|
flush(opening);
|
|
2088
|
+
if (keepalive) clearInterval(keepalive);
|
|
2089
|
+
keepalive = setInterval(() => {
|
|
2090
|
+
if (socket === opening) send({ type: "keepalive" });
|
|
2091
|
+
}, KEEPALIVE_MS);
|
|
2086
2092
|
safely(() => protocol.open());
|
|
2087
2093
|
});
|
|
2088
2094
|
opening.addEventListener("message", (event) => {
|
|
@@ -2099,6 +2105,10 @@ async function connect() {
|
|
|
2099
2105
|
if (socket === opening) {
|
|
2100
2106
|
socket = void 0;
|
|
2101
2107
|
pending = [];
|
|
2108
|
+
if (keepalive) {
|
|
2109
|
+
clearInterval(keepalive);
|
|
2110
|
+
keepalive = void 0;
|
|
2111
|
+
}
|
|
2102
2112
|
}
|
|
2103
2113
|
if (silence) {
|
|
2104
2114
|
clearTimeout(silence);
|
|
@@ -2194,6 +2204,7 @@ chrome.alarms.onAlarm.addListener((alarm) => {
|
|
|
2194
2204
|
safely(() => connect());
|
|
2195
2205
|
export {
|
|
2196
2206
|
DEFAULT_GATEWAY,
|
|
2207
|
+
KEEPALIVE_MS,
|
|
2197
2208
|
connect,
|
|
2198
2209
|
send,
|
|
2199
2210
|
socketUrl
|
package/extension/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "buddi",
|
|
4
|
-
"version": "0.1.0.
|
|
4
|
+
"version": "0.1.0.42",
|
|
5
5
|
"description": "Lets your buddi work in background tabs of this browser. The sites it opens are the ones you ask it for; it opens none on its own.",
|
|
6
6
|
"minimum_chrome_version": "116",
|
|
7
7
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwR4JT/OlKKPcZQ33euO9mSv7RrSIWNVanldhT2Uzc9YfzF/X0lg5NfXLc+G/UGFjB8v+uMCbpMhRBZ2SVwDHQH3buv3VEUzuOIDTPHgv99T5lq5imZrDxmIE+EL/fWrsjhcXaIB4e4fn0tJqw6ivJUGmYpG5XhWn65nlLniHfFBKMpZ/y7bVnvfzAgMQUa13qTAVxPTpMRtNl/flQq4Q/vWYm28H7W7OzygDV+/4X2azUrB8yPk67QsipbdDLxiX2GMxjXuKK6iD5CQiytoxTsAqUzB886HbOZsxJfQpRIjrUgBmGjLyaKuz617ZGJW9zS23LmnlL6mkX3+ggca1AQIDAQAB",
|
|
@@ -38,5 +38,5 @@
|
|
|
38
38
|
"48": "icons/48.png",
|
|
39
39
|
"128": "icons/128.png"
|
|
40
40
|
},
|
|
41
|
-
"version_name": "0.1.0-pre.
|
|
41
|
+
"version_name": "0.1.0-pre.42"
|
|
42
42
|
}
|
package/extension/popup.html
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<p class="code" id="code" aria-label="Pairing code"></p>
|
|
34
34
|
<button class="btn" data-size="sm" id="copy" type="button">Copy</button>
|
|
35
35
|
</div>
|
|
36
|
-
<p class="hint">Type it into buddi under Settings →
|
|
36
|
+
<p class="hint">Type it into buddi under Settings → Browser & apps, within five minutes. Open buddi settings may open buddi.app: if Chrome asks, allow it.</p>
|
|
37
37
|
<div class="actions actions-split">
|
|
38
38
|
<button class="link" id="not-this" type="button">Not this buddi</button>
|
|
39
39
|
<button class="btn" id="open-settings" type="button">Open buddi settings</button>
|
package/extension/popup.js
CHANGED
|
@@ -60,6 +60,52 @@ function render(model, doc = document) {
|
|
|
60
60
|
byId(doc, "paired-to").textContent = view === "paired" ? `Your buddi at ${state.installation ?? hostOf(model.gateway)}` : "";
|
|
61
61
|
byId(doc, "working").textContent = workingLine(model.tabs);
|
|
62
62
|
}
|
|
63
|
+
var APP_WAIT_MS = 1500;
|
|
64
|
+
function digitsOf(code) {
|
|
65
|
+
const digits = (code ?? "").replace(/[^0-9]/g, "");
|
|
66
|
+
return digits.length === 6 ? digits : null;
|
|
67
|
+
}
|
|
68
|
+
function appSettingsLink(code) {
|
|
69
|
+
const digits = digitsOf(code);
|
|
70
|
+
return digits ? `buddi://settings/browser?code=${digits}` : "buddi://settings/browser";
|
|
71
|
+
}
|
|
72
|
+
function settingsWebUrl(gateway, code, userAgent = "") {
|
|
73
|
+
const digits = digitsOf(code);
|
|
74
|
+
const base = dashboardUrl(gateway);
|
|
75
|
+
if (!base) return null;
|
|
76
|
+
const search = triesApp(gateway, userAgent) ? "?from=extension" : "";
|
|
77
|
+
return `${base}${search}${SETTINGS_HASH}${digits ? `?code=${digits}` : ""}`;
|
|
78
|
+
}
|
|
79
|
+
function triesApp(gateway, userAgent) {
|
|
80
|
+
if (!/Macintosh|Mac OS X/.test(userAgent)) return false;
|
|
81
|
+
try {
|
|
82
|
+
const url = new URL(gateway);
|
|
83
|
+
return (url.hostname === "127.0.0.1" || url.hostname === "localhost") && (url.port || (url.protocol === "https:" ? "443" : "80")) === "4317";
|
|
84
|
+
} catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function openSettings(options) {
|
|
89
|
+
const web = settingsWebUrl(options.gateway, options.code, options.userAgent);
|
|
90
|
+
const fallback = () => {
|
|
91
|
+
if (web) options.openTab(web);
|
|
92
|
+
};
|
|
93
|
+
if (!triesApp(options.gateway, options.userAgent)) {
|
|
94
|
+
fallback();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
options.launch(appSettingsLink(options.code));
|
|
99
|
+
} catch {
|
|
100
|
+
fallback();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
(options.wait ?? ((ms, then) => {
|
|
104
|
+
setTimeout(then, ms);
|
|
105
|
+
}))(APP_WAIT_MS, () => {
|
|
106
|
+
if (!options.focusLost()) fallback();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
63
109
|
var COPIED_FOR = 2e3;
|
|
64
110
|
function wireCopy(button, read) {
|
|
65
111
|
let restore;
|
|
@@ -126,6 +172,14 @@ async function main() {
|
|
|
126
172
|
draw();
|
|
127
173
|
void recount();
|
|
128
174
|
});
|
|
175
|
+
setInterval(() => {
|
|
176
|
+
void ask({ type: "buddi-get-state" }).then((answer) => {
|
|
177
|
+
if (!answer?.state || JSON.stringify(answer.state) === JSON.stringify(model.state)) return;
|
|
178
|
+
model.state = answer.state;
|
|
179
|
+
draw();
|
|
180
|
+
void recount();
|
|
181
|
+
});
|
|
182
|
+
}, 3e3);
|
|
129
183
|
wireCopy(byId(document, "copy"), () => byId(document, "code").textContent ?? "");
|
|
130
184
|
byId(document, "connect").addEventListener("click", async () => {
|
|
131
185
|
const gateway = field.value.trim();
|
|
@@ -150,7 +204,30 @@ async function main() {
|
|
|
150
204
|
const url = dashboardUrl(model.gateway, hash);
|
|
151
205
|
if (url) void chrome.tabs.create({ url });
|
|
152
206
|
};
|
|
153
|
-
byId(document, "open-settings").addEventListener("click", () =>
|
|
207
|
+
byId(document, "open-settings").addEventListener("click", () => {
|
|
208
|
+
let lost = false;
|
|
209
|
+
const away = () => {
|
|
210
|
+
lost = true;
|
|
211
|
+
};
|
|
212
|
+
window.addEventListener("blur", away, { once: true });
|
|
213
|
+
document.addEventListener("visibilitychange", away, { once: true });
|
|
214
|
+
openSettings({
|
|
215
|
+
gateway: model.gateway,
|
|
216
|
+
code: model.state.connection === "pairing" ? model.state.code : null,
|
|
217
|
+
userAgent: navigator.userAgent,
|
|
218
|
+
// A link clicked in this page: Chrome hands buddi:// to the app registered for it, or does nothing.
|
|
219
|
+
launch: (url) => {
|
|
220
|
+
const link = document.createElement("a");
|
|
221
|
+
link.href = url;
|
|
222
|
+
link.rel = "noopener";
|
|
223
|
+
link.click();
|
|
224
|
+
},
|
|
225
|
+
openTab: (url) => {
|
|
226
|
+
void chrome.tabs.create({ url });
|
|
227
|
+
},
|
|
228
|
+
focusLost: () => lost || !document.hasFocus()
|
|
229
|
+
});
|
|
230
|
+
});
|
|
154
231
|
byId(document, "open-buddi").addEventListener("click", () => open(""));
|
|
155
232
|
byId(document, "forget").addEventListener("click", async () => {
|
|
156
233
|
const answer = await ask({ type: "buddi-forget" });
|
|
@@ -163,12 +240,17 @@ async function main() {
|
|
|
163
240
|
}
|
|
164
241
|
if (typeof chrome !== "undefined" && chrome?.runtime?.onMessage) void main();
|
|
165
242
|
export {
|
|
243
|
+
APP_WAIT_MS,
|
|
166
244
|
COPIED_FOR,
|
|
167
245
|
SETTINGS_HASH,
|
|
246
|
+
appSettingsLink,
|
|
168
247
|
countBuddiTabs,
|
|
169
248
|
dashboardUrl,
|
|
170
249
|
groupCode,
|
|
250
|
+
openSettings,
|
|
171
251
|
render,
|
|
252
|
+
settingsWebUrl,
|
|
253
|
+
triesApp,
|
|
172
254
|
viewOf,
|
|
173
255
|
wireCopy,
|
|
174
256
|
workingLine
|