@symerian/symi 2.1.6 → 2.1.7

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 (91) hide show
  1. package/dist/{audio-preflight-5NsCxagO.js → audio-preflight-BZIRAXlv.js} +4 -4
  2. package/dist/{audio-preflight-BnwAAlLw.js → audio-preflight-IRs02MgH.js} +4 -4
  3. package/dist/build-info.json +3 -3
  4. package/dist/bundled/boot-md/handler.js +6 -6
  5. package/dist/bundled/session-memory/handler.js +6 -6
  6. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  7. package/dist/{chrome-DM65TRMk.js → chrome-791kNCCB.js} +7 -7
  8. package/dist/{chrome-DPHgzMPu.js → chrome-CqribT6Z.js} +7 -7
  9. package/dist/{deliver-Cgg1qwKP.js → deliver-CrlXl9KD.js} +1 -1
  10. package/dist/{deliver-EKA6SdgU.js → deliver-vWWI-94q.js} +1 -1
  11. package/dist/extensionAPI.js +6 -6
  12. package/dist/{image-EKTeO3aa.js → image-CV4FUL4M.js} +1 -1
  13. package/dist/{image-xvVpGzK5.js → image-ycxQmhff.js} +1 -1
  14. package/dist/llm-slug-generator.js +6 -6
  15. package/dist/{pi-embedded-DuWfOlkO.js → pi-embedded-AKhKHxb6.js} +16 -16
  16. package/dist/{pi-embedded-02ObvVIR.js → pi-embedded-DguKAKpR.js} +16 -16
  17. package/dist/{pi-embedded-helpers-Cd124krQ.js → pi-embedded-helpers-DoTustDz.js} +4 -4
  18. package/dist/{pi-embedded-helpers-B6ugLqkI.js → pi-embedded-helpers-SPJVuQfB.js} +4 -4
  19. package/dist/plugin-sdk/{accounts-BtaOa4z_.js → accounts-BToL3HlP.js} +1 -1
  20. package/dist/plugin-sdk/{accounts-Ddm33hQm.js → accounts-D9zGZU5t.js} +3 -3
  21. package/dist/plugin-sdk/{accounts-s-AdhXVR.js → accounts-Dtszw3Zn.js} +1 -1
  22. package/dist/plugin-sdk/{active-listener-BXYeALs0.js → active-listener-bEk__wbB.js} +1 -1
  23. package/dist/plugin-sdk/{agent-scope-CYYpcO9W.js → agent-scope-C3gMMKCU.js} +2 -2
  24. package/dist/plugin-sdk/{api-key-rotation-BNN7DLRF.js → api-key-rotation-B7wX2cS9.js} +1 -1
  25. package/dist/plugin-sdk/{audio-preflight-Cx5FPiJc.js → audio-preflight-ni0fpVp8.js} +24 -24
  26. package/dist/plugin-sdk/{bindings-C7hRtgYW.js → bindings-BbwoUGPx.js} +2 -2
  27. package/dist/plugin-sdk/{channel-activity-DoC1xtDu.js → channel-activity-Ji7f0gqq.js} +1 -1
  28. package/dist/plugin-sdk/{channel-web-Bz7z_PrR.js → channel-web-DLpcsfAm.js} +22 -22
  29. package/dist/plugin-sdk/{chrome-BMG9BEuT.js → chrome-B3sE4bXC.js} +3 -3
  30. package/dist/plugin-sdk/{chunk-Dw2XBYXv.js → chunk-jvk9axTQ.js} +1 -1
  31. package/dist/plugin-sdk/{command-format-GKSevep4.js → command-format-DSdvQ_M5.js} +1 -1
  32. package/dist/plugin-sdk/{commands-registry-B6QKgH1z.js → commands-registry-DFVoW5Za.js} +4 -4
  33. package/dist/plugin-sdk/{config-ChoJh2v6.js → config-C8bdNl-t.js} +9 -9
  34. package/dist/plugin-sdk/{deliver-PHupXW27.js → deliver-DupqKEgT.js} +10 -10
  35. package/dist/plugin-sdk/{diagnostic-05pm5Rxi.js → diagnostic-mFf4i4G9.js} +1 -1
  36. package/dist/plugin-sdk/{image-ops-BlQR__MN.js → image-ops-Bnp6LXEx.js} +1 -1
  37. package/dist/plugin-sdk/{image-CZeY-Q2T.js → image-t0--fcO_.js} +4 -4
  38. package/dist/plugin-sdk/index.js +53 -53
  39. package/dist/plugin-sdk/{ir-BJ6BHE5b.js → ir-Fb3qpcis.js} +4 -4
  40. package/dist/plugin-sdk/{local-roots-BHLNSI8U.js → local-roots-Ckk1QfzI.js} +3 -3
  41. package/dist/plugin-sdk/{login-WrHy4q1W.js → login-YiSLGJpw.js} +7 -7
  42. package/dist/plugin-sdk/{login-qr-D30S2gk7.js → login-qr-Ct3iRCTA.js} +9 -9
  43. package/dist/plugin-sdk/{manager-Cn2S7u-y.js → manager-PXN_BUWT.js} +8 -8
  44. package/dist/plugin-sdk/{manifest-registry-CPnHl_K3.js → manifest-registry-B3ugY9-f.js} +1 -1
  45. package/dist/plugin-sdk/{markdown-tables-BoYFajMu.js → markdown-tables-Dfaqilz6.js} +1 -1
  46. package/dist/plugin-sdk/{message-channel-COTAJzHd.js → message-channel-BdI5Ra9S.js} +1 -1
  47. package/dist/plugin-sdk/{model-selection-CPEL3Uc_.js → model-selection-UQwTqGSw.js} +4 -4
  48. package/dist/plugin-sdk/{outbound-ps5sAOfw.js → outbound-BaAisH4u.js} +7 -7
  49. package/dist/plugin-sdk/{outbound-attachment-CnslKL38.js → outbound-attachment-DnVQfTG2.js} +2 -2
  50. package/dist/plugin-sdk/{pi-auth-json-D4gyc_V3.js → pi-auth-json-DAttpBPg.js} +5 -5
  51. package/dist/plugin-sdk/{pi-embedded-helpers-CU4D77Op.js → pi-embedded-helpers-CHlXbJGj.js} +17 -17
  52. package/dist/plugin-sdk/{plugins-BNByVCIH.js → plugins-BbAvhC25.js} +4 -4
  53. package/dist/plugin-sdk/{pw-ai-81tOC-Ch.js → pw-ai-JO8xac-v.js} +8 -8
  54. package/dist/plugin-sdk/{qmd-manager-CH0XbIHf.js → qmd-manager-mjKcdwVr.js} +4 -4
  55. package/dist/plugin-sdk/{registry-D0xTnUWt.js → registry--_pGht6S.js} +2 -2
  56. package/dist/plugin-sdk/{replies-zmY9bbot.js → replies-CVSgwFjl.js} +3 -3
  57. package/dist/plugin-sdk/{reply-BSikbH6_.js → reply-GcVMmckw.js} +78 -78
  58. package/dist/plugin-sdk/{reply-prefix-uxfMZW4p.js → reply-prefix-BHuV5t70.js} +1 -1
  59. package/dist/plugin-sdk/{resolve-outbound-target-BiyAyTWz.js → resolve-outbound-target-BkCUbYGV.js} +2 -2
  60. package/dist/plugin-sdk/{resolve-route-B3CCBumQ.js → resolve-route-D3JH_D2N.js} +3 -3
  61. package/dist/plugin-sdk/{retry-CwQ_iIj8.js → retry-ilSJqnz9.js} +1 -1
  62. package/dist/plugin-sdk/{runner-Co_eR7xp.js → runner-Dm_yIGe6.js} +9 -9
  63. package/dist/plugin-sdk/{send-BNZVvZHE.js → send-BEeCC5ku.js} +6 -6
  64. package/dist/plugin-sdk/{send-6DwkdgEF.js → send-C9rT2n2M.js} +7 -7
  65. package/dist/plugin-sdk/{send-D6BxZPP0.js → send-DNkOLgrC.js} +6 -6
  66. package/dist/plugin-sdk/{send-D8vgGF3T.js → send-DWr9Drgp.js} +10 -10
  67. package/dist/plugin-sdk/{send-Dw4gTEN6.js → send-mQr5eXnb.js} +10 -10
  68. package/dist/plugin-sdk/{session-BTN5wyhB.js → session-CQ5dJOsX.js} +4 -4
  69. package/dist/plugin-sdk/{skill-commands-BUVE0jBL.js → skill-commands-27tIhSRP.js} +5 -5
  70. package/dist/plugin-sdk/{skills-_yTP47Cd.js → skills-B1GeRYlu.js} +7 -7
  71. package/dist/plugin-sdk/{sqlite-CxAR5ttJ.js → sqlite-Cq_7Cg4E.js} +1 -1
  72. package/dist/plugin-sdk/{store-BdrNabcU.js → store-Do3t33-c.js} +2 -2
  73. package/dist/plugin-sdk/{subsystem-B2uDN3TV.js → subsystem-Coz2AgU8.js} +1 -1
  74. package/dist/plugin-sdk/{tables-DNwXwNFa.js → tables-DR0NmBeH.js} +1 -1
  75. package/dist/plugin-sdk/{target-errors-Paro1BjP.js → target-errors-B7YyMnIi.js} +2 -2
  76. package/dist/plugin-sdk/{thinking-CXqf7WTe.js → thinking-DCNUIAHY.js} +5 -5
  77. package/dist/plugin-sdk/{tokens-bC3UVmVH.js → tokens-CWMflosr.js} +1 -1
  78. package/dist/plugin-sdk/{tool-images-HJ2sfZDV.js → tool-images-D7Lno-TE.js} +2 -2
  79. package/dist/plugin-sdk/{tool-loop-detection-BVA6fax-.js → tool-loop-detection-edmW8ZiF.js} +2 -2
  80. package/dist/plugin-sdk/web-CJWupzDH.js +65 -0
  81. package/dist/plugin-sdk/{whatsapp-actions-DU3CTVCg.js → whatsapp-actions-ZlyPpuJN.js} +21 -21
  82. package/dist/{pw-ai-CL_YRdbc.js → pw-ai-DIVguI36.js} +1 -1
  83. package/dist/{pw-ai-CD2xT-vT.js → pw-ai-DnN0T7wd.js} +1 -1
  84. package/dist/{runner-CCo2QuJE.js → runner-Cw5KZrjx.js} +1 -1
  85. package/dist/{runner-BlTur7kC.js → runner-Cx1wJumq.js} +1 -1
  86. package/dist/{web-BFa88W3e.js → web-Kz-ZuUjq.js} +6 -6
  87. package/dist/{web-CMl4g_Bl.js → web-cSkprx6P.js} +6 -6
  88. package/extensions/outlook/index.ts +105 -1
  89. package/extensions/outlook/src/auth.ts +91 -0
  90. package/package.json +1 -1
  91. package/dist/plugin-sdk/web-eAue9zIL.js +0 -65
@@ -254,6 +254,97 @@ export async function refreshAccessToken(refreshToken: string): Promise<{
254
254
  return { access, refresh, expires };
255
255
  }
256
256
 
257
+ // =========================================================================
258
+ // Device Code Flow — for chat-based login (no browser on this device)
259
+ // =========================================================================
260
+
261
+ const DEVICE_CODE_URL = "https://login.microsoftonline.com/common/oauth2/v2.0/devicecode";
262
+
263
+ export type DeviceCodeResponse = {
264
+ device_code: string;
265
+ user_code: string;
266
+ verification_uri: string;
267
+ expires_in: number;
268
+ interval: number;
269
+ };
270
+
271
+ export async function requestDeviceCode(): Promise<DeviceCodeResponse> {
272
+ const clientId = resolveClientId();
273
+ const response = await fetch(DEVICE_CODE_URL, {
274
+ method: "POST",
275
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
276
+ body: new URLSearchParams({
277
+ client_id: clientId,
278
+ scope: SCOPES.join(" "),
279
+ }),
280
+ });
281
+
282
+ if (!response.ok) {
283
+ const text = await response.text();
284
+ throw new Error(`Device code request failed: ${text}`);
285
+ }
286
+
287
+ return (await response.json()) as DeviceCodeResponse;
288
+ }
289
+
290
+ export async function pollForDeviceCodeToken(params: {
291
+ deviceCode: string;
292
+ intervalMs: number;
293
+ expiresInMs: number;
294
+ }): Promise<{ access: string; refresh: string; expires: number }> {
295
+ const clientId = resolveClientId();
296
+ const deadline = Date.now() + params.expiresInMs;
297
+
298
+ while (Date.now() < deadline) {
299
+ await new Promise((resolve) => setTimeout(resolve, params.intervalMs));
300
+
301
+ const response = await fetch(TOKEN_URL, {
302
+ method: "POST",
303
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
304
+ body: new URLSearchParams({
305
+ client_id: clientId,
306
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
307
+ device_code: params.deviceCode,
308
+ }),
309
+ });
310
+
311
+ const data = (await response.json()) as {
312
+ access_token?: string;
313
+ refresh_token?: string;
314
+ expires_in?: number;
315
+ error?: string;
316
+ };
317
+
318
+ if (data.error === "authorization_pending") {
319
+ continue;
320
+ }
321
+ if (data.error === "slow_down") {
322
+ // Back off by adding 5 seconds
323
+ params.intervalMs += 5000;
324
+ continue;
325
+ }
326
+ if (data.error) {
327
+ throw new Error(`Device code auth failed: ${data.error}`);
328
+ }
329
+
330
+ const access = data.access_token?.trim();
331
+ const refresh = data.refresh_token?.trim();
332
+ const expiresIn = data.expires_in ?? 0;
333
+
334
+ if (!access) {
335
+ throw new Error("Token exchange returned no access_token");
336
+ }
337
+ if (!refresh) {
338
+ throw new Error("Token exchange returned no refresh_token");
339
+ }
340
+
341
+ const expires = Date.now() + expiresIn * 1000 - 5 * 60 * 1000;
342
+ return { access, refresh, expires };
343
+ }
344
+
345
+ throw new Error("Device code expired. Please try again.");
346
+ }
347
+
257
348
  export async function fetchUserProfile(accessToken: string): Promise<{
258
349
  email?: string;
259
350
  displayName?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symerian/symi",
3
- "version": "2.1.6",
3
+ "version": "2.1.7",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/jaysteelmind/symi#readme",
@@ -1,65 +0,0 @@
1
- import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-Ddm33hQm.js";
2
- import "./reply-BSikbH6_.js";
3
- import "./paths-DR2yt_mP.js";
4
- import "./github-copilot-token-D9X2phUj.js";
5
- import "./plugins-BNByVCIH.js";
6
- import "./fetch-CUNoPTKm.js";
7
- import "./registry-D0xTnUWt.js";
8
- import "./retry-CwQ_iIj8.js";
9
- import "./send-Dw4gTEN6.js";
10
- import "./config-ChoJh2v6.js";
11
- import "./subsystem-B2uDN3TV.js";
12
- import "./command-format-GKSevep4.js";
13
- import "./model-selection-CPEL3Uc_.js";
14
- import "./agent-scope-CYYpcO9W.js";
15
- import "./manifest-registry-CPnHl_K3.js";
16
- import "./redact-DPnDWsnT.js";
17
- import "./errors-Bv8oZiTO.js";
18
- import "./channel-activity-DoC1xtDu.js";
19
- import "./image-ops-BlQR__MN.js";
20
- import "./ssrf-DKZ8eBrk.js";
21
- import "./local-roots-BHLNSI8U.js";
22
- import "./ir-BJ6BHE5b.js";
23
- import "./chunk-Dw2XBYXv.js";
24
- import "./message-channel-COTAJzHd.js";
25
- import "./bindings-C7hRtgYW.js";
26
- import "./markdown-tables-BoYFajMu.js";
27
- import "./render-BiJZ5W4Z.js";
28
- import "./tables-DNwXwNFa.js";
29
- import "./send-6DwkdgEF.js";
30
- import "./tool-images-HJ2sfZDV.js";
31
- import "./target-errors-Paro1BjP.js";
32
- import "./send-BNZVvZHE.js";
33
- import "./send-D8vgGF3T.js";
34
- import "./runner-Co_eR7xp.js";
35
- import "./reply-prefix-uxfMZW4p.js";
36
- import "./tokens-bC3UVmVH.js";
37
- import "./skill-commands-BUVE0jBL.js";
38
- import "./skills-_yTP47Cd.js";
39
- import "./chrome-BMG9BEuT.js";
40
- import "./thinking-CXqf7WTe.js";
41
- import "./accounts-s-AdhXVR.js";
42
- import "./accounts-BtaOa4z_.js";
43
- import "./deliver-PHupXW27.js";
44
- import "./pi-embedded-helpers-CU4D77Op.js";
45
- import "./paths-A0xdf3yk.js";
46
- import "./diagnostic-05pm5Rxi.js";
47
- import "./store-BdrNabcU.js";
48
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-Bz7z_PrR.js";
49
- import "./image-CZeY-Q2T.js";
50
- import "./pi-model-discovery-LbcEa65a.js";
51
- import "./api-key-rotation-BNN7DLRF.js";
52
- import "./sqlite-CxAR5ttJ.js";
53
- import "./diagnostic-session-state-Wd5tNeQG.js";
54
- import "./manager-Cn2S7u-y.js";
55
- import "./commands-registry-B6QKgH1z.js";
56
- import "./send-D6BxZPP0.js";
57
- import "./proxy-MquBDehr.js";
58
- import "./resolve-route-B3CCBumQ.js";
59
- import "./replies-zmY9bbot.js";
60
- import "./outbound-attachment-CnslKL38.js";
61
- import { n as sendMessageWhatsApp } from "./outbound-ps5sAOfw.js";
62
- import { i as waitForWaConnection, t as createWaSocket } from "./session-BTN5wyhB.js";
63
- import { t as loginWeb } from "./login-WrHy4q1W.js";
64
-
65
- export { WA_WEB_AUTH_DIR, createWaSocket, logWebSelfId, loginWeb, monitorWebChannel, monitorWebInbox, pickWebChannel, sendMessageWhatsApp, waitForWaConnection, webAuthExists };