← Commit history

signin: unique sessionId per open (reused id was refused) + broader opened detection

John Lauer ·8968c5dec7 ·2mo ago ·parent 30eebc7
5 files changed +18−14
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.6.93+1.6.94
adom-bridge-fusion-manifest.json+5−5
@@ -1,13 +1,13 @@ {   "manifest_version": 1,   "name": "fusion360",-  "version": "1.6.93",-  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.93/adom-bridge-fusion-v1.6.93.zip",-  "sha256": "767d61e543c394e1b9c04478a5c268b7f0568b16dfe6ede8b29775df546c2650",-  "size": 479846,+  "version": "1.6.94",+  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.94/adom-bridge-fusion-v1.6.94.zip",+  "sha256": "5bf866c758b94a8d03e97a311ab34ac999e19ab57039af8afa68078c0565e254",+  "size": 479954,   "verbPrefixes": [     "fusion_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-07-21T02:04:54Z"+  "released_at": "2026-07-21T02:09:20Z" }\ No newline at end of file
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.6.93",+  "version": "1.6.94",   "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.",   "homepage": "https://wiki.adom.inc/adom/adom-desktop-fusion-bridge",   "author": "Adom Inc.",
page.json+2−3
@@ -1,6 +1,6 @@ {   "slug": "adom-desktop-fusion-bridge",-  "version": "1.6.93",+  "version": "1.6.94",   "type": "app",   "description": "Installs this bridge's skills into your container so your AI knows how to drive the bridge. The bridge runtime itself is loaded by Adom Desktop from the release zip.",   "dependencies": {@@ -74,6 +74,5 @@     "set up the fusion bridge"   ],   "discovery_pitch": "Use the Adom Desktop Fusion 360 bridge when the user wants to DRIVE Autodesk Fusion 360 from the cloud: open/search their team's Fusion cloud designs, lay out a PCB or do electronics, export STEP/IGES/STL/Gerbers/BOM, or build a component library with real rendering 3D. It runs Fusion on the user's own machine via Adom Desktop. NOT for web/browser/login/form-filling (that's the native-browser extension) and NOT for KiCad (that's the kicad bridge).",-  "brief": "Drive Autodesk Fusion 360 from the cloud via Adom Desktop: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.",-  "visibility": "public"+  "brief": "Drive Autodesk Fusion 360 from the cloud via Adom Desktop: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling." }\ No newline at end of file
server.py+9−4
@@ -3813,16 +3813,21 @@ def _orchestrate_signin(args: dict) -> dict:                 "statusVerb": "fusion_signin"}      tdesc = next((_describe_profile(c) for c in choices if c.get("profile") == target), target)+    import time as _tt+    sess = "fusion-signin-%d" % int(_tt.time())   # unique per attempt (a reused id can be refused)     r = _ad_call("nbrowser_open_window",-                 {"sessionId": "fusion-signin", "url": auth["url"], "background": True,+                 {"sessionId": sess, "url": auth["url"], "background": True,                   "profile": target, "thread": "fusion-signin",                   "purpose": "Fusion Autodesk sign-in (correct profile)"}, timeout=60)-    opened = bool((r.get("data", r) if isinstance(r, dict) else {}).get("sessionId") or r.get("ok") or r.get("success"))-    steps.append(("re-opened it in %s" % tdesc) if opened else ("could not open %s: %s" % (tdesc, r.get("_adCallError"))))+    rd_open = r.get("data", r) if isinstance(r, dict) else {}+    opened = bool(rd_open.get("sessionId") or r.get("ok") or r.get("success")+                  or rd_open.get("opened") or ("opened in the BACKGROUND" in str(r.get("_hint", ""))))+    steps.append(("re-opened it in %s" % tdesc) if opened+                 else ("could not open %s (raw: %s)" % (tdesc, str(r)[:160])))      return {"success": True, "stage": "opened" if opened else "open_failed",             "done": False, "steps": steps, "signinWhere": tdesc, "signinProfile": target,-            "signinProfileReason": reason, "signinSession": "fusion-signin" if opened else None,+            "signinProfileReason": reason, "signinSession": sess if opened else None,             "signinWrongBrowser": "%s / %s" % (auth["browser"], auth["sourceProfileDir"]),             "signinAuthUrl": auth["url"],             "narrate": (("Fusion opened its sign-in in the WRONG browser (%s), so I moved the real "