@agent-native/core 0.7.82 → 0.8.0
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/action.js +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +8 -8
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +2 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +44 -18
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/create.d.ts +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +87 -19
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +12 -9
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +22 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts +3 -2
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +18 -14
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +254 -29
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-chat.d.ts +2 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +11 -2
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/builder-frame.d.ts +11 -0
- package/dist/client/builder-frame.d.ts.map +1 -1
- package/dist/client/builder-frame.js +40 -9
- package/dist/client/builder-frame.js.map +1 -1
- package/dist/client/composer/ComposerPlusMenu.js +1 -1
- package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts +2 -0
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +3 -3
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +3 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +25 -13
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/types.d.ts +1 -1
- package/dist/client/composer/types.d.ts.map +1 -1
- package/dist/client/composer/types.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts +20 -0
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -0
- package/dist/client/{tools/EmbeddedTool.js → extensions/EmbeddedExtension.js} +41 -41
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -0
- package/dist/client/extensions/ExtensionEditor.d.ts +5 -0
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -0
- package/dist/client/extensions/ExtensionEditor.js +129 -0
- package/dist/client/extensions/ExtensionEditor.js.map +1 -0
- package/dist/client/{tools → extensions}/ExtensionSlot.d.ts +3 -3
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -0
- package/dist/client/{tools → extensions}/ExtensionSlot.js +14 -14
- package/dist/client/extensions/ExtensionSlot.js.map +1 -0
- package/dist/client/extensions/ExtensionViewer.d.ts +5 -0
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -0
- package/dist/client/{tools/ToolViewer.js → extensions/ExtensionViewer.js} +67 -65
- package/dist/client/extensions/ExtensionViewer.js.map +1 -0
- package/dist/client/extensions/ExtensionViewerPage.d.ts +2 -0
- package/dist/client/extensions/ExtensionViewerPage.d.ts.map +1 -0
- package/dist/client/{tools/ToolViewerPage.js → extensions/ExtensionViewerPage.js} +8 -8
- package/dist/client/extensions/ExtensionViewerPage.js.map +1 -0
- package/dist/client/extensions/ExtensionsListPage.d.ts +2 -0
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -0
- package/dist/client/extensions/ExtensionsListPage.js +67 -0
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -0
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts +2 -0
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -0
- package/dist/client/{tools/ToolsSidebarSection.js → extensions/ExtensionsSidebarSection.js} +58 -58
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -0
- package/dist/client/{tools/tool-order.d.ts → extensions/extension-order.d.ts} +2 -2
- package/dist/client/extensions/extension-order.d.ts.map +1 -0
- package/dist/client/{tools/tool-order.js → extensions/extension-order.js} +3 -3
- package/dist/client/extensions/extension-order.js.map +1 -0
- package/dist/client/{tools → extensions}/iframe-bridge.d.ts +11 -11
- package/dist/client/extensions/iframe-bridge.d.ts.map +1 -0
- package/dist/client/{tools → extensions}/iframe-bridge.js +24 -24
- package/dist/client/extensions/iframe-bridge.js.map +1 -0
- package/dist/client/extensions/index.d.ts +14 -0
- package/dist/client/extensions/index.d.ts.map +1 -0
- package/dist/client/extensions/index.js +19 -0
- package/dist/client/extensions/index.js.map +1 -0
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +4 -1
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +2 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +87 -6
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/extensions/actions.d.ts +3 -0
- package/dist/extensions/actions.d.ts.map +1 -0
- package/dist/{tools → extensions}/actions.js +54 -51
- package/dist/extensions/actions.js.map +1 -0
- package/dist/{tools → extensions}/fetch-tool.d.ts +4 -0
- package/dist/extensions/fetch-tool.d.ts.map +1 -0
- package/dist/{tools → extensions}/fetch-tool.js +12 -7
- package/dist/extensions/fetch-tool.js.map +1 -0
- package/dist/extensions/html-shell.d.ts +56 -0
- package/dist/extensions/html-shell.d.ts.map +1 -0
- package/dist/{tools → extensions}/html-shell.js +101 -83
- package/dist/extensions/html-shell.js.map +1 -0
- package/dist/{tools → extensions}/proxy-security.d.ts +2 -2
- package/dist/extensions/proxy-security.d.ts.map +1 -0
- package/dist/{tools → extensions}/proxy-security.js +3 -3
- package/dist/extensions/proxy-security.js.map +1 -0
- package/dist/extensions/routes.d.ts +2 -0
- package/dist/extensions/routes.d.ts.map +1 -0
- package/dist/{tools → extensions}/routes.js +73 -69
- package/dist/extensions/routes.js.map +1 -0
- package/dist/{tools → extensions}/schema.d.ts +44 -38
- package/dist/extensions/schema.d.ts.map +1 -0
- package/dist/{tools → extensions}/schema.js +41 -34
- package/dist/extensions/schema.js.map +1 -0
- package/dist/extensions/slots/routes.d.ts +15 -0
- package/dist/extensions/slots/routes.d.ts.map +1 -0
- package/dist/{tools → extensions}/slots/routes.js +26 -26
- package/dist/extensions/slots/routes.js.map +1 -0
- package/dist/{tools → extensions}/slots/schema.d.ts +24 -21
- package/dist/extensions/slots/schema.d.ts.map +1 -0
- package/dist/extensions/slots/schema.js +79 -0
- package/dist/extensions/slots/schema.js.map +1 -0
- package/dist/extensions/slots/store.d.ts +66 -0
- package/dist/extensions/slots/store.d.ts.map +1 -0
- package/dist/extensions/slots/store.js +238 -0
- package/dist/extensions/slots/store.js.map +1 -0
- package/dist/extensions/store.d.ts +40 -0
- package/dist/extensions/store.d.ts.map +1 -0
- package/dist/{tools → extensions}/store.js +59 -54
- package/dist/extensions/store.js.map +1 -0
- package/dist/extensions/theme.d.ts.map +1 -0
- package/dist/extensions/theme.js.map +1 -0
- package/dist/{tools → extensions}/url-safety.d.ts +5 -3
- package/dist/extensions/url-safety.d.ts.map +1 -0
- package/dist/{tools → extensions}/url-safety.js +11 -4
- package/dist/extensions/url-safety.js.map +1 -0
- package/dist/server/action-discovery.d.ts +15 -0
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +45 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +12 -10
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts +5 -4
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +80 -28
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +15 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +65 -13
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +3 -2
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +15 -3
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/shared/workspace-app-id.d.ts +1 -1
- package/dist/shared/workspace-app-id.d.ts.map +1 -1
- package/dist/shared/workspace-app-id.js +5 -1
- package/dist/shared/workspace-app-id.js.map +1 -1
- package/dist/templates/workspace-root/README.md +5 -4
- package/dist/usage/store.d.ts +1 -1
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +1 -1
- package/dist/usage/store.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +17 -1
- package/dist/vite/client.js.map +1 -1
- package/docs/content/actions.md +10 -10
- package/docs/content/extensions.md +230 -0
- package/docs/content/key-concepts.md +2 -2
- package/docs/content/server.md +13 -13
- package/docs/content/sharing.md +2 -2
- package/docs/content/template-analytics.md +10 -0
- package/docs/content/template-calendar.md +10 -0
- package/docs/content/template-clips.md +10 -0
- package/docs/content/template-content.md +10 -0
- package/docs/content/template-dispatch.md +15 -0
- package/docs/content/template-forms.md +10 -0
- package/docs/content/template-mail.md +10 -0
- package/docs/content/template-slides.md +11 -1
- package/docs/content/template-starter.md +10 -0
- package/docs/content/template-video.md +10 -0
- package/docs/content/what-is-agent-native.md +1 -1
- package/package.json +22 -17
- package/src/templates/workspace-root/README.md +5 -4
- package/dist/client/tools/EmbeddedTool.d.ts +0 -20
- package/dist/client/tools/EmbeddedTool.d.ts.map +0 -1
- package/dist/client/tools/EmbeddedTool.js.map +0 -1
- package/dist/client/tools/ExtensionSlot.d.ts.map +0 -1
- package/dist/client/tools/ExtensionSlot.js.map +0 -1
- package/dist/client/tools/ToolEditor.d.ts +0 -5
- package/dist/client/tools/ToolEditor.d.ts.map +0 -1
- package/dist/client/tools/ToolEditor.js +0 -129
- package/dist/client/tools/ToolEditor.js.map +0 -1
- package/dist/client/tools/ToolViewer.d.ts +0 -5
- package/dist/client/tools/ToolViewer.d.ts.map +0 -1
- package/dist/client/tools/ToolViewer.js.map +0 -1
- package/dist/client/tools/ToolViewerPage.d.ts +0 -2
- package/dist/client/tools/ToolViewerPage.d.ts.map +0 -1
- package/dist/client/tools/ToolViewerPage.js.map +0 -1
- package/dist/client/tools/ToolsListPage.d.ts +0 -2
- package/dist/client/tools/ToolsListPage.d.ts.map +0 -1
- package/dist/client/tools/ToolsListPage.js +0 -67
- package/dist/client/tools/ToolsListPage.js.map +0 -1
- package/dist/client/tools/ToolsSidebarSection.d.ts +0 -2
- package/dist/client/tools/ToolsSidebarSection.d.ts.map +0 -1
- package/dist/client/tools/ToolsSidebarSection.js.map +0 -1
- package/dist/client/tools/iframe-bridge.d.ts.map +0 -1
- package/dist/client/tools/iframe-bridge.js.map +0 -1
- package/dist/client/tools/index.d.ts +0 -8
- package/dist/client/tools/index.d.ts.map +0 -1
- package/dist/client/tools/index.js +0 -8
- package/dist/client/tools/index.js.map +0 -1
- package/dist/client/tools/tool-order.d.ts.map +0 -1
- package/dist/client/tools/tool-order.js.map +0 -1
- package/dist/tools/actions.d.ts +0 -3
- package/dist/tools/actions.d.ts.map +0 -1
- package/dist/tools/actions.js.map +0 -1
- package/dist/tools/fetch-tool.d.ts.map +0 -1
- package/dist/tools/fetch-tool.js.map +0 -1
- package/dist/tools/html-shell.d.ts +0 -45
- package/dist/tools/html-shell.d.ts.map +0 -1
- package/dist/tools/html-shell.js.map +0 -1
- package/dist/tools/proxy-security.d.ts.map +0 -1
- package/dist/tools/proxy-security.js.map +0 -1
- package/dist/tools/routes.d.ts +0 -2
- package/dist/tools/routes.d.ts.map +0 -1
- package/dist/tools/routes.js.map +0 -1
- package/dist/tools/schema.d.ts.map +0 -1
- package/dist/tools/schema.js.map +0 -1
- package/dist/tools/slots/routes.d.ts +0 -15
- package/dist/tools/slots/routes.d.ts.map +0 -1
- package/dist/tools/slots/routes.js.map +0 -1
- package/dist/tools/slots/schema.d.ts.map +0 -1
- package/dist/tools/slots/schema.js +0 -76
- package/dist/tools/slots/schema.js.map +0 -1
- package/dist/tools/slots/store.d.ts +0 -66
- package/dist/tools/slots/store.d.ts.map +0 -1
- package/dist/tools/slots/store.js +0 -227
- package/dist/tools/slots/store.js.map +0 -1
- package/dist/tools/store.d.ts +0 -40
- package/dist/tools/store.d.ts.map +0 -1
- package/dist/tools/store.js.map +0 -1
- package/dist/tools/theme.d.ts.map +0 -1
- package/dist/tools/theme.js.map +0 -1
- package/dist/tools/url-safety.d.ts.map +0 -1
- package/dist/tools/url-safety.js.map +0 -1
- package/docs/content/tools.md +0 -205
- /package/dist/{tools → extensions}/theme.d.ts +0 -0
- /package/dist/{tools → extensions}/theme.js +0 -0
package/dist/server/auth.d.ts
CHANGED
|
@@ -144,10 +144,11 @@ export declare function runAuthGuard(event: H3Event): Promise<Response | object
|
|
|
144
144
|
* Resolution chain:
|
|
145
145
|
* 1. ACCESS_TOKEN → check legacy cookie-based token sessions
|
|
146
146
|
* 2. BYOA custom getSession → delegate to template callback
|
|
147
|
-
* 3.
|
|
148
|
-
* 4.
|
|
149
|
-
* 5.
|
|
150
|
-
* 6.
|
|
147
|
+
* 3. Bearer legacy session → check Authorization: Bearer against sessions
|
|
148
|
+
* 4. Better Auth → check session via Better Auth API (cookie or Bearer)
|
|
149
|
+
* 5. Legacy cookie → check an_session cookie in legacy sessions table
|
|
150
|
+
* 6. Desktop SSO broker (Electron loopback only)
|
|
151
|
+
* 7. Mobile _session query param → promote to cookie
|
|
151
152
|
*
|
|
152
153
|
* Returns `null` for unauthenticated requests. There is no dev-mode bypass:
|
|
153
154
|
* local development uses the same Better Auth signup flow as production. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAsChE,KAAK,KAAK,GAAG,SAAS,CAAC;AAQvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AA0BlE;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAMD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7D;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAqBD,eAAO,MAAM,WAAW,QAER,CAAC;AAgBjB;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAUrE;AAyMD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;AAED,uDAAuD;AACvD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAShE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmB3E;AA6CD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAmBD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,QAWd;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,2BAA2B,QAOnC;AAmGD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAG5C;AAqQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA6E5E;AAmhCD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,KAAK,EACV,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,OAAO,CAAC,CAmJlB;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAEzE"}
|
package/dist/server/auth.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
-
import { defineEventHandler, getMethod, getQuery, getRequestIP, sendRedirect, setResponseHeader, setResponseStatus, getCookie, setCookie, deleteCookie, } from "h3";
|
|
2
|
+
import { defineEventHandler, getMethod, getQuery, getRequestIP, sendRedirect, setResponseHeader, setResponseStatus, getCookie, setCookie, deleteCookie, getHeader, } from "h3";
|
|
3
3
|
// In h3 v2, `event.req` IS the web Request — but in Nitro's dev server (srvx
|
|
4
4
|
// runtime), event.url and event.req share the same underlying URL object.
|
|
5
5
|
// When registerMiddleware strips the mount prefix from event.url.pathname, it
|
|
@@ -216,6 +216,36 @@ function safeTokenMatch(input, tokens) {
|
|
|
216
216
|
}
|
|
217
217
|
return false;
|
|
218
218
|
}
|
|
219
|
+
function getBearerSessionToken(event) {
|
|
220
|
+
const auth = getHeader(event, "authorization");
|
|
221
|
+
if (!auth)
|
|
222
|
+
return undefined;
|
|
223
|
+
const match = /^Bearer\s+(.+)$/i.exec(auth.trim());
|
|
224
|
+
return match?.[1]?.trim() || undefined;
|
|
225
|
+
}
|
|
226
|
+
async function getBearerLegacySession(event) {
|
|
227
|
+
const bearerToken = getBearerSessionToken(event);
|
|
228
|
+
if (!bearerToken)
|
|
229
|
+
return null;
|
|
230
|
+
const email = await getSessionEmail(bearerToken);
|
|
231
|
+
return email ? { email, token: bearerToken } : null;
|
|
232
|
+
}
|
|
233
|
+
function shouldExposeSessionTokenInBody(event) {
|
|
234
|
+
const origin = getHeader(event, "origin");
|
|
235
|
+
if (origin && DESKTOP_AUTH_TOKEN_BODY_ORIGINS.has(origin))
|
|
236
|
+
return true;
|
|
237
|
+
// Some native WebViews do not consistently emit an Origin header for
|
|
238
|
+
// programmatic fetches. The desktop app marks same-server requests with
|
|
239
|
+
// X-Request-Source; browsers can only use that cross-origin after our CORS
|
|
240
|
+
// allowlist has approved the origin, and same-origin pages already receive
|
|
241
|
+
// an equivalent httpOnly session cookie on successful login.
|
|
242
|
+
return !origin && getHeader(event, "x-request-source") === "clips-desktop";
|
|
243
|
+
}
|
|
244
|
+
function authLoginResponse(event, token, email) {
|
|
245
|
+
if (!shouldExposeSessionTokenInBody(event))
|
|
246
|
+
return { ok: true };
|
|
247
|
+
return email ? { ok: true, token, email } : { ok: true, token };
|
|
248
|
+
}
|
|
219
249
|
// ---------------------------------------------------------------------------
|
|
220
250
|
// Legacy session store — kept for backward compat (addSession/getSessionEmail)
|
|
221
251
|
// Used by google-oauth.ts for mobile deep linking session creation.
|
|
@@ -331,6 +361,10 @@ function areGenericGoogleOAuthRoutesEnabled(app) {
|
|
|
331
361
|
}
|
|
332
362
|
const _desktopExchanges = new Map();
|
|
333
363
|
const DESKTOP_EXCHANGE_ERROR_PREFIX = "__error__::";
|
|
364
|
+
const DESKTOP_AUTH_TOKEN_BODY_ORIGINS = new Set([
|
|
365
|
+
"tauri://localhost",
|
|
366
|
+
"http://localhost:1420",
|
|
367
|
+
]);
|
|
334
368
|
// 5-minute TTL for exchange entries (short — single-use tokens).
|
|
335
369
|
const DESKTOP_EXCHANGE_TTL_MS = 5 * 60 * 1000;
|
|
336
370
|
export function setDesktopExchange(flowId, token, email) {
|
|
@@ -465,9 +499,7 @@ function applyCorsHeaders(event) {
|
|
|
465
499
|
// response would be missing the Allow-Origin header and the browser
|
|
466
500
|
// blocks the response body (making it look like a network error
|
|
467
501
|
// rather than "unauthenticated").
|
|
468
|
-
const
|
|
469
|
-
const originRaw = reqHeaders["origin"];
|
|
470
|
-
const origin = Array.isArray(originRaw) ? originRaw[0] : originRaw;
|
|
502
|
+
const origin = getHeader(event, "origin");
|
|
471
503
|
if (!origin)
|
|
472
504
|
return { hasOrigin: false, allowed: true };
|
|
473
505
|
const allowedOrigin = getAllowedCorsOrigin(origin, {
|
|
@@ -633,6 +665,15 @@ function createAuthGuardFn() {
|
|
|
633
665
|
p.endsWith(".woff")) {
|
|
634
666
|
return;
|
|
635
667
|
}
|
|
668
|
+
// React Router 7's lazy route discovery fetches `/__manifest?p=...` to
|
|
669
|
+
// resolve manifest patches for `<Link>`s the user might click. The
|
|
670
|
+
// auth fallback returning loginHtml here makes RR fail to parse the
|
|
671
|
+
// body as RSC, surfacing as a console error and (when the visitor
|
|
672
|
+
// already errored elsewhere) blocking the app from rendering. Let it
|
|
673
|
+
// through — it returns a tiny RSC-encoded manifest of the public
|
|
674
|
+
// route tree, no per-user data.
|
|
675
|
+
if (p === "/__manifest")
|
|
676
|
+
return;
|
|
636
677
|
if (isPublicPath(normalizedUrl, publicPaths))
|
|
637
678
|
return;
|
|
638
679
|
const session = await getSession(event);
|
|
@@ -666,10 +707,11 @@ function mapBetterAuthSession(baSession) {
|
|
|
666
707
|
* Resolution chain:
|
|
667
708
|
* 1. ACCESS_TOKEN → check legacy cookie-based token sessions
|
|
668
709
|
* 2. BYOA custom getSession → delegate to template callback
|
|
669
|
-
* 3.
|
|
670
|
-
* 4.
|
|
671
|
-
* 5.
|
|
672
|
-
* 6.
|
|
710
|
+
* 3. Bearer legacy session → check Authorization: Bearer against sessions
|
|
711
|
+
* 4. Better Auth → check session via Better Auth API (cookie or Bearer)
|
|
712
|
+
* 5. Legacy cookie → check an_session cookie in legacy sessions table
|
|
713
|
+
* 6. Desktop SSO broker (Electron loopback only)
|
|
714
|
+
* 7. Mobile _session query param → promote to cookie
|
|
673
715
|
*
|
|
674
716
|
* Returns `null` for unauthenticated requests. There is no dev-mode bypass:
|
|
675
717
|
* local development uses the same Better Auth signup flow as production. The
|
|
@@ -692,6 +734,9 @@ export async function getSession(event) {
|
|
|
692
734
|
const session = await customGetSession(event);
|
|
693
735
|
if (session)
|
|
694
736
|
return session;
|
|
737
|
+
const bearerSession = await getBearerLegacySession(event);
|
|
738
|
+
if (bearerSession)
|
|
739
|
+
return bearerSession;
|
|
695
740
|
// Desktop SSO broker: even with BYOA auth, fall back to the broker
|
|
696
741
|
// for Electron requests so cross-template SSO works for custom-auth
|
|
697
742
|
// templates too. Gated on `readDesktopSsoSafely` so a non-loopback
|
|
@@ -703,7 +748,12 @@ export async function getSession(event) {
|
|
|
703
748
|
// Fall through to mobile _session check
|
|
704
749
|
}
|
|
705
750
|
else {
|
|
706
|
-
// 3.
|
|
751
|
+
// 3. Bearer legacy session. Desktop/native clients can persist a session
|
|
752
|
+
// token outside the WebView cookie jar and attach it to all app requests.
|
|
753
|
+
const bearerSession = await getBearerLegacySession(event);
|
|
754
|
+
if (bearerSession)
|
|
755
|
+
return bearerSession;
|
|
756
|
+
// 4. Better Auth session (cookie or Bearer token)
|
|
707
757
|
try {
|
|
708
758
|
const ba = getBetterAuthSync();
|
|
709
759
|
if (ba) {
|
|
@@ -718,7 +768,7 @@ export async function getSession(event) {
|
|
|
718
768
|
catch (e) {
|
|
719
769
|
console.error("[auth] ba.api.getSession error:", e);
|
|
720
770
|
}
|
|
721
|
-
//
|
|
771
|
+
// 5. Legacy cookie fallback (for sessions created before migration)
|
|
722
772
|
const cookie = getCookie(event, COOKIE_NAME);
|
|
723
773
|
if (cookie) {
|
|
724
774
|
const email = await getSessionEmail(cookie);
|
|
@@ -726,7 +776,7 @@ export async function getSession(event) {
|
|
|
726
776
|
return { email, token: cookie };
|
|
727
777
|
}
|
|
728
778
|
}
|
|
729
|
-
//
|
|
779
|
+
// 6. Desktop SSO broker fallback.
|
|
730
780
|
// Each template in the Electron desktop app has its own database, so
|
|
731
781
|
// a session token created by one template doesn't resolve in another.
|
|
732
782
|
// When an Electron request has no resolvable session, trust the
|
|
@@ -740,7 +790,7 @@ export async function getSession(event) {
|
|
|
740
790
|
return { email: sso.email, token: sso.token };
|
|
741
791
|
}
|
|
742
792
|
}
|
|
743
|
-
//
|
|
793
|
+
// 7. Mobile WebView bridge — _session query param
|
|
744
794
|
const querySession = await promoteQuerySession(event);
|
|
745
795
|
if (querySession)
|
|
746
796
|
return querySession;
|
|
@@ -782,21 +832,11 @@ function setFrameworkSessionCookie(event, token) {
|
|
|
782
832
|
}
|
|
783
833
|
function isHttpsRequest(event) {
|
|
784
834
|
try {
|
|
785
|
-
const
|
|
786
|
-
const headers = req?.headers;
|
|
787
|
-
const get = (k) => {
|
|
788
|
-
if (!headers)
|
|
789
|
-
return undefined;
|
|
790
|
-
if (typeof headers.get === "function") {
|
|
791
|
-
return headers.get(k) ?? undefined;
|
|
792
|
-
}
|
|
793
|
-
const v = headers[k];
|
|
794
|
-
return Array.isArray(v) ? v[0] : v;
|
|
795
|
-
};
|
|
796
|
-
const xfProto = get("x-forwarded-proto");
|
|
835
|
+
const xfProto = getHeader(event, "x-forwarded-proto");
|
|
797
836
|
if (xfProto && String(xfProto).split(",")[0].trim() === "https") {
|
|
798
837
|
return true;
|
|
799
838
|
}
|
|
839
|
+
const req = event.req ?? event.node?.req;
|
|
800
840
|
const url = req?.url;
|
|
801
841
|
if (typeof url === "string" && url.startsWith("https://"))
|
|
802
842
|
return true;
|
|
@@ -1311,7 +1351,7 @@ async function mountBetterAuthRoutes(app, options) {
|
|
|
1311
1351
|
path: "/",
|
|
1312
1352
|
maxAge: sessionMaxAge,
|
|
1313
1353
|
});
|
|
1314
|
-
return
|
|
1354
|
+
return authLoginResponse(event, sessionToken, "user");
|
|
1315
1355
|
}
|
|
1316
1356
|
// Email/password login via Better Auth
|
|
1317
1357
|
const email = body?.email?.trim?.()?.toLowerCase?.();
|
|
@@ -1339,7 +1379,7 @@ async function mountBetterAuthRoutes(app, options) {
|
|
|
1339
1379
|
expiresAt: Date.now() + sessionMaxAge * 1000,
|
|
1340
1380
|
});
|
|
1341
1381
|
}
|
|
1342
|
-
return
|
|
1382
|
+
return authLoginResponse(event, result.token, email);
|
|
1343
1383
|
}
|
|
1344
1384
|
// signInEmail succeeded but returned no token — typically means the
|
|
1345
1385
|
// email isn't verified yet. Don't return { ok: true } without a
|
|
@@ -1390,6 +1430,9 @@ async function mountBetterAuthRoutes(app, options) {
|
|
|
1390
1430
|
const cookie = getCookie(event, COOKIE_NAME);
|
|
1391
1431
|
if (cookie)
|
|
1392
1432
|
await removeSession(cookie);
|
|
1433
|
+
const bearerToken = getBearerSessionToken(event);
|
|
1434
|
+
if (bearerToken)
|
|
1435
|
+
await removeSession(bearerToken);
|
|
1393
1436
|
deleteCookie(event, COOKIE_NAME, { path: "/" });
|
|
1394
1437
|
try {
|
|
1395
1438
|
await auth.api.signOut({ headers: event.headers });
|
|
@@ -1526,12 +1569,15 @@ function mountTokenOnlyRoutes(app, accessTokens, publicPaths = []) {
|
|
|
1526
1569
|
path: "/",
|
|
1527
1570
|
maxAge: sessionMaxAge,
|
|
1528
1571
|
});
|
|
1529
|
-
return
|
|
1572
|
+
return authLoginResponse(event, sessionToken, "user");
|
|
1530
1573
|
}));
|
|
1531
1574
|
app.use("/_agent-native/auth/logout", defineEventHandler(async (event) => {
|
|
1532
1575
|
const cookie = getCookie(event, COOKIE_NAME);
|
|
1533
1576
|
if (cookie)
|
|
1534
1577
|
await removeSession(cookie);
|
|
1578
|
+
const bearerToken = getBearerSessionToken(event);
|
|
1579
|
+
if (bearerToken)
|
|
1580
|
+
await removeSession(bearerToken);
|
|
1535
1581
|
deleteCookie(event, COOKIE_NAME, { path: "/" });
|
|
1536
1582
|
if (isElectronRequest(event))
|
|
1537
1583
|
await clearDesktopSso();
|
|
@@ -1586,7 +1632,7 @@ function mountAuthFallbackRoutes(app) {
|
|
|
1586
1632
|
expiresAt: Date.now() + sessionMaxAge * 1000,
|
|
1587
1633
|
});
|
|
1588
1634
|
}
|
|
1589
|
-
return
|
|
1635
|
+
return authLoginResponse(event, result.token, email);
|
|
1590
1636
|
}
|
|
1591
1637
|
setResponseStatus(event, 403);
|
|
1592
1638
|
return {
|
|
@@ -1630,6 +1676,9 @@ function mountAuthFallbackRoutes(app) {
|
|
|
1630
1676
|
const cookie = getCookie(event, COOKIE_NAME);
|
|
1631
1677
|
if (cookie)
|
|
1632
1678
|
await removeSession(cookie);
|
|
1679
|
+
const bearerToken = getBearerSessionToken(event);
|
|
1680
|
+
if (bearerToken)
|
|
1681
|
+
await removeSession(bearerToken);
|
|
1633
1682
|
deleteCookie(event, COOKIE_NAME, { path: "/" });
|
|
1634
1683
|
try {
|
|
1635
1684
|
const auth = await getBetterAuth();
|
|
@@ -1743,6 +1792,9 @@ export async function autoMountAuth(app, options = {}) {
|
|
|
1743
1792
|
const cookie = getCookie(event, COOKIE_NAME);
|
|
1744
1793
|
if (cookie)
|
|
1745
1794
|
await removeSession(cookie);
|
|
1795
|
+
const bearerToken = getBearerSessionToken(event);
|
|
1796
|
+
if (bearerToken)
|
|
1797
|
+
await removeSession(bearerToken);
|
|
1746
1798
|
deleteCookie(event, COOKIE_NAME, { path: "/" });
|
|
1747
1799
|
if (isElectronRequest(event))
|
|
1748
1800
|
await clearDesktopSso();
|