@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.
Files changed (135) hide show
  1. package/extension/background.js +11 -0
  2. package/extension/manifest.json +2 -2
  3. package/extension/popup.html +1 -1
  4. package/extension/popup.js +83 -1
  5. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  6. package/node_modules/@buddi/cli/dist/commands.js +2 -2
  7. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  8. package/node_modules/@buddi/cli/package.json +4 -0
  9. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  10. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  11. package/node_modules/@buddi/gateway/dist/web/api-routes.js +3 -1
  12. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  13. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +23 -0
  14. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  15. package/node_modules/@buddi/gateway/dist/web/extension.js +116 -10
  16. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  17. package/node_modules/@buddi/gateway/dist/web/lock.d.ts +6 -0
  18. package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
  19. package/node_modules/@buddi/gateway/dist/web/lock.js +4 -2
  20. package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
  21. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  22. package/node_modules/@buddi/gateway/dist/web/server.js +4 -2
  23. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  24. package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts +19 -0
  25. package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts.map +1 -1
  26. package/node_modules/@buddi/gateway/dist/web/signed-out.js +61 -3
  27. package/node_modules/@buddi/gateway/dist/web/signed-out.js.map +1 -1
  28. package/node_modules/@buddi/gateway/dist/web/widgets.d.ts +2 -0
  29. package/node_modules/@buddi/gateway/dist/web/widgets.d.ts.map +1 -1
  30. package/node_modules/@buddi/gateway/dist/web/widgets.js +47 -13
  31. package/node_modules/@buddi/gateway/dist/web/widgets.js.map +1 -1
  32. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  33. package/node_modules/@buddi/install/dist/cli-shim.d.ts +2 -0
  34. package/node_modules/@buddi/install/dist/cli-shim.d.ts.map +1 -1
  35. package/node_modules/@buddi/install/dist/cli-shim.js +4 -0
  36. package/node_modules/@buddi/install/dist/cli-shim.js.map +1 -1
  37. package/node_modules/@buddi/install/dist/doctor-timezone.js +1 -1
  38. package/node_modules/@buddi/install/dist/doctor-timezone.js.map +1 -1
  39. package/node_modules/@buddi/install/dist/kept-data.d.ts.map +1 -1
  40. package/node_modules/@buddi/install/dist/kept-data.js +3 -1
  41. package/node_modules/@buddi/install/dist/kept-data.js.map +1 -1
  42. package/node_modules/@buddi/install/dist/launcher.js +93 -3
  43. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  44. package/node_modules/@buddi/install/dist/supervisor.d.ts +43 -0
  45. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  46. package/node_modules/@buddi/install/dist/supervisor.js +97 -9
  47. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  48. package/node_modules/@buddi/install/dist/uninstall.d.ts +17 -0
  49. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
  50. package/node_modules/@buddi/install/dist/uninstall.js +90 -49
  51. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
  52. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  53. package/node_modules/@buddi/tool-browser/dist/availability.d.ts +2 -2
  54. package/node_modules/@buddi/tool-browser/dist/availability.d.ts.map +1 -1
  55. package/node_modules/@buddi/tool-browser/dist/availability.js +2 -2
  56. package/node_modules/@buddi/tool-browser/dist/availability.js.map +1 -1
  57. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +1 -1
  58. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  59. package/node_modules/@buddi/tool-browser/dist/controller.js +1 -1
  60. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  61. package/node_modules/@zone-eu/mailsplit/package.json +4 -4
  62. package/node_modules/imapflow/CHANGELOG.md +7 -0
  63. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  64. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  65. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  66. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  67. package/node_modules/imapflow/package.json +4 -4
  68. package/node_modules/libbase64/CHANGELOG.md +7 -0
  69. package/node_modules/libbase64/lib/libbase64.js +110 -58
  70. package/node_modules/libbase64/package.json +1 -1
  71. package/node_modules/libmime/CHANGELOG.md +7 -0
  72. package/node_modules/libmime/package.json +2 -2
  73. package/package.json +2 -2
  74. package/packages/cli/dist/.tsbuildinfo +1 -1
  75. package/packages/cli/dist/commands.js +2 -2
  76. package/packages/cli/dist/commands.js.map +1 -1
  77. package/packages/cli/package.json +4 -0
  78. package/packages/gateway/dist/.tsbuildinfo +1 -1
  79. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  80. package/packages/gateway/dist/web/api-routes.js +3 -1
  81. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  82. package/packages/gateway/dist/web/extension.d.ts +23 -0
  83. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  84. package/packages/gateway/dist/web/extension.js +116 -10
  85. package/packages/gateway/dist/web/extension.js.map +1 -1
  86. package/packages/gateway/dist/web/lock.d.ts +6 -0
  87. package/packages/gateway/dist/web/lock.d.ts.map +1 -1
  88. package/packages/gateway/dist/web/lock.js +4 -2
  89. package/packages/gateway/dist/web/lock.js.map +1 -1
  90. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  91. package/packages/gateway/dist/web/server.js +4 -2
  92. package/packages/gateway/dist/web/server.js.map +1 -1
  93. package/packages/gateway/dist/web/signed-out.d.ts +19 -0
  94. package/packages/gateway/dist/web/signed-out.d.ts.map +1 -1
  95. package/packages/gateway/dist/web/signed-out.js +61 -3
  96. package/packages/gateway/dist/web/signed-out.js.map +1 -1
  97. package/packages/gateway/dist/web/widgets.d.ts +2 -0
  98. package/packages/gateway/dist/web/widgets.d.ts.map +1 -1
  99. package/packages/gateway/dist/web/widgets.js +47 -13
  100. package/packages/gateway/dist/web/widgets.js.map +1 -1
  101. package/packages/install/dist/.tsbuildinfo +1 -1
  102. package/packages/install/dist/cli-shim.d.ts +2 -0
  103. package/packages/install/dist/cli-shim.d.ts.map +1 -1
  104. package/packages/install/dist/cli-shim.js +4 -0
  105. package/packages/install/dist/cli-shim.js.map +1 -1
  106. package/packages/install/dist/doctor-timezone.js +1 -1
  107. package/packages/install/dist/doctor-timezone.js.map +1 -1
  108. package/packages/install/dist/kept-data.d.ts.map +1 -1
  109. package/packages/install/dist/kept-data.js +3 -1
  110. package/packages/install/dist/kept-data.js.map +1 -1
  111. package/packages/install/dist/launcher.js +93 -3
  112. package/packages/install/dist/launcher.js.map +1 -1
  113. package/packages/install/dist/supervisor.d.ts +43 -0
  114. package/packages/install/dist/supervisor.d.ts.map +1 -1
  115. package/packages/install/dist/supervisor.js +97 -9
  116. package/packages/install/dist/supervisor.js.map +1 -1
  117. package/packages/install/dist/uninstall.d.ts +17 -0
  118. package/packages/install/dist/uninstall.d.ts.map +1 -1
  119. package/packages/install/dist/uninstall.js +90 -49
  120. package/packages/install/dist/uninstall.js.map +1 -1
  121. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  122. package/packages/tools/browser/dist/availability.d.ts +2 -2
  123. package/packages/tools/browser/dist/availability.d.ts.map +1 -1
  124. package/packages/tools/browser/dist/availability.js +2 -2
  125. package/packages/tools/browser/dist/availability.js.map +1 -1
  126. package/packages/tools/browser/dist/controller.d.ts +1 -1
  127. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  128. package/packages/tools/browser/dist/controller.js +1 -1
  129. package/packages/tools/browser/dist/controller.js.map +1 -1
  130. package/packages/web/dist/assets/{index-D2rOodlH.css → index-BrA8nWN-.css} +1 -1
  131. package/packages/web/dist/assets/{index-BkxHX_8g.js → index-lmUTDd2T.js} +61 -61
  132. package/packages/web/dist/assets/{lottie_light-D-P1tn3V.js → lottie_light-CQmEj1as.js} +1 -1
  133. package/packages/web/dist/build.json +1 -1
  134. package/packages/web/dist/index.html +2 -2
  135. package/packages/web/dist/precache.json +4 -4
@@ -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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "buddi",
4
- "version": "0.1.0.41",
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"
41
+ "version_name": "0.1.0-pre.42"
42
42
  }
@@ -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 → Computer&nbsp;&amp;&nbsp;browser, within five minutes.</p>
36
+ <p class="hint">Type it into buddi under Settings → Browser&nbsp;&amp;&nbsp;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>
@@ -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", () => open(SETTINGS_HASH));
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