@anymux/connect 0.1.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/GitBrowser-BLgTNQyd.js +905 -0
- package/dist/GitBrowser-BLgTNQyd.js.map +1 -0
- package/dist/GitBrowser-CIyWiuX-.js +3 -0
- package/dist/ObjectStorageBrowser-B2YkUxMl.js +3 -0
- package/dist/ObjectStorageBrowser-B_25Emfu.js +267 -0
- package/dist/ObjectStorageBrowser-B_25Emfu.js.map +1 -0
- package/dist/RepoPicker-BprFGOn7.js +3 -0
- package/dist/RepoPicker-CoHMiJ-3.js +168 -0
- package/dist/RepoPicker-CoHMiJ-3.js.map +1 -0
- package/dist/index.d.ts +697 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2539 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +2 -0
- package/dist/registry.js +3 -0
- package/dist/scope-labels-B4VAwoL6.js +582 -0
- package/dist/scope-labels-B4VAwoL6.js.map +1 -0
- package/dist/scope-labels-DvdJLcSL.d.ts +50 -0
- package/dist/scope-labels-DvdJLcSL.d.ts.map +1 -0
- package/package.json +87 -0
- package/src/adapters/adapter-registry.ts +177 -0
- package/src/auth/auth-client.ts +101 -0
- package/src/auth/token-manager.ts +27 -0
- package/src/components/ActionHistoryPanel.tsx +137 -0
- package/src/components/CapabilityCell.tsx +97 -0
- package/src/components/CapabilityError.tsx +50 -0
- package/src/components/CapabilityPanel.tsx +530 -0
- package/src/components/CapabilityPill.tsx +56 -0
- package/src/components/ConnectButton.tsx +149 -0
- package/src/components/ConnectedMenu.tsx +142 -0
- package/src/components/ConnectionStatus.tsx +28 -0
- package/src/components/CredentialForm.tsx +246 -0
- package/src/components/FullScreenBrowser.tsx +84 -0
- package/src/components/GitBrowser.tsx +705 -0
- package/src/components/GitHubRepoPicker.tsx +125 -0
- package/src/components/ObjectStorageBrowser.tsx +176 -0
- package/src/components/RepoPicker.tsx +93 -0
- package/src/components/ServiceCard.tsx +77 -0
- package/src/components/ServiceCardGrid.tsx +141 -0
- package/src/components/ServiceDashboard.tsx +84 -0
- package/src/components/ServiceIcon.tsx +37 -0
- package/src/components/ServiceRow.tsx +50 -0
- package/src/components/useAdapter.ts +33 -0
- package/src/demos/ServiceDashboardDemo.tsx +108 -0
- package/src/index.ts +68 -0
- package/src/models/ActionNotificationModel.ts +72 -0
- package/src/models/ConnectionManagerModel.ts +410 -0
- package/src/models/CredentialFormModel.ts +111 -0
- package/src/models/DashboardModel.ts +157 -0
- package/src/models/GitHostBrowserModel.ts +89 -0
- package/src/models/GitRepoBrowserModel.ts +285 -0
- package/src/models/ObjectStorageBrowserModel.ts +131 -0
- package/src/models/RepoPickerModel.ts +132 -0
- package/src/registry/service-registry.ts +46 -0
- package/src/registry/services/apple.ts +22 -0
- package/src/registry/services/bitbucket.ts +24 -0
- package/src/registry/services/box.ts +22 -0
- package/src/registry/services/browser-fs.ts +19 -0
- package/src/registry/services/dropbox.ts +22 -0
- package/src/registry/services/flickr.ts +22 -0
- package/src/registry/services/gitea.ts +24 -0
- package/src/registry/services/github.ts +24 -0
- package/src/registry/services/gitlab.ts +24 -0
- package/src/registry/services/google.ts +24 -0
- package/src/registry/services/icloud.ts +23 -0
- package/src/registry/services/indexeddb.ts +19 -0
- package/src/registry/services/instagram.ts +22 -0
- package/src/registry/services/microsoft.ts +24 -0
- package/src/registry/services/s3.ts +21 -0
- package/src/registry/services/webdav.ts +21 -0
- package/src/registry.ts +4 -0
- package/src/types/connection-state.ts +33 -0
- package/src/types/connection.ts +11 -0
- package/src/types/optional-deps.d.ts +149 -0
- package/src/types/service.ts +18 -0
- package/src/types/user-profile.ts +21 -0
- package/src/utils/action-toast.ts +53 -0
- package/src/utils/scope-labels.ts +91 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RepoPicker-CoHMiJ-3.js","names":["serviceId: string","accessToken: string","data: RepoInfo[]","value: string","token: string","data: Array<{ full_name: string; description: string | null; language: string | null; private: boolean }>","data: Array<{ path_with_namespace: string; description: string | null; visibility: string }>","data: { values: Array<{ full_name: string; description: string; language: string; is_private: boolean }> }","headers: HeadersInit","url: string","data: Array<{ full_name: string; description: string; language: string; private: boolean }>","RepoPicker: React.FC<RepoPickerProps>"],"sources":["../src/models/RepoPickerModel.ts","../src/components/RepoPicker.tsx"],"sourcesContent":["import { makeAutoObservable, flow, computed } from 'mobx';\nimport { match } from 'ts-pattern';\n\nexport interface RepoInfo {\n fullName: string;\n description: string | null;\n language: string | null;\n isPrivate: boolean;\n}\n\nexport class RepoPickerModel {\n serviceId: string;\n accessToken: string;\n\n repos: RepoInfo[] = [];\n loading = true;\n error: string | null = null;\n search = '';\n\n constructor(serviceId: string, accessToken: string) {\n this.serviceId = serviceId;\n this.accessToken = accessToken;\n makeAutoObservable(this, {});\n }\n\n get filtered(): RepoInfo[] {\n const q = this.search.toLowerCase();\n if (!q) return this.repos;\n return this.repos.filter((r) => r.fullName.toLowerCase().includes(q));\n }\n\n setSearch(value: string) {\n this.search = value;\n }\n\n loadRepos = flow(function* loadRepos(this: RepoPickerModel) {\n this.loading = true;\n this.error = null;\n try {\n const data: RepoInfo[] = yield fetchRepos(this.serviceId, this.accessToken);\n this.repos = data;\n } catch (err) {\n this.error = err instanceof Error ? err.message : 'Failed to fetch repos';\n } finally {\n this.loading = false;\n }\n });\n}\n\n// --- Fetch helpers ---\n\nasync function fetchRepos(serviceId: string, token: string): Promise<RepoInfo[]> {\n return match(serviceId)\n .with('github', () => fetchGitHubRepos(token))\n .with('gitlab', () => fetchGitLabRepos(token))\n .with('bitbucket', () => fetchBitbucketRepos(token))\n .with('gitea', () => fetchGiteaRepos(token))\n .otherwise(() => { throw new Error(`Repo picker not supported for: ${serviceId}`); });\n}\n\nasync function fetchGitHubRepos(token: string): Promise<RepoInfo[]> {\n const res = await fetch('https://api.github.com/user/repos?sort=updated&per_page=50', {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) throw new Error(`GitHub API error: ${res.status}`);\n const data: Array<{ full_name: string; description: string | null; language: string | null; private: boolean }> = await res.json();\n return data.map((r) => ({\n fullName: r.full_name,\n description: r.description,\n language: r.language,\n isPrivate: r.private,\n }));\n}\n\nasync function fetchGitLabRepos(token: string): Promise<RepoInfo[]> {\n const res = await fetch('https://gitlab.com/api/v4/projects?membership=true&order_by=updated_at&per_page=50', {\n headers: { 'PRIVATE-TOKEN': token },\n });\n if (!res.ok) throw new Error(`GitLab API error: ${res.status}`);\n const data: Array<{ path_with_namespace: string; description: string | null; visibility: string }> = await res.json();\n return data.map((r) => ({\n fullName: r.path_with_namespace,\n description: r.description,\n language: null,\n isPrivate: r.visibility === 'private',\n }));\n}\n\nasync function fetchBitbucketRepos(token: string): Promise<RepoInfo[]> {\n const res = await fetch('https://api.bitbucket.org/2.0/repositories?role=member&pagelen=50', {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) throw new Error(`Bitbucket API error: ${res.status}`);\n const data: { values: Array<{ full_name: string; description: string; language: string; is_private: boolean }> } = await res.json();\n return data.values.map((r) => ({\n fullName: r.full_name,\n description: r.description || null,\n language: r.language || null,\n isPrivate: r.is_private,\n }));\n}\n\nasync function fetchGiteaRepos(token: string): Promise<RepoInfo[]> {\n const creds = JSON.parse(token);\n const headers: HeadersInit = {\n 'Accept': 'application/json',\n };\n // Use token auth if available, otherwise Basic auth\n if (creds.token) {\n headers['Authorization'] = `token ${creds.token}`;\n } else if (creds.username && creds.password) {\n headers['Authorization'] = 'Basic ' + btoa(`${creds.username}:${creds.password}`);\n }\n // Route through CORS proxy when in browser\n const proxyUrl = typeof window !== 'undefined' ? window.location.origin : undefined;\n let url: string;\n if (proxyUrl) {\n url = `${proxyUrl}/api/gitea/api/v1/user/repos?limit=50`;\n headers['x-gitea-url'] = creds.url;\n } else {\n url = `${creds.url}/api/v1/user/repos?limit=50`;\n }\n const res = await fetch(url, { headers });\n if (!res.ok) throw new Error(`Gitea API error: ${res.status}`);\n const data: Array<{ full_name: string; description: string; language: string; private: boolean }> = await res.json();\n return data.map((r) => ({\n fullName: r.full_name,\n description: r.description || null,\n language: r.language || null,\n isPrivate: r.private,\n }));\n}\n","import React, { useState, useEffect } from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Search, Lock, Loader2, AlertCircle } from 'lucide-react';\nimport { RepoPickerModel } from '../models/RepoPickerModel';\n\ninterface RepoPickerProps {\n serviceId: string;\n accessToken: string;\n onSelectRepo: (repo: { owner: string; repo: string }) => void;\n}\n\nexport const RepoPicker: React.FC<RepoPickerProps> = observer(({ serviceId, accessToken, onSelectRepo }) => {\n const [model] = useState(() => new RepoPickerModel(serviceId, accessToken));\n\n useEffect(() => {\n model.loadRepos();\n }, [model]);\n\n if (model.loading) {\n return (\n <div className=\"flex items-center justify-center py-8 text-gray-400\">\n <Loader2 className=\"h-5 w-5 animate-spin mr-2\" />\n Loading repositories...\n </div>\n );\n }\n\n if (model.error) {\n return (\n <div className=\"flex items-center gap-2 justify-center py-8 text-sm text-red-600 dark:text-red-400\">\n <AlertCircle className=\"h-4 w-4\" />\n {model.error}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500\" />\n <input\n type=\"text\"\n placeholder=\"Search repositories...\"\n value={model.search}\n onChange={(e) => model.setSearch(e.target.value)}\n className=\"w-full rounded-md border border-gray-700 bg-gray-900 py-2 pl-9 pr-3 text-sm text-gray-200 placeholder-gray-500 focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500\"\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto rounded-md border border-gray-700\">\n {model.filtered.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-sm text-gray-500\">No repositories found</div>\n ) : (\n model.filtered.map((repo) => {\n const parts = repo.fullName.split('/');\n const owner = parts[0] ?? '';\n const name = parts[1] ?? '';\n return (\n <button\n key={repo.fullName}\n type=\"button\"\n onClick={() => onSelectRepo({ owner, repo: name })}\n className=\"flex w-full items-start gap-3 border-b border-gray-800 px-4 py-3 text-left hover:bg-gray-800/60 last:border-b-0 transition-colors\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-blue-400 truncate\" title={repo.fullName}>\n {repo.fullName}\n </span>\n {repo.isPrivate && (\n <Lock className=\"h-3 w-3 flex-shrink-0 text-gray-500\" />\n )}\n </div>\n {repo.description && (\n <p className=\"mt-0.5 text-xs text-gray-500 truncate\" title={repo.description}>\n {repo.description.length > 80\n ? `${repo.description.slice(0, 80)}...`\n : repo.description}\n </p>\n )}\n </div>\n {repo.language && (\n <span className=\"flex-shrink-0 rounded-full bg-gray-800 px-2 py-0.5 text-xs text-gray-400\">\n {repo.language}\n </span>\n )}\n </button>\n );\n })\n )}\n </div>\n </div>\n );\n});\n"],"mappings":"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"}
|