viba-cli 0.19.0 → 0.21.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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/fallback-build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/credentials/page/server-reference-manifest.json +4 -4
- package/.next/server/app/credentials/page.js.nft.json +1 -1
- package/.next/server/app/credentials/page_client-reference-manifest.js +1 -1
- package/.next/server/app/credentials.html +1 -1
- package/.next/server/app/credentials.rsc +3 -3
- package/.next/server/app/credentials.segments/_full.segment.rsc +3 -3
- package/.next/server/app/credentials.segments/_head.segment.rsc +1 -1
- package/.next/server/app/credentials.segments/_index.segment.rsc +2 -2
- package/.next/server/app/credentials.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/credentials.segments/credentials/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/credentials.segments/credentials.segment.rsc +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/new/page/server-reference-manifest.json +24 -24
- package/.next/server/app/new/page.js.nft.json +1 -1
- package/.next/server/app/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page/server-reference-manifest.json +24 -24
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/session/[sessionId]/page/server-reference-manifest.json +20 -20
- package/.next/server/app/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/server/app/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__c6a126af._.js +65 -1
- package/.next/server/chunks/[root-of-the-server]__c6a126af._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__213d5b40._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__213d5b40._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__d07cf0e3._.js → [root-of-the-server]__284fa850._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__d07cf0e3._.js.map → [root-of-the-server]__284fa850._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__319c1c59._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__319c1c59._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__352d2b3c._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3e7d3e82._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3e7d3e82._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__4a339c8f._.js → [root-of-the-server]__7f8cd2b9._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__4a339c8f._.js.map → [root-of-the-server]__7f8cd2b9._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__8169dd30._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0d6c1eaa._.js.map → [root-of-the-server]__8169dd30._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__9201693f._.js +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__465506fb._.js → [root-of-the-server]__d5706047._.js} +2 -2
- package/.next/server/chunks/ssr/{[root-of-the-server]__465506fb._.js.map → [root-of-the-server]__d5706047._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ee9c5185._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ee9c5185._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js +1 -1
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js +2 -2
- package/.next/server/chunks/ssr/src_components_GitRepoSelector_tsx_05c81afa._.js.map +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +43 -43
- package/.next/static/chunks/{3ccb056bb06defd9.css → 16f42a25676d2900.css} +1 -1
- package/.next/static/chunks/{6a155eddb97350ad.js → 1891e07f938de79e.js} +3 -3
- package/.next/static/chunks/{a1db4a7daf17246a.js → 32cdf7e667231c75.js} +1 -1
- package/.next/static/chunks/{23ea6e0c3ec36f45.js → 5f3a2db85aacc485.js} +2 -2
- package/.next/static/chunks/{abf75d4c9646daac.js → b453010d797f0f5c.js} +1 -1
- package/.next/static/chunks/c76f31165986fed7.js +1 -0
- package/.next/static/chunks/d8a68fb48b3718f5.js +3 -0
- package/package.json +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0d6c1eaa._.js +0 -3
- package/.next/static/chunks/5a698c283b43c75e.js +0 -1
- package/.next/static/chunks/9b14e927da55903f.js +0 -3
- /package/.next/static/{OvVVXN8N9S6UXr-F40y-W → a3AUzSUWZmXcIvA31ymCS}/_buildManifest.js +0 -0
- /package/.next/static/{OvVVXN8N9S6UXr-F40y-W → a3AUzSUWZmXcIvA31ymCS}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{OvVVXN8N9S6UXr-F40y-W → a3AUzSUWZmXcIvA31ymCS}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
module.exports=[33405,(a,b,c)=>{b.exports=a.x("child_process",()=>require("child_process"))},70722,(a,b,c)=>{b.exports=a.x("tty",()=>require("tty"))},24868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},46786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},37936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(11857)},13095,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
|
-
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},70798,a=>{"use strict";var b=a.i(24868),c=a.i(46786),d=a.i(14747);let e="viba-git-credentials",f=null,g=null,h=!1;function i(){return g?`Secure credential storage is unavailable: ${g}`:"Secure credential storage is unavailable in this runtime."}async function j(){return f||(f=a.A(45581).then(a=>a.default??a).catch(a=>(g=a instanceof Error?a.message:String(a),h||(h=!0,console.warn(`[credentials] ${i()}`)),null))),f}async function k(){let a=await j();if(!a)throw Error(i());return a}function l(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function m(a){return a.trim().replace(/\/$/,"")}function n(a){return`credential-${a}`}function o(a){return`credential-${a}`}function p(a){return a.keytarAccount||n(a.id)}function q(a){return"gitlab"===a.type?{id:a.id,type:"gitlab",username:a.username,serverUrl:a.serverUrl||"https://gitlab.com",createdAt:a.createdAt,updatedAt:a.updatedAt}:{id:a.id,type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt}}async function r(){let a=d.default.join(c.default.homedir(),".viba");return await b.default.mkdir(a,{recursive:!0}),d.default.join(a,"credentials.json")}function s(a,b){return!!a&&"object"==typeof a&&a.type===b&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&("gitlab"!==b||"string"==typeof a.serverUrl)}function t(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id.trim()&&("github"===a.type||"gitlab"===a.type)&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&(void 0===a.keytarAccount||"string"==typeof a.keytarAccount)&&("gitlab"!==a.type||"string"==typeof a.serverUrl)}async function u(a){let c=await r();await b.default.writeFile(c,JSON.stringify(a,null,2),"utf-8")}async function v(){let a=await r();try{let c=await b.default.readFile(a,"utf-8"),d=JSON.parse(c);if(Array.isArray(d))return d.filter(t);if(!d||"object"!=typeof d)return[];let e=[];if(s(d.github,"github")){let a=d.github;e.push({id:l(),type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("github")})}if(s(d.gitlab,"gitlab")){let a=d.gitlab;e.push({id:l(),type:"gitlab",username:a.username,serverUrl:a.serverUrl,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("gitlab")})}return e.length>0&&await u(e),e}catch(a){if(a?.code==="ENOENT")return[];return console.error("Failed to parse credentials metadata:",a),[]}}async function w(){return(await v()).map(q).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))}async function x(a){let b=(await v()).find(b=>b.id===a);return b?q(b):null}async function y(a){let b=(await v()).find(b=>b.id===a);if(!b)return null;let c=await j();return c?c.getPassword(e,p(b)):null}async function z(a){try{let b=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${a}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});if(!b.ok){if(401===b.status)return{valid:!1,error:"Invalid or expired GitHub token."};return{valid:!1,error:`GitHub API returned ${b.status}.`}}let c=await b.json(),d="string"==typeof c?.login?c.login:null;if(!d)return{valid:!1,error:"GitHub API response did not include a username."};return{valid:!0,username:d}}catch(a){return{valid:!1,error:`Failed to verify GitHub token: ${a.message}`}}}async function A(a,b){try{let c=m(a),d=await fetch(`${c}/api/v4/user`,{headers:{"PRIVATE-TOKEN":b}});if(!d.ok){if(401===d.status)return{valid:!1,error:"Invalid or expired GitLab token."};return{valid:!1,error:`GitLab API returned ${d.status}.`}}let e=await d.json(),f="string"==typeof e?.username?e.username:null;if(!f)return{valid:!1,error:"GitLab API response did not include a username."};return{valid:!0,username:f}}catch(a){return{valid:!1,error:`Failed to verify GitLab token: ${a.message}`}}}async function B(a){let b,c=a.trim();if(!c)return{success:!1,error:"GitHub token is required."};try{b=await k()}catch(a){return{success:!1,error:a.message}}let d=await z(c);if(!d.valid||!d.username)return{success:!1,error:d.error||"Failed to verify GitHub token."};let f=await v();if(f.find(a=>"github"===a.type&&a.username===d.username))return{success:!1,error:`A GitHub credential for ${d.username} already exists.`};let g=l(),h=new Date().toISOString(),i=n(g);await b.setPassword(e,i,c);let j={id:g,type:"github",username:d.username,createdAt:h,updatedAt:h,keytarAccount:i};return f.push(j),await u(f),{success:!0,credential:{id:j.id,type:"github",username:j.username,createdAt:j.createdAt,updatedAt:j.updatedAt}}}async function C(a,b){let c,d=m(a),f=b.trim();if(!d)return{success:!1,error:"GitLab server URL is required."};try{new URL(d)}catch{return{success:!1,error:"GitLab server URL must be a valid URL."}}if(!f)return{success:!1,error:"GitLab token is required."};try{c=await k()}catch(a){return{success:!1,error:a.message}}let g=await A(d,f);if(!g.valid||!g.username)return{success:!1,error:g.error||"Failed to verify GitLab token."};let h=await v();if(h.find(a=>"gitlab"===a.type&&a.username===g.username&&a.serverUrl===d))return{success:!1,error:`A GitLab credential for ${g.username} on ${d} already exists.`};let i=l(),j=new Date().toISOString(),o=n(i);await c.setPassword(e,o,f);let p={id:i,type:"gitlab",username:g.username,serverUrl:d,createdAt:j,updatedAt:j,keytarAccount:o};return h.push(p),await u(h),{success:!0,credential:{id:p.id,type:"gitlab",username:p.username,serverUrl:p.serverUrl||d,createdAt:p.createdAt,updatedAt:p.updatedAt}}}async function D(a){let b=await v(),c=b.findIndex(b=>b.id===a);if(-1===c)return{success:!1,error:"Credential not found."};let d=b[c];b.splice(c,1),await u(b);let f=await j();return f&&await f.deletePassword(e,p(d)),{success:!0}}a.s(["createGitHubCredential",()=>B,"createGitLabCredential",()=>C,"deleteCredential",()=>D,"getAllCredentials",()=>w,"getCredentialById",()=>x,"getCredentialToken",()=>y])},37359,a=>{"use strict";var b=a.i(37936),c=a.i(70798);async function d(){try{let a=await (0,c.getAllCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list credentials:",a),{success:!1,error:"Failed to load credentials."}}}async function e(a){let b=await (0,c.createGitHubCredential)(a);return b.success&&b.credential?{success:!0,credential:b.credential}:{success:!1,error:b.error||"Failed to save GitHub credential."}}async function f(a,b){let d=await (0,c.createGitLabCredential)(a,b);return d.success&&d.credential?{success:!0,credential:d.credential}:{success:!1,error:d.error||"Failed to save GitLab credential."}}async function g(a){try{let b=await (0,c.deleteCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove credential."};return{success:!0}}catch(a){return console.error("Failed to remove credential:",a),{success:!1,error:"Failed to remove credential."}}}(0,a.i(13095).ensureServerEntryExports)([d,e,f,g]),(0,b.registerServerReference)(d,"006edcb834638d6a409c75d84a4bb1f2b48b6df3b2",null),(0,b.registerServerReference)(e,"40f158358ed7b854c874f851d030b61480c4104808",null),(0,b.registerServerReference)(f,"6098a2f981827c8c16ff072dd69cb19ac07b11458c",null),(0,b.registerServerReference)(g,"40a0538d3114dce098ab97a25d13020860eaee8ddb",null),a.s(["listCredentials",()=>d,"removeCredential",()=>g,"saveGitHubCredential",()=>e,"saveGitLabCredential",()=>f])},98624,a=>{"use strict";var b=a.i(37936),c=a.i(24868),d=a.i(14747),e=a.i(38642);let f=new Set([".git","node_modules",".next",".viba","dist","build","coverage"]);function g(){return global.repoResolutionCache||(global.repoResolutionCache=new Map),global.repoResolutionCache}function h(a,b){g().set(a.toLowerCase(),{repoPath:b,resolvedAt:Date.now()})}async function i(a){let b=g().get(a.toLowerCase());return b?Date.now()-b.resolvedAt>3e5?(g().delete(a.toLowerCase()),null):await j(b.repoPath)?b.repoPath:(g().delete(a.toLowerCase()),null):null}async function j(a){try{return await c.default.access(d.default.join(a,".git")),!0}catch{return!1}}async function k(a,b){let e=d.default.join(a,b);if(await j(e))return e;let g=[{dirPath:a,depth:0}],h=0,i=b.toLowerCase();for(let a=0;a<g.length;a+=1){let b,e=g[a];if((h+=1)>5e3)break;try{b=await c.default.readdir(e.dirPath,{withFileTypes:!0})}catch{continue}for(let a of b){if(!a.isDirectory()||function(a,b){let c=a.toLowerCase();return c!==b&&!!(f.has(c)||a.startsWith("."))}(a.name,i))continue;let b=d.default.join(e.dirPath,a.name);if(a.name.toLowerCase()===i&&await j(b))return b;e.depth+1<=5&&g.push({dirPath:b,depth:e.depth+1})}}return null}async function l(a){let b=a.trim();if(!b)return null;let c=await i(b);if(c)return c;let f=await (0,e.getConfig)();for(let a of f.recentRepos.filter(a=>d.default.basename(a).toLowerCase()===b.toLowerCase()))if(await j(a))return h(b,a),a;let g=[],l=new Set;for(let a of f.recentRepos){let b=d.default.dirname(a);l.has(b)||(l.add(b),g.push(b))}for(let a of(f.defaultRoot&&!l.has(f.defaultRoot)&&(l.add(f.defaultRoot),g.push(f.defaultRoot)),g)){let c=await k(a,b);if(c)return h(b,c),c}return null}async function m(a){try{let b=await l(a);return{success:!0,repoPath:b}}catch(a){return console.error("Failed to resolve repository by name:",a),{success:!1,repoPath:null,error:"Failed to search repositories. Please try again."}}}(0,a.i(13095).ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"40d94558f0fd8453ae662ca4ce1f35231934ba3c8f",null),a.s(["resolveRepositoryByName",()=>m],98624)},58651,a=>{"use strict";var b=a.i(15271),c=a.i(98624),d=a.i(51817),e=a.i(38642),f=a.i(37359);a.s([],3515),a.i(3515),a.s(["0064bbd6227c75dbf903098659aedd84ad0d4e0e53",()=>e.getConfig,"006edcb834638d6a409c75d84a4bb1f2b48b6df3b2",()=>f.listCredentials,"00932efbca78981f6c54a3e5e46b4aaec8a353f6ae",()=>b.getHomeDirectory,"40110db06ed2df76d47bae85a18e8d1471b8e352cb",()=>b.checkIsGitRepo,"40386cde858a4d4d427ee5967036f6bdd7df2592cb",()=>b.listDirectories,"4041eec15c035c69c2bc0760ffac4622a6552be3dc",()=>b.checkAgentCliInstalled,"4058e0b09ca7fd41fa63936573f9567b00bbb4dda1",()=>b.installAgentCli,"408a2152db3e44bd4b023e85e8fa81763f311e16d8",()=>e.updateConfig,"4091aabdbb924c7fc8f5b8ebb9cb23e0fd3f484539",()=>b.getBranches,"40bc7d87979acf586043e5ffc0dece40a4b1b71921",()=>d.deleteSession,"40d94558f0fd8453ae662ca4ce1f35231934ba3c8f",()=>c.resolveRepositoryByName,"40df4c2ab675ebe6dddb8e83b2e61b1004f2300b2b",()=>b.checkDirectoryAccessible,"40ecc529910f3216dd48460ae7eaff4adca24cb1c9",()=>d.getSessionPrefillContext,"40fcc8a13426e65f00f4b02341c56491ffc0483586",()=>d.listSessions,"6091019e14d1bb4583b75a29607cfd8e637662f838",()=>e.updateRepoSettings,"60d5ff7ff7d0089f8473f7dbd5419c76289f871ecf",()=>d.saveSessionLaunchContext,"60dbe72186e32106a1015348f75f73cdab7975346c",()=>b.checkoutBranch,"702f610644534f8f4397c4b6e449524906d8208917",()=>d.copySessionAttachments,"70bc3dce339bb9428f73fcd63ef770d864008d2371",()=>d.createSession,"7f12cd727cf38e283efc2e7491f3538afdead33f83",()=>b.listRepoFiles,"7f2e4b3904dfa6d10d639f8a6c13fd15c3980e87c2",()=>b.getStartupScript,"7f3c7b8db24eebc1200045e18c6bf25f0612568e56",()=>b.saveAttachments,"7f47db105d023c1ac0dcb38d6bf360bacc6f2e4847",()=>b.getDefaultDevServerScript,"7fd4c4c46dd5412a32f4702da6146cb506ea26cec4",()=>b.startTtydProcess],58651)},45581,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_keytar_23140f5c._.js"].map(b=>a.l(b))).then(()=>b(83034)))},44264,a=>{a.v(a=>Promise.resolve().then(()=>a(33405)))},37706,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__edf0aa7a._.js"].map(b=>a.l(b))).then(()=>b(78775)))}];
|
|
2
|
+
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},70798,a=>{"use strict";var b=a.i(24868),c=a.i(46786),d=a.i(14747);let e="viba-git-credentials",f=null,g=null,h=!1;function i(){return g?`Secure credential storage is unavailable: ${g}`:"Secure credential storage is unavailable in this runtime."}async function j(){return f||(f=a.A(45581).then(a=>a.default??a).catch(a=>(g=a instanceof Error?a.message:String(a),h||(h=!0,console.warn(`[credentials] ${i()}`)),null))),f}async function k(){let a=await j();if(!a)throw Error(i());return a}function l(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function m(a){return a.trim().replace(/\/$/,"")}function n(a){return`credential-${a}`}function o(a){return`credential-${a}`}function p(a){return a.keytarAccount||n(a.id)}function q(a){return"gitlab"===a.type?{id:a.id,type:"gitlab",username:a.username,serverUrl:a.serverUrl||"https://gitlab.com",createdAt:a.createdAt,updatedAt:a.updatedAt}:{id:a.id,type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt}}async function r(){let a=d.default.join(c.default.homedir(),".viba");return await b.default.mkdir(a,{recursive:!0}),d.default.join(a,"credentials.json")}function s(a,b){return!!a&&"object"==typeof a&&a.type===b&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&("gitlab"!==b||"string"==typeof a.serverUrl)}function t(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id.trim()&&("github"===a.type||"gitlab"===a.type)&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&(void 0===a.keytarAccount||"string"==typeof a.keytarAccount)&&("gitlab"!==a.type||"string"==typeof a.serverUrl)}async function u(a){let c=await r();await b.default.writeFile(c,JSON.stringify(a,null,2),"utf-8")}async function v(){let a=await r();try{let c=await b.default.readFile(a,"utf-8"),d=JSON.parse(c);if(Array.isArray(d))return d.filter(t);if(!d||"object"!=typeof d)return[];let e=[];if(s(d.github,"github")){let a=d.github;e.push({id:l(),type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("github")})}if(s(d.gitlab,"gitlab")){let a=d.gitlab;e.push({id:l(),type:"gitlab",username:a.username,serverUrl:a.serverUrl,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("gitlab")})}return e.length>0&&await u(e),e}catch(a){if(a?.code==="ENOENT")return[];return console.error("Failed to parse credentials metadata:",a),[]}}async function w(){return(await v()).map(q).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))}async function x(a){let b=(await v()).find(b=>b.id===a);return b?q(b):null}async function y(a){let b=(await v()).find(b=>b.id===a);if(!b)return null;let c=await j();return c?c.getPassword(e,p(b)):null}async function z(a){try{let b=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${a}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});if(!b.ok){if(401===b.status)return{valid:!1,error:"Invalid or expired GitHub token."};return{valid:!1,error:`GitHub API returned ${b.status}.`}}let c=await b.json(),d="string"==typeof c?.login?c.login:null;if(!d)return{valid:!1,error:"GitHub API response did not include a username."};return{valid:!0,username:d}}catch(a){return{valid:!1,error:`Failed to verify GitHub token: ${a.message}`}}}async function A(a,b){try{let c=m(a),d=await fetch(`${c}/api/v4/user`,{headers:{"PRIVATE-TOKEN":b}});if(!d.ok){if(401===d.status)return{valid:!1,error:"Invalid or expired GitLab token."};return{valid:!1,error:`GitLab API returned ${d.status}.`}}let e=await d.json(),f="string"==typeof e?.username?e.username:null;if(!f)return{valid:!1,error:"GitLab API response did not include a username."};return{valid:!0,username:f}}catch(a){return{valid:!1,error:`Failed to verify GitLab token: ${a.message}`}}}async function B(a){let b,c=a.trim();if(!c)return{success:!1,error:"GitHub token is required."};try{b=await k()}catch(a){return{success:!1,error:a.message}}let d=await z(c);if(!d.valid||!d.username)return{success:!1,error:d.error||"Failed to verify GitHub token."};let f=await v();if(f.find(a=>"github"===a.type&&a.username===d.username))return{success:!1,error:`A GitHub credential for ${d.username} already exists.`};let g=l(),h=new Date().toISOString(),i=n(g);await b.setPassword(e,i,c);let j={id:g,type:"github",username:d.username,createdAt:h,updatedAt:h,keytarAccount:i};return f.push(j),await u(f),{success:!0,credential:{id:j.id,type:"github",username:j.username,createdAt:j.createdAt,updatedAt:j.updatedAt}}}async function C(a,b){let c,d=m(a),f=b.trim();if(!d)return{success:!1,error:"GitLab server URL is required."};try{new URL(d)}catch{return{success:!1,error:"GitLab server URL must be a valid URL."}}if(!f)return{success:!1,error:"GitLab token is required."};try{c=await k()}catch(a){return{success:!1,error:a.message}}let g=await A(d,f);if(!g.valid||!g.username)return{success:!1,error:g.error||"Failed to verify GitLab token."};let h=await v();if(h.find(a=>"gitlab"===a.type&&a.username===g.username&&a.serverUrl===d))return{success:!1,error:`A GitLab credential for ${g.username} on ${d} already exists.`};let i=l(),j=new Date().toISOString(),o=n(i);await c.setPassword(e,o,f);let p={id:i,type:"gitlab",username:g.username,serverUrl:d,createdAt:j,updatedAt:j,keytarAccount:o};return h.push(p),await u(h),{success:!0,credential:{id:p.id,type:"gitlab",username:p.username,serverUrl:p.serverUrl||d,createdAt:p.createdAt,updatedAt:p.updatedAt}}}async function D(a){let b=await v(),c=b.findIndex(b=>b.id===a);if(-1===c)return{success:!1,error:"Credential not found."};let d=b[c];b.splice(c,1),await u(b);let f=await j();return f&&await f.deletePassword(e,p(d)),{success:!0}}a.s(["createGitHubCredential",()=>B,"createGitLabCredential",()=>C,"deleteCredential",()=>D,"getAllCredentials",()=>w,"getCredentialById",()=>x,"getCredentialToken",()=>y])},37359,a=>{"use strict";var b=a.i(37936),c=a.i(70798);async function d(){try{let a=await (0,c.getAllCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list credentials:",a),{success:!1,error:"Failed to load credentials."}}}async function e(a){let b=await (0,c.createGitHubCredential)(a);return b.success&&b.credential?{success:!0,credential:b.credential}:{success:!1,error:b.error||"Failed to save GitHub credential."}}async function f(a,b){let d=await (0,c.createGitLabCredential)(a,b);return d.success&&d.credential?{success:!0,credential:d.credential}:{success:!1,error:d.error||"Failed to save GitLab credential."}}async function g(a){try{let b=await (0,c.deleteCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove credential."};return{success:!0}}catch(a){return console.error("Failed to remove credential:",a),{success:!1,error:"Failed to remove credential."}}}(0,a.i(13095).ensureServerEntryExports)([d,e,f,g]),(0,b.registerServerReference)(d,"009a52b5211f7188280192b7f54d2b7d360227dbb3",null),(0,b.registerServerReference)(e,"40be8b850b232f864e7ab716e5d1d982c37793c20b",null),(0,b.registerServerReference)(f,"60c0fb15bb860aa80aab9cecb3b35b3b7faec3a36b",null),(0,b.registerServerReference)(g,"40badba051858a0eefeb404f511e0df8053a815b20",null),a.s(["listCredentials",()=>d,"removeCredential",()=>g,"saveGitHubCredential",()=>e,"saveGitLabCredential",()=>f])},98624,a=>{"use strict";var b=a.i(37936),c=a.i(24868),d=a.i(14747),e=a.i(38642);let f=new Set([".git","node_modules",".next",".viba","dist","build","coverage"]);function g(){return global.repoResolutionCache||(global.repoResolutionCache=new Map),global.repoResolutionCache}function h(a,b){g().set(a.toLowerCase(),{repoPath:b,resolvedAt:Date.now()})}async function i(a){let b=g().get(a.toLowerCase());return b?Date.now()-b.resolvedAt>3e5?(g().delete(a.toLowerCase()),null):await j(b.repoPath)?b.repoPath:(g().delete(a.toLowerCase()),null):null}async function j(a){try{return await c.default.access(d.default.join(a,".git")),!0}catch{return!1}}async function k(a,b){let e=d.default.join(a,b);if(await j(e))return e;let g=[{dirPath:a,depth:0}],h=0,i=b.toLowerCase();for(let a=0;a<g.length;a+=1){let b,e=g[a];if((h+=1)>5e3)break;try{b=await c.default.readdir(e.dirPath,{withFileTypes:!0})}catch{continue}for(let a of b){if(!a.isDirectory()||function(a,b){let c=a.toLowerCase();return c!==b&&!!(f.has(c)||a.startsWith("."))}(a.name,i))continue;let b=d.default.join(e.dirPath,a.name);if(a.name.toLowerCase()===i&&await j(b))return b;e.depth+1<=5&&g.push({dirPath:b,depth:e.depth+1})}}return null}async function l(a){let b=a.trim();if(!b)return null;let c=await i(b);if(c)return c;let f=await (0,e.getConfig)();for(let a of f.recentRepos.filter(a=>d.default.basename(a).toLowerCase()===b.toLowerCase()))if(await j(a))return h(b,a),a;let g=[],l=new Set;for(let a of f.recentRepos){let b=d.default.dirname(a);l.has(b)||(l.add(b),g.push(b))}for(let a of(f.defaultRoot&&!l.has(f.defaultRoot)&&(l.add(f.defaultRoot),g.push(f.defaultRoot)),g)){let c=await k(a,b);if(c)return h(b,c),c}return null}async function m(a){try{let b=await l(a);return{success:!0,repoPath:b}}catch(a){return console.error("Failed to resolve repository by name:",a),{success:!1,repoPath:null,error:"Failed to search repositories. Please try again."}}}(0,a.i(13095).ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"404b9a81ad08961f5663afc48da41f5dea5266acce",null),a.s(["resolveRepositoryByName",()=>m],98624)},58651,a=>{"use strict";var b=a.i(15271),c=a.i(98624),d=a.i(51817),e=a.i(38642),f=a.i(37359);a.s([],3515),a.i(3515),a.s(["005d259cc8fa8d952f814b4fb979df53e92986d9a5",()=>b.getHomeDirectory,"009a52b5211f7188280192b7f54d2b7d360227dbb3",()=>f.listCredentials,"00cd80dc5a4a84c6544b997eb412d9fec0f08638d5",()=>e.getConfig,"4014476978d1b7b7928122371ecaf1a366c694b482",()=>e.updateConfig,"403ef707dab230c18860718e1bdf896059f3d5fd91",()=>b.checkDirectoryAccessible,"404b9a81ad08961f5663afc48da41f5dea5266acce",()=>c.resolveRepositoryByName,"4070abb4a7b4faa1523dad0dc921f2c7e09885a380",()=>d.getSessionPrefillContext,"407994deb1605079bc7f7d7d119e1aedb3d719c7a8",()=>b.installAgentCli,"40926025dfa54333beb998cd7af50d262b08857b7d",()=>b.listDirectories,"409403aa85eead3387f294f47402c012ceb5c91bbd",()=>d.deleteSession,"40a7796191f83d4a386060c5b8728adf970b9cbf2c",()=>b.checkIsGitRepo,"40a8d0ecc48f9bb727d3395a6033866ee92b41a006",()=>d.listSessions,"40ce90bc4dfaf88079b648b8bebf9271e1ff650388",()=>b.checkAgentCliInstalled,"40ef3d541634346a280afe8eb270b20a44e65c12f0",()=>b.getBranches,"6039f5f40f5cf0d2cc408be7a9ae5bfb689d8ac196",()=>b.checkoutBranch,"603cd11d6744363d69162d87cd83724a5ba6d81c66",()=>e.updateRepoSettings,"60ec6db86191de8841beb65e6cd1e09bb6145fae5f",()=>d.saveSessionLaunchContext,"704c9027e7bf3d827fd63f3e4f5fa807b18886e1ae",()=>d.copySessionAttachments,"70778b8dc6016e978ec4727eac642d772029330eda",()=>d.createSession,"7f2fc548d4b7196815ce7140fbc75c85a186233828",()=>b.listRepoFiles,"7f5447571c45e842042484075d6317cc6616d95234",()=>b.saveAttachments,"7f9f1c8bfbea857703a62a8b12c5404cc5fe241ff2",()=>b.startTtydProcess,"7fa7e9c4cf5a3fd0284293b74e27199a5b60b6fdf5",()=>b.getDefaultDevServerScript,"7ffe03accac8ebe36db5f881f52a53547a4e0e9903",()=>b.getStartupScript],58651)},45581,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_keytar_23140f5c._.js"].map(b=>a.l(b))).then(()=>b(83034)))},44264,a=>{a.v(a=>Promise.resolve().then(()=>a(33405)))},37706,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__edf0aa7a._.js"].map(b=>a.l(b))).then(()=>b(78775)))}];
|
|
3
3
|
|
|
4
4
|
//# sourceMappingURL=%5Broot-of-the-server%5D__213d5b40._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts","../../../../node_modules/next/src/build/webpack/loaders/next-flight-loader/action-validate.ts","../../../../src/lib/credentials.ts","../../../../src/app/actions/credentials.ts","../../../../src/lib/repo-resolver.ts","../../../../src/app/actions/repository.ts","../../../../.next-internal/server/app/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nexport { registerServerReference } from 'react-server-dom-webpack/server'\n","// This function ensures that all the exported values are valid server actions,\n// during the runtime. By definition all actions are required to be async\n// functions, but here we can only check that they are functions.\nexport function ensureServerEntryExports(actions: any[]) {\n for (let i = 0; i < actions.length; i++) {\n const action = actions[i]\n if (typeof action !== 'function') {\n throw new Error(\n `A \"use server\" file can only export async functions, found ${typeof action}.\\nRead more: https://nextjs.org/docs/messages/invalid-use-server-value`\n )\n }\n }\n}\n","import fs from 'fs/promises';\nimport os from 'os';\nimport path from 'path';\n\nconst SERVICE_NAME = 'viba-git-credentials';\nconst CREDENTIALS_FILE_NAME = 'credentials.json';\n\nexport type CredentialType = 'github' | 'gitlab';\n\nexport interface BaseCredential {\n id: string;\n type: CredentialType;\n username: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface GitHubCredential extends BaseCredential {\n type: 'github';\n}\n\nexport interface GitLabCredential extends BaseCredential {\n type: 'gitlab';\n serverUrl: string;\n}\n\nexport type Credential = GitHubCredential | GitLabCredential;\n\ntype CredentialMetadata = {\n id: string;\n type: CredentialType;\n username: string;\n serverUrl?: string;\n createdAt: string;\n updatedAt: string;\n keytarAccount?: string;\n};\n\ntype LegacyCredentialMetadata = {\n type: CredentialType;\n username: string;\n serverUrl?: string;\n createdAt: string;\n updatedAt: string;\n};\n\ntype KeytarModule = {\n getPassword(service: string, account: string): Promise<string | null>;\n setPassword(service: string, account: string, password: string): Promise<void>;\n deletePassword(service: string, account: string): Promise<boolean>;\n};\n\nlet keytarPromise: Promise<KeytarModule | null> | null = null;\nlet keytarUnavailableReason: string | null = null;\nlet didLogKeytarWarning = false;\n\nfunction keytarUnavailableMessage(): string {\n if (keytarUnavailableReason) {\n return `Secure credential storage is unavailable: ${keytarUnavailableReason}`;\n }\n return 'Secure credential storage is unavailable in this runtime.';\n}\n\nasync function loadKeytar(): Promise<KeytarModule | null> {\n if (!keytarPromise) {\n keytarPromise = import('keytar')\n .then((module) => (module.default ?? module) as KeytarModule)\n .catch((error: unknown) => {\n keytarUnavailableReason = error instanceof Error ? error.message : String(error);\n if (!didLogKeytarWarning) {\n didLogKeytarWarning = true;\n console.warn(`[credentials] ${keytarUnavailableMessage()}`);\n }\n return null;\n });\n }\n\n return keytarPromise;\n}\n\nasync function requireKeytar(): Promise<KeytarModule> {\n const keytar = await loadKeytar();\n if (!keytar) {\n throw new Error(keytarUnavailableMessage());\n }\n return keytar;\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction normalizeGitLabServerUrl(serverUrl: string): string {\n return serverUrl.trim().replace(/\\/$/, '');\n}\n\nfunction getDefaultKeytarAccount(id: string): string {\n return `credential-${id}`;\n}\n\nfunction getLegacyKeytarAccount(type: CredentialType): string {\n return `credential-${type}`;\n}\n\nfunction getKeytarAccountForMetadata(metadata: CredentialMetadata): string {\n return metadata.keytarAccount || getDefaultKeytarAccount(metadata.id);\n}\n\nfunction toCredential(metadata: CredentialMetadata): Credential {\n if (metadata.type === 'gitlab') {\n return {\n id: metadata.id,\n type: 'gitlab',\n username: metadata.username,\n serverUrl: metadata.serverUrl || 'https://gitlab.com',\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n };\n }\n\n return {\n id: metadata.id,\n type: 'github',\n username: metadata.username,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n };\n}\n\nasync function getCredentialsFilePath(): Promise<string> {\n const vibaDir = path.join(os.homedir(), '.viba');\n await fs.mkdir(vibaDir, { recursive: true });\n return path.join(vibaDir, CREDENTIALS_FILE_NAME);\n}\n\nfunction isLegacyCredentialMetadata(value: unknown, expectedType: CredentialType): value is LegacyCredentialMetadata {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n if (candidate.type !== expectedType) return false;\n if (typeof candidate.username !== 'string') return false;\n if (typeof candidate.createdAt !== 'string') return false;\n if (typeof candidate.updatedAt !== 'string') return false;\n\n if (expectedType === 'gitlab') {\n return typeof candidate.serverUrl === 'string';\n }\n\n return true;\n}\n\nfunction isCredentialMetadata(value: unknown): value is CredentialMetadata {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n if (typeof candidate.id !== 'string' || !candidate.id.trim()) return false;\n if (candidate.type !== 'github' && candidate.type !== 'gitlab') return false;\n if (typeof candidate.username !== 'string') return false;\n if (typeof candidate.createdAt !== 'string') return false;\n if (typeof candidate.updatedAt !== 'string') return false;\n if (candidate.keytarAccount !== undefined && typeof candidate.keytarAccount !== 'string') return false;\n\n if (candidate.type === 'gitlab') {\n return typeof candidate.serverUrl === 'string';\n }\n\n return true;\n}\n\nasync function writeCredentialsMetadata(metadata: CredentialMetadata[]): Promise<void> {\n const credentialsFilePath = await getCredentialsFilePath();\n await fs.writeFile(credentialsFilePath, JSON.stringify(metadata, null, 2), 'utf-8');\n}\n\nasync function readCredentialsMetadata(): Promise<CredentialMetadata[]> {\n const credentialsFilePath = await getCredentialsFilePath();\n\n try {\n const content = await fs.readFile(credentialsFilePath, 'utf-8');\n const parsed = JSON.parse(content) as unknown;\n\n if (Array.isArray(parsed)) {\n return parsed.filter(isCredentialMetadata);\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return [];\n }\n\n const legacyMapped = parsed as Record<string, unknown>;\n const migrated: CredentialMetadata[] = [];\n\n if (isLegacyCredentialMetadata(legacyMapped.github, 'github')) {\n const metadata = legacyMapped.github;\n migrated.push({\n id: generateId(),\n type: 'github',\n username: metadata.username,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n keytarAccount: getLegacyKeytarAccount('github'),\n });\n }\n\n if (isLegacyCredentialMetadata(legacyMapped.gitlab, 'gitlab')) {\n const metadata = legacyMapped.gitlab;\n migrated.push({\n id: generateId(),\n type: 'gitlab',\n username: metadata.username,\n serverUrl: metadata.serverUrl,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n keytarAccount: getLegacyKeytarAccount('gitlab'),\n });\n }\n\n if (migrated.length > 0) {\n await writeCredentialsMetadata(migrated);\n }\n\n return migrated;\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n return [];\n }\n\n console.error('Failed to parse credentials metadata:', error);\n return [];\n }\n}\n\nexport async function getAllCredentials(): Promise<Credential[]> {\n const metadata = await readCredentialsMetadata();\n\n return metadata\n .map(toCredential)\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));\n}\n\nexport async function getCredentialById(id: string): Promise<Credential | null> {\n const metadata = await readCredentialsMetadata();\n const found = metadata.find((credential) => credential.id === id);\n return found ? toCredential(found) : null;\n}\n\nexport async function getCredentialToken(id: string): Promise<string | null> {\n const metadata = await readCredentialsMetadata();\n const found = metadata.find((credential) => credential.id === id);\n if (!found) {\n return null;\n }\n\n const keytar = await loadKeytar();\n if (!keytar) {\n return null;\n }\n\n return keytar.getPassword(SERVICE_NAME, getKeytarAccountForMetadata(found));\n}\n\nasync function verifyGitHubToken(token: string): Promise<{ valid: boolean; username?: string; error?: string }> {\n try {\n const response = await fetch('https://api.github.com/user', {\n headers: {\n Authorization: `Bearer ${token}`,\n Accept: 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n return { valid: false, error: 'Invalid or expired GitHub token.' };\n }\n return { valid: false, error: `GitHub API returned ${response.status}.` };\n }\n\n const data = await response.json();\n const username = typeof data?.login === 'string' ? data.login : null;\n if (!username) {\n return { valid: false, error: 'GitHub API response did not include a username.' };\n }\n\n return { valid: true, username };\n } catch (error) {\n return { valid: false, error: `Failed to verify GitHub token: ${(error as Error).message}` };\n }\n}\n\nasync function verifyGitLabToken(serverUrl: string, token: string): Promise<{ valid: boolean; username?: string; error?: string }> {\n try {\n const normalizedUrl = normalizeGitLabServerUrl(serverUrl);\n const response = await fetch(`${normalizedUrl}/api/v4/user`, {\n headers: {\n 'PRIVATE-TOKEN': token,\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n return { valid: false, error: 'Invalid or expired GitLab token.' };\n }\n return { valid: false, error: `GitLab API returned ${response.status}.` };\n }\n\n const data = await response.json();\n const username = typeof data?.username === 'string' ? data.username : null;\n if (!username) {\n return { valid: false, error: 'GitLab API response did not include a username.' };\n }\n\n return { valid: true, username };\n } catch (error) {\n return { valid: false, error: `Failed to verify GitLab token: ${(error as Error).message}` };\n }\n}\n\nexport async function createGitHubCredential(token: string): Promise<{ success: boolean; credential?: GitHubCredential; error?: string }> {\n const trimmedToken = token.trim();\n if (!trimmedToken) {\n return { success: false, error: 'GitHub token is required.' };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const verification = await verifyGitHubToken(trimmedToken);\n if (!verification.valid || !verification.username) {\n return { success: false, error: verification.error || 'Failed to verify GitHub token.' };\n }\n\n const metadata = await readCredentialsMetadata();\n const duplicate = metadata.find((credential) => (\n credential.type === 'github'\n && credential.username === verification.username\n ));\n\n if (duplicate) {\n return { success: false, error: `A GitHub credential for ${verification.username} already exists.` };\n }\n\n const id = generateId();\n const now = new Date().toISOString();\n const keytarAccount = getDefaultKeytarAccount(id);\n\n await keytar.setPassword(SERVICE_NAME, keytarAccount, trimmedToken);\n\n const created: CredentialMetadata = {\n id,\n type: 'github',\n username: verification.username,\n createdAt: now,\n updatedAt: now,\n keytarAccount,\n };\n\n metadata.push(created);\n await writeCredentialsMetadata(metadata);\n\n return {\n success: true,\n credential: {\n id: created.id,\n type: 'github',\n username: created.username,\n createdAt: created.createdAt,\n updatedAt: created.updatedAt,\n },\n };\n}\n\nexport async function createGitLabCredential(\n serverUrl: string,\n token: string,\n): Promise<{ success: boolean; credential?: GitLabCredential; error?: string }> {\n const normalizedServerUrl = normalizeGitLabServerUrl(serverUrl);\n const trimmedToken = token.trim();\n\n if (!normalizedServerUrl) {\n return { success: false, error: 'GitLab server URL is required.' };\n }\n\n try {\n new URL(normalizedServerUrl);\n } catch {\n return { success: false, error: 'GitLab server URL must be a valid URL.' };\n }\n\n if (!trimmedToken) {\n return { success: false, error: 'GitLab token is required.' };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const verification = await verifyGitLabToken(normalizedServerUrl, trimmedToken);\n if (!verification.valid || !verification.username) {\n return { success: false, error: verification.error || 'Failed to verify GitLab token.' };\n }\n\n const metadata = await readCredentialsMetadata();\n const duplicate = metadata.find((credential) => (\n credential.type === 'gitlab'\n && credential.username === verification.username\n && credential.serverUrl === normalizedServerUrl\n ));\n\n if (duplicate) {\n return {\n success: false,\n error: `A GitLab credential for ${verification.username} on ${normalizedServerUrl} already exists.`,\n };\n }\n\n const id = generateId();\n const now = new Date().toISOString();\n const keytarAccount = getDefaultKeytarAccount(id);\n\n await keytar.setPassword(SERVICE_NAME, keytarAccount, trimmedToken);\n\n const created: CredentialMetadata = {\n id,\n type: 'gitlab',\n username: verification.username,\n serverUrl: normalizedServerUrl,\n createdAt: now,\n updatedAt: now,\n keytarAccount,\n };\n\n metadata.push(created);\n await writeCredentialsMetadata(metadata);\n\n return {\n success: true,\n credential: {\n id: created.id,\n type: 'gitlab',\n username: created.username,\n serverUrl: created.serverUrl || normalizedServerUrl,\n createdAt: created.createdAt,\n updatedAt: created.updatedAt,\n },\n };\n}\n\nexport async function deleteCredential(id: string): Promise<{ success: boolean; error?: string }> {\n const metadata = await readCredentialsMetadata();\n const index = metadata.findIndex((credential) => credential.id === id);\n\n if (index === -1) {\n return { success: false, error: 'Credential not found.' };\n }\n\n const credential = metadata[index];\n metadata.splice(index, 1);\n await writeCredentialsMetadata(metadata);\n\n const keytar = await loadKeytar();\n if (keytar) {\n await keytar.deletePassword(SERVICE_NAME, getKeytarAccountForMetadata(credential));\n }\n\n return { success: true };\n}\n","'use server';\n\nimport {\n createGitHubCredential,\n createGitLabCredential,\n deleteCredential,\n getAllCredentials,\n} from '@/lib/credentials';\nimport type { Credential } from '@/lib/credentials';\n\ntype ListCredentialsResult =\n | { success: true; credentials: Credential[] }\n | { success: false; error: string };\n\nexport async function listCredentials(): Promise<ListCredentialsResult> {\n try {\n const credentials = await getAllCredentials();\n return { success: true, credentials };\n } catch (error) {\n console.error('Failed to list credentials:', error);\n return { success: false, error: 'Failed to load credentials.' };\n }\n}\n\ntype SaveCredentialResult =\n | { success: true; credential: Credential }\n | { success: false; error: string };\n\nexport async function saveGitHubCredential(token: string): Promise<SaveCredentialResult> {\n const result = await createGitHubCredential(token);\n if (!result.success || !result.credential) {\n return { success: false, error: result.error || 'Failed to save GitHub credential.' };\n }\n\n return { success: true, credential: result.credential };\n}\n\nexport async function saveGitLabCredential(serverUrl: string, token: string): Promise<SaveCredentialResult> {\n const result = await createGitLabCredential(serverUrl, token);\n if (!result.success || !result.credential) {\n return { success: false, error: result.error || 'Failed to save GitLab credential.' };\n }\n\n return { success: true, credential: result.credential };\n}\n\ntype RemoveCredentialResult =\n | { success: true }\n | { success: false; error: string };\n\nexport async function removeCredential(id: string): Promise<RemoveCredentialResult> {\n try {\n const result = await deleteCredential(id);\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to remove credential.' };\n }\n\n return { success: true };\n } catch (error) {\n console.error('Failed to remove credential:', error);\n return { success: false, error: 'Failed to remove credential.' };\n }\n}\n","import fs from 'fs/promises';\nimport type { Dirent } from 'fs';\nimport path from 'path';\nimport { getConfig } from '@/app/actions/config';\n\nconst MAX_SCAN_DEPTH = 5;\nconst MAX_SCANNED_DIRECTORIES = 5000;\nconst RESOLUTION_CACHE_TTL_MS = 5 * 60 * 1000;\nconst SKIPPED_DIR_NAMES = new Set([\n '.git',\n 'node_modules',\n '.next',\n '.viba',\n 'dist',\n 'build',\n 'coverage',\n]);\n\ntype RepoResolutionCacheEntry = {\n repoPath: string;\n resolvedAt: number;\n};\n\ndeclare global {\n var repoResolutionCache: Map<string, RepoResolutionCacheEntry> | undefined;\n}\n\nfunction getResolutionCache(): Map<string, RepoResolutionCacheEntry> {\n if (!global.repoResolutionCache) {\n global.repoResolutionCache = new Map<string, RepoResolutionCacheEntry>();\n }\n return global.repoResolutionCache;\n}\n\nfunction cacheResolution(repoName: string, repoPath: string): void {\n getResolutionCache().set(repoName.toLowerCase(), {\n repoPath,\n resolvedAt: Date.now(),\n });\n}\n\nasync function getValidCachedResolution(repoName: string): Promise<string | null> {\n const entry = getResolutionCache().get(repoName.toLowerCase());\n if (!entry) return null;\n if (Date.now() - entry.resolvedAt > RESOLUTION_CACHE_TTL_MS) {\n getResolutionCache().delete(repoName.toLowerCase());\n return null;\n }\n\n if (await isGitRepository(entry.repoPath)) {\n return entry.repoPath;\n }\n\n getResolutionCache().delete(repoName.toLowerCase());\n return null;\n}\n\nasync function isGitRepository(dirPath: string): Promise<boolean> {\n try {\n await fs.access(path.join(dirPath, '.git'));\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasMatchingName(repoPath: string, repoName: string): boolean {\n return path.basename(repoPath).toLowerCase() === repoName.toLowerCase();\n}\n\nfunction shouldSkipDirectory(entryName: string, targetName: string): boolean {\n const lowerName = entryName.toLowerCase();\n if (lowerName === targetName) return false;\n if (SKIPPED_DIR_NAMES.has(lowerName)) return true;\n if (entryName.startsWith('.')) return true;\n return false;\n}\n\nasync function findByNameWithinRoot(rootPath: string, repoName: string): Promise<string | null> {\n const directCandidate = path.join(rootPath, repoName);\n if (await isGitRepository(directCandidate)) {\n return directCandidate;\n }\n\n const queue: Array<{ dirPath: string; depth: number }> = [{ dirPath: rootPath, depth: 0 }];\n let scannedCount = 0;\n const targetName = repoName.toLowerCase();\n\n for (let index = 0; index < queue.length; index += 1) {\n const current = queue[index];\n scannedCount += 1;\n if (scannedCount > MAX_SCANNED_DIRECTORIES) {\n break;\n }\n\n let entries: Dirent[];\n try {\n entries = await fs.readdir(current.dirPath, { withFileTypes: true });\n } catch {\n continue;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (shouldSkipDirectory(entry.name, targetName)) continue;\n\n const nextDirPath = path.join(current.dirPath, entry.name);\n\n if (entry.name.toLowerCase() === targetName && await isGitRepository(nextDirPath)) {\n return nextDirPath;\n }\n\n if (current.depth + 1 <= MAX_SCAN_DEPTH) {\n queue.push({ dirPath: nextDirPath, depth: current.depth + 1 });\n }\n }\n }\n\n return null;\n}\n\nexport async function resolveRepositoryPathByName(repoName: string): Promise<string | null> {\n const trimmedName = repoName.trim();\n if (!trimmedName) return null;\n\n const cachedResolution = await getValidCachedResolution(trimmedName);\n if (cachedResolution) {\n return cachedResolution;\n }\n\n const config = await getConfig();\n\n const recentMatches = config.recentRepos.filter((repoPath) => hasMatchingName(repoPath, trimmedName));\n for (const repoPath of recentMatches) {\n if (await isGitRepository(repoPath)) {\n cacheResolution(trimmedName, repoPath);\n return repoPath;\n }\n }\n\n const searchRoots: string[] = [];\n const visitedRoots = new Set<string>();\n for (const repoPath of config.recentRepos) {\n const parentPath = path.dirname(repoPath);\n if (!visitedRoots.has(parentPath)) {\n visitedRoots.add(parentPath);\n searchRoots.push(parentPath);\n }\n }\n if (config.defaultRoot && !visitedRoots.has(config.defaultRoot)) {\n visitedRoots.add(config.defaultRoot);\n searchRoots.push(config.defaultRoot);\n }\n\n for (const rootPath of searchRoots) {\n const resolvedPath = await findByNameWithinRoot(rootPath, trimmedName);\n if (resolvedPath) {\n cacheResolution(trimmedName, resolvedPath);\n return resolvedPath;\n }\n }\n\n return null;\n}\n","'use server';\n\nimport { resolveRepositoryPathByName } from '@/lib/repo-resolver';\n\ntype ResolveRepositoryResult = {\n success: boolean;\n repoPath: string | null;\n error?: string;\n};\n\nexport async function resolveRepositoryByName(repoName: string): Promise<ResolveRepositoryResult> {\n try {\n const resolvedPath = await resolveRepositoryPathByName(repoName);\n return {\n success: true,\n repoPath: resolvedPath,\n };\n } catch (error) {\n console.error('Failed to resolve repository by name:', error);\n return {\n success: false,\n repoPath: null,\n error: 'Failed to search repositories. Please try again.',\n };\n }\n}\n","export {checkDirectoryAccessible as '40df4c2ab675ebe6dddb8e83b2e61b1004f2300b2b'} from 'ACTIONS_MODULE0'\nexport {listDirectories as '40386cde858a4d4d427ee5967036f6bdd7df2592cb'} from 'ACTIONS_MODULE0'\nexport {getHomeDirectory as '00932efbca78981f6c54a3e5e46b4aaec8a353f6ae'} from 'ACTIONS_MODULE0'\nexport {checkIsGitRepo as '40110db06ed2df76d47bae85a18e8d1471b8e352cb'} from 'ACTIONS_MODULE0'\nexport {getBranches as '4091aabdbb924c7fc8f5b8ebb9cb23e0fd3f484539'} from 'ACTIONS_MODULE0'\nexport {checkoutBranch as '60dbe72186e32106a1015348f75f73cdab7975346c'} from 'ACTIONS_MODULE0'\nexport {startTtydProcess as '7fd4c4c46dd5412a32f4702da6146cb506ea26cec4'} from 'ACTIONS_MODULE0'\nexport {getStartupScript as '7f2e4b3904dfa6d10d639f8a6c13fd15c3980e87c2'} from 'ACTIONS_MODULE0'\nexport {getDefaultDevServerScript as '7f47db105d023c1ac0dcb38d6bf360bacc6f2e4847'} from 'ACTIONS_MODULE0'\nexport {listRepoFiles as '7f12cd727cf38e283efc2e7491f3538afdead33f83'} from 'ACTIONS_MODULE0'\nexport {saveAttachments as '7f3c7b8db24eebc1200045e18c6bf25f0612568e56'} from 'ACTIONS_MODULE0'\nexport {checkAgentCliInstalled as '4041eec15c035c69c2bc0760ffac4622a6552be3dc'} from 'ACTIONS_MODULE0'\nexport {installAgentCli as '4058e0b09ca7fd41fa63936573f9567b00bbb4dda1'} from 'ACTIONS_MODULE0'\nexport {resolveRepositoryByName as '40d94558f0fd8453ae662ca4ce1f35231934ba3c8f'} from 'ACTIONS_MODULE1'\nexport {copySessionAttachments as '702f610644534f8f4397c4b6e449524906d8208917'} from 'ACTIONS_MODULE2'\nexport {createSession as '70bc3dce339bb9428f73fcd63ef770d864008d2371'} from 'ACTIONS_MODULE2'\nexport {deleteSession as '40bc7d87979acf586043e5ffc0dece40a4b1b71921'} from 'ACTIONS_MODULE2'\nexport {getSessionPrefillContext as '40ecc529910f3216dd48460ae7eaff4adca24cb1c9'} from 'ACTIONS_MODULE2'\nexport {listSessions as '40fcc8a13426e65f00f4b02341c56491ffc0483586'} from 'ACTIONS_MODULE2'\nexport {saveSessionLaunchContext as '60d5ff7ff7d0089f8473f7dbd5419c76289f871ecf'} from 'ACTIONS_MODULE2'\nexport {getConfig as '0064bbd6227c75dbf903098659aedd84ad0d4e0e53'} from 'ACTIONS_MODULE3'\nexport {updateConfig as '408a2152db3e44bd4b023e85e8fa81763f311e16d8'} from 'ACTIONS_MODULE3'\nexport {updateRepoSettings as '6091019e14d1bb4583b75a29607cfd8e637662f838'} from 'ACTIONS_MODULE3'\nexport {listCredentials as '006edcb834638d6a409c75d84a4bb1f2b48b6df3b2'} from 'ACTIONS_MODULE4'\n"],"names":["registerServerReference","ensureServerEntryExports","actions","i","length","action","Error"],"mappings":"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","ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts","../../../../node_modules/next/src/build/webpack/loaders/next-flight-loader/action-validate.ts","../../../../src/lib/credentials.ts","../../../../src/app/actions/credentials.ts","../../../../src/lib/repo-resolver.ts","../../../../src/app/actions/repository.ts","../../../../.next-internal/server/app/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nexport { registerServerReference } from 'react-server-dom-webpack/server'\n","// This function ensures that all the exported values are valid server actions,\n// during the runtime. By definition all actions are required to be async\n// functions, but here we can only check that they are functions.\nexport function ensureServerEntryExports(actions: any[]) {\n for (let i = 0; i < actions.length; i++) {\n const action = actions[i]\n if (typeof action !== 'function') {\n throw new Error(\n `A \"use server\" file can only export async functions, found ${typeof action}.\\nRead more: https://nextjs.org/docs/messages/invalid-use-server-value`\n )\n }\n }\n}\n","import fs from 'fs/promises';\nimport os from 'os';\nimport path from 'path';\n\nconst SERVICE_NAME = 'viba-git-credentials';\nconst CREDENTIALS_FILE_NAME = 'credentials.json';\n\nexport type CredentialType = 'github' | 'gitlab';\n\nexport interface BaseCredential {\n id: string;\n type: CredentialType;\n username: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface GitHubCredential extends BaseCredential {\n type: 'github';\n}\n\nexport interface GitLabCredential extends BaseCredential {\n type: 'gitlab';\n serverUrl: string;\n}\n\nexport type Credential = GitHubCredential | GitLabCredential;\n\ntype CredentialMetadata = {\n id: string;\n type: CredentialType;\n username: string;\n serverUrl?: string;\n createdAt: string;\n updatedAt: string;\n keytarAccount?: string;\n};\n\ntype LegacyCredentialMetadata = {\n type: CredentialType;\n username: string;\n serverUrl?: string;\n createdAt: string;\n updatedAt: string;\n};\n\ntype KeytarModule = {\n getPassword(service: string, account: string): Promise<string | null>;\n setPassword(service: string, account: string, password: string): Promise<void>;\n deletePassword(service: string, account: string): Promise<boolean>;\n};\n\nlet keytarPromise: Promise<KeytarModule | null> | null = null;\nlet keytarUnavailableReason: string | null = null;\nlet didLogKeytarWarning = false;\n\nfunction keytarUnavailableMessage(): string {\n if (keytarUnavailableReason) {\n return `Secure credential storage is unavailable: ${keytarUnavailableReason}`;\n }\n return 'Secure credential storage is unavailable in this runtime.';\n}\n\nasync function loadKeytar(): Promise<KeytarModule | null> {\n if (!keytarPromise) {\n keytarPromise = import('keytar')\n .then((module) => (module.default ?? module) as KeytarModule)\n .catch((error: unknown) => {\n keytarUnavailableReason = error instanceof Error ? error.message : String(error);\n if (!didLogKeytarWarning) {\n didLogKeytarWarning = true;\n console.warn(`[credentials] ${keytarUnavailableMessage()}`);\n }\n return null;\n });\n }\n\n return keytarPromise;\n}\n\nasync function requireKeytar(): Promise<KeytarModule> {\n const keytar = await loadKeytar();\n if (!keytar) {\n throw new Error(keytarUnavailableMessage());\n }\n return keytar;\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction normalizeGitLabServerUrl(serverUrl: string): string {\n return serverUrl.trim().replace(/\\/$/, '');\n}\n\nfunction getDefaultKeytarAccount(id: string): string {\n return `credential-${id}`;\n}\n\nfunction getLegacyKeytarAccount(type: CredentialType): string {\n return `credential-${type}`;\n}\n\nfunction getKeytarAccountForMetadata(metadata: CredentialMetadata): string {\n return metadata.keytarAccount || getDefaultKeytarAccount(metadata.id);\n}\n\nfunction toCredential(metadata: CredentialMetadata): Credential {\n if (metadata.type === 'gitlab') {\n return {\n id: metadata.id,\n type: 'gitlab',\n username: metadata.username,\n serverUrl: metadata.serverUrl || 'https://gitlab.com',\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n };\n }\n\n return {\n id: metadata.id,\n type: 'github',\n username: metadata.username,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n };\n}\n\nasync function getCredentialsFilePath(): Promise<string> {\n const vibaDir = path.join(os.homedir(), '.viba');\n await fs.mkdir(vibaDir, { recursive: true });\n return path.join(vibaDir, CREDENTIALS_FILE_NAME);\n}\n\nfunction isLegacyCredentialMetadata(value: unknown, expectedType: CredentialType): value is LegacyCredentialMetadata {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n if (candidate.type !== expectedType) return false;\n if (typeof candidate.username !== 'string') return false;\n if (typeof candidate.createdAt !== 'string') return false;\n if (typeof candidate.updatedAt !== 'string') return false;\n\n if (expectedType === 'gitlab') {\n return typeof candidate.serverUrl === 'string';\n }\n\n return true;\n}\n\nfunction isCredentialMetadata(value: unknown): value is CredentialMetadata {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Record<string, unknown>;\n if (typeof candidate.id !== 'string' || !candidate.id.trim()) return false;\n if (candidate.type !== 'github' && candidate.type !== 'gitlab') return false;\n if (typeof candidate.username !== 'string') return false;\n if (typeof candidate.createdAt !== 'string') return false;\n if (typeof candidate.updatedAt !== 'string') return false;\n if (candidate.keytarAccount !== undefined && typeof candidate.keytarAccount !== 'string') return false;\n\n if (candidate.type === 'gitlab') {\n return typeof candidate.serverUrl === 'string';\n }\n\n return true;\n}\n\nasync function writeCredentialsMetadata(metadata: CredentialMetadata[]): Promise<void> {\n const credentialsFilePath = await getCredentialsFilePath();\n await fs.writeFile(credentialsFilePath, JSON.stringify(metadata, null, 2), 'utf-8');\n}\n\nasync function readCredentialsMetadata(): Promise<CredentialMetadata[]> {\n const credentialsFilePath = await getCredentialsFilePath();\n\n try {\n const content = await fs.readFile(credentialsFilePath, 'utf-8');\n const parsed = JSON.parse(content) as unknown;\n\n if (Array.isArray(parsed)) {\n return parsed.filter(isCredentialMetadata);\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return [];\n }\n\n const legacyMapped = parsed as Record<string, unknown>;\n const migrated: CredentialMetadata[] = [];\n\n if (isLegacyCredentialMetadata(legacyMapped.github, 'github')) {\n const metadata = legacyMapped.github;\n migrated.push({\n id: generateId(),\n type: 'github',\n username: metadata.username,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n keytarAccount: getLegacyKeytarAccount('github'),\n });\n }\n\n if (isLegacyCredentialMetadata(legacyMapped.gitlab, 'gitlab')) {\n const metadata = legacyMapped.gitlab;\n migrated.push({\n id: generateId(),\n type: 'gitlab',\n username: metadata.username,\n serverUrl: metadata.serverUrl,\n createdAt: metadata.createdAt,\n updatedAt: metadata.updatedAt,\n keytarAccount: getLegacyKeytarAccount('gitlab'),\n });\n }\n\n if (migrated.length > 0) {\n await writeCredentialsMetadata(migrated);\n }\n\n return migrated;\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n return [];\n }\n\n console.error('Failed to parse credentials metadata:', error);\n return [];\n }\n}\n\nexport async function getAllCredentials(): Promise<Credential[]> {\n const metadata = await readCredentialsMetadata();\n\n return metadata\n .map(toCredential)\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));\n}\n\nexport async function getCredentialById(id: string): Promise<Credential | null> {\n const metadata = await readCredentialsMetadata();\n const found = metadata.find((credential) => credential.id === id);\n return found ? toCredential(found) : null;\n}\n\nexport async function getCredentialToken(id: string): Promise<string | null> {\n const metadata = await readCredentialsMetadata();\n const found = metadata.find((credential) => credential.id === id);\n if (!found) {\n return null;\n }\n\n const keytar = await loadKeytar();\n if (!keytar) {\n return null;\n }\n\n return keytar.getPassword(SERVICE_NAME, getKeytarAccountForMetadata(found));\n}\n\nasync function verifyGitHubToken(token: string): Promise<{ valid: boolean; username?: string; error?: string }> {\n try {\n const response = await fetch('https://api.github.com/user', {\n headers: {\n Authorization: `Bearer ${token}`,\n Accept: 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n return { valid: false, error: 'Invalid or expired GitHub token.' };\n }\n return { valid: false, error: `GitHub API returned ${response.status}.` };\n }\n\n const data = await response.json();\n const username = typeof data?.login === 'string' ? data.login : null;\n if (!username) {\n return { valid: false, error: 'GitHub API response did not include a username.' };\n }\n\n return { valid: true, username };\n } catch (error) {\n return { valid: false, error: `Failed to verify GitHub token: ${(error as Error).message}` };\n }\n}\n\nasync function verifyGitLabToken(serverUrl: string, token: string): Promise<{ valid: boolean; username?: string; error?: string }> {\n try {\n const normalizedUrl = normalizeGitLabServerUrl(serverUrl);\n const response = await fetch(`${normalizedUrl}/api/v4/user`, {\n headers: {\n 'PRIVATE-TOKEN': token,\n },\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n return { valid: false, error: 'Invalid or expired GitLab token.' };\n }\n return { valid: false, error: `GitLab API returned ${response.status}.` };\n }\n\n const data = await response.json();\n const username = typeof data?.username === 'string' ? data.username : null;\n if (!username) {\n return { valid: false, error: 'GitLab API response did not include a username.' };\n }\n\n return { valid: true, username };\n } catch (error) {\n return { valid: false, error: `Failed to verify GitLab token: ${(error as Error).message}` };\n }\n}\n\nexport async function createGitHubCredential(token: string): Promise<{ success: boolean; credential?: GitHubCredential; error?: string }> {\n const trimmedToken = token.trim();\n if (!trimmedToken) {\n return { success: false, error: 'GitHub token is required.' };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const verification = await verifyGitHubToken(trimmedToken);\n if (!verification.valid || !verification.username) {\n return { success: false, error: verification.error || 'Failed to verify GitHub token.' };\n }\n\n const metadata = await readCredentialsMetadata();\n const duplicate = metadata.find((credential) => (\n credential.type === 'github'\n && credential.username === verification.username\n ));\n\n if (duplicate) {\n return { success: false, error: `A GitHub credential for ${verification.username} already exists.` };\n }\n\n const id = generateId();\n const now = new Date().toISOString();\n const keytarAccount = getDefaultKeytarAccount(id);\n\n await keytar.setPassword(SERVICE_NAME, keytarAccount, trimmedToken);\n\n const created: CredentialMetadata = {\n id,\n type: 'github',\n username: verification.username,\n createdAt: now,\n updatedAt: now,\n keytarAccount,\n };\n\n metadata.push(created);\n await writeCredentialsMetadata(metadata);\n\n return {\n success: true,\n credential: {\n id: created.id,\n type: 'github',\n username: created.username,\n createdAt: created.createdAt,\n updatedAt: created.updatedAt,\n },\n };\n}\n\nexport async function createGitLabCredential(\n serverUrl: string,\n token: string,\n): Promise<{ success: boolean; credential?: GitLabCredential; error?: string }> {\n const normalizedServerUrl = normalizeGitLabServerUrl(serverUrl);\n const trimmedToken = token.trim();\n\n if (!normalizedServerUrl) {\n return { success: false, error: 'GitLab server URL is required.' };\n }\n\n try {\n new URL(normalizedServerUrl);\n } catch {\n return { success: false, error: 'GitLab server URL must be a valid URL.' };\n }\n\n if (!trimmedToken) {\n return { success: false, error: 'GitLab token is required.' };\n }\n\n let keytar: KeytarModule;\n try {\n keytar = await requireKeytar();\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n\n const verification = await verifyGitLabToken(normalizedServerUrl, trimmedToken);\n if (!verification.valid || !verification.username) {\n return { success: false, error: verification.error || 'Failed to verify GitLab token.' };\n }\n\n const metadata = await readCredentialsMetadata();\n const duplicate = metadata.find((credential) => (\n credential.type === 'gitlab'\n && credential.username === verification.username\n && credential.serverUrl === normalizedServerUrl\n ));\n\n if (duplicate) {\n return {\n success: false,\n error: `A GitLab credential for ${verification.username} on ${normalizedServerUrl} already exists.`,\n };\n }\n\n const id = generateId();\n const now = new Date().toISOString();\n const keytarAccount = getDefaultKeytarAccount(id);\n\n await keytar.setPassword(SERVICE_NAME, keytarAccount, trimmedToken);\n\n const created: CredentialMetadata = {\n id,\n type: 'gitlab',\n username: verification.username,\n serverUrl: normalizedServerUrl,\n createdAt: now,\n updatedAt: now,\n keytarAccount,\n };\n\n metadata.push(created);\n await writeCredentialsMetadata(metadata);\n\n return {\n success: true,\n credential: {\n id: created.id,\n type: 'gitlab',\n username: created.username,\n serverUrl: created.serverUrl || normalizedServerUrl,\n createdAt: created.createdAt,\n updatedAt: created.updatedAt,\n },\n };\n}\n\nexport async function deleteCredential(id: string): Promise<{ success: boolean; error?: string }> {\n const metadata = await readCredentialsMetadata();\n const index = metadata.findIndex((credential) => credential.id === id);\n\n if (index === -1) {\n return { success: false, error: 'Credential not found.' };\n }\n\n const credential = metadata[index];\n metadata.splice(index, 1);\n await writeCredentialsMetadata(metadata);\n\n const keytar = await loadKeytar();\n if (keytar) {\n await keytar.deletePassword(SERVICE_NAME, getKeytarAccountForMetadata(credential));\n }\n\n return { success: true };\n}\n","'use server';\n\nimport {\n createGitHubCredential,\n createGitLabCredential,\n deleteCredential,\n getAllCredentials,\n} from '@/lib/credentials';\nimport type { Credential } from '@/lib/credentials';\n\ntype ListCredentialsResult =\n | { success: true; credentials: Credential[] }\n | { success: false; error: string };\n\nexport async function listCredentials(): Promise<ListCredentialsResult> {\n try {\n const credentials = await getAllCredentials();\n return { success: true, credentials };\n } catch (error) {\n console.error('Failed to list credentials:', error);\n return { success: false, error: 'Failed to load credentials.' };\n }\n}\n\ntype SaveCredentialResult =\n | { success: true; credential: Credential }\n | { success: false; error: string };\n\nexport async function saveGitHubCredential(token: string): Promise<SaveCredentialResult> {\n const result = await createGitHubCredential(token);\n if (!result.success || !result.credential) {\n return { success: false, error: result.error || 'Failed to save GitHub credential.' };\n }\n\n return { success: true, credential: result.credential };\n}\n\nexport async function saveGitLabCredential(serverUrl: string, token: string): Promise<SaveCredentialResult> {\n const result = await createGitLabCredential(serverUrl, token);\n if (!result.success || !result.credential) {\n return { success: false, error: result.error || 'Failed to save GitLab credential.' };\n }\n\n return { success: true, credential: result.credential };\n}\n\ntype RemoveCredentialResult =\n | { success: true }\n | { success: false; error: string };\n\nexport async function removeCredential(id: string): Promise<RemoveCredentialResult> {\n try {\n const result = await deleteCredential(id);\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to remove credential.' };\n }\n\n return { success: true };\n } catch (error) {\n console.error('Failed to remove credential:', error);\n return { success: false, error: 'Failed to remove credential.' };\n }\n}\n","import fs from 'fs/promises';\nimport type { Dirent } from 'fs';\nimport path from 'path';\nimport { getConfig } from '@/app/actions/config';\n\nconst MAX_SCAN_DEPTH = 5;\nconst MAX_SCANNED_DIRECTORIES = 5000;\nconst RESOLUTION_CACHE_TTL_MS = 5 * 60 * 1000;\nconst SKIPPED_DIR_NAMES = new Set([\n '.git',\n 'node_modules',\n '.next',\n '.viba',\n 'dist',\n 'build',\n 'coverage',\n]);\n\ntype RepoResolutionCacheEntry = {\n repoPath: string;\n resolvedAt: number;\n};\n\ndeclare global {\n var repoResolutionCache: Map<string, RepoResolutionCacheEntry> | undefined;\n}\n\nfunction getResolutionCache(): Map<string, RepoResolutionCacheEntry> {\n if (!global.repoResolutionCache) {\n global.repoResolutionCache = new Map<string, RepoResolutionCacheEntry>();\n }\n return global.repoResolutionCache;\n}\n\nfunction cacheResolution(repoName: string, repoPath: string): void {\n getResolutionCache().set(repoName.toLowerCase(), {\n repoPath,\n resolvedAt: Date.now(),\n });\n}\n\nasync function getValidCachedResolution(repoName: string): Promise<string | null> {\n const entry = getResolutionCache().get(repoName.toLowerCase());\n if (!entry) return null;\n if (Date.now() - entry.resolvedAt > RESOLUTION_CACHE_TTL_MS) {\n getResolutionCache().delete(repoName.toLowerCase());\n return null;\n }\n\n if (await isGitRepository(entry.repoPath)) {\n return entry.repoPath;\n }\n\n getResolutionCache().delete(repoName.toLowerCase());\n return null;\n}\n\nasync function isGitRepository(dirPath: string): Promise<boolean> {\n try {\n await fs.access(path.join(dirPath, '.git'));\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasMatchingName(repoPath: string, repoName: string): boolean {\n return path.basename(repoPath).toLowerCase() === repoName.toLowerCase();\n}\n\nfunction shouldSkipDirectory(entryName: string, targetName: string): boolean {\n const lowerName = entryName.toLowerCase();\n if (lowerName === targetName) return false;\n if (SKIPPED_DIR_NAMES.has(lowerName)) return true;\n if (entryName.startsWith('.')) return true;\n return false;\n}\n\nasync function findByNameWithinRoot(rootPath: string, repoName: string): Promise<string | null> {\n const directCandidate = path.join(rootPath, repoName);\n if (await isGitRepository(directCandidate)) {\n return directCandidate;\n }\n\n const queue: Array<{ dirPath: string; depth: number }> = [{ dirPath: rootPath, depth: 0 }];\n let scannedCount = 0;\n const targetName = repoName.toLowerCase();\n\n for (let index = 0; index < queue.length; index += 1) {\n const current = queue[index];\n scannedCount += 1;\n if (scannedCount > MAX_SCANNED_DIRECTORIES) {\n break;\n }\n\n let entries: Dirent[];\n try {\n entries = await fs.readdir(current.dirPath, { withFileTypes: true });\n } catch {\n continue;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (shouldSkipDirectory(entry.name, targetName)) continue;\n\n const nextDirPath = path.join(current.dirPath, entry.name);\n\n if (entry.name.toLowerCase() === targetName && await isGitRepository(nextDirPath)) {\n return nextDirPath;\n }\n\n if (current.depth + 1 <= MAX_SCAN_DEPTH) {\n queue.push({ dirPath: nextDirPath, depth: current.depth + 1 });\n }\n }\n }\n\n return null;\n}\n\nexport async function resolveRepositoryPathByName(repoName: string): Promise<string | null> {\n const trimmedName = repoName.trim();\n if (!trimmedName) return null;\n\n const cachedResolution = await getValidCachedResolution(trimmedName);\n if (cachedResolution) {\n return cachedResolution;\n }\n\n const config = await getConfig();\n\n const recentMatches = config.recentRepos.filter((repoPath) => hasMatchingName(repoPath, trimmedName));\n for (const repoPath of recentMatches) {\n if (await isGitRepository(repoPath)) {\n cacheResolution(trimmedName, repoPath);\n return repoPath;\n }\n }\n\n const searchRoots: string[] = [];\n const visitedRoots = new Set<string>();\n for (const repoPath of config.recentRepos) {\n const parentPath = path.dirname(repoPath);\n if (!visitedRoots.has(parentPath)) {\n visitedRoots.add(parentPath);\n searchRoots.push(parentPath);\n }\n }\n if (config.defaultRoot && !visitedRoots.has(config.defaultRoot)) {\n visitedRoots.add(config.defaultRoot);\n searchRoots.push(config.defaultRoot);\n }\n\n for (const rootPath of searchRoots) {\n const resolvedPath = await findByNameWithinRoot(rootPath, trimmedName);\n if (resolvedPath) {\n cacheResolution(trimmedName, resolvedPath);\n return resolvedPath;\n }\n }\n\n return null;\n}\n","'use server';\n\nimport { resolveRepositoryPathByName } from '@/lib/repo-resolver';\n\ntype ResolveRepositoryResult = {\n success: boolean;\n repoPath: string | null;\n error?: string;\n};\n\nexport async function resolveRepositoryByName(repoName: string): Promise<ResolveRepositoryResult> {\n try {\n const resolvedPath = await resolveRepositoryPathByName(repoName);\n return {\n success: true,\n repoPath: resolvedPath,\n };\n } catch (error) {\n console.error('Failed to resolve repository by name:', error);\n return {\n success: false,\n repoPath: null,\n error: 'Failed to search repositories. Please try again.',\n };\n }\n}\n","export {checkDirectoryAccessible as '403ef707dab230c18860718e1bdf896059f3d5fd91'} from 'ACTIONS_MODULE0'\nexport {listDirectories as '40926025dfa54333beb998cd7af50d262b08857b7d'} from 'ACTIONS_MODULE0'\nexport {getHomeDirectory as '005d259cc8fa8d952f814b4fb979df53e92986d9a5'} from 'ACTIONS_MODULE0'\nexport {checkIsGitRepo as '40a7796191f83d4a386060c5b8728adf970b9cbf2c'} from 'ACTIONS_MODULE0'\nexport {getBranches as '40ef3d541634346a280afe8eb270b20a44e65c12f0'} from 'ACTIONS_MODULE0'\nexport {checkoutBranch as '6039f5f40f5cf0d2cc408be7a9ae5bfb689d8ac196'} from 'ACTIONS_MODULE0'\nexport {startTtydProcess as '7f9f1c8bfbea857703a62a8b12c5404cc5fe241ff2'} from 'ACTIONS_MODULE0'\nexport {getStartupScript as '7ffe03accac8ebe36db5f881f52a53547a4e0e9903'} from 'ACTIONS_MODULE0'\nexport {getDefaultDevServerScript as '7fa7e9c4cf5a3fd0284293b74e27199a5b60b6fdf5'} from 'ACTIONS_MODULE0'\nexport {listRepoFiles as '7f2fc548d4b7196815ce7140fbc75c85a186233828'} from 'ACTIONS_MODULE0'\nexport {saveAttachments as '7f5447571c45e842042484075d6317cc6616d95234'} from 'ACTIONS_MODULE0'\nexport {checkAgentCliInstalled as '40ce90bc4dfaf88079b648b8bebf9271e1ff650388'} from 'ACTIONS_MODULE0'\nexport {installAgentCli as '407994deb1605079bc7f7d7d119e1aedb3d719c7a8'} from 'ACTIONS_MODULE0'\nexport {resolveRepositoryByName as '404b9a81ad08961f5663afc48da41f5dea5266acce'} from 'ACTIONS_MODULE1'\nexport {copySessionAttachments as '704c9027e7bf3d827fd63f3e4f5fa807b18886e1ae'} from 'ACTIONS_MODULE2'\nexport {createSession as '70778b8dc6016e978ec4727eac642d772029330eda'} from 'ACTIONS_MODULE2'\nexport {deleteSession as '409403aa85eead3387f294f47402c012ceb5c91bbd'} from 'ACTIONS_MODULE2'\nexport {getSessionPrefillContext as '4070abb4a7b4faa1523dad0dc921f2c7e09885a380'} from 'ACTIONS_MODULE2'\nexport {listSessions as '40a8d0ecc48f9bb727d3395a6033866ee92b41a006'} from 'ACTIONS_MODULE2'\nexport {saveSessionLaunchContext as '60ec6db86191de8841beb65e6cd1e09bb6145fae5f'} from 'ACTIONS_MODULE2'\nexport {getConfig as '00cd80dc5a4a84c6544b997eb412d9fec0f08638d5'} from 'ACTIONS_MODULE3'\nexport {updateConfig as '4014476978d1b7b7928122371ecaf1a366c694b482'} from 'ACTIONS_MODULE3'\nexport {updateRepoSettings as '603cd11d6744363d69162d87cd83724a5ba6d81c66'} from 'ACTIONS_MODULE3'\nexport {listCredentials as '009a52b5211f7188280192b7f54d2b7d360227dbb3'} from 'ACTIONS_MODULE4'\n"],"names":["registerServerReference","ensureServerEntryExports","actions","i","length","action","Error"],"mappings":"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","ignoreList":[0,1]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[72131,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].React},38783,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactServerDOMTurbopackClient},35112,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactDOM},9270,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.AppRouterContext},36313,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.HooksClientContext},18341,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.ServerInsertedHtml},18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},42602,(a,b,c)=>{"use strict";b.exports=a.r(18622)},87924,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactJsxRuntime},
|
|
1
|
+
module.exports=[72131,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].React},38783,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactServerDOMTurbopackClient},35112,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactDOM},9270,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.AppRouterContext},36313,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.HooksClientContext},18341,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.ServerInsertedHtml},18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},42602,(a,b,c)=>{"use strict";b.exports=a.r(18622)},87924,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactJsxRuntime},12239,a=>{"use strict";var b=a.i(5050);let c=(0,b.createServerReference)("009a52b5211f7188280192b7f54d2b7d360227dbb3",b.callServer,void 0,b.findSourceMapURL,"listCredentials");a.s(["listCredentials",()=>c])},37047,a=>{"use strict";let b=(0,a.i(70106).default)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);a.s(["KeyRound",()=>b],37047)},12465,a=>{"use strict";var b=a.i(87924),c=a.i(12239),d=a.i(5050);let e=(0,d.createServerReference)("40badba051858a0eefeb404f511e0df8053a815b20",d.callServer,void 0,d.findSourceMapURL,"removeCredential"),f=(0,d.createServerReference)("40be8b850b232f864e7ab716e5d1d982c37793c20b",d.callServer,void 0,d.findSourceMapURL,"saveGitHubCredential"),g=(0,d.createServerReference)("60c0fb15bb860aa80aab9cecb3b35b3b7faec3a36b",d.callServer,void 0,d.findSourceMapURL,"saveGitLabCredential");var h=a.i(210),i=a.i(37047),j=a.i(81560),k=a.i(71987),l=a.i(50944),m=a.i(72131);let n="https://gitlab.com",o={github:"https://www.google.com/s2/favicons?domain=github.com&sz=64",gitlab:"https://www.google.com/s2/favicons?domain=gitlab.com&sz=64"};function p(a){return"github"===a?"GitHub":"GitLab"}function q({type:a}){return(0,b.jsx)(k.default,{src:o[a],alt:`${p(a)} icon`,width:20,height:20,className:"h-5 w-5 rounded-sm",unoptimized:!0})}function r(){let a=(0,l.useRouter)(),[d,k]=(0,m.useState)([]),[o,r]=(0,m.useState)(!0),[s,t]=(0,m.useState)(""),[u,v]=(0,m.useState)(""),[w,x]=(0,m.useState)(n),[y,z]=(0,m.useState)(null),[A,B]=(0,m.useState)(null),[C,D]=(0,m.useState)(null),E=(0,m.useMemo)(()=>d.filter(a=>"github"===a.type),[d]),F=(0,m.useMemo)(()=>d.filter(a=>"gitlab"===a.type),[d]),G=async()=>{let a=await (0,c.listCredentials)();if(!a.success){D({tone:"error",text:a.error}),r(!1);return}k(a.credentials),r(!1)};(0,m.useEffect)(()=>{let a=!0;return(async()=>{let b=await (0,c.listCredentials)();if(a){if(!b.success){D({tone:"error",text:b.error}),r(!1);return}k(b.credentials),r(!1)}})(),()=>{a=!1}},[]);let H=async()=>{D(null),z("github");let a=await f(s);if(!a.success){D({tone:"error",text:a.error}),z(null);return}t(""),D({tone:"success",text:"GitHub credential added."}),await G(),z(null)},I=async()=>{D(null),z("gitlab");let a=await g(w,u);if(!a.success){D({tone:"error",text:a.error}),z(null);return}v(""),D({tone:"success",text:"GitLab credential added."}),await G(),z(null)},J=async a=>{let b=p(a.type);if(!confirm(`Delete this ${b} credential for ${"gitlab"===a.type?`${a.username} @ ${a.serverUrl}`:a.username}?`))return;D(null),B(a.id);let c=await e(a.id);if(!c.success){D({tone:"error",text:c.error}),B(null);return}D({tone:"success",text:`${b} credential deleted.`}),await G(),B(null)};return(0,b.jsx)("main",{className:"min-h-screen bg-base-100 p-4 md:p-10",children:(0,b.jsxs)("div",{className:"mx-auto w-full max-w-5xl space-y-5",children:[(0,b.jsx)("div",{className:"flex items-center justify-between",children:(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsxs)("button",{className:"btn btn-ghost btn-sm",onClick:()=>a.push("/"),children:[(0,b.jsx)(h.ArrowLeft,{className:"h-4 w-4"}),"Back"]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold",children:"Credentials"}),(0,b.jsx)("p",{className:"text-sm opacity-70",children:"GitHub and GitLab API tokens are stored securely in your system keychain."})]})]})}),C&&(0,b.jsx)("div",{className:`alert ${"error"===C.tone?"alert-error":"alert-success"} text-sm`,children:C.text}),o?(0,b.jsx)("div",{className:"card bg-base-200 shadow-xl",children:(0,b.jsxs)("div",{className:"card-body items-center py-10",children:[(0,b.jsx)("span",{className:"loading loading-spinner loading-md"}),(0,b.jsx)("p",{className:"text-sm opacity-70",children:"Loading credentials..."})]})}):(0,b.jsxs)("div",{className:"grid grid-cols-1 gap-5 lg:grid-cols-2 items-start",children:[(0,b.jsx)("div",{className:"card bg-base-200 shadow-xl",children:(0,b.jsxs)("div",{className:"card-body space-y-4",children:[(0,b.jsxs)("h2",{className:"card-title flex items-center gap-2",children:[(0,b.jsx)(q,{type:"github"}),"GitHub"]}),(0,b.jsxs)("label",{className:"form-control w-full gap-2",children:[(0,b.jsx)("span",{className:"label-text text-xs uppercase tracking-wide opacity-70",children:"Personal Access Token"}),(0,b.jsx)("input",{type:"password",className:"input input-bordered w-full",placeholder:"ghp_xxx",value:s,onChange:a=>t(a.target.value),disabled:"github"===y})]}),(0,b.jsx)("div",{className:"card-actions justify-end pt-1",children:(0,b.jsxs)("button",{className:"btn btn-primary btn-sm",onClick:()=>void H(),disabled:"github"===y,children:["github"===y?(0,b.jsx)("span",{className:"loading loading-spinner loading-xs"}):(0,b.jsx)(i.KeyRound,{className:"h-4 w-4"}),"Add Credential"]})}),(0,b.jsx)("div",{className:"divider my-0"}),0===E.length?(0,b.jsx)("div",{className:"text-sm opacity-60",children:"No GitHub credentials saved."}):(0,b.jsx)("div",{className:"space-y-2",children:E.map(a=>(0,b.jsx)("div",{className:"rounded-md border border-base-300 bg-base-100 p-3",children:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0 flex items-start gap-2",children:[(0,b.jsx)(q,{type:"github"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"text-sm font-medium truncate",children:a.username}),(0,b.jsxs)("div",{className:"text-xs opacity-60",children:["Updated ",new Date(a.updatedAt).toLocaleString()]})]})]}),(0,b.jsxs)("button",{className:"btn btn-error btn-outline btn-xs",onClick:()=>void J(a),disabled:A===a.id,children:[A===a.id?(0,b.jsx)("span",{className:"loading loading-spinner loading-xs"}):(0,b.jsx)(j.Trash2,{className:"h-3.5 w-3.5"}),"Delete"]})]})},a.id))})]})}),(0,b.jsx)("div",{className:"card bg-base-200 shadow-xl",children:(0,b.jsxs)("div",{className:"card-body space-y-4",children:[(0,b.jsxs)("h2",{className:"card-title flex items-center gap-2",children:[(0,b.jsx)(q,{type:"gitlab"}),"GitLab"]}),(0,b.jsxs)("label",{className:"form-control w-full gap-2",children:[(0,b.jsx)("span",{className:"label-text text-xs uppercase tracking-wide opacity-70",children:"Server URL"}),(0,b.jsx)("input",{type:"url",className:"input input-bordered w-full",placeholder:n,value:w,onChange:a=>x(a.target.value),disabled:"gitlab"===y})]}),(0,b.jsxs)("label",{className:"form-control w-full gap-2",children:[(0,b.jsx)("span",{className:"label-text text-xs uppercase tracking-wide opacity-70",children:"Personal Access Token"}),(0,b.jsx)("input",{type:"password",className:"input input-bordered w-full",placeholder:"glpat-xxx",value:u,onChange:a=>v(a.target.value),disabled:"gitlab"===y})]}),(0,b.jsx)("div",{className:"card-actions justify-end pt-1",children:(0,b.jsxs)("button",{className:"btn btn-primary btn-sm",onClick:()=>void I(),disabled:"gitlab"===y,children:["gitlab"===y?(0,b.jsx)("span",{className:"loading loading-spinner loading-xs"}):(0,b.jsx)(i.KeyRound,{className:"h-4 w-4"}),"Add Credential"]})}),(0,b.jsx)("div",{className:"divider my-0"}),0===F.length?(0,b.jsx)("div",{className:"text-sm opacity-60",children:"No GitLab credentials saved."}):(0,b.jsx)("div",{className:"space-y-2",children:F.map(a=>(0,b.jsx)("div",{className:"rounded-md border border-base-300 bg-base-100 p-3",children:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0 flex items-start gap-2",children:[(0,b.jsx)(q,{type:"gitlab"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"text-sm font-medium truncate",children:a.username}),(0,b.jsx)("div",{className:"text-xs opacity-70 truncate",children:a.serverUrl}),(0,b.jsxs)("div",{className:"text-xs opacity-60",children:["Updated ",new Date(a.updatedAt).toLocaleString()]})]})]}),(0,b.jsxs)("button",{className:"btn btn-error btn-outline btn-xs",onClick:()=>void J(a),disabled:A===a.id,children:[A===a.id?(0,b.jsx)("span",{className:"loading loading-spinner loading-xs"}):(0,b.jsx)(j.Trash2,{className:"h-3.5 w-3.5"}),"Delete"]})]})},a.id))})]})})]})]})})}a.s(["default",()=>r],12465)}];
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%
|
|
3
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__284fa850._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts","../../../../node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../src/app/actions/data%3Abdd875%20%3Ctext/javascript%3E","../../../../node_modules/lucide-react/src/icons/key-round.ts","../../../../src/app/credentials/page.tsx","../../../../src/app/actions/data%3Aad0d52%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A271fdd%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A73f67b%20%3Ctext/javascript%3E"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n","if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","/* __next_internal_action_entry_do_not_use__ [{\"006edcb834638d6a409c75d84a4bb1f2b48b6df3b2\":\"listCredentials\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"006edcb834638d6a409c75d84a4bb1f2b48b6df3b2\",callServer,void 0,findSourceMapURL,\"listCredentials\");export{$$RSC_SERVER_ACTION_0 as listCredentials};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z',\n key: '1s6t7t',\n },\n ],\n ['circle', { cx: '16.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'w0ekpg' }],\n];\n\n/**\n * @component @name KeyRound\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/key-round\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst KeyRound = createLucideIcon('key-round', __iconNode);\n\nexport default KeyRound;\n","'use client';\n\nimport { listCredentials, removeCredential, saveGitHubCredential, saveGitLabCredential } from '@/app/actions/credentials';\nimport type { Credential, CredentialType, GitLabCredential } from '@/lib/credentials';\nimport { ArrowLeft, KeyRound, Trash2 } from 'lucide-react';\nimport Image from 'next/image';\nimport { useRouter } from 'next/navigation';\nimport { useEffect, useMemo, useState } from 'react';\n\nconst DEFAULT_GITLAB_SERVER_URL = 'https://gitlab.com';\nconst PROVIDER_ICON_URLS = {\n github: 'https://www.google.com/s2/favicons?domain=github.com&sz=64',\n gitlab: 'https://www.google.com/s2/favicons?domain=gitlab.com&sz=64',\n} as const;\n\ntype FlashMessage = {\n tone: 'success' | 'error';\n text: string;\n} | null;\n\nfunction formatCredentialSubtitle(credential: Credential): string {\n if (credential.type === 'gitlab') {\n return `${credential.username} @ ${credential.serverUrl}`;\n }\n return credential.username;\n}\n\nfunction formatProviderLabel(type: CredentialType): string {\n return type === 'github' ? 'GitHub' : 'GitLab';\n}\n\nfunction ProviderIcon({ type }: { type: CredentialType }) {\n return (\n <Image\n src={PROVIDER_ICON_URLS[type]}\n alt={`${formatProviderLabel(type)} icon`}\n width={20}\n height={20}\n className=\"h-5 w-5 rounded-sm\"\n unoptimized\n />\n );\n}\n\nexport default function CredentialsPage() {\n const router = useRouter();\n\n const [credentials, setCredentials] = useState<Credential[]>([]);\n const [loading, setLoading] = useState(true);\n\n const [githubToken, setGitHubToken] = useState('');\n const [gitlabToken, setGitLabToken] = useState('');\n const [gitlabServerUrl, setGitLabServerUrl] = useState(DEFAULT_GITLAB_SERVER_URL);\n\n const [savingType, setSavingType] = useState<CredentialType | null>(null);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [flashMessage, setFlashMessage] = useState<FlashMessage>(null);\n\n const githubCredentials = useMemo(\n () => credentials.filter((credential) => credential.type === 'github'),\n [credentials],\n );\n\n const gitlabCredentials = useMemo(\n () => credentials.filter((credential) => credential.type === 'gitlab') as GitLabCredential[],\n [credentials],\n );\n\n const reloadCredentials = async () => {\n const result = await listCredentials();\n\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setLoading(false);\n return;\n }\n\n setCredentials(result.credentials);\n setLoading(false);\n };\n\n useEffect(() => {\n let isActive = true;\n\n void (async () => {\n const result = await listCredentials();\n if (!isActive) return;\n\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setLoading(false);\n return;\n }\n\n setCredentials(result.credentials);\n setLoading(false);\n })();\n\n return () => {\n isActive = false;\n };\n }, []);\n\n const handleSaveGitHub = async () => {\n setFlashMessage(null);\n setSavingType('github');\n\n const result = await saveGitHubCredential(githubToken);\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setSavingType(null);\n return;\n }\n\n setGitHubToken('');\n setFlashMessage({ tone: 'success', text: 'GitHub credential added.' });\n await reloadCredentials();\n setSavingType(null);\n };\n\n const handleSaveGitLab = async () => {\n setFlashMessage(null);\n setSavingType('gitlab');\n\n const result = await saveGitLabCredential(gitlabServerUrl, gitlabToken);\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setSavingType(null);\n return;\n }\n\n setGitLabToken('');\n setFlashMessage({ tone: 'success', text: 'GitLab credential added.' });\n await reloadCredentials();\n setSavingType(null);\n };\n\n const handleDelete = async (credential: Credential) => {\n const providerLabel = formatProviderLabel(credential.type);\n const confirmed = confirm(`Delete this ${providerLabel} credential for ${formatCredentialSubtitle(credential)}?`);\n if (!confirmed) return;\n\n setFlashMessage(null);\n setDeletingId(credential.id);\n\n const result = await removeCredential(credential.id);\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setDeletingId(null);\n return;\n }\n\n setFlashMessage({ tone: 'success', text: `${providerLabel} credential deleted.` });\n await reloadCredentials();\n setDeletingId(null);\n };\n\n return (\n <main className=\"min-h-screen bg-base-100 p-4 md:p-10\">\n <div className=\"mx-auto w-full max-w-5xl space-y-5\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <button className=\"btn btn-ghost btn-sm\" onClick={() => router.push('/')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back\n </button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Credentials</h1>\n <p className=\"text-sm opacity-70\">GitHub and GitLab API tokens are stored securely in your system keychain.</p>\n </div>\n </div>\n </div>\n\n {flashMessage && (\n <div className={`alert ${flashMessage.tone === 'error' ? 'alert-error' : 'alert-success'} text-sm`}>\n {flashMessage.text}\n </div>\n )}\n\n {loading ? (\n <div className=\"card bg-base-200 shadow-xl\">\n <div className=\"card-body items-center py-10\">\n <span className=\"loading loading-spinner loading-md\"></span>\n <p className=\"text-sm opacity-70\">Loading credentials...</p>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-5 lg:grid-cols-2 items-start\">\n <div className=\"card bg-base-200 shadow-xl\">\n <div className=\"card-body space-y-4\">\n <h2 className=\"card-title flex items-center gap-2\">\n <ProviderIcon type=\"github\" />\n GitHub\n </h2>\n\n <label className=\"form-control w-full gap-2\">\n <span className=\"label-text text-xs uppercase tracking-wide opacity-70\">Personal Access Token</span>\n <input\n type=\"password\"\n className=\"input input-bordered w-full\"\n placeholder=\"ghp_xxx\"\n value={githubToken}\n onChange={(event) => setGitHubToken(event.target.value)}\n disabled={savingType === 'github'}\n />\n </label>\n\n <div className=\"card-actions justify-end pt-1\">\n <button\n className=\"btn btn-primary btn-sm\"\n onClick={() => void handleSaveGitHub()}\n disabled={savingType === 'github'}\n >\n {savingType === 'github' ? <span className=\"loading loading-spinner loading-xs\"></span> : <KeyRound className=\"h-4 w-4\" />}\n Add Credential\n </button>\n </div>\n\n <div className=\"divider my-0\"></div>\n\n {githubCredentials.length === 0 ? (\n <div className=\"text-sm opacity-60\">No GitHub credentials saved.</div>\n ) : (\n <div className=\"space-y-2\">\n {githubCredentials.map((credential) => (\n <div key={credential.id} className=\"rounded-md border border-base-300 bg-base-100 p-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0 flex items-start gap-2\">\n <ProviderIcon type=\"github\" />\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium truncate\">{credential.username}</div>\n <div className=\"text-xs opacity-60\">Updated {new Date(credential.updatedAt).toLocaleString()}</div>\n </div>\n </div>\n <button\n className=\"btn btn-error btn-outline btn-xs\"\n onClick={() => void handleDelete(credential)}\n disabled={deletingId === credential.id}\n >\n {deletingId === credential.id ? <span className=\"loading loading-spinner loading-xs\"></span> : <Trash2 className=\"h-3.5 w-3.5\" />}\n Delete\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"card bg-base-200 shadow-xl\">\n <div className=\"card-body space-y-4\">\n <h2 className=\"card-title flex items-center gap-2\">\n <ProviderIcon type=\"gitlab\" />\n GitLab\n </h2>\n\n <label className=\"form-control w-full gap-2\">\n <span className=\"label-text text-xs uppercase tracking-wide opacity-70\">Server URL</span>\n <input\n type=\"url\"\n className=\"input input-bordered w-full\"\n placeholder={DEFAULT_GITLAB_SERVER_URL}\n value={gitlabServerUrl}\n onChange={(event) => setGitLabServerUrl(event.target.value)}\n disabled={savingType === 'gitlab'}\n />\n </label>\n\n <label className=\"form-control w-full gap-2\">\n <span className=\"label-text text-xs uppercase tracking-wide opacity-70\">Personal Access Token</span>\n <input\n type=\"password\"\n className=\"input input-bordered w-full\"\n placeholder=\"glpat-xxx\"\n value={gitlabToken}\n onChange={(event) => setGitLabToken(event.target.value)}\n disabled={savingType === 'gitlab'}\n />\n </label>\n\n <div className=\"card-actions justify-end pt-1\">\n <button\n className=\"btn btn-primary btn-sm\"\n onClick={() => void handleSaveGitLab()}\n disabled={savingType === 'gitlab'}\n >\n {savingType === 'gitlab' ? <span className=\"loading loading-spinner loading-xs\"></span> : <KeyRound className=\"h-4 w-4\" />}\n Add Credential\n </button>\n </div>\n\n <div className=\"divider my-0\"></div>\n\n {gitlabCredentials.length === 0 ? (\n <div className=\"text-sm opacity-60\">No GitLab credentials saved.</div>\n ) : (\n <div className=\"space-y-2\">\n {gitlabCredentials.map((credential) => (\n <div key={credential.id} className=\"rounded-md border border-base-300 bg-base-100 p-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0 flex items-start gap-2\">\n <ProviderIcon type=\"gitlab\" />\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium truncate\">{credential.username}</div>\n <div className=\"text-xs opacity-70 truncate\">{credential.serverUrl}</div>\n <div className=\"text-xs opacity-60\">Updated {new Date(credential.updatedAt).toLocaleString()}</div>\n </div>\n </div>\n <button\n className=\"btn btn-error btn-outline btn-xs\"\n onClick={() => void handleDelete(credential)}\n disabled={deletingId === credential.id}\n >\n {deletingId === credential.id ? <span className=\"loading loading-spinner loading-xs\"></span> : <Trash2 className=\"h-3.5 w-3.5\" />}\n Delete\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n </main>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40a0538d3114dce098ab97a25d13020860eaee8ddb\":\"removeCredential\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40a0538d3114dce098ab97a25d13020860eaee8ddb\",callServer,void 0,findSourceMapURL,\"removeCredential\");export{$$RSC_SERVER_ACTION_3 as removeCredential};","/* __next_internal_action_entry_do_not_use__ [{\"40f158358ed7b854c874f851d030b61480c4104808\":\"saveGitHubCredential\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40f158358ed7b854c874f851d030b61480c4104808\",callServer,void 0,findSourceMapURL,\"saveGitHubCredential\");export{$$RSC_SERVER_ACTION_1 as saveGitHubCredential};","/* __next_internal_action_entry_do_not_use__ [{\"6098a2f981827c8c16ff072dd69cb19ac07b11458c\":\"saveGitLabCredential\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"6098a2f981827c8c16ff072dd69cb19ac07b11458c\",callServer,void 0,findSourceMapURL,\"saveGitLabCredential\");export{$$RSC_SERVER_ACTION_2 as saveGitLabCredential};"],"names":["module","exports","require","vendored","React","ReactServerDOMTurbopackClient","ReactDOM","AppRouterContext","HooksClientContext","ServerInsertedHtml","process","env","NEXT_RUNTIME","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","ReactJsxRuntime"],"mappings":"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","ignoreList":[0,1,2,3,4,5,6,7,9]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts","../../../../node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../src/app/actions/data%3A929531%20%3Ctext/javascript%3E","../../../../node_modules/lucide-react/src/icons/key-round.ts","../../../../src/app/credentials/page.tsx","../../../../src/app/actions/data%3Aa96fa0%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ad1418f%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Af716d4%20%3Ctext/javascript%3E"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n","if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","/* __next_internal_action_entry_do_not_use__ [{\"009a52b5211f7188280192b7f54d2b7d360227dbb3\":\"listCredentials\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"009a52b5211f7188280192b7f54d2b7d360227dbb3\",callServer,void 0,findSourceMapURL,\"listCredentials\");export{$$RSC_SERVER_ACTION_0 as listCredentials};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z',\n key: '1s6t7t',\n },\n ],\n ['circle', { cx: '16.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'w0ekpg' }],\n];\n\n/**\n * @component @name KeyRound\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/key-round\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst KeyRound = createLucideIcon('key-round', __iconNode);\n\nexport default KeyRound;\n","'use client';\n\nimport { listCredentials, removeCredential, saveGitHubCredential, saveGitLabCredential } from '@/app/actions/credentials';\nimport type { Credential, CredentialType, GitLabCredential } from '@/lib/credentials';\nimport { ArrowLeft, KeyRound, Trash2 } from 'lucide-react';\nimport Image from 'next/image';\nimport { useRouter } from 'next/navigation';\nimport { useEffect, useMemo, useState } from 'react';\n\nconst DEFAULT_GITLAB_SERVER_URL = 'https://gitlab.com';\nconst PROVIDER_ICON_URLS = {\n github: 'https://www.google.com/s2/favicons?domain=github.com&sz=64',\n gitlab: 'https://www.google.com/s2/favicons?domain=gitlab.com&sz=64',\n} as const;\n\ntype FlashMessage = {\n tone: 'success' | 'error';\n text: string;\n} | null;\n\nfunction formatCredentialSubtitle(credential: Credential): string {\n if (credential.type === 'gitlab') {\n return `${credential.username} @ ${credential.serverUrl}`;\n }\n return credential.username;\n}\n\nfunction formatProviderLabel(type: CredentialType): string {\n return type === 'github' ? 'GitHub' : 'GitLab';\n}\n\nfunction ProviderIcon({ type }: { type: CredentialType }) {\n return (\n <Image\n src={PROVIDER_ICON_URLS[type]}\n alt={`${formatProviderLabel(type)} icon`}\n width={20}\n height={20}\n className=\"h-5 w-5 rounded-sm\"\n unoptimized\n />\n );\n}\n\nexport default function CredentialsPage() {\n const router = useRouter();\n\n const [credentials, setCredentials] = useState<Credential[]>([]);\n const [loading, setLoading] = useState(true);\n\n const [githubToken, setGitHubToken] = useState('');\n const [gitlabToken, setGitLabToken] = useState('');\n const [gitlabServerUrl, setGitLabServerUrl] = useState(DEFAULT_GITLAB_SERVER_URL);\n\n const [savingType, setSavingType] = useState<CredentialType | null>(null);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [flashMessage, setFlashMessage] = useState<FlashMessage>(null);\n\n const githubCredentials = useMemo(\n () => credentials.filter((credential) => credential.type === 'github'),\n [credentials],\n );\n\n const gitlabCredentials = useMemo(\n () => credentials.filter((credential) => credential.type === 'gitlab') as GitLabCredential[],\n [credentials],\n );\n\n const reloadCredentials = async () => {\n const result = await listCredentials();\n\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setLoading(false);\n return;\n }\n\n setCredentials(result.credentials);\n setLoading(false);\n };\n\n useEffect(() => {\n let isActive = true;\n\n void (async () => {\n const result = await listCredentials();\n if (!isActive) return;\n\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setLoading(false);\n return;\n }\n\n setCredentials(result.credentials);\n setLoading(false);\n })();\n\n return () => {\n isActive = false;\n };\n }, []);\n\n const handleSaveGitHub = async () => {\n setFlashMessage(null);\n setSavingType('github');\n\n const result = await saveGitHubCredential(githubToken);\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setSavingType(null);\n return;\n }\n\n setGitHubToken('');\n setFlashMessage({ tone: 'success', text: 'GitHub credential added.' });\n await reloadCredentials();\n setSavingType(null);\n };\n\n const handleSaveGitLab = async () => {\n setFlashMessage(null);\n setSavingType('gitlab');\n\n const result = await saveGitLabCredential(gitlabServerUrl, gitlabToken);\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setSavingType(null);\n return;\n }\n\n setGitLabToken('');\n setFlashMessage({ tone: 'success', text: 'GitLab credential added.' });\n await reloadCredentials();\n setSavingType(null);\n };\n\n const handleDelete = async (credential: Credential) => {\n const providerLabel = formatProviderLabel(credential.type);\n const confirmed = confirm(`Delete this ${providerLabel} credential for ${formatCredentialSubtitle(credential)}?`);\n if (!confirmed) return;\n\n setFlashMessage(null);\n setDeletingId(credential.id);\n\n const result = await removeCredential(credential.id);\n if (!result.success) {\n setFlashMessage({ tone: 'error', text: result.error });\n setDeletingId(null);\n return;\n }\n\n setFlashMessage({ tone: 'success', text: `${providerLabel} credential deleted.` });\n await reloadCredentials();\n setDeletingId(null);\n };\n\n return (\n <main className=\"min-h-screen bg-base-100 p-4 md:p-10\">\n <div className=\"mx-auto w-full max-w-5xl space-y-5\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <button className=\"btn btn-ghost btn-sm\" onClick={() => router.push('/')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back\n </button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Credentials</h1>\n <p className=\"text-sm opacity-70\">GitHub and GitLab API tokens are stored securely in your system keychain.</p>\n </div>\n </div>\n </div>\n\n {flashMessage && (\n <div className={`alert ${flashMessage.tone === 'error' ? 'alert-error' : 'alert-success'} text-sm`}>\n {flashMessage.text}\n </div>\n )}\n\n {loading ? (\n <div className=\"card bg-base-200 shadow-xl\">\n <div className=\"card-body items-center py-10\">\n <span className=\"loading loading-spinner loading-md\"></span>\n <p className=\"text-sm opacity-70\">Loading credentials...</p>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-5 lg:grid-cols-2 items-start\">\n <div className=\"card bg-base-200 shadow-xl\">\n <div className=\"card-body space-y-4\">\n <h2 className=\"card-title flex items-center gap-2\">\n <ProviderIcon type=\"github\" />\n GitHub\n </h2>\n\n <label className=\"form-control w-full gap-2\">\n <span className=\"label-text text-xs uppercase tracking-wide opacity-70\">Personal Access Token</span>\n <input\n type=\"password\"\n className=\"input input-bordered w-full\"\n placeholder=\"ghp_xxx\"\n value={githubToken}\n onChange={(event) => setGitHubToken(event.target.value)}\n disabled={savingType === 'github'}\n />\n </label>\n\n <div className=\"card-actions justify-end pt-1\">\n <button\n className=\"btn btn-primary btn-sm\"\n onClick={() => void handleSaveGitHub()}\n disabled={savingType === 'github'}\n >\n {savingType === 'github' ? <span className=\"loading loading-spinner loading-xs\"></span> : <KeyRound className=\"h-4 w-4\" />}\n Add Credential\n </button>\n </div>\n\n <div className=\"divider my-0\"></div>\n\n {githubCredentials.length === 0 ? (\n <div className=\"text-sm opacity-60\">No GitHub credentials saved.</div>\n ) : (\n <div className=\"space-y-2\">\n {githubCredentials.map((credential) => (\n <div key={credential.id} className=\"rounded-md border border-base-300 bg-base-100 p-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0 flex items-start gap-2\">\n <ProviderIcon type=\"github\" />\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium truncate\">{credential.username}</div>\n <div className=\"text-xs opacity-60\">Updated {new Date(credential.updatedAt).toLocaleString()}</div>\n </div>\n </div>\n <button\n className=\"btn btn-error btn-outline btn-xs\"\n onClick={() => void handleDelete(credential)}\n disabled={deletingId === credential.id}\n >\n {deletingId === credential.id ? <span className=\"loading loading-spinner loading-xs\"></span> : <Trash2 className=\"h-3.5 w-3.5\" />}\n Delete\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"card bg-base-200 shadow-xl\">\n <div className=\"card-body space-y-4\">\n <h2 className=\"card-title flex items-center gap-2\">\n <ProviderIcon type=\"gitlab\" />\n GitLab\n </h2>\n\n <label className=\"form-control w-full gap-2\">\n <span className=\"label-text text-xs uppercase tracking-wide opacity-70\">Server URL</span>\n <input\n type=\"url\"\n className=\"input input-bordered w-full\"\n placeholder={DEFAULT_GITLAB_SERVER_URL}\n value={gitlabServerUrl}\n onChange={(event) => setGitLabServerUrl(event.target.value)}\n disabled={savingType === 'gitlab'}\n />\n </label>\n\n <label className=\"form-control w-full gap-2\">\n <span className=\"label-text text-xs uppercase tracking-wide opacity-70\">Personal Access Token</span>\n <input\n type=\"password\"\n className=\"input input-bordered w-full\"\n placeholder=\"glpat-xxx\"\n value={gitlabToken}\n onChange={(event) => setGitLabToken(event.target.value)}\n disabled={savingType === 'gitlab'}\n />\n </label>\n\n <div className=\"card-actions justify-end pt-1\">\n <button\n className=\"btn btn-primary btn-sm\"\n onClick={() => void handleSaveGitLab()}\n disabled={savingType === 'gitlab'}\n >\n {savingType === 'gitlab' ? <span className=\"loading loading-spinner loading-xs\"></span> : <KeyRound className=\"h-4 w-4\" />}\n Add Credential\n </button>\n </div>\n\n <div className=\"divider my-0\"></div>\n\n {gitlabCredentials.length === 0 ? (\n <div className=\"text-sm opacity-60\">No GitLab credentials saved.</div>\n ) : (\n <div className=\"space-y-2\">\n {gitlabCredentials.map((credential) => (\n <div key={credential.id} className=\"rounded-md border border-base-300 bg-base-100 p-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0 flex items-start gap-2\">\n <ProviderIcon type=\"gitlab\" />\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium truncate\">{credential.username}</div>\n <div className=\"text-xs opacity-70 truncate\">{credential.serverUrl}</div>\n <div className=\"text-xs opacity-60\">Updated {new Date(credential.updatedAt).toLocaleString()}</div>\n </div>\n </div>\n <button\n className=\"btn btn-error btn-outline btn-xs\"\n onClick={() => void handleDelete(credential)}\n disabled={deletingId === credential.id}\n >\n {deletingId === credential.id ? <span className=\"loading loading-spinner loading-xs\"></span> : <Trash2 className=\"h-3.5 w-3.5\" />}\n Delete\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n </main>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40badba051858a0eefeb404f511e0df8053a815b20\":\"removeCredential\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40badba051858a0eefeb404f511e0df8053a815b20\",callServer,void 0,findSourceMapURL,\"removeCredential\");export{$$RSC_SERVER_ACTION_3 as removeCredential};","/* __next_internal_action_entry_do_not_use__ [{\"40be8b850b232f864e7ab716e5d1d982c37793c20b\":\"saveGitHubCredential\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40be8b850b232f864e7ab716e5d1d982c37793c20b\",callServer,void 0,findSourceMapURL,\"saveGitHubCredential\");export{$$RSC_SERVER_ACTION_1 as saveGitHubCredential};","/* __next_internal_action_entry_do_not_use__ [{\"60c0fb15bb860aa80aab9cecb3b35b3b7faec3a36b\":\"saveGitLabCredential\"},\"src/app/actions/credentials.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"60c0fb15bb860aa80aab9cecb3b35b3b7faec3a36b\",callServer,void 0,findSourceMapURL,\"saveGitLabCredential\");export{$$RSC_SERVER_ACTION_2 as saveGitLabCredential};"],"names":["module","exports","require","vendored","React","ReactServerDOMTurbopackClient","ReactDOM","AppRouterContext","HooksClientContext","ServerInsertedHtml","process","env","NEXT_RUNTIME","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","ReactJsxRuntime"],"mappings":"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","ignoreList":[0,1,2,3,4,5,6,7,9]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
module.exports=[24868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},46786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},37936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(11857)},70798,a=>{"use strict";var b=a.i(24868),c=a.i(46786),d=a.i(14747);let e="viba-git-credentials",f=null,g=null,h=!1;function i(){return g?`Secure credential storage is unavailable: ${g}`:"Secure credential storage is unavailable in this runtime."}async function j(){return f||(f=a.A(45581).then(a=>a.default??a).catch(a=>(g=a instanceof Error?a.message:String(a),h||(h=!0,console.warn(`[credentials] ${i()}`)),null))),f}async function k(){let a=await j();if(!a)throw Error(i());return a}function l(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function m(a){return a.trim().replace(/\/$/,"")}function n(a){return`credential-${a}`}function o(a){return`credential-${a}`}function p(a){return a.keytarAccount||n(a.id)}function q(a){return"gitlab"===a.type?{id:a.id,type:"gitlab",username:a.username,serverUrl:a.serverUrl||"https://gitlab.com",createdAt:a.createdAt,updatedAt:a.updatedAt}:{id:a.id,type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt}}async function r(){let a=d.default.join(c.default.homedir(),".viba");return await b.default.mkdir(a,{recursive:!0}),d.default.join(a,"credentials.json")}function s(a,b){return!!a&&"object"==typeof a&&a.type===b&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&("gitlab"!==b||"string"==typeof a.serverUrl)}function t(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&!!a.id.trim()&&("github"===a.type||"gitlab"===a.type)&&"string"==typeof a.username&&"string"==typeof a.createdAt&&"string"==typeof a.updatedAt&&(void 0===a.keytarAccount||"string"==typeof a.keytarAccount)&&("gitlab"!==a.type||"string"==typeof a.serverUrl)}async function u(a){let c=await r();await b.default.writeFile(c,JSON.stringify(a,null,2),"utf-8")}async function v(){let a=await r();try{let c=await b.default.readFile(a,"utf-8"),d=JSON.parse(c);if(Array.isArray(d))return d.filter(t);if(!d||"object"!=typeof d)return[];let e=[];if(s(d.github,"github")){let a=d.github;e.push({id:l(),type:"github",username:a.username,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("github")})}if(s(d.gitlab,"gitlab")){let a=d.gitlab;e.push({id:l(),type:"gitlab",username:a.username,serverUrl:a.serverUrl,createdAt:a.createdAt,updatedAt:a.updatedAt,keytarAccount:o("gitlab")})}return e.length>0&&await u(e),e}catch(a){if(a?.code==="ENOENT")return[];return console.error("Failed to parse credentials metadata:",a),[]}}async function w(){return(await v()).map(q).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))}async function x(a){let b=(await v()).find(b=>b.id===a);return b?q(b):null}async function y(a){let b=(await v()).find(b=>b.id===a);if(!b)return null;let c=await j();return c?c.getPassword(e,p(b)):null}async function z(a){try{let b=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${a}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});if(!b.ok){if(401===b.status)return{valid:!1,error:"Invalid or expired GitHub token."};return{valid:!1,error:`GitHub API returned ${b.status}.`}}let c=await b.json(),d="string"==typeof c?.login?c.login:null;if(!d)return{valid:!1,error:"GitHub API response did not include a username."};return{valid:!0,username:d}}catch(a){return{valid:!1,error:`Failed to verify GitHub token: ${a.message}`}}}async function A(a,b){try{let c=m(a),d=await fetch(`${c}/api/v4/user`,{headers:{"PRIVATE-TOKEN":b}});if(!d.ok){if(401===d.status)return{valid:!1,error:"Invalid or expired GitLab token."};return{valid:!1,error:`GitLab API returned ${d.status}.`}}let e=await d.json(),f="string"==typeof e?.username?e.username:null;if(!f)return{valid:!1,error:"GitLab API response did not include a username."};return{valid:!0,username:f}}catch(a){return{valid:!1,error:`Failed to verify GitLab token: ${a.message}`}}}async function B(a){let b,c=a.trim();if(!c)return{success:!1,error:"GitHub token is required."};try{b=await k()}catch(a){return{success:!1,error:a.message}}let d=await z(c);if(!d.valid||!d.username)return{success:!1,error:d.error||"Failed to verify GitHub token."};let f=await v();if(f.find(a=>"github"===a.type&&a.username===d.username))return{success:!1,error:`A GitHub credential for ${d.username} already exists.`};let g=l(),h=new Date().toISOString(),i=n(g);await b.setPassword(e,i,c);let j={id:g,type:"github",username:d.username,createdAt:h,updatedAt:h,keytarAccount:i};return f.push(j),await u(f),{success:!0,credential:{id:j.id,type:"github",username:j.username,createdAt:j.createdAt,updatedAt:j.updatedAt}}}async function C(a,b){let c,d=m(a),f=b.trim();if(!d)return{success:!1,error:"GitLab server URL is required."};try{new URL(d)}catch{return{success:!1,error:"GitLab server URL must be a valid URL."}}if(!f)return{success:!1,error:"GitLab token is required."};try{c=await k()}catch(a){return{success:!1,error:a.message}}let g=await A(d,f);if(!g.valid||!g.username)return{success:!1,error:g.error||"Failed to verify GitLab token."};let h=await v();if(h.find(a=>"gitlab"===a.type&&a.username===g.username&&a.serverUrl===d))return{success:!1,error:`A GitLab credential for ${g.username} on ${d} already exists.`};let i=l(),j=new Date().toISOString(),o=n(i);await c.setPassword(e,o,f);let p={id:i,type:"gitlab",username:g.username,serverUrl:d,createdAt:j,updatedAt:j,keytarAccount:o};return h.push(p),await u(h),{success:!0,credential:{id:p.id,type:"gitlab",username:p.username,serverUrl:p.serverUrl||d,createdAt:p.createdAt,updatedAt:p.updatedAt}}}async function D(a){let b=await v(),c=b.findIndex(b=>b.id===a);if(-1===c)return{success:!1,error:"Credential not found."};let d=b[c];b.splice(c,1),await u(b);let f=await j();return f&&await f.deletePassword(e,p(d)),{success:!0}}a.s(["createGitHubCredential",()=>B,"createGitLabCredential",()=>C,"deleteCredential",()=>D,"getAllCredentials",()=>w,"getCredentialById",()=>x,"getCredentialToken",()=>y])},13095,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
|
-
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},37359,a=>{"use strict";var b=a.i(37936),c=a.i(70798);async function d(){try{let a=await (0,c.getAllCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list credentials:",a),{success:!1,error:"Failed to load credentials."}}}async function e(a){let b=await (0,c.createGitHubCredential)(a);return b.success&&b.credential?{success:!0,credential:b.credential}:{success:!1,error:b.error||"Failed to save GitHub credential."}}async function f(a,b){let d=await (0,c.createGitLabCredential)(a,b);return d.success&&d.credential?{success:!0,credential:d.credential}:{success:!1,error:d.error||"Failed to save GitLab credential."}}async function g(a){try{let b=await (0,c.deleteCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove credential."};return{success:!0}}catch(a){return console.error("Failed to remove credential:",a),{success:!1,error:"Failed to remove credential."}}}(0,a.i(13095).ensureServerEntryExports)([d,e,f,g]),(0,b.registerServerReference)(d,"
|
|
2
|
+
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},37359,a=>{"use strict";var b=a.i(37936),c=a.i(70798);async function d(){try{let a=await (0,c.getAllCredentials)();return{success:!0,credentials:a}}catch(a){return console.error("Failed to list credentials:",a),{success:!1,error:"Failed to load credentials."}}}async function e(a){let b=await (0,c.createGitHubCredential)(a);return b.success&&b.credential?{success:!0,credential:b.credential}:{success:!1,error:b.error||"Failed to save GitHub credential."}}async function f(a,b){let d=await (0,c.createGitLabCredential)(a,b);return d.success&&d.credential?{success:!0,credential:d.credential}:{success:!1,error:d.error||"Failed to save GitLab credential."}}async function g(a){try{let b=await (0,c.deleteCredential)(a);if(!b.success)return{success:!1,error:b.error||"Failed to remove credential."};return{success:!0}}catch(a){return console.error("Failed to remove credential:",a),{success:!1,error:"Failed to remove credential."}}}(0,a.i(13095).ensureServerEntryExports)([d,e,f,g]),(0,b.registerServerReference)(d,"009a52b5211f7188280192b7f54d2b7d360227dbb3",null),(0,b.registerServerReference)(e,"40be8b850b232f864e7ab716e5d1d982c37793c20b",null),(0,b.registerServerReference)(f,"60c0fb15bb860aa80aab9cecb3b35b3b7faec3a36b",null),(0,b.registerServerReference)(g,"40badba051858a0eefeb404f511e0df8053a815b20",null),a.s(["listCredentials",()=>d,"removeCredential",()=>g,"saveGitHubCredential",()=>e,"saveGitLabCredential",()=>f])},57891,a=>{"use strict";var b=a.i(37359);a.s([],24481),a.i(24481),a.s(["009a52b5211f7188280192b7f54d2b7d360227dbb3",()=>b.listCredentials,"40badba051858a0eefeb404f511e0df8053a815b20",()=>b.removeCredential,"40be8b850b232f864e7ab716e5d1d982c37793c20b",()=>b.saveGitHubCredential,"60c0fb15bb860aa80aab9cecb3b35b3b7faec3a36b",()=>b.saveGitLabCredential],57891)},45581,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_keytar_23140f5c._.js"].map(b=>a.l(b))).then(()=>b(83034)))}];
|
|
3
3
|
|
|
4
4
|
//# sourceMappingURL=%5Broot-of-the-server%5D__319c1c59._.js.map
|