UNPKG

bunny-transfer

Version:

Transfer files to and from your storage zones with bunny.net in a single cli command 🐰

3 lines (2 loc) 3.32 kB
import { createRequire } from 'module';const require = createRequire(import.meta.url); import{useSuspenseQuery as Y}from"@tanstack/react-query";import M from"fs-extra";import{argument as Q}from"pastel";import{z as C}from"zod";import B from"node:path";import{option as k}from"pastel";import L from"untildify";import{z as O}from"zod";import N from"node:path";import v from"untildify";import{z as l}from"zod";var c="~/.bunny/credentials",m=N.resolve(v(c)),w=l.object({accessKey:l.string(),email:l.string(),id:l.string(),name:l.string().optional(),profile:l.string()});var z=O.preprocess(e=>{if(process.env.BUNNY_SHARED_CREDENTIALS_FILE&&!e){let t=process.env.BUNNY_SHARED_CREDENTIALS_FILE.trim();return B.resolve(L(t))}return e},O.string().trim().optional().default(m)),P=z.describe(k({alias:"c",defaultValueDescription:c,description:"Bunny shared credentials file path",valueDescription:"file-path"}));import{stringify as D}from"smol-toml";function K(e,t){return e.reduce((i,r)=>{let{[t]:n,...o}=r;return(typeof n=="string"||typeof n=="number"||typeof n=="symbol")&&(i[n]=o),i},{})}function f(e){return D(K(e.map(t=>({...t,profile:t.profile??t.accessKey})),"profile"))}import q from"camelcase-keys";import G from"fast-deep-equal/es6/index.js";import y from"fs-extra";import H from"is-obj";import A from"p-map";import{parse as U}from"smol-toml";import I from"node:os";var d=I.cpus().length;function E(e,t){return e.filter((i,r)=>r===e.findIndex(n=>n[t]===i[t]))}import{createBunnyApiClient as _}from"bunny-sdk";import $ from"is-obj";function j({firstName:e,lastName:t}){if(e&&t)return`${e} ${t}`;if(t)return t;if(e)return e}async function u({accessKey:e,profile:t=e}){let r=await _({accessKey:e}).user.get().catch(o=>{throw $(o)&&"responseStatusCode"in o&&o.responseStatusCode===401?new Error(`Cannot find user with accessKey "${e}"`):o});if(!r)throw new Error(`Cannot find user with accessKey "${e}"`);let n=j({firstName:r.firstName,lastName:r.lastName});return{accessKey:e,email:r.email,id:r.id,...n&&{name:n},profile:t}}async function F({accessKey:e=[],credentialsPath:t=m,profile:i=[]}={}){let r=typeof e=="string"?[e]:e,n=typeof i=="string"?[i]:i,o=await y.pathExists(t),s=[];if(o){let a=await y.readFile(t,"utf8"),S=U(a),g=!1;if(s=await A(Object.entries(S),async([p,T])=>{let x=w.parse({...H(T)?q({...T,profile:p}):{}}),b=await u({accessKey:x.accessKey,profile:p});return G(x,b)||(g=!0),b},{concurrency:d}),g){let p=f(s);await y.outputFile(t,p)}}let R=await A(r,async a=>u({accessKey:a,profile:a}),{concurrency:d}),h=E([...s,...R],"profile");return n.length>0?h.filter(a=>n.includes(a.profile??"")):h}var V=C.object({sharedCredentialsFile:P}),W=C.tuple([C.string().trim().optional().describe(Q({description:"Bunny user profile, accessKey, email, id, or name to remove from the shared credentials file. If empty, removes all credentials.",name:"user"}))]);function J({args:e,options:t}){return Y({async queryFn(){let i=t.sharedCredentialsFile,r=await F({credentialsPath:i}),n=r.length;if(r=e[0]?r.filter(s=>s.profile!==e[0]&&s.accessKey!==e[0]&&s.email!==e[0]&&s.id!==e[0]&&s.name!==e[0]):[],r.length===n)throw new Error(`Could not find "${e[0]}" in credentials file`);let o=f(r);return await M.outputFile(i,o),e[0]},queryKey:["logout",e[0],t.sharedCredentialsFile]}),null}export{W as args,J as default,V as options};