@undefineds.co/xpod 0.4.12 → 0.4.13
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/acceptance/QleverSemanticConformance.js +7 -0
- package/dist/api/ai-gateway/providers/OfferingAuthorization.d.ts +6 -1
- package/dist/api/ai-gateway/providers/OfferingAuthorization.js +0 -3
- package/dist/api/ai-gateway/providers/ProviderRegistry.js +2 -2
- package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.d.ts +1 -1
- package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.js +1 -1
- package/dist/api/service/AiClientConfigurationService.d.ts +1 -1
- package/dist/api/service/AiClientConfigurationService.js +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.js +10 -4
- package/dist/storage/rdf/RdfAccessScope.js +15 -1
- package/dist/storage/rdf/RdfEngineRdfJsSource.js +10 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +3 -3
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.js +2 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiCustomProviderDialog.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeyRow.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiQuotaCard.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.d.ts +13 -11
- package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.js +16 -13
- package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +3 -3
- package/node_modules/@undefineds.co/ai-connections/dist/collections.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/collections.js +3 -3
- package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/controller.js +3 -2
- package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/display-wording.d.ts +20 -0
- package/node_modules/@undefineds.co/ai-connections/dist/display-wording.js +73 -0
- package/node_modules/@undefineds.co/ai-connections/dist/error-wording.d.ts +24 -0
- package/node_modules/@undefineds.co/ai-connections/dist/error-wording.js +253 -0
- package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.js +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/index.d.ts +2 -3
- package/node_modules/@undefineds.co/ai-connections/dist/index.js +2 -3
- package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/offering-label.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/service-access.js +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/useAiConnectDialog.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/package.json +1 -24
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/ai-connections-client.d.ts +5 -3
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/ai-connections-client.js +5 -3
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/normalize.d.ts +17 -7
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/normalize.js +18 -213
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/request.js +3 -3
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/types.d.ts +11 -2
- package/node_modules/@undefineds.co/ai-connections-core/dist/index.d.ts +9 -0
- package/node_modules/@undefineds.co/ai-connections-core/dist/index.js +9 -0
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.cjs +2 -25
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.d.ts +9 -8
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.js +11 -31
- package/node_modules/@undefineds.co/ai-connections-core/package.json +61 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +4 -2
- package/node_modules/@undefineds.co/shared-ui/dist/index.js +4 -2
- package/node_modules/@undefineds.co/shared-ui/dist/login/LoginModal.d.ts +4 -1
- package/node_modules/@undefineds.co/shared-ui/dist/login/LoginModal.js +12 -6
- package/node_modules/@undefineds.co/shared-ui/dist/login/LoginView.d.ts +1 -1
- package/node_modules/@undefineds.co/shared-ui/dist/login/host-types.d.ts +7 -1
- package/node_modules/@undefineds.co/shared-ui/dist/login/login-branding.d.ts +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/login/login-branding.js +18 -0
- package/node_modules/@undefineds.co/shared-ui/dist/user-facing-errors.d.ts +14 -2
- package/node_modules/@undefineds.co/shared-ui/dist/user-facing-errors.js +26 -17
- package/node_modules/@undefineds.co/solid-sdk/dist/login-store.d.ts +3 -3
- package/node_modules/@undefineds.co/solid-sdk/dist/login-store.js +3 -3
- package/package.json +5 -3
- package/static/app/assets/main.css +1 -1
- package/static/auth-callback/assets/{AiConfigContext-DnQs1ZpW.js → AiConfigContext-DlFyEWy9.js} +1 -1
- package/static/auth-callback/assets/{AiConfigPage-DOtvlxH0.js → AiConfigPage-CkYk-SFW.js} +1 -1
- package/static/auth-callback/assets/{DocumentProcessingPanel-BS2voQgL.js → DocumentProcessingPanel-CqIr3JqN.js} +1 -1
- package/static/auth-callback/assets/{IndexLifecyclePanel-Cvt0cJtN.js → IndexLifecyclePanel-C1GKV3Vx.js} +1 -1
- package/static/auth-callback/assets/{IndexSubjectPanel-Dhf01GqF.js → IndexSubjectPanel-ro9lC6XW.js} +1 -1
- package/static/auth-callback/assets/{ModelAssignmentsPanel-BJutWaAF.js → ModelAssignmentsPanel-DxNdyKRJ.js} +1 -1
- package/static/auth-callback/assets/{ModelsPage-BRS0sje3.js → ModelsPage-BVtWSPBU.js} +6 -6
- package/static/auth-callback/assets/{NetworkPage-B3qBfANA.js → NetworkPage-cEvxRMAl.js} +1 -1
- package/static/auth-callback/assets/{PaneListHeader-QQeJGTp4.js → PaneListHeader-ByKw8ada.js} +1 -1
- package/static/auth-callback/assets/{SearchIndexingPanel-MyNUSEwT.js → SearchIndexingPanel-CulBKcYT.js} +1 -1
- package/static/auth-callback/assets/{StatusSubjectPanel-DQkEVsFs.js → StatusSubjectPanel-VOcfrt8o.js} +1 -1
- package/static/auth-callback/assets/{StatusWorkspace-Dkv63Uwk.js → StatusWorkspace-Jsz6hAdE.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsPage-TIsUfX5d.js → SystemSettingsPage-BFNvGAle.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsSubjectPanel-BJWEt2-7.js → SystemSettingsSubjectPanel-DFRdrSfK.js} +1 -1
- package/static/auth-callback/assets/XpodAiConnectionsPodStore-C6KpvHVg.js +3 -0
- package/static/auth-callback/assets/{activity-5hNeNKnL.js → activity-DnTlb9iM.js} +1 -1
- package/static/auth-callback/assets/ai-connections-C6yaE6WQ.js +1 -0
- package/static/auth-callback/assets/auth-callback-Cx9D_1qj.css +1 -0
- package/static/auth-callback/assets/{auth-callback-CAFZ3R0B.js → auth-callback-D2UkK5Xj.js} +3 -3
- package/static/auth-callback/assets/{badge-CAIPI0CB.js → badge-D7IJuuTM.js} +1 -1
- package/static/auth-callback/assets/{collection-runtime-D9s7h9YA.js → collection-runtime-wT1n4GS2.js} +1 -1
- package/static/auth-callback/assets/{dialog-BjA109aX.js → dialog-DickLu5z.js} +1 -1
- package/static/auth-callback/assets/{download-B3Up5W2G.js → download-kn8WnRu3.js} +1 -1
- package/static/auth-callback/assets/{external-link-BTXgSPzB.js → external-link-B6B8jfSn.js} +1 -1
- package/static/auth-callback/assets/{index-DlLYWOhw.js → index-Cu0EguPo.js} +2 -2
- package/static/auth-callback/assets/{index-BppXlxcp.js → index-DHF97YLP.js} +1 -1
- package/static/auth-callback/assets/{index-CirW4CJf.js → index-Dz83EEHD.js} +1 -1
- package/static/auth-callback/assets/{index-browser-DtU38ni3.js → index-browser-CSghinyi.js} +1 -1
- package/static/auth-callback/assets/{key-round-CQCOrZ7x.js → key-round-ChkOx3E1.js} +1 -1
- package/static/auth-callback/assets/{rotate-ccw-C1zM2KtS.js → rotate-ccw-B3hE-nyd.js} +1 -1
- package/static/auth-callback/assets/{skeleton-Cqp7_M9-.js → skeleton-kEqR7tpI.js} +1 -1
- package/static/auth-callback/assets/{waypoints-Bj6gAUSQ.js → waypoints-D6Jo-SZa.js} +1 -1
- package/static/auth-callback/assets/{workspace-layout-DK8mDzrY.js → workspace-layout-BHwT_cHd.js} +1 -1
- package/static/auth-callback/auth-callback.html +2 -2
- package/static/dashboard/assets/{AiConfigContext-BsE7MqX8.js → AiConfigContext-BfC3v-x2.js} +1 -1
- package/static/dashboard/assets/{AiConfigPage-DvM-lRXa.js → AiConfigPage-QNS3u7Ff.js} +1 -1
- package/static/dashboard/assets/{DocumentProcessingPanel-BPfdlfuf.js → DocumentProcessingPanel-Dr4XLeT4.js} +1 -1
- package/static/dashboard/assets/{IndexLifecyclePanel--m0AGxvh.js → IndexLifecyclePanel-KtM_gpeO.js} +1 -1
- package/static/dashboard/assets/{IndexSubjectPanel-Bb7m1k3d.js → IndexSubjectPanel-DLaiKdLc.js} +1 -1
- package/static/dashboard/assets/{ModelAssignmentsPanel-BLi_zbMa.js → ModelAssignmentsPanel-Bk7TvQRq.js} +1 -1
- package/static/dashboard/assets/{ModelsPage-CxdpgnfR.js → ModelsPage-Cci3vlos.js} +6 -6
- package/static/dashboard/assets/{NetworkPage-BAIPw-D_.js → NetworkPage-Ot4G2dX5.js} +1 -1
- package/static/dashboard/assets/{PaneListHeader-BBCMei0r.js → PaneListHeader-qHME_s08.js} +1 -1
- package/static/dashboard/assets/{SearchIndexingPanel-Ck4Y-xjR.js → SearchIndexingPanel-HZPKj8H9.js} +1 -1
- package/static/dashboard/assets/{StatusSubjectPanel-D1KWfAXE.js → StatusSubjectPanel-ij7IpI8d.js} +1 -1
- package/static/dashboard/assets/{StatusWorkspace-JbA5gzXx.js → StatusWorkspace-Cp02JcaN.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsPage-BbwQWsSR.js → SystemSettingsPage-BSeuvb8X.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsSubjectPanel-N117nMt5.js → SystemSettingsSubjectPanel-CP4_luGS.js} +1 -1
- package/static/dashboard/assets/{XpodAiConnectionsPodStore-CdDOb4SV.js → XpodAiConnectionsPodStore-urO6zaHL.js} +7 -7
- package/static/dashboard/assets/{activity-DX1I96o_.js → activity-DxjgQNvr.js} +1 -1
- package/static/dashboard/assets/ai-connections-CXp5gd1J.js +1 -0
- package/static/dashboard/assets/{badge-k2vhtDqH.js → badge-53qCrRbl.js} +1 -1
- package/static/dashboard/assets/{collection-runtime-BFQ8teQJ.js → collection-runtime-BPAmHG46.js} +1 -1
- package/static/dashboard/assets/{dashboard-DWZ-fmCT.js → dashboard-BcT2ByXw.js} +2 -2
- package/static/dashboard/assets/dashboard-Cx9D_1qj.css +1 -0
- package/static/dashboard/assets/{dialog-1CCw-iHT.js → dialog-B28YtNhS.js} +1 -1
- package/static/dashboard/assets/{download-C6-SNY1q.js → download-DkLNceJ4.js} +1 -1
- package/static/dashboard/assets/{external-link-BgPcZ_j2.js → external-link-D3TXnlo3.js} +1 -1
- package/static/dashboard/assets/{index-D7A8U6Pt.js → index-CFIenkeK.js} +1 -1
- package/static/dashboard/assets/{index-6LcIUIYO.js → index-CIiBu9mr.js} +1 -1
- package/static/dashboard/assets/{index-UD6QOE7H.js → index-Gp3cLolR.js} +2 -2
- package/static/dashboard/assets/{key-round-BOd7Jo0Q.js → key-round-B5ccp6nx.js} +1 -1
- package/static/dashboard/assets/{rotate-ccw-CCgJqsvx.js → rotate-ccw-DUpfkNnk.js} +1 -1
- package/static/dashboard/assets/{skeleton-Bc7abAn5.js → skeleton-BRe19fO0.js} +1 -1
- package/static/dashboard/assets/{waypoints-s-opmJxx.js → waypoints-BKDMxEvu.js} +1 -1
- package/static/dashboard/assets/{workspace-layout-DqIQeTBV.js → workspace-layout-ZTF7C16h.js} +1 -1
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/{AiConfigContext-BB9KZySa.js → AiConfigContext-DsyWgu2i.js} +1 -1
- package/static/settings/assets/{AiConfigPage-DGSXUkLs.js → AiConfigPage-CSCBckKo.js} +1 -1
- package/static/settings/assets/{DocumentProcessingPanel-Da2Re6Rg.js → DocumentProcessingPanel-w9yQDbBe.js} +1 -1
- package/static/settings/assets/{IndexLifecyclePanel-BSZuIzgr.js → IndexLifecyclePanel-CUUXI8mP.js} +1 -1
- package/static/settings/assets/{IndexSubjectPanel-CFd0ay-r.js → IndexSubjectPanel-BypAU5TJ.js} +1 -1
- package/static/settings/assets/{ModelAssignmentsPanel-CSAryvWJ.js → ModelAssignmentsPanel-BetgXw1G.js} +1 -1
- package/static/settings/assets/{ModelsPage-BQwCwLHU.js → ModelsPage-DZpTlTZ3.js} +6 -6
- package/static/settings/assets/{NetworkPage-BKymvsQc.js → NetworkPage-BVkasFGM.js} +1 -1
- package/static/settings/assets/{PaneListHeader-Bjh3hRdQ.js → PaneListHeader-BGOqGec4.js} +1 -1
- package/static/settings/assets/{SearchIndexingPanel-MjKL5QLU.js → SearchIndexingPanel-DYAbpZ_9.js} +1 -1
- package/static/settings/assets/{StatusSubjectPanel-Bvl6K4mx.js → StatusSubjectPanel-CFgzeQ8Q.js} +1 -1
- package/static/settings/assets/{StatusWorkspace-B0NzrP--.js → StatusWorkspace-4Z6g4Jvv.js} +1 -1
- package/static/settings/assets/{SystemSettingsPage-D2z6Z4FE.js → SystemSettingsPage-C1tlrgvI.js} +1 -1
- package/static/settings/assets/{SystemSettingsSubjectPanel-4sxma4X4.js → SystemSettingsSubjectPanel-CcURI-1L.js} +1 -1
- package/static/settings/assets/XpodAiConnectionsPodStore-owBQc5nY.js +3 -0
- package/static/settings/assets/{activity-CgJJGpjx.js → activity-CtBc9cNy.js} +1 -1
- package/static/settings/assets/ai-connections-C6yaE6WQ.js +1 -0
- package/static/settings/assets/{badge-C4NypVyT.js → badge--r-FDIhU.js} +1 -1
- package/static/settings/assets/{collection-runtime-CTLCDxAi.js → collection-runtime-CnhPmwAM.js} +1 -1
- package/static/settings/assets/{dialog-Csq0vWUi.js → dialog-B7ZRsjN7.js} +1 -1
- package/static/settings/assets/{download-DaLJJ-Wp.js → download-DgQ1F8QR.js} +1 -1
- package/static/settings/assets/{external-link--w_iW5Au.js → external-link-Bz7NckNO.js} +1 -1
- package/static/settings/assets/{index-B0mQa59b.js → index-BdXwm8nh.js} +2 -2
- package/static/settings/assets/{index-COmVnZi2.js → index-CkGda_Pg.js} +1 -1
- package/static/settings/assets/{index-BukHiu4y.js → index-Vv-8Vslg.js} +1 -1
- package/static/settings/assets/{index-browser-BGpvHwD0.js → index-browser-Dq7omlpY.js} +1 -1
- package/static/settings/assets/{key-round-Bk4YRjBu.js → key-round-CvuhloKV.js} +1 -1
- package/static/settings/assets/{rotate-ccw-TCabbqsr.js → rotate-ccw-DgFKDaz7.js} +1 -1
- package/static/settings/assets/{settings-CJWpdbNC.js → settings-BvqY7K96.js} +3 -3
- package/static/settings/assets/settings-Cx9D_1qj.css +1 -0
- package/static/settings/assets/{skeleton-JDHYVe7t.js → skeleton-D3OeFDF6.js} +1 -1
- package/static/settings/assets/{waypoints-DDvEl-MU.js → waypoints-C4WbspTb.js} +1 -1
- package/static/settings/assets/{workspace-layout-DV5QU30U.js → workspace-layout-B9H1Tqrk.js} +1 -1
- package/static/settings/settings.html +2 -2
- package/static/auth-callback/assets/XpodAiConnectionsPodStore-BJiXm-PF.js +0 -3
- package/static/auth-callback/assets/ai-connections-CryuHGKW.js +0 -1
- package/static/auth-callback/assets/auth-callback-rk080mvG.css +0 -1
- package/static/dashboard/assets/ai-connections-DwCRqOQa.js +0 -1
- package/static/dashboard/assets/dashboard-rk080mvG.css +0 -1
- package/static/settings/assets/XpodAiConnectionsPodStore-BkNQ8fZx.js +0 -3
- package/static/settings/assets/ai-connections-CryuHGKW.js +0 -1
- package/static/settings/assets/settings-rk080mvG.css +0 -1
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/request.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/types.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/base-adapter.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/base-adapter.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/codex.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/codex.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.cjs +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/json-env-adapter.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/json-env-adapter.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/pi.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/pi.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/transaction.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/transaction.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/types.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/types.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/credential-storage.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/credential-storage.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/endpoint-urls.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/endpoint-urls.js +0 -0
|
@@ -7,13 +7,17 @@ import { getProviderDisplayLabel, } from './presentation.js';
|
|
|
7
7
|
import { resolveLoginProviderSource } from './provider-model.js';
|
|
8
8
|
import { LoginCardShell } from '../login.js';
|
|
9
9
|
import { formatLoginErrorForUser } from './error-messages.js';
|
|
10
|
+
import { LoginProductNameProvider, useLoginProductName } from './login-branding.js';
|
|
10
11
|
import { LocalReachabilitySummary } from './LocalReachabilitySummary.js';
|
|
11
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Shared login modal. The host supplies the brand and, optionally, the product
|
|
14
|
+
* name that user-facing messages refer to.
|
|
15
|
+
*/
|
|
12
16
|
export function LoginModal(props) {
|
|
13
17
|
const { state, storageConflict, view } = props;
|
|
14
18
|
if (state === 'authenticated' && !storageConflict)
|
|
15
19
|
return null;
|
|
16
|
-
return (_jsx(LoginCardShell, { ariaLabel: props.ariaLabel ?? 'Sign in', overlayClassName: props.overlayClassName, cardClassName: props.cardClassName, cardSize: "compact", children: storageConflict ? (_jsx(StorageConflictView, { storedAccount: props.storedAccount, storageConflict: storageConflict, onDismiss: props.onDismissStorageConflict, onOpenCurrentSpacePodSetup: props.onOpenCurrentSpacePodSetup })) : state === 'restoring' ? (_jsx(RestoringView, { storedAccount: props.storedAccount })) : state === 'connecting' ? (_jsx(ConnectingView, { authWindowStatus: props.authWindowStatus, connectingProvider: props.connectingProvider, onCancel: props.onCancelConnecting })) : view === 'local' ? (_jsx(LocalOnboardingView, { localOnboarding: props.localOnboarding, localProviderSource: props.localProviderSource, error: props.error, onBack: props.onBackFromLocal, onContinue: props.onContinueLocalLogin, onSwitchAccount: props.onSwitchAccount, onTestConnectivity: props.onTestLocalConnectivity, onOpenSettings: props.onOpenLocalSettings, onClearError: props.onClearError })) : props.storedAccount ? (_jsx(AccountView, { storedAccount: props.storedAccount, hasRestorableSession: props.hasRestorableSession, onContinueStoredAccount: props.onContinueStoredAccount, onSwitchAccount: props.onSwitchAccount, error: props.error, onClearError: props.onClearError })) : (_jsx(ProviderSelectionView, { providers: props.providers, error: props.error, localLoginStatus: props.localLoginStatus, onConnect: props.onConnect, onAddProvider: props.onAddProvider, onClearError: props.onClearError, brand: props.brand, capabilities: props.capabilities })) }));
|
|
20
|
+
return (_jsx(LoginProductNameProvider, { productName: props.productName, children: _jsx(LoginCardShell, { ariaLabel: props.ariaLabel ?? 'Sign in', overlayClassName: props.overlayClassName, cardClassName: props.cardClassName, cardSize: "compact", children: storageConflict ? (_jsx(StorageConflictView, { storedAccount: props.storedAccount, storageConflict: storageConflict, onDismiss: props.onDismissStorageConflict, onOpenCurrentSpacePodSetup: props.onOpenCurrentSpacePodSetup })) : state === 'restoring' ? (_jsx(RestoringView, { storedAccount: props.storedAccount })) : state === 'connecting' ? (_jsx(ConnectingView, { authWindowStatus: props.authWindowStatus, connectingProvider: props.connectingProvider, onCancel: props.onCancelConnecting })) : view === 'local' ? (_jsx(LocalOnboardingView, { localOnboarding: props.localOnboarding, localProviderSource: props.localProviderSource, error: props.error, onBack: props.onBackFromLocal, onContinue: props.onContinueLocalLogin, onSwitchAccount: props.onSwitchAccount, onTestConnectivity: props.onTestLocalConnectivity, onOpenSettings: props.onOpenLocalSettings, onClearError: props.onClearError })) : props.storedAccount ? (_jsx(AccountView, { storedAccount: props.storedAccount, hasRestorableSession: props.hasRestorableSession, onContinueStoredAccount: props.onContinueStoredAccount, onSwitchAccount: props.onSwitchAccount, error: props.error, onClearError: props.onClearError })) : (_jsx(ProviderSelectionView, { providers: props.providers, error: props.error, localLoginStatus: props.localLoginStatus, onConnect: props.onConnect, onAddProvider: props.onAddProvider, onClearError: props.onClearError, brand: props.brand, capabilities: props.capabilities })) }) }));
|
|
17
21
|
}
|
|
18
22
|
function StorageConflictView({ storedAccount, storageConflict, onDismiss, onOpenCurrentSpacePodSetup, }) {
|
|
19
23
|
const accountName = storedAccount?.displayName || '当前账号';
|
|
@@ -89,6 +93,7 @@ function ConnectingView({ authWindowStatus, connectingProvider, onCancel, }) {
|
|
|
89
93
|
}
|
|
90
94
|
// ── LocalOnboardingView ──────────────────────────────────────────────
|
|
91
95
|
function LocalOnboardingView({ localOnboarding, localProviderSource, error, onBack, onContinue, onSwitchAccount, onTestConnectivity, onOpenSettings, onClearError, }) {
|
|
96
|
+
const productName = useLoginProductName();
|
|
92
97
|
const snapshot = localOnboarding;
|
|
93
98
|
const autoProbeKeyRef = useRef(null);
|
|
94
99
|
const isStandalone = localProviderSource === 'standalone';
|
|
@@ -132,7 +137,7 @@ function LocalOnboardingView({ localOnboarding, localProviderSource, error, onBa
|
|
|
132
137
|
snapshot?.publicUrl,
|
|
133
138
|
snapshot?.spaceKind,
|
|
134
139
|
]);
|
|
135
|
-
return (_jsxs("div", { className: "flex-1 flex flex-col h-full", children: [_jsxs("div", { className: "px-5 pt-5 pb-3 shrink-0 flex items-center gap-2", children: [_jsxs("button", { onClick: onBack, className: "-ml-1.5 inline-flex h-8 items-center gap-1.5 rounded-lg px-2 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors cursor-pointer", "aria-label": "\u8FD4\u56DE\u7A7A\u95F4\u9009\u62E9", children: [_jsx(ArrowLeft, { className: "w-4 h-4" }), "\u8FD4\u56DE"] }), _jsx("h2", { className: "text-lg font-semibold text-foreground", children: productLabel })] }), _jsx(ErrorBanner, { error: error, onClearError: onClearError }), _jsx("div", { className: "flex-1 min-h-0 overflow-y-auto px-5 py-2", children: _jsxs("div", { className: "flex min-h-full flex-col justify-center gap-4", children: [(isPendingStart || isStarting) && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-center", children: [_jsx(Loader2, { className: "w-6 h-6 text-primary animate-spin" }), _jsxs("p", { className: "text-sm font-medium text-foreground", children: ["\u6B63\u5728\u51C6\u5907", productLabel] }), _jsx("p", { className: "max-w-[18rem] text-xs leading-5 text-muted-foreground", children: progressDetail })] })), isReady && (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-sm font-medium text-foreground text-center", children: isLocalNetworkBlocked ? '本机空间入口异常' : `${productLabel} 已准备好` }), isLocalNetworkBlocked ? (_jsx("p", { className: "text-xs text-muted-foreground leading-relaxed text-center", children: formatLocalStatusMessageForUser(connectivity?.message, '本机入口不可达。请确认本机空间已启动后重试。') })) : null, isStandalone ? (_jsx(RouteInfoCard, { title: "\u672C\u673A\u5165\u53E3", value: localUrl })) : null, !isStandalone ? (_jsx(LocalReachabilitySummary, { connectivity: connectivity, assumeLocalReachable: true })) : null, _jsx("button", { onClick: onContinue, className: "w-full h-10 rounded-xl bg-primary text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors cursor-pointer", children: isLocalNetworkBlocked ? '重新检测' : '继续登录' })] })), (isRepair || isError) && (_jsx(LocalUnavailableRecovery, { canOpenSettings: Boolean(snapshot?.canOpenSettings), canRetry: Boolean(snapshot?.canRetry), onRetry: onContinue, onOpenSettings: onOpenSettings ?? (() => undefined), onSwitchAccount: onSwitchAccount }))] }) }), _jsx("div", { className: "px-5 pb-5 shrink-0" }), _jsx(Footer, {})] }));
|
|
140
|
+
return (_jsxs("div", { className: "flex-1 flex flex-col h-full", children: [_jsxs("div", { className: "px-5 pt-5 pb-3 shrink-0 flex items-center gap-2", children: [_jsxs("button", { onClick: onBack, className: "-ml-1.5 inline-flex h-8 items-center gap-1.5 rounded-lg px-2 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors cursor-pointer", "aria-label": "\u8FD4\u56DE\u7A7A\u95F4\u9009\u62E9", children: [_jsx(ArrowLeft, { className: "w-4 h-4" }), "\u8FD4\u56DE"] }), _jsx("h2", { className: "text-lg font-semibold text-foreground", children: productLabel })] }), _jsx(ErrorBanner, { error: error, onClearError: onClearError }), _jsx("div", { className: "flex-1 min-h-0 overflow-y-auto px-5 py-2", children: _jsxs("div", { className: "flex min-h-full flex-col justify-center gap-4", children: [(isPendingStart || isStarting) && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-center", children: [_jsx(Loader2, { className: "w-6 h-6 text-primary animate-spin" }), _jsxs("p", { className: "text-sm font-medium text-foreground", children: ["\u6B63\u5728\u51C6\u5907", productLabel] }), _jsx("p", { className: "max-w-[18rem] text-xs leading-5 text-muted-foreground", children: progressDetail })] })), isReady && (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-sm font-medium text-foreground text-center", children: isLocalNetworkBlocked ? '本机空间入口异常' : `${productLabel} 已准备好` }), isLocalNetworkBlocked ? (_jsx("p", { className: "text-xs text-muted-foreground leading-relaxed text-center", children: formatLocalStatusMessageForUser(connectivity?.message, '本机入口不可达。请确认本机空间已启动后重试。', productName) })) : null, isStandalone ? (_jsx(RouteInfoCard, { title: "\u672C\u673A\u5165\u53E3", value: localUrl })) : null, !isStandalone ? (_jsx(LocalReachabilitySummary, { connectivity: connectivity, assumeLocalReachable: true })) : null, _jsx("button", { onClick: onContinue, className: "w-full h-10 rounded-xl bg-primary text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors cursor-pointer", children: isLocalNetworkBlocked ? '重新检测' : '继续登录' })] })), (isRepair || isError) && (_jsx(LocalUnavailableRecovery, { canOpenSettings: Boolean(snapshot?.canOpenSettings), canRetry: Boolean(snapshot?.canRetry), onRetry: onContinue, onOpenSettings: onOpenSettings ?? (() => undefined), onSwitchAccount: onSwitchAccount }))] }) }), _jsx("div", { className: "px-5 pb-5 shrink-0" }), _jsx(Footer, {})] }));
|
|
136
141
|
}
|
|
137
142
|
function RouteInfoCard({ title, value, action, }) {
|
|
138
143
|
return (_jsxs("div", { className: "rounded-2xl border border-border/60 bg-muted/25 p-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("p", { className: "text-[11px] font-medium tracking-wide text-muted-foreground/70", children: title }), action] }), _jsx("p", { className: "mt-2 break-all font-mono text-[11px] leading-5 text-foreground", children: value ?? '正在获取入口' })] }));
|
|
@@ -163,8 +168,8 @@ function getLocalPreparationDetail(state, progressPhase) {
|
|
|
163
168
|
return '正在准备登录授权';
|
|
164
169
|
return '正在启动本机服务';
|
|
165
170
|
}
|
|
166
|
-
function formatLocalStatusMessageForUser(value, fallback) {
|
|
167
|
-
return formatLoginErrorForUser(value, fallback);
|
|
171
|
+
function formatLocalStatusMessageForUser(value, fallback, productName) {
|
|
172
|
+
return formatLoginErrorForUser(value, fallback, { productName });
|
|
168
173
|
}
|
|
169
174
|
function formatProviderLabelForUser(value) {
|
|
170
175
|
if (value === 'Cloud')
|
|
@@ -176,9 +181,10 @@ function formatProviderLabelForUser(value) {
|
|
|
176
181
|
return value ?? '所选空间';
|
|
177
182
|
}
|
|
178
183
|
function ErrorBanner({ error, onClearError }) {
|
|
184
|
+
const productName = useLoginProductName();
|
|
179
185
|
if (!error)
|
|
180
186
|
return null;
|
|
181
|
-
const message = formatLoginErrorForUser(error, '操作失败,请返回上一步后重试。');
|
|
187
|
+
const message = formatLoginErrorForUser(error, '操作失败,请返回上一步后重试。', { productName });
|
|
182
188
|
return (_jsxs("div", { className: "mx-4 mb-3 px-3 py-2 bg-destructive/10 rounded-lg flex items-start gap-2 shrink-0", children: [_jsx(AlertCircle, { className: "w-3.5 h-3.5 text-destructive mt-0.5 shrink-0" }), _jsx("p", { className: "text-xs text-destructive flex-1 leading-relaxed", children: message }), _jsx("button", { onClick: onClearError, className: "text-destructive/60 hover:text-destructive shrink-0 cursor-pointer", "aria-label": "\u5173\u95ED\u9519\u8BEF\u63D0\u793A", children: _jsx(X, { className: "w-3.5 h-3.5" }) })] }));
|
|
183
189
|
}
|
|
184
190
|
function Footer() {
|
|
@@ -9,7 +9,7 @@ export interface LoginViewActions {
|
|
|
9
9
|
dismissError: () => void;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Shared authentication presentation, driven by the host that renders it.
|
|
13
13
|
*
|
|
14
14
|
* `error` is idle-context copy, not a fifth product phase. Session creation,
|
|
15
15
|
* restoration and Account/WebID composition belong to the host.
|
|
@@ -64,9 +64,15 @@ export interface StorageConflict {
|
|
|
64
64
|
export interface LoginModalHostProps {
|
|
65
65
|
/** Presentational seam only; hosts supply their own product brand. */
|
|
66
66
|
brand?: ReactNode;
|
|
67
|
+
/**
|
|
68
|
+
* The name this host's product is shown under, used in user-facing text such
|
|
69
|
+
* as an error that asks the user to restart the application. Shared components
|
|
70
|
+
* do not assume one: leaving it out renders the neutral default.
|
|
71
|
+
*/
|
|
72
|
+
productName?: string;
|
|
67
73
|
/** Accessible dialog label for the login surface. */
|
|
68
74
|
ariaLabel?: string;
|
|
69
|
-
/** Optional affordances. Omitted values preserve the complete
|
|
75
|
+
/** Optional affordances. Omitted values preserve the complete source UI. */
|
|
70
76
|
capabilities?: {
|
|
71
77
|
storageSelection?: boolean;
|
|
72
78
|
additionalProviders?: boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
import { DEFAULT_PRODUCT_NAME } from '../user-facing-errors.js';
|
|
4
|
+
/**
|
|
5
|
+
* The name the host's product is shown under, for the shared login surface.
|
|
6
|
+
*
|
|
7
|
+
* The login components are shared, so none of them may assume a product name:
|
|
8
|
+
* this carries the host's choice to the few places that mention the product in
|
|
9
|
+
* user-facing text - an error that asks the user to restart the application, for
|
|
10
|
+
* instance - without threading a prop through every nested view.
|
|
11
|
+
*/
|
|
12
|
+
const LoginProductNameContext = createContext(DEFAULT_PRODUCT_NAME);
|
|
13
|
+
export function LoginProductNameProvider({ productName, children, }) {
|
|
14
|
+
return (_jsx(LoginProductNameContext.Provider, { value: productName?.trim() || DEFAULT_PRODUCT_NAME, children: children }));
|
|
15
|
+
}
|
|
16
|
+
export function useLoginProductName() {
|
|
17
|
+
return useContext(LoginProductNameContext);
|
|
18
|
+
}
|
|
@@ -1,2 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Product name used in user-facing text when the caller supplies none.
|
|
3
|
+
*
|
|
4
|
+
* These components are shared, so they must not assert a product identity: a
|
|
5
|
+
* host passes its own name in, and the fallback stays neutral enough to read
|
|
6
|
+
* correctly for any of them.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_PRODUCT_NAME = "\u5E94\u7528";
|
|
9
|
+
export interface UserFacingErrorOptions {
|
|
10
|
+
/** The name the host's product is shown under. */
|
|
11
|
+
productName?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function formatErrorForUser(error: unknown, fallback?: string, options?: UserFacingErrorOptions): string;
|
|
14
|
+
export declare function createUserFacingError(error: unknown, fallback: string, options?: UserFacingErrorOptions): Error;
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
const INTERNAL_ERROR_PATTERN = /\b(provisionCode|providerCode|canonical|OIDC|openid-configuration|issuer|provider|storageProvider|publicUrl|baseUrl|spDomain|idpUrl|WebID|solid:storage|profile|dashboard|findById|IRI|HTTP\s+\d{3}|Cannot find module|node_modules|jsonld|componentsjs|cloudflared|Cloudflare Tunnel|container|root container|database|query failed|resource id|BadRequestHttpError|H400|xpod|runtime|Application Support|localhost|CSS_[A-Z_]+|XPOD_[A-Z_]+|Pod|podUrl|Solid|RDF|row\.id|row id|subject|Agent|Secretary|authenticated fetch|client_secret|client_id|access_token|refresh_token|threadId|chatId|messageId|workspaceUri|nodeId)\b/i;
|
|
2
2
|
const STACK_OR_PATH_PATTERN = /(?:\/Users\/|\\Users\\|\.tsx?:\d+|\.jsx?:\d+|Require stack|at\s+\w+[\w.]*\s*\()/i;
|
|
3
3
|
const RAW_ADDRESS_PATTERN = /(?:https?:\/\/|file:\/\/|127\.0\.0\.1|0\.0\.0\.0|\[::1\])/i;
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Product name used in user-facing text when the caller supplies none.
|
|
6
|
+
*
|
|
7
|
+
* These components are shared, so they must not assert a product identity: a
|
|
8
|
+
* host passes its own name in, and the fallback stays neutral enough to read
|
|
9
|
+
* correctly for any of them.
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_PRODUCT_NAME = '应用';
|
|
12
|
+
export function formatErrorForUser(error, fallback = '操作失败,请重试。', options = {}) {
|
|
13
|
+
const productName = options.productName?.trim() || DEFAULT_PRODUCT_NAME;
|
|
5
14
|
const raw = extractErrorMessage(error);
|
|
6
15
|
if (!raw) {
|
|
7
16
|
return fallback;
|
|
@@ -9,7 +18,7 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
|
|
|
9
18
|
const message = safeDecodeURIComponent(raw).trim();
|
|
10
19
|
const normalized = message.toLowerCase();
|
|
11
20
|
if (/email_unverified|verify_required/.test(normalized)) {
|
|
12
|
-
return
|
|
21
|
+
return `请先验证邮箱。打开注册邮箱里的验证邮件后,再回到 ${productName} 重试。`;
|
|
13
22
|
}
|
|
14
23
|
if (/login_required|interaction_required|consent_required|account_selection_required/.test(normalized)) {
|
|
15
24
|
return '需要重新确认登录。请在弹出的登录窗口完成授权。';
|
|
@@ -51,7 +60,7 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
|
|
|
51
60
|
return '当前空间还没有创建完成。请回到空间选择页,重新进入后按提示创建。';
|
|
52
61
|
}
|
|
53
62
|
if (/selected sp pod url|current sp pod url|pod url was not applied|unable to resolve current pod url|cannot .* pod record|outside the current sp|pod 地址无效|pod 不属于当前选择的空间|当前空间没有声明可写入的 pod/.test(normalized)) {
|
|
54
|
-
return
|
|
63
|
+
return `${productName} 还不能把数据保存到当前空间。请换一个空间;如果这是本地空间,请先完成空间创建。`;
|
|
55
64
|
}
|
|
56
65
|
if (/webid does not belong to this account|does not belong to this account/.test(normalized)) {
|
|
57
66
|
return '账号和当前空间不匹配。请返回空间选择页,换账号或换空间。';
|
|
@@ -60,7 +69,7 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
|
|
|
60
69
|
return '空间准备超时。请检查网络,或返回空间选择页重试。';
|
|
61
70
|
}
|
|
62
71
|
if (/pod write failed|write failed|read failed|solid database is missing authenticated fetch|agent resource id must|agent home|ai secretary|secretary.*初始化失败|created ai secretary.*missing id|secretary chat row|secretary thread row/.test(normalized)) {
|
|
63
|
-
return
|
|
72
|
+
return `${productName} 还不能在当前空间保存数据。请返回空间选择页,换一个空间后重试。`;
|
|
64
73
|
}
|
|
65
74
|
if (/pod creation endpoint not found/.test(normalized)) {
|
|
66
75
|
return '当前空间暂时不能创建。请返回空间选择页,确认选择正确后再试。';
|
|
@@ -99,34 +108,34 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
|
|
|
99
108
|
return '本地工作区还没有配置完成。请在设置里检查本地空间后重试。';
|
|
100
109
|
}
|
|
101
110
|
if (/database not connected|solid database is not ready|database is not ready|数据库未就绪|not ready/.test(normalized)) {
|
|
102
|
-
return
|
|
111
|
+
return `${productName} 还不能在当前空间保存数据。请稍后重试;如果仍失败,请换一个空间重新登录。`;
|
|
103
112
|
}
|
|
104
113
|
if (/(?:chat|thread|message).*not found|no chat found|cannot find pod message|failed to resolve (?:chat|thread|message)|(?:chat|thread|message).*missing id|row is missing id/.test(normalized)) {
|
|
105
114
|
return '当前内容还没有准备好。请刷新页面后重试。';
|
|
106
115
|
}
|
|
107
116
|
if (/findbyid requires|base-relative|full iris/.test(normalized)) {
|
|
108
|
-
return
|
|
117
|
+
return `${productName} 初始化失败。请刷新页面;如果仍失败,请换一个空间重新登录。`;
|
|
109
118
|
}
|
|
110
119
|
if (/unable to install @undefineds\.co\/xpod|unable to prepare xpod runtime/.test(normalized)) {
|
|
111
120
|
return '本地空间组件下载失败。请检查网络后重试。';
|
|
112
121
|
}
|
|
113
122
|
if (/unable to locate xpod|unable to determine exact @undefineds\.co\/xpod version/.test(normalized)) {
|
|
114
|
-
return
|
|
123
|
+
return `本地空间启动文件损坏。请重启 ${productName} 让它自动修复;如果仍失败,请打开本地空间设置修复。`;
|
|
115
124
|
}
|
|
116
125
|
if (/missing required local login\/startup capabilities|scoped webid|scoped pickwebid|scoped picker|escaped recursive css runtime/.test(normalized)) {
|
|
117
|
-
return
|
|
126
|
+
return `本地空间版本过旧。请重启 ${productName} 让它自动更新;如果仍失败,请打开本地空间设置修复。`;
|
|
118
127
|
}
|
|
119
128
|
if (/local 服务在完成启动前已退出|exceeded max restarts|failed to start xpod/.test(normalized)) {
|
|
120
|
-
return
|
|
129
|
+
return `本地空间启动失败。请点“重新检查”;如果仍失败,请重启 ${productName}。`;
|
|
121
130
|
}
|
|
122
131
|
if (/等待 local 服务就绪超时|local.*启动超时/.test(normalized)) {
|
|
123
|
-
return
|
|
132
|
+
return `本地空间启动超时。请点“重新检查”;如果仍失败,请重启 ${productName}。`;
|
|
124
133
|
}
|
|
125
134
|
if (/cannot find module|invalid resource iri|jsonld|componentsjs|application support|require stack/.test(normalized)) {
|
|
126
|
-
return
|
|
135
|
+
return `本地空间启动文件损坏。请重启 ${productName} 让它自动修复;如果仍失败,请打开本地空间设置修复。`;
|
|
127
136
|
}
|
|
128
137
|
if (/spawn bun enoent|本地运行环境|node\/npm|npm|bun/.test(normalized)) {
|
|
129
|
-
return
|
|
138
|
+
return `本机缺少本地空间运行环境。请检查网络后重试,${productName} 会自动安装需要的组件。`;
|
|
130
139
|
}
|
|
131
140
|
if (/spacekind must|configuredspacekind|requestedspacekind/.test(normalized)) {
|
|
132
141
|
return '当前页面和已启动的空间不一致。请回到空间选择页重新进入。';
|
|
@@ -137,14 +146,14 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
|
|
|
137
146
|
if (isInternalDiagnostic(message)) {
|
|
138
147
|
return fallback;
|
|
139
148
|
}
|
|
140
|
-
const productMessage = localizeProductTerms(message);
|
|
149
|
+
const productMessage = localizeProductTerms(message, productName);
|
|
141
150
|
if (isSafeUserMessage(productMessage)) {
|
|
142
151
|
return productMessage;
|
|
143
152
|
}
|
|
144
153
|
return fallback;
|
|
145
154
|
}
|
|
146
|
-
export function createUserFacingError(error, fallback) {
|
|
147
|
-
const userMessage = formatErrorForUser(error, fallback);
|
|
155
|
+
export function createUserFacingError(error, fallback, options = {}) {
|
|
156
|
+
const userMessage = formatErrorForUser(error, fallback, options);
|
|
148
157
|
return new Error(userMessage);
|
|
149
158
|
}
|
|
150
159
|
function extractErrorMessage(error) {
|
|
@@ -182,10 +191,10 @@ function isSafeUserMessage(message) {
|
|
|
182
191
|
function isInternalDiagnostic(message) {
|
|
183
192
|
return INTERNAL_ERROR_PATTERN.test(message) || STACK_OR_PATH_PATTERN.test(message) || RAW_ADDRESS_PATTERN.test(message);
|
|
184
193
|
}
|
|
185
|
-
function localizeProductTerms(message) {
|
|
194
|
+
function localizeProductTerms(message, productName) {
|
|
186
195
|
return message
|
|
187
196
|
.replace(/Cloud-managed canonical URL/gi, '自动分配登录地址')
|
|
188
|
-
.replace(/Cloud provisioning/gi,
|
|
197
|
+
.replace(/Cloud provisioning/gi, `${productName}`)
|
|
189
198
|
.replace(/\bCloud\s+账号/g, '云端账号')
|
|
190
199
|
.replace(/\bCloud\s+身份/g, '云端账号')
|
|
191
200
|
.replace(/\bCloud\b/g, '云端')
|
|
@@ -63,10 +63,10 @@ export declare const useLoginStore: import("zustand").UseBoundStore<Omit<StoreAp
|
|
|
63
63
|
};
|
|
64
64
|
}>;
|
|
65
65
|
/**
|
|
66
|
-
* Creates the
|
|
66
|
+
* Creates the shared login store for a host-owned lifetime.
|
|
67
67
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
68
|
+
* The only host adaptation: callers may isolate the two persisted keys or opt out
|
|
69
|
+
* of persistence without changing the shared state machine.
|
|
70
70
|
*/
|
|
71
71
|
export declare function createLoginStore(options?: LoginStoreOptions): LoginStoreApi;
|
|
72
72
|
export declare const DEFAULT_PROVIDERS: ProviderOption[];
|
|
@@ -183,10 +183,10 @@ function createLoginPersistOptions(storage, name) {
|
|
|
183
183
|
const defaultPersistStorage = getBrowserStorage() ?? createMemoryStorage();
|
|
184
184
|
export const useLoginStore = create()(persist(createLoginState(persistRememberedAccount), createLoginPersistOptions(defaultPersistStorage, LOGIN_STORE_KEY)));
|
|
185
185
|
/**
|
|
186
|
-
* Creates the
|
|
186
|
+
* Creates the shared login store for a host-owned lifetime.
|
|
187
187
|
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
188
|
+
* The only host adaptation: callers may isolate the two persisted keys or opt out
|
|
189
|
+
* of persistence without changing the shared state machine.
|
|
190
190
|
*/
|
|
191
191
|
export function createLoginStore(options = {}) {
|
|
192
192
|
const rememberedStorage = options.storage === undefined ? getBrowserStorage() : options.storage;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@undefineds.co/xpod",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.13",
|
|
4
4
|
"description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
|
|
5
5
|
"repository": "https://github.com/undefinedsco/xpod",
|
|
6
6
|
"author": "developer@undefineds.co",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"build": "bun run build:packages && bun run build:ts && bun run build:components && bun run build:ui",
|
|
68
|
-
"build:packages": "bun run --filter '@undefineds.co/solid-sdk' build && bun run --filter '@undefineds.co/shared-ui' build && bun run --filter '@undefineds.co/pod-collections' build && bun run --filter '@undefineds.co/extension-sdk' build && bun run --filter '@undefineds.co/ai-connections' build",
|
|
68
|
+
"build:packages": "bun run --filter '@undefineds.co/solid-sdk' build && bun run --filter '@undefineds.co/shared-ui' build && bun run --filter '@undefineds.co/pod-collections' build && bun run --filter '@undefineds.co/extension-sdk' build && bun run --filter '@undefineds.co/ai-connections-core' build && bun run --filter '@undefineds.co/ai-connections' build",
|
|
69
69
|
"test:packages": "bun run --filter './packages/*' test",
|
|
70
70
|
"build:ts": "tsc",
|
|
71
71
|
"build:components": "componentsjs-generator -s src -c dist/components -r undefineds -i config/components-ignore.json",
|
|
@@ -351,6 +351,7 @@
|
|
|
351
351
|
"@undefineds.co/drizzle-solid": "file:./node_modules/@undefineds.co/drizzle-solid",
|
|
352
352
|
"@undefineds.co/extensions": "file:./node_modules/@undefineds.co/extensions",
|
|
353
353
|
"@undefineds.co/ai-connections": "file:./node_modules/@undefineds.co/ai-connections",
|
|
354
|
+
"@undefineds.co/ai-connections-core": "file:./node_modules/@undefineds.co/ai-connections-core",
|
|
354
355
|
"@undefineds.co/extension-sdk": "file:./node_modules/@undefineds.co/extension-sdk",
|
|
355
356
|
"@undefineds.co/pod-collections": "file:./node_modules/@undefineds.co/pod-collections",
|
|
356
357
|
"@undefineds.co/shared-ui": "file:./node_modules/@undefineds.co/shared-ui",
|
|
@@ -383,7 +384,7 @@
|
|
|
383
384
|
}
|
|
384
385
|
},
|
|
385
386
|
"optionalDependencies": {
|
|
386
|
-
"@undefineds.co/xpod-darwin-arm64": "0.4.
|
|
387
|
+
"@undefineds.co/xpod-darwin-arm64": "0.4.13"
|
|
387
388
|
},
|
|
388
389
|
"resolutions": {
|
|
389
390
|
"@inrupt/solid-client-authn-browser": "^3.1.1",
|
|
@@ -408,6 +409,7 @@
|
|
|
408
409
|
"@undefineds.co/drizzle-solid",
|
|
409
410
|
"@undefineds.co/extensions",
|
|
410
411
|
"@undefineds.co/ai-connections",
|
|
412
|
+
"@undefineds.co/ai-connections-core",
|
|
411
413
|
"@undefineds.co/extension-sdk",
|
|
412
414
|
"@undefineds.co/pod-collections",
|
|
413
415
|
"@undefineds.co/shared-ui",
|