ec.fdk 0.9.7 → 0.9.8

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.
Files changed (2) hide show
  1. package/dist/cli.cjs +36 -34
  2. package/package.json +1 -1
package/dist/cli.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var he=Object.create;var z=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var ke=Object.getPrototypeOf,we=Object.prototype.hasOwnProperty;var De=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ye(t))!we.call(e,s)&&s!==n&&z(e,s,{get:()=>t[s],enumerable:!(r=pe(t,s))||r.enumerable});return e};var b=(e,t,n)=>(n=e!=null?he(ke(e)):{},De(t||!e||!e.__esModule?z(n,"default",{value:e,enumerable:!0}):n,e));const Te=require("node:util"),be=require("node:module"),v=require("node:fs"),te=require("node:path"),$e=require("node:os"),Ee=require("node:readline"),G=require("node:crypto"),ve=require("node:http"),Ie=require("node:child_process");async function f(e,t={},n={}){const{token:r,rawRes:s}=t;r&&(n.headers={...n.headers||{},Authorization:`Bearer ${r}`});const a=await fetch(e,n);if(!a.ok){if(a.headers.get("content-type")?.includes("application/json")){const o=await a.json(),c=`${o.title}
3
- ${o.detail}
4
- ${o.verbose}`;throw new Error(c)}throw new Error(`unexpected fetch error: ${a.statusText}`)}if(s)return a;if(a.status===204)return;const i=await a.text();return i?JSON.parse(i):void 0}const O={datamanager:{live:"https://datamanager.entrecode.de/",stage:"https://datamanager.cachena.entrecode.de/"},accounts:{live:"https://accounts.entrecode.de/",stage:"https://accounts.cachena.entrecode.de/"},appserver:{live:"https://appserver.entrecode.de/",stage:"https://appserver.cachena.entrecode.de/"},"dm-history":{live:"https://dm-history.entrecode.de/",stage:"https://dm-history.cachena.entrecode.de/"}};function m(e,t="stage",n="datamanager"){const r=O[n];if(!r)throw new Error(`subdomain "${n}" not found. Try one of ${Object.keys(O).join(", ")}`);const s=r[t];if(!s)throw new Error(`env "${t}" not found. Try one of ${Object.keys(r[t]).join(", ")}`);return s+e}function h(e,t=!0){return Object.entries(e).sort((n,r)=>n[0].localeCompare(r[0])).map(([n,r])=>`${n}=${r}`).join("&")}function d(e){Object.entries(e).forEach(([t,n])=>{if(n===void 0)throw new Error(`expected ${t} to be set!`)})}const ne={stage:"https://accounts.cachena.entrecode.de/",live:"https://accounts.entrecode.de/"};async function Ae(e){let{env:t,dmShortID:n,email:r,password:s}=e;d({env:t,dmShortID:n,email:r,password:s});const a=m(`api/${n}/_auth/login?clientID=rest`,t);return await f(a,{},{method:"POST",body:JSON.stringify({email:r,password:s}),headers:{"Content-Type":"application/json"}})}async function Se(e){let{env:t,email:n,password:r}=e;d({env:t,email:n,password:r});const s=`${ne[t]}auth/login?clientID=rest`;return await f(s,{},{method:"POST",body:JSON.stringify({email:n,password:r}),headers:{"Content-Type":"application/json"}})}async function _e(e){let{dmShortID:t,env:n,token:r}=e;d({dmShortID:t,env:n,token:r});const s=m(`api/${t}/_auth/logout?clientID=rest&token=${r}`,n);return await f(s,{rawRes:!0},{method:"POST"})}async function qe(e){let{env:t,token:n}=e;d({env:t,token:n});const r=`${ne[t]}auth/logout?clientID=rest`;return await f(r,{rawRes:!0,token:n},{method:"POST"})}function Oe({dmShortID:e}){return d({dmShortID:e}),e}function Le({env:e}){return d({env:e}),e}let Ce=["created","creator","id","modified","private","_created","_creator","_embedded","_entryTitle","_id","_links","_modelTitle","_modelTitleField","_modified"];function re(e){let t={};for(let n in e)Ce.includes(n)||(t[n]=e[n]);return t}function Ue(e){return JSON.parse(JSON.stringify(e))}async function Me(e){let{env:t,dmShortID:n}=e;d({env:t,dmShortID:n});const r=m(`api/${n}`,t);return f(r,e)}async function se(e){let{env:t,dmShortID:n,model:r,options:s={}}=e;d({env:t,dmShortID:n,model:r}),s={size:50,page:1,_list:!0,...s};const a=h(s),i=m(`api/${n}/${r}?${a}`,t),{count:o,total:c,_embedded:u}=await f(i,e);let g=u?u[`${n}:${r}`]:[];return g=Array.isArray(g)?g:[g],{count:o,total:c,items:g}}function Re({env:e,dmShortID:t,model:n,entryID:r,token:s}){d({env:e,dmShortID:t,model:n,entryID:r});const a=h({_id:r}),i=m(`api/${t}/${n}?${a}`,e);return f(i,{token:s})}async function Pe({env:e,dmShortID:t,model:n,value:r,token:s}){d({env:e,dmShortID:t,model:n,value:r});const a=m(`api/${t}/${n}`,e);return await f(a,{token:s},{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}})}async function ae({env:e,dmShortID:t,model:n,entryID:r,value:s,token:a,safePut:i=!1}){d({env:e,dmShortID:t,model:n,entryID:r,value:s});const o={"Content-Type":"application/json"};if(i){if(!("_modified"in s))throw new Error("expected _modified to be set!");o["If-Unmodified-Since"]=new Date(s._modified).toUTCString()}const c=m(`api/${t}/${n}?_id=${r}`,e);return s=Ue(s),s=re(s),await f(c,{token:a},{method:"PUT",headers:o,body:JSON.stringify(s)})}function oe({env:e,dmShortID:t,model:n,entryID:r,token:s}){d({env:e,dmShortID:t,model:n,entryID:r});const a=m(`api/${t}/${n}?_id=${r}`,e);return f(a,{token:s,rawRes:!0},{method:"DELETE",headers:{"Content-Type":"application/json"}})}async function Be(e,t){let{env:n,dmShortID:r,model:s,options:a={}}=e;d({env:n,dmShortID:r,model:s}),e.options={size:50,page:1,_list:!0,...a};let i=0,o,c=[];for(;o===void 0||i<o;){const u=await se(e);for(let g of u.items)c.push(await t(g));i+=u.items.length,o=u.total,e.options.page++}return c}async function Ge({env:e,dmShortID:t,model:n,withMetadata:r}){d({env:e,dmShortID:t,model:n});const s=m(`api/schema/${t}/${n}`,e),a=await f(s),i=a?.allOf?.[1];if(typeof i.properties!="object")throw new Error(`getSchema: ${s} returned unexpected format: ${JSON.stringify(a)}`);const{properties:o}=i,c=re(o);for(let u in c){let g=c[u];if(g.required=i.required.includes(u),c[u]?.oneOf&&delete c[u]?.oneOf,g.title?.includes("<")&&g.title?.includes(">")){const y=g.title.split("<")[1].slice(0,-1),w=g.title.split("<")[0];g.type=w,y.includes(":")?g.resource=y.split(":")[1]:g.resource=y}else["asset","entry","assets","entries"].includes(g.title)?(g.type=g.title,g.resource=null):g.type=g.title;delete c[u].title}if(r){const u=o._modelTitle.title,g=o._modelTitleField.title;return{properties:c,meta:{modelTitleField:g,modelTitle:u}}}return c}function ie(e){return Object.entries(e).map(([t,n])=>typeof n!="object"?{[t]:String(n)}:{...n.sort&&{sort:Array.isArray(n)?n.join(","):n},...n.search&&{[t+"~"]:n.search},...n.notNull&&{[t+"!"]:""},...n.null&&{[t]:""},...n.any&&{[t]:n.any.join(",")},...n.from&&{[t+"From"]:n.from},...n.to&&{[t+"To"]:n.to}}).reduce((t,n)=>({...t,...n}),{})}const Ne=ie;function N(e){return e._links.collection.href.split("/").slice(-2)[0]}function ce(e){const t=e._links.collection.href.split("api/")[0];return Object.keys(O.datamanager).find(r=>O.datamanager[r]===t)}const de=e=>{const t=N(e),n=ce(e),r=e._modelTitle,s=e.id;return{dmShortID:t,env:n,model:r,entryID:s}},xe=e=>oe(de(e)),je=(e,t)=>ae({...de(e),value:t});function Je(e,t){const n=N(t);return t._embedded[`${n}:${t._modelTitle}/${e}/asset`]}async function Fe({env:e,dmShortID:t,assetGroup:n,assetID:r,token:s}){d({env:e,dmShortID:t,assetGroup:n,assetID:r});const a=h({assetID:r}),i=m(`a/${t}/${n}?${a}`,e),{_embedded:o}=await f(i,{token:s});return o?o["ec:dm-asset"]:void 0}async function He(e){let{env:t,dmShortID:n,assetGroup:r,token:s,options:a={}}=e;d({env:t,dmShortID:n,assetGroup:r}),a={size:50,page:1,_list:!0,...a};const i=h(a),o=m(`a/${n}/${r}?${i}`,t),{count:c,total:u,_embedded:g}=await f(o,{token:s});let y=g?g["ec:dm-asset"]:[];return y=Array.isArray(y)?y:[y],{count:c,total:u,items:y}}async function ze({env:e,dmShortID:t,assetGroup:n,token:r,file:s,name:a,options:i}){d({env:e,dmShortID:t,assetGroup:n,file:s});const o=m(`a/${t}/${n}`,e),c=new FormData;return c.append("file",s,a),i&&Object.keys(i).forEach(g=>{c.append(g,i[g])}),(await f(o,{token:r},{method:"POST",body:c}))._embedded["ec:dm-asset"]}async function Ke({env:e,dmShortID:t,assetGroup:n,files:r,options:s}){d({env:e,dmShortID:t,assetGroup:n,files:r});const a=m(`a/${t}/${n}`,e),i=new FormData;r.forEach(c=>{i.append("file",c)}),s&&Object.keys(s).forEach(c=>{i.append(c,s[c])});const o=await f(a,{},{method:"POST",body:i});return Array.isArray(o._embedded["ec:dm-asset"])?o._embedded["ec:dm-asset"]:[o._embedded["ec:dm-asset"]]}async function Ve({env:e,dmShortID:t,assetGroup:n,assetID:r,token:s}){d({env:e,dmShortID:t,assetGroup:n,assetID:r});const a=m(`a/${t}/${n}/${r}`,e);await f(a,{token:s,rawRes:!0},{method:"DELETE"})}function Ye(e,t,n=!1){let r,s;return(n?e?.thumbnails:e?.fileVariants)?.forEach(i=>{const{resolution:{width:o,height:c}}=i,u=Math.abs(Math.max(o,c)-t);(!s||u<s)&&(s=u,r=i)}),r?.url??e?.file?.url??null}function We(e="stage",t,n,r,s=!1){const a=Math.max(r.file.resolution.width,r.file.resolution.height),i=n.filter(c=>c<a),o=`https://datamanager${e==="stage"?".cachena":""}.entrecode.de`;return s?i.map(c=>{const u=r.thumbnails.find(w=>c===w.dimension),g=`${o}/t/${t}/${r.assetID}/${c}`,y=u?u.url:g;return{size:c,url:y,generated:u}}):i.map(c=>{const u=r.fileVariants.find(w=>c===Math.max(w.resolution.width,w.resolution.height)),g=`${o}/f/${t}/${r.assetID}/${c}`,y=u?u.url:g;return{size:c,url:y,generated:u}})}const p={"Content-Type":"application/json"};async function Xe(e){let{env:t,dmID:n,token:r}=e;d({env:t,dmID:n});const s=m(`?dataManagerID=${n}`,t);return f(s,{token:r})}async function Qe(e){let{env:t,options:n={}}=e;d({env:t}),n={size:25,page:1,_list:!0,...n};const r=h(n),s=m(`?${r}`,t),{count:a,total:i,_embedded:o}=await f(s,e);let c=o?o["ec:datamanager"]:[];return c=Array.isArray(c)?c:[c],{count:a,total:i,items:c}}async function Ze(e){let{env:t,dmID:n,options:r={}}=e;d({env:t,dmID:n}),r={size:25,dataManagerID:n,page:1,_list:!0,...r};const s=h(r),a=m(`model?${s}`,t),{count:i,total:o,_embedded:c}=await f(a,e);let u=c?c["ec:model"]:[];return u=Array.isArray(u)?u:[u],{count:i,total:o,items:u}}async function et(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager"}=e;d({env:t,subdomain:s,resource:n}),r={size:25,page:1,_list:!0,...r};const a=h(r),i=m(`${n}?${a}`,t,s),{count:o,total:c,_embedded:u}=await f(i,e);let g=u?u[Object.keys(u)[0]]:[];return g=Array.isArray(g)?g:[g],{count:o,total:c,items:g}}async function tt(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager"}=e;d({env:t,subdomain:s,resource:n});const a=h(r),i=m(`${n}?${a}`,t,s);return f(i,e)}async function nt(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager",value:a}=e;d({env:t,subdomain:s,resource:n,value:a});const i=h(r),o=m(`${n}?${i}`,t,s);return f(o,e,{method:"PUT",body:JSON.stringify(a),headers:p})}async function rt(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager"}=e;d({env:t,subdomain:s,resource:n});const a=h(r),i=m(`${n}?${a}`,t,s);return f(i,{...e,rawRes:!0},{method:"DELETE",headers:p})}async function st(e,t={}){let{env:n,route:r,options:s={},subdomain:a="datamanager"}=e;d({env:n,subdomain:a,route:r}),s={...s};const i=h(s),o=m(`${r}?${i}`,n,a);return f(o,e,t)}async function at(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=m("",t);return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function ot(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const a=h({dataManagerID:r}),i=m(`?${a}`,t);return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function it(e){let{env:t,token:n,dmID:r}=e;d({env:t,dmID:r});const s=h({dataManagerID:r}),a=m(`?${s}`,t);return f(a,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function ct(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const a=h({dataManagerID:r}),i=m(`model?${a}`,t);return f(i,{token:n},{method:"POST",body:JSON.stringify(s),headers:p})}async function dt(e){let{env:t,token:n,dmID:r,modelID:s,value:a}=e;d({env:t,dmID:r,modelID:s,value:a});const i=h({dataManagerID:r,modelID:s}),o=m(`model?${i}`,t);return f(o,{token:n},{method:"PUT",body:JSON.stringify(a),headers:p})}async function ut(e){let{env:t,token:n,dmID:r,modelID:s}=e;d({env:t,dmID:r,modelID:s});const a=h({dataManagerID:r,modelID:s}),i=m(`model?${a}`,t);return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function lt(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=m("template",t);return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function ft(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const a=h({dataManagerID:r}),i=m(`assetgroup?${a}`,t);return f(i,{token:n},{method:"POST",body:JSON.stringify(s),headers:p})}async function gt(e){let{env:t,token:n,dmID:r,assetGroupID:s,value:a}=e;d({env:t,dmID:r,assetGroupID:s,value:a});const i=h({dataManagerID:r,assetGroupID:s}),o=m(`assetgroup?${i}`,t);return f(o,{token:n},{method:"PUT",body:JSON.stringify(a),headers:p})}async function mt(e){let{env:t,token:n,dmShortID:r,assetGroup:s,assetID:a,value:i}=e;d({env:t,dmShortID:r,assetGroup:s,assetID:a,value:i});const o=m(`a/${r}/${s}/${a}`,t);return f(o,{token:n},{method:"PUT",body:JSON.stringify(i),headers:p})}async function ht(e){let{env:t,token:n,dmID:r,clientID:s,value:a}=e;d({env:t,dmID:r,clientID:s,value:a});const i=h({dataManagerID:r,clientID:s}),o=m(`client?${i}`,t);return f(o,{token:n},{method:"PUT",body:JSON.stringify(a),headers:p})}async function pt(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const a=h({dataManagerID:r}),i=m(`role?${a}`,t);return f(i,{token:n},{method:"POST",body:JSON.stringify(s),headers:p})}async function yt(e){let{env:t,token:n,dmID:r,roleID:s,value:a}=e;d({env:t,dmID:r,roleID:s,value:a});const i=h({dataManagerID:r,roleID:s}),o=m(`role?${i}`,t);return f(o,{token:n},{method:"PUT",body:JSON.stringify(a),headers:p})}async function kt(e){let{env:t,token:n,dmID:r,roleID:s}=e;d({env:t,dmID:r,roleID:s});const a=h({dataManagerID:r,roleID:s}),i=m(`role?${a}`,t);return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function wt(e){let{env:t,token:n,dmID:r,accountID:s,value:a}=e;d({env:t,dmID:r,accountID:s,value:a});const i=h({dataManagerID:r,accountID:s}),o=m(`account?${i}`,t);return f(o,{token:n},{method:"PUT",body:JSON.stringify(a),headers:p})}async function Dt(e){let{env:t,token:n,dmID:r,accountID:s}=e;d({env:t,dmID:r,accountID:s});const a=h({dataManagerID:r,accountID:s}),i=m(`account?${a}`,t);return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function Tt(e){let{env:t,token:n,options:r={}}=e;d({env:t});const s=h(r),a=m(`stats?${s}`,t);return f(a,{token:n})}async function bt(e){let{env:t,token:n,options:r={}}=e;d({env:t});const s=h(r),a=m(`entries?${s}`,t,"dm-history");return f(a,{token:n})}async function $t(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=m("client",t,"accounts");return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function Et(e){let{env:t,token:n,clientID:r,value:s}=e;d({env:t,clientID:r,value:s});const a=h({clientID:r}),i=m(`client?${a}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function vt(e){let{env:t,token:n,clientID:r}=e;d({env:t,clientID:r});const s=h({clientID:r}),a=m(`client?${s}`,t,"accounts");return f(a,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function It(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=m("group",t,"accounts");return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function At(e){let{env:t,token:n,groupID:r,value:s}=e;d({env:t,groupID:r,value:s});const a=h({groupID:r}),i=m(`group?${a}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function St(e){let{env:t,token:n,groupID:r}=e;d({env:t,groupID:r});const s=h({groupID:r}),a=m(`group?${s}`,t,"accounts");return f(a,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function _t(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=m("invite",t,"accounts"),a=await f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p});return a?._embedded?.["ec:invite"]??a}async function qt(e){let{env:t,token:n,inviteID:r,value:s}=e;d({env:t,inviteID:r,value:s});const a=h({invite:r}),i=m(`invite?${a}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function Ot(e){let{env:t,token:n,inviteID:r}=e;d({env:t,inviteID:r});const s=h({invite:r}),a=m(`invite?${s}`,t,"accounts");return f(a,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function Lt(e){let{env:t,token:n,accountID:r,value:s}=e;d({env:t,accountID:r,value:s});const a=h({accountID:r}),i=m(`account?${a}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function Ct(e){let{env:t,token:n,accountID:r}=e;d({env:t,accountID:r});const s=h({accountID:r}),a=m(`account/tokens?${s}`,t,"accounts");let o=(await f(a,{token:n}))?._embedded?.["ec:account/token"]??[];return Array.isArray(o)?o:[o]}async function Ut(e){let{env:t,token:n,accountID:r}=e;d({env:t,accountID:r});const s=h({accountID:r}),a=m(`account/tokens?${s}`,t,"accounts");return f(a,{token:n},{method:"POST",headers:p})}async function Mt(e){let{env:t,token:n,accountID:r,accessTokenID:s}=e;d({env:t,accountID:r,accessTokenID:s});const a=h({accessTokenID:s,accountID:r}),i=m(`account/tokens?${a}`,t,"accounts");return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}const Rt=Object.freeze(Object.defineProperty({__proto__:null,assetList:He,createAccountClient:$t,createAsset:ze,createAssetGroup:ft,createAssets:Ke,createDatamanager:at,createEntry:Pe,createGroup:It,createInvite:_t,createModel:ct,createRole:pt,createTemplate:lt,createToken:Ut,deleteAccountClient:vt,deleteAsset:Ve,deleteDatamanager:it,deleteDmAccount:Dt,deleteEntry:oe,deleteEntryObject:xe,deleteGroup:St,deleteInvite:Ot,deleteModel:ut,deleteRole:kt,deleteToken:Mt,dmList:Qe,editAccount:Lt,editAccountClient:Et,editAsset:mt,editAssetGroup:gt,editDatamanager:ot,editDmAccount:wt,editDmClient:ht,editEntry:ae,editEntryObject:je,editGroup:At,editInvite:qt,editModel:dt,editRole:yt,entryList:se,fileVariant:Ye,filterOptions:Ne,getAsset:Fe,getDatamanager:Xe,getEcAuthKey:Le,getEntry:Re,getEntryAsset:Je,getEntryEnv:ce,getEntryShortID:N,getFileVariants:We,getHistory:bt,getPublicAuthKey:Oe,getSchema:Ge,getStats:Tt,listTokens:Ct,loginEc:Se,loginPublic:Ae,logoutEc:qe,logoutPublic:_e,mapEntries:Be,modelList:Ze,publicApi:Me,raw:st,resourceDelete:rt,resourceEdit:nt,resourceGet:tt,resourceList:et,sdkOptions:ie},Symbol.toStringTag,{value:"Module"})),{entryList:K,mapEntries:Pt,getEntry:Bt,getAsset:Gt,assetList:V,createAsset:Nt,createAssets:xt,deleteAsset:jt,createEntry:Jt,editEntry:Y,deleteEntry:Ft,getSchema:Ht,loginPublic:zt,loginEc:Kt,logoutEc:Vt,logoutPublic:Yt,getEcAuthKey:E,getPublicAuthKey:A,dmList:Wt,modelList:Xt,publicApi:Qt,getDatamanager:Zt,resourceList:en,resourceGet:tn,resourceEdit:nn,resourceDelete:rn,raw:sn,createDatamanager:an,editDatamanager:on,deleteDatamanager:cn,createModel:dn,editModel:un,deleteModel:ln,createTemplate:fn,createAssetGroup:gn,editAssetGroup:mn,editAsset:hn,editDmClient:pn,createRole:yn,editRole:kn,deleteRole:wn,editDmAccount:Dn,deleteDmAccount:Tn,getStats:bn,getHistory:$n,createAccountClient:En,editAccountClient:vn,deleteAccountClient:In,createGroup:An,editGroup:Sn,deleteGroup:_n,createInvite:qn,editInvite:On,deleteInvite:Ln,editAccount:Cn,listTokens:Un,createToken:Mn,deleteToken:Rn}=Rt;function W(e){if(!e||typeof e!="object")return e;const{_links:t,_embedded:n,...r}=e;return r}function Pn(e){return!e||typeof e!="object"?e:Array.isArray(e.items)?{...e,items:e.items.map(W)}:W(e)}class x{constructor(t={}){if(!t.storageAdapter){let n=new Map;t.storageAdapter={get:r=>n.get(r),set:(r,s)=>n.set(r,s),remove:r=>n.delete(r)}}this.config=t}set(t){return new x({...this.config,...t})}async entries(t={}){const n=await this.getBestToken();return K({...this.config,options:t,token:n})}async entryList(t){const n=await this.getBestToken();return K({...this.config,options:t,token:n}).then(r=>this.maybeClean(r))}async mapEntries(t,n={}){const r=await this.getBestToken();return Pt({...this.config,options:n,token:r},t)}async getEntry(t){const n=await this.getBestToken();return Bt({...this.config,entryID:t,token:n}).then(r=>this.maybeClean(r))}async editEntrySafe(t,n){const r=await this.getBestToken();return Y({...this.config,entryID:t,token:r,value:n,safePut:!0}).then(s=>this.maybeClean(s))}async getSchema(){return Ht(this.config)}async assets(t){const n=await this.getBestToken();return V({...this.config,options:t,token:n})}async assetList(t){const n=await this.getBestToken();return V({...this.config,options:t,token:n})}async createAsset(t){const{file:n,name:r,options:s}=t,a=await this.getBestToken();return Nt({...this.config,file:n,name:r,options:s,token:a})}async createAssets(t){const{files:n,options:r}=t,s=await this.getBestToken();return xt({...this.config,files:n,options:r,token:s})}async deleteAsset(t){const n=await this.getBestToken();return jt({...this.config,token:n,assetID:t})}async getAsset(t){const n=await this.getBestToken();return Gt({...this.config,assetID:t,token:n})}async createEntry(t){const n=await this.getBestToken();return Jt({...this.config,token:n,value:t}).then(r=>this.maybeClean(r))}async editEntry(t,n){const r=await this.getBestToken();return Y({...this.config,entryID:t,token:r,value:n}).then(s=>this.maybeClean(s))}async deleteEntry(t){const n=await this.getBestToken();return Ft({...this.config,token:n,entryID:t})}async resourceList(t){const n=await this.getBestToken();return en({...this.config,options:t,token:n})}async resourceGet(t){const n=await this.getBestToken();return tn({...this.config,options:t,token:n})}async resourceEdit(t,n){const r=await this.getBestToken();return nn({...this.config,options:t,token:r,value:n})}async resourceDelete(t){const n=await this.getBestToken();return rn({...this.config,options:t,token:n})}async raw(t,n){const r=await this.getBestToken();return sn({...this.config,options:t,token:r},n)}async createDatamanager(t){const n=await this.getBestToken();return an({...this.config,token:n,value:t})}async editDatamanager(t,n){const r=await this.getBestToken();return on({...this.config,token:r,dmID:t,value:n})}async deleteDatamanager(t){const n=await this.getBestToken();return cn({...this.config,token:n,dmID:t})}async createModel(t){const n=await this.getBestToken();return dn({...this.config,token:n,value:t})}async editModel(t,n){const r=await this.getBestToken();return un({...this.config,token:r,modelID:t,value:n})}async deleteModel(t){const n=await this.getBestToken();return ln({...this.config,token:n,modelID:t})}async createTemplate(t){const n=await this.getBestToken();return fn({...this.config,token:n,value:t})}async createAssetGroup(t){const n=await this.getBestToken();return gn({...this.config,token:n,value:t})}async editAssetGroup(t,n){const r=await this.getBestToken();return mn({...this.config,token:r,assetGroupID:t,value:n})}async editAsset(t,n){const r=await this.getBestToken();return hn({...this.config,token:r,assetID:t,value:n})}async editDmClient(t,n){const r=await this.getBestToken();return pn({...this.config,token:r,clientID:t,value:n})}async createRole(t){const n=await this.getBestToken();return yn({...this.config,token:n,value:t})}async editRole(t,n){const r=await this.getBestToken();return kn({...this.config,token:r,roleID:t,value:n})}async deleteRole(t){const n=await this.getBestToken();return wn({...this.config,token:n,roleID:t})}async editDmAccount(t,n){const r=await this.getBestToken();return Dn({...this.config,token:r,accountID:t,value:n})}async deleteDmAccount(t){const n=await this.getBestToken();return Tn({...this.config,token:n,accountID:t})}async getStats(t={}){const n=await this.getBestToken();return bn({...this.config,token:n,options:t})}async getHistory(t={}){const n=await this.getBestToken();return $n({...this.config,token:n,options:t})}async createAccountClient(t){const n=await this.getBestToken();return En({...this.config,token:n,value:t})}async editAccountClient(t,n){const r=await this.getBestToken();return vn({...this.config,token:r,clientID:t,value:n})}async deleteAccountClient(t){const n=await this.getBestToken();return In({...this.config,token:n,clientID:t})}async createGroup(t){const n=await this.getBestToken();return An({...this.config,token:n,value:t})}async editGroup(t,n){const r=await this.getBestToken();return Sn({...this.config,token:r,groupID:t,value:n})}async deleteGroup(t){const n=await this.getBestToken();return _n({...this.config,token:n,groupID:t})}async createInvite(t){const n=await this.getBestToken();return qn({...this.config,token:n,value:t})}async editInvite(t,n){const r=await this.getBestToken();return On({...this.config,token:r,inviteID:t,value:n})}async deleteInvite(t){const n=await this.getBestToken();return Ln({...this.config,token:n,inviteID:t})}async editAccount(t,n){const r=await this.getBestToken();return Cn({...this.config,token:r,accountID:t,value:n})}async listTokens(t){const n=await this.getBestToken();return Un({...this.config,token:n,accountID:t})}async createToken(t){const n=await this.getBestToken();return Mn({...this.config,token:n,accountID:t})}async deleteToken(t,n){const r=await this.getBestToken();return Rn({...this.config,token:r,accountID:t,accessTokenID:n})}storageAdapter(t){return this.set({storageAdapter:t})}removeToken(t){if(!this.config.storageAdapter)throw new Error("cannot removeToken: no storageAdapter defined!");const{remove:n}=this.config.storageAdapter;n(t)}getToken(t){if(!this.config.storageAdapter)throw new Error("cannot getAuth: no storageAdapter defined!");const{get:n}=this.config.storageAdapter;return n(t)}getPublicToken(){return this.config.token||this.getToken(A(this.config))}getEcToken(){return this.config.token||this.getToken(E(this.config))}setToken(t,n){if(!this.config.storageAdapter)throw new Error("cannot setEcToken: no storageAdapter defined!");return this.config.storageAdapter.set(t,n)}setEcToken(t){this.setToken(E(this.config),t)}removeEcToken(){this.removeToken(E(this.config))}setPublicToken(t){this.setToken(A(this.config),t)}loginEc(t){return Kt({...this.config,...t}).then(n=>this.setToken(E(this.config),n.token))}loginPublic(t){return zt({...this.config,...t}).then(n=>this.setToken(A(this.config),n.token))}logoutPublic(){const t=this.getPublicToken();return Yt({...this.config,token:t}).then(()=>this.removeToken(A(this.config)))}logoutEc(){const t=this.getEcToken();return Vt({...this.config,token:t}).then(()=>this.removeToken(E(this.config)))}hasPublicToken(){return!!this.getPublicToken()}hasEcToken(){return!!this.getEcToken()}hasAnyToken(){return!!this.getEcToken()||!!this.getPublicToken()}getBestToken(){try{return this.getEcToken()||this.getPublicToken()}catch{return}}clean(t=!0){return this.set({_clean:t})}maybeClean(t){return this.config._clean?Pn(t):t}model(t){return this.set({model:t})}token(t){return this.set({token:t})}dmShortID(t){return this.set({dmShortID:t})}dm(t){return this.dmShortID(t)}dmID(t){return this.set({dmID:t})}assetGroup(t){return this.set({assetGroup:t})}assetgroup(t){return this.assetGroup(t)}subdomain(t){return this.set({subdomain:t})}resource(t){return this.set({resource:t})}route(t){return this.set({route:t})}publicApi(){return Qt(this.config)}async getDatamanager(t){const n=await this.getBestToken();return Zt({...this.config,dmID:t,token:n})}async dmList(t={}){const n=await this.getBestToken();return Wt({...this.config,options:t,token:n})}async modelList(t={}){const n=await this.getBestToken();return Xt({...this.config,options:t,token:n})}}const M=te.join($e.homedir(),".ec-fdk"),R=te.join(M,"auth.json");function U(){try{return v.existsSync(R)?JSON.parse(v.readFileSync(R,"utf-8")):{}}catch{return{}}}function X(e){v.existsSync(M)||v.mkdirSync(M,{recursive:!0,mode:448}),v.writeFileSync(R,JSON.stringify(e,null,2),{mode:384})}const T={get(e){return U()[e]},set(e,t){const n=U();n[e]=t,X(n)},remove(e){const t=U();delete t[e],X(t)}};function Bn(e){const t=Ee.createInterface({input:process.stdin,output:process.stderr});return new Promise(n=>{t.question(e,r=>{t.close(),n(r)})})}function Gn(e){return new Promise(t=>{process.stderr.write(e);const n=process.stdin;n.setRawMode(!0),n.resume(),n.setEncoding("utf-8");let r="";const s=a=>{for(const i of a){if(i===""&&(process.stderr.write(`
2
+ "use strict";var pe=Object.create;var K=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var ke=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty;var Te=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ke(t))!De.call(e,s)&&s!==n&&K(e,s,{get:()=>t[s],enumerable:!(r=ye(t,s))||r.enumerable});return e};var b=(e,t,n)=>(n=e!=null?pe(we(e)):{},Te(t||!e||!e.__esModule?K(n,"default",{value:e,enumerable:!0}):n,e));const be=require("node:util"),$e=require("node:module"),v=require("node:fs"),ne=require("node:path"),Ee=require("node:os"),ve=require("node:readline"),N=require("node:crypto"),Ie=require("node:http"),Ae=require("node:child_process");async function f(e,t={},n={}){const{token:r,rawRes:s}=t;r&&(n.headers={...n.headers||{},Authorization:`Bearer ${r}`});const o=await fetch(e,n);if(!o.ok){if(o.headers.get("content-type")?.includes("application/json")){const a=await o.json(),c=`${a.title}
3
+ ${a.detail}
4
+ ${a.verbose}`;throw new Error(c)}throw new Error(`unexpected fetch error: ${o.statusText}`)}if(s)return o;if(o.status===204)return;const i=await o.text();return i?JSON.parse(i):void 0}const C={datamanager:{live:"https://datamanager.entrecode.de/",stage:"https://datamanager.cachena.entrecode.de/"},accounts:{live:"https://accounts.entrecode.de/",stage:"https://accounts.cachena.entrecode.de/"},appserver:{live:"https://appserver.entrecode.de/",stage:"https://appserver.cachena.entrecode.de/"},"dm-history":{live:"https://dm-history.entrecode.de/",stage:"https://dm-history.cachena.entrecode.de/"}};function g(e,t="stage",n="datamanager"){const r=C[n];if(!r)throw new Error(`subdomain "${n}" not found. Try one of ${Object.keys(C).join(", ")}`);const s=r[t];if(!s)throw new Error(`env "${t}" not found. Try one of ${Object.keys(r[t]).join(", ")}`);return s+e}function h(e,t=!0){return Object.entries(e).sort((n,r)=>n[0].localeCompare(r[0])).map(([n,r])=>`${n}=${r}`).join("&")}function d(e){Object.entries(e).forEach(([t,n])=>{if(n===void 0)throw new Error(`expected ${t} to be set!`)})}const re={stage:"https://accounts.cachena.entrecode.de/",live:"https://accounts.entrecode.de/"};async function Se(e){let{env:t,dmShortID:n,email:r,password:s}=e;d({env:t,dmShortID:n,email:r,password:s});const o=g(`api/${n}/_auth/login?clientID=rest`,t);return await f(o,{},{method:"POST",body:JSON.stringify({email:r,password:s}),headers:{"Content-Type":"application/json"}})}async function _e(e){let{env:t,email:n,password:r}=e;d({env:t,email:n,password:r});const s=`${re[t]}auth/login?clientID=rest`;return await f(s,{},{method:"POST",body:JSON.stringify({email:n,password:r}),headers:{"Content-Type":"application/json"}})}async function qe(e){let{dmShortID:t,env:n,token:r}=e;d({dmShortID:t,env:n,token:r});const s=g(`api/${t}/_auth/logout?clientID=rest&token=${r}`,n);return await f(s,{rawRes:!0},{method:"POST"})}async function Oe(e){let{env:t,token:n}=e;d({env:t,token:n});const r=`${re[t]}auth/logout?clientID=rest`;return await f(r,{rawRes:!0,token:n},{method:"POST"})}function Ce({dmShortID:e}){return d({dmShortID:e}),e}function Le({env:e}){return d({env:e}),e}let Ue=["created","creator","id","modified","private","_created","_creator","_embedded","_entryTitle","_id","_links","_modelTitle","_modelTitleField","_modified"];function se(e){let t={};for(let n in e)Ue.includes(n)||(t[n]=e[n]);return t}function Me(e){return JSON.parse(JSON.stringify(e))}async function Re(e){let{env:t,dmShortID:n}=e;d({env:t,dmShortID:n});const r=g(`api/${n}`,t);return f(r,e)}async function oe(e){let{env:t,dmShortID:n,model:r,options:s={}}=e;d({env:t,dmShortID:n,model:r}),s={size:50,page:1,_list:!0,...s};const o=h(s),i=g(`api/${n}/${r}?${o}`,t),{count:a,total:c,_embedded:u}=await f(i,e);let m=u?u[`${n}:${r}`]:[];return m=Array.isArray(m)?m:[m],{count:a,total:c,items:m}}function Pe({env:e,dmShortID:t,model:n,entryID:r,token:s}){d({env:e,dmShortID:t,model:n,entryID:r});const o=h({_id:r}),i=g(`api/${t}/${n}?${o}`,e);return f(i,{token:s})}async function Be({env:e,dmShortID:t,model:n,value:r,token:s}){d({env:e,dmShortID:t,model:n,value:r});const o=g(`api/${t}/${n}`,e);return await f(o,{token:s},{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}})}async function ae({env:e,dmShortID:t,model:n,entryID:r,value:s,token:o,safePut:i=!1}){d({env:e,dmShortID:t,model:n,entryID:r,value:s});const a={"Content-Type":"application/json"};if(i){if(!("_modified"in s))throw new Error("expected _modified to be set!");a["If-Unmodified-Since"]=new Date(s._modified).toUTCString()}const c=g(`api/${t}/${n}?_id=${r}`,e);return s=Me(s),s=se(s),await f(c,{token:o},{method:"PUT",headers:a,body:JSON.stringify(s)})}function ie({env:e,dmShortID:t,model:n,entryID:r,token:s}){d({env:e,dmShortID:t,model:n,entryID:r});const o=g(`api/${t}/${n}?_id=${r}`,e);return f(o,{token:s,rawRes:!0},{method:"DELETE",headers:{"Content-Type":"application/json"}})}async function Ge(e,t){let{env:n,dmShortID:r,model:s,options:o={}}=e;d({env:n,dmShortID:r,model:s}),e.options={size:50,page:1,_list:!0,...o};let i=0,a,c=[];for(;a===void 0||i<a;){const u=await oe(e);for(let m of u.items)c.push(await t(m));i+=u.items.length,a=u.total,e.options.page++}return c}async function Ne({env:e,dmShortID:t,model:n,withMetadata:r}){d({env:e,dmShortID:t,model:n});const s=g(`api/schema/${t}/${n}`,e),o=await f(s),i=o?.allOf?.[1];if(typeof i.properties!="object")throw new Error(`getSchema: ${s} returned unexpected format: ${JSON.stringify(o)}`);const{properties:a}=i,c=se(a);for(let u in c){let m=c[u];if(m.required=i.required.includes(u),c[u]?.oneOf&&delete c[u]?.oneOf,m.title?.includes("<")&&m.title?.includes(">")){const y=m.title.split("<")[1].slice(0,-1),w=m.title.split("<")[0];m.type=w,y.includes(":")?m.resource=y.split(":")[1]:m.resource=y}else["asset","entry","assets","entries"].includes(m.title)?(m.type=m.title,m.resource=null):m.type=m.title;delete c[u].title}if(r){const u=a._modelTitle.title,m=a._modelTitleField.title;return{properties:c,meta:{modelTitleField:m,modelTitle:u}}}return c}function ce(e){return Object.entries(e).map(([t,n])=>typeof n!="object"?{[t]:String(n)}:{...n.sort&&{sort:Array.isArray(n)?n.join(","):n},...n.search&&{[t+"~"]:n.search},...n.notNull&&{[t+"!"]:""},...n.null&&{[t]:""},...n.any&&{[t]:n.any.join(",")},...n.from&&{[t+"From"]:n.from},...n.to&&{[t+"To"]:n.to}}).reduce((t,n)=>({...t,...n}),{})}const xe=ce;function x(e){return e._links.collection.href.split("/").slice(-2)[0]}function de(e){const t=e._links.collection.href.split("api/")[0];return Object.keys(C.datamanager).find(r=>C.datamanager[r]===t)}const ue=e=>{const t=x(e),n=de(e),r=e._modelTitle,s=e.id;return{dmShortID:t,env:n,model:r,entryID:s}},je=e=>ie(ue(e)),Je=(e,t)=>ae({...ue(e),value:t});function Fe(e,t){const n=x(t);return t._embedded[`${n}:${t._modelTitle}/${e}/asset`]}async function He({env:e,dmShortID:t,assetGroup:n,assetID:r,token:s}){d({env:e,dmShortID:t,assetGroup:n,assetID:r});const o=h({assetID:r}),i=g(`a/${t}/${n}?${o}`,e),{_embedded:a}=await f(i,{token:s});return a?a["ec:dm-asset"]:void 0}async function ze(e){let{env:t,dmShortID:n,assetGroup:r,token:s,options:o={}}=e;d({env:t,dmShortID:n,assetGroup:r}),o={size:50,page:1,_list:!0,...o};const i=h(o),a=g(`a/${n}/${r}?${i}`,t),{count:c,total:u,_embedded:m}=await f(a,{token:s});let y=m?m["ec:dm-asset"]:[];return y=Array.isArray(y)?y:[y],{count:c,total:u,items:y}}async function Ke({env:e,dmShortID:t,assetGroup:n,token:r,file:s,name:o,options:i}){d({env:e,dmShortID:t,assetGroup:n,file:s});const a=g(`a/${t}/${n}`,e),c=new FormData;return c.append("file",s,o),i&&Object.keys(i).forEach(m=>{c.append(m,i[m])}),(await f(a,{token:r},{method:"POST",body:c}))._embedded["ec:dm-asset"]}async function Ve({env:e,dmShortID:t,assetGroup:n,files:r,options:s}){d({env:e,dmShortID:t,assetGroup:n,files:r});const o=g(`a/${t}/${n}`,e),i=new FormData;r.forEach(c=>{i.append("file",c)}),s&&Object.keys(s).forEach(c=>{i.append(c,s[c])});const a=await f(o,{},{method:"POST",body:i});return Array.isArray(a._embedded["ec:dm-asset"])?a._embedded["ec:dm-asset"]:[a._embedded["ec:dm-asset"]]}async function Ye({env:e,dmShortID:t,assetGroup:n,assetID:r,token:s}){d({env:e,dmShortID:t,assetGroup:n,assetID:r});const o=g(`a/${t}/${n}/${r}`,e);await f(o,{token:s,rawRes:!0},{method:"DELETE"})}function We(e,t,n=!1){let r,s;return(n?e?.thumbnails:e?.fileVariants)?.forEach(i=>{const{resolution:{width:a,height:c}}=i,u=Math.abs(Math.max(a,c)-t);(!s||u<s)&&(s=u,r=i)}),r?.url??e?.file?.url??null}function Xe(e="stage",t,n,r,s=!1){const o=Math.max(r.file.resolution.width,r.file.resolution.height),i=n.filter(c=>c<o),a=`https://datamanager${e==="stage"?".cachena":""}.entrecode.de`;return s?i.map(c=>{const u=r.thumbnails.find(w=>c===w.dimension),m=`${a}/t/${t}/${r.assetID}/${c}`,y=u?u.url:m;return{size:c,url:y,generated:u}}):i.map(c=>{const u=r.fileVariants.find(w=>c===Math.max(w.resolution.width,w.resolution.height)),m=`${a}/f/${t}/${r.assetID}/${c}`,y=u?u.url:m;return{size:c,url:y,generated:u}})}const p={"Content-Type":"application/json"};async function Qe(e){let{env:t,dmID:n,token:r}=e;d({env:t,dmID:n});const s=g(`?dataManagerID=${n}`,t);return f(s,{token:r})}async function Ze(e){let{env:t,options:n={}}=e;d({env:t}),n={size:25,page:1,_list:!0,...n};const r=h(n),s=g(`?${r}`,t),{count:o,total:i,_embedded:a}=await f(s,e);let c=a?a["ec:datamanager"]:[];return c=Array.isArray(c)?c:[c],{count:o,total:i,items:c}}async function et(e){let{env:t,dmID:n,options:r={}}=e;d({env:t,dmID:n}),r={size:25,dataManagerID:n,page:1,_list:!0,...r};const s=h(r),o=g(`model?${s}`,t),{count:i,total:a,_embedded:c}=await f(o,e);let u=c?c["ec:model"]:[];return u=Array.isArray(u)?u:[u],{count:i,total:a,items:u}}async function tt(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager"}=e;d({env:t,subdomain:s,resource:n}),r={size:25,page:1,_list:!0,...r};const o=h(r),i=g(`${n}?${o}`,t,s),{count:a,total:c,_embedded:u}=await f(i,e);let m=u?u[Object.keys(u)[0]]:[];return m=Array.isArray(m)?m:[m],{count:a,total:c,items:m}}async function nt(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager"}=e;d({env:t,subdomain:s,resource:n});const o=h(r),i=g(`${n}?${o}`,t,s);return f(i,e)}async function rt(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager",value:o}=e;d({env:t,subdomain:s,resource:n,value:o});const i=h(r),a=g(`${n}?${i}`,t,s);return f(a,e,{method:"PUT",body:JSON.stringify(o),headers:p})}async function st(e){let{env:t,resource:n,options:r={},subdomain:s="datamanager"}=e;d({env:t,subdomain:s,resource:n});const o=h(r),i=g(`${n}?${o}`,t,s);return f(i,{...e,rawRes:!0},{method:"DELETE",headers:p})}async function ot(e,t={}){let{env:n,route:r,options:s={},subdomain:o="datamanager"}=e;d({env:n,subdomain:o,route:r}),s={...s};const i=h(s),a=g(`${r}?${i}`,n,o);return f(a,e,t)}async function at(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=g("",t);return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function it(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const o=h({dataManagerID:r}),i=g(`?${o}`,t);return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function ct(e){let{env:t,token:n,dmID:r}=e;d({env:t,dmID:r});const s=h({dataManagerID:r}),o=g(`?${s}`,t);return f(o,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function dt(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const o=h({dataManagerID:r}),i=g(`model?${o}`,t);return f(i,{token:n},{method:"POST",body:JSON.stringify(s),headers:p})}async function ut(e){let{env:t,token:n,dmID:r,modelID:s,value:o}=e;d({env:t,dmID:r,modelID:s,value:o});const i=h({dataManagerID:r,modelID:s}),a=g(`model?${i}`,t);return f(a,{token:n},{method:"PUT",body:JSON.stringify(o),headers:p})}async function lt(e){let{env:t,token:n,dmID:r,modelID:s}=e;d({env:t,dmID:r,modelID:s});const o=h({dataManagerID:r,modelID:s}),i=g(`model?${o}`,t);return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function ft(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=g("template",t);return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function mt(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const o=h({dataManagerID:r}),i=g(`assetgroup?${o}`,t);return f(i,{token:n},{method:"POST",body:JSON.stringify(s),headers:p})}async function gt(e){let{env:t,token:n,dmID:r,assetGroupID:s,value:o}=e;d({env:t,dmID:r,assetGroupID:s,value:o});const i=h({dataManagerID:r,assetGroupID:s}),a=g(`assetgroup?${i}`,t);return f(a,{token:n},{method:"PUT",body:JSON.stringify(o),headers:p})}async function ht(e){let{env:t,token:n,dmShortID:r,assetGroup:s,assetID:o,value:i}=e;d({env:t,dmShortID:r,assetGroup:s,assetID:o,value:i});const a=g(`a/${r}/${s}/${o}`,t);return f(a,{token:n},{method:"PUT",body:JSON.stringify(i),headers:p})}async function pt(e){let{env:t,token:n,dmID:r,clientID:s,value:o}=e;d({env:t,dmID:r,clientID:s,value:o});const i=h({dataManagerID:r,clientID:s}),a=g(`client?${i}`,t);return f(a,{token:n},{method:"PUT",body:JSON.stringify(o),headers:p})}async function yt(e){let{env:t,token:n,dmID:r,value:s}=e;d({env:t,dmID:r,value:s});const o=h({dataManagerID:r}),i=g(`role?${o}`,t);return f(i,{token:n},{method:"POST",body:JSON.stringify(s),headers:p})}async function kt(e){let{env:t,token:n,dmID:r,roleID:s,value:o}=e;d({env:t,dmID:r,roleID:s,value:o});const i=h({dataManagerID:r,roleID:s}),a=g(`role?${i}`,t);return f(a,{token:n},{method:"PUT",body:JSON.stringify(o),headers:p})}async function wt(e){let{env:t,token:n,dmID:r,roleID:s}=e;d({env:t,dmID:r,roleID:s});const o=h({dataManagerID:r,roleID:s}),i=g(`role?${o}`,t);return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function Dt(e){let{env:t,token:n,dmID:r,accountID:s,value:o}=e;d({env:t,dmID:r,accountID:s,value:o});const i=h({dataManagerID:r,accountID:s}),a=g(`account?${i}`,t);return f(a,{token:n},{method:"PUT",body:JSON.stringify(o),headers:p})}async function Tt(e){let{env:t,token:n,dmID:r,accountID:s}=e;d({env:t,dmID:r,accountID:s});const o=h({dataManagerID:r,accountID:s}),i=g(`account?${o}`,t);return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function bt(e){let{env:t,token:n,options:r={}}=e;d({env:t});const s=h(r),o=g(`stats?${s}`,t);return f(o,{token:n})}async function $t(e){let{env:t,token:n,options:r={}}=e;d({env:t});const s=h(r),o=g(`entries?${s}`,t,"dm-history");return f(o,{token:n})}async function Et(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=g("client",t,"accounts");return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function vt(e){let{env:t,token:n,clientID:r,value:s}=e;d({env:t,clientID:r,value:s});const o=h({clientID:r}),i=g(`client?${o}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function It(e){let{env:t,token:n,clientID:r}=e;d({env:t,clientID:r});const s=h({clientID:r}),o=g(`client?${s}`,t,"accounts");return f(o,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function At(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=g("group",t,"accounts");return f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p})}async function St(e){let{env:t,token:n,groupID:r,value:s}=e;d({env:t,groupID:r,value:s});const o=h({groupID:r}),i=g(`group?${o}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function _t(e){let{env:t,token:n,groupID:r}=e;d({env:t,groupID:r});const s=h({groupID:r}),o=g(`group?${s}`,t,"accounts");return f(o,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function qt(e){let{env:t,token:n,value:r}=e;d({env:t,value:r});const s=g("invite",t,"accounts"),o=await f(s,{token:n},{method:"POST",body:JSON.stringify(r),headers:p});return o?._embedded?.["ec:invite"]??o}async function Ot(e){let{env:t,token:n,inviteID:r,value:s}=e;d({env:t,inviteID:r,value:s});const o=h({invite:r}),i=g(`invite?${o}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function Ct(e){let{env:t,token:n,inviteID:r}=e;d({env:t,inviteID:r});const s=h({invite:r}),o=g(`invite?${s}`,t,"accounts");return f(o,{token:n,rawRes:!0},{method:"DELETE",headers:p})}async function Lt(e){let{env:t,token:n,accountID:r,value:s}=e;d({env:t,accountID:r,value:s});const o=h({accountID:r}),i=g(`account?${o}`,t,"accounts");return f(i,{token:n},{method:"PUT",body:JSON.stringify(s),headers:p})}async function Ut(e){let{env:t,token:n,accountID:r}=e;d({env:t,accountID:r});const s=h({accountID:r}),o=g(`account/tokens?${s}`,t,"accounts");let a=(await f(o,{token:n}))?._embedded?.["ec:account/token"]??[];return Array.isArray(a)?a:[a]}async function Mt(e){let{env:t,token:n,accountID:r}=e;d({env:t,accountID:r});const s=h({accountID:r}),o=g(`account/tokens?${s}`,t,"accounts");return f(o,{token:n},{method:"POST",headers:p})}async function Rt(e){let{env:t,token:n,accountID:r,accessTokenID:s}=e;d({env:t,accountID:r,accessTokenID:s});const o=h({accessTokenID:s,accountID:r}),i=g(`account/tokens?${o}`,t,"accounts");return f(i,{token:n,rawRes:!0},{method:"DELETE",headers:p})}const Pt=Object.freeze(Object.defineProperty({__proto__:null,assetList:ze,createAccountClient:Et,createAsset:Ke,createAssetGroup:mt,createAssets:Ve,createDatamanager:at,createEntry:Be,createGroup:At,createInvite:qt,createModel:dt,createRole:yt,createTemplate:ft,createToken:Mt,deleteAccountClient:It,deleteAsset:Ye,deleteDatamanager:ct,deleteDmAccount:Tt,deleteEntry:ie,deleteEntryObject:je,deleteGroup:_t,deleteInvite:Ct,deleteModel:lt,deleteRole:wt,deleteToken:Rt,dmList:Ze,editAccount:Lt,editAccountClient:vt,editAsset:ht,editAssetGroup:gt,editDatamanager:it,editDmAccount:Dt,editDmClient:pt,editEntry:ae,editEntryObject:Je,editGroup:St,editInvite:Ot,editModel:ut,editRole:kt,entryList:oe,fileVariant:We,filterOptions:xe,getAsset:He,getDatamanager:Qe,getEcAuthKey:Le,getEntry:Pe,getEntryAsset:Fe,getEntryEnv:de,getEntryShortID:x,getFileVariants:Xe,getHistory:$t,getPublicAuthKey:Ce,getSchema:Ne,getStats:bt,listTokens:Ut,loginEc:_e,loginPublic:Se,logoutEc:Oe,logoutPublic:qe,mapEntries:Ge,modelList:et,publicApi:Re,raw:ot,resourceDelete:st,resourceEdit:rt,resourceGet:nt,resourceList:tt,sdkOptions:ce},Symbol.toStringTag,{value:"Module"})),{entryList:V,mapEntries:Bt,getEntry:Gt,getAsset:Nt,assetList:Y,createAsset:xt,createAssets:jt,deleteAsset:Jt,createEntry:Ft,editEntry:W,deleteEntry:Ht,getSchema:zt,loginPublic:Kt,loginEc:Vt,logoutEc:Yt,logoutPublic:Wt,getEcAuthKey:E,getPublicAuthKey:A,dmList:Xt,modelList:Qt,publicApi:Zt,getDatamanager:en,resourceList:tn,resourceGet:nn,resourceEdit:rn,resourceDelete:sn,raw:on,createDatamanager:an,editDatamanager:cn,deleteDatamanager:dn,createModel:un,editModel:ln,deleteModel:fn,createTemplate:mn,createAssetGroup:gn,editAssetGroup:hn,editAsset:pn,editDmClient:yn,createRole:kn,editRole:wn,deleteRole:Dn,editDmAccount:Tn,deleteDmAccount:bn,getStats:$n,getHistory:En,createAccountClient:vn,editAccountClient:In,deleteAccountClient:An,createGroup:Sn,editGroup:_n,deleteGroup:qn,createInvite:On,editInvite:Cn,deleteInvite:Ln,editAccount:Un,listTokens:Mn,createToken:Rn,deleteToken:Pn}=Pt;function X(e){if(!e||typeof e!="object")return e;const{_links:t,_embedded:n,...r}=e;return r}function Bn(e){return!e||typeof e!="object"?e:Array.isArray(e.items)?{...e,items:e.items.map(X)}:X(e)}class j{constructor(t={}){if(!t.storageAdapter){let n=new Map;t.storageAdapter={get:r=>n.get(r),set:(r,s)=>n.set(r,s),remove:r=>n.delete(r)}}this.config=t}set(t){return new j({...this.config,...t})}async entries(t={}){const n=await this.getBestToken();return V({...this.config,options:t,token:n})}async entryList(t){const n=await this.getBestToken();return V({...this.config,options:t,token:n}).then(r=>this.maybeClean(r))}async mapEntries(t,n={}){const r=await this.getBestToken();return Bt({...this.config,options:n,token:r},t)}async getEntry(t){const n=await this.getBestToken();return Gt({...this.config,entryID:t,token:n}).then(r=>this.maybeClean(r))}async editEntrySafe(t,n){const r=await this.getBestToken();return W({...this.config,entryID:t,token:r,value:n,safePut:!0}).then(s=>this.maybeClean(s))}async getSchema(){return zt(this.config)}async assets(t){const n=await this.getBestToken();return Y({...this.config,options:t,token:n})}async assetList(t){const n=await this.getBestToken();return Y({...this.config,options:t,token:n})}async createAsset(t){const{file:n,name:r,options:s}=t,o=await this.getBestToken();return xt({...this.config,file:n,name:r,options:s,token:o})}async createAssets(t){const{files:n,options:r}=t,s=await this.getBestToken();return jt({...this.config,files:n,options:r,token:s})}async deleteAsset(t){const n=await this.getBestToken();return Jt({...this.config,token:n,assetID:t})}async getAsset(t){const n=await this.getBestToken();return Nt({...this.config,assetID:t,token:n})}async createEntry(t){const n=await this.getBestToken();return Ft({...this.config,token:n,value:t}).then(r=>this.maybeClean(r))}async editEntry(t,n){const r=await this.getBestToken();return W({...this.config,entryID:t,token:r,value:n}).then(s=>this.maybeClean(s))}async deleteEntry(t){const n=await this.getBestToken();return Ht({...this.config,token:n,entryID:t})}async resourceList(t){const n=await this.getBestToken();return tn({...this.config,options:t,token:n})}async resourceGet(t){const n=await this.getBestToken();return nn({...this.config,options:t,token:n})}async resourceEdit(t,n){const r=await this.getBestToken();return rn({...this.config,options:t,token:r,value:n})}async resourceDelete(t){const n=await this.getBestToken();return sn({...this.config,options:t,token:n})}async raw(t,n){const r=await this.getBestToken();return on({...this.config,options:t,token:r},n)}async createDatamanager(t){const n=await this.getBestToken();return an({...this.config,token:n,value:t})}async editDatamanager(t,n){const r=await this.getBestToken();return cn({...this.config,token:r,dmID:t,value:n})}async deleteDatamanager(t){const n=await this.getBestToken();return dn({...this.config,token:n,dmID:t})}async createModel(t){const n=await this.getBestToken();return un({...this.config,token:n,value:t})}async editModel(t,n){const r=await this.getBestToken();return ln({...this.config,token:r,modelID:t,value:n})}async deleteModel(t){const n=await this.getBestToken();return fn({...this.config,token:n,modelID:t})}async createTemplate(t){const n=await this.getBestToken();return mn({...this.config,token:n,value:t})}async createAssetGroup(t){const n=await this.getBestToken();return gn({...this.config,token:n,value:t})}async editAssetGroup(t,n){const r=await this.getBestToken();return hn({...this.config,token:r,assetGroupID:t,value:n})}async editAsset(t,n){const r=await this.getBestToken();return pn({...this.config,token:r,assetID:t,value:n})}async editDmClient(t,n){const r=await this.getBestToken();return yn({...this.config,token:r,clientID:t,value:n})}async createRole(t){const n=await this.getBestToken();return kn({...this.config,token:n,value:t})}async editRole(t,n){const r=await this.getBestToken();return wn({...this.config,token:r,roleID:t,value:n})}async deleteRole(t){const n=await this.getBestToken();return Dn({...this.config,token:n,roleID:t})}async editDmAccount(t,n){const r=await this.getBestToken();return Tn({...this.config,token:r,accountID:t,value:n})}async deleteDmAccount(t){const n=await this.getBestToken();return bn({...this.config,token:n,accountID:t})}async getStats(t={}){const n=await this.getBestToken();return $n({...this.config,token:n,options:t})}async getHistory(t={}){const n=await this.getBestToken();return En({...this.config,token:n,options:t})}async createAccountClient(t){const n=await this.getBestToken();return vn({...this.config,token:n,value:t})}async editAccountClient(t,n){const r=await this.getBestToken();return In({...this.config,token:r,clientID:t,value:n})}async deleteAccountClient(t){const n=await this.getBestToken();return An({...this.config,token:n,clientID:t})}async createGroup(t){const n=await this.getBestToken();return Sn({...this.config,token:n,value:t})}async editGroup(t,n){const r=await this.getBestToken();return _n({...this.config,token:r,groupID:t,value:n})}async deleteGroup(t){const n=await this.getBestToken();return qn({...this.config,token:n,groupID:t})}async createInvite(t){const n=await this.getBestToken();return On({...this.config,token:n,value:t})}async editInvite(t,n){const r=await this.getBestToken();return Cn({...this.config,token:r,inviteID:t,value:n})}async deleteInvite(t){const n=await this.getBestToken();return Ln({...this.config,token:n,inviteID:t})}async editAccount(t,n){const r=await this.getBestToken();return Un({...this.config,token:r,accountID:t,value:n})}async listTokens(t){const n=await this.getBestToken();return Mn({...this.config,token:n,accountID:t})}async createToken(t){const n=await this.getBestToken();return Rn({...this.config,token:n,accountID:t})}async deleteToken(t,n){const r=await this.getBestToken();return Pn({...this.config,token:r,accountID:t,accessTokenID:n})}storageAdapter(t){return this.set({storageAdapter:t})}removeToken(t){if(!this.config.storageAdapter)throw new Error("cannot removeToken: no storageAdapter defined!");const{remove:n}=this.config.storageAdapter;n(t)}getToken(t){if(!this.config.storageAdapter)throw new Error("cannot getAuth: no storageAdapter defined!");const{get:n}=this.config.storageAdapter;return n(t)}getPublicToken(){return this.config.token||this.getToken(A(this.config))}getEcToken(){return this.config.token||this.getToken(E(this.config))}setToken(t,n){if(!this.config.storageAdapter)throw new Error("cannot setEcToken: no storageAdapter defined!");return this.config.storageAdapter.set(t,n)}setEcToken(t){this.setToken(E(this.config),t)}removeEcToken(){this.removeToken(E(this.config))}setPublicToken(t){this.setToken(A(this.config),t)}loginEc(t){return Vt({...this.config,...t}).then(n=>this.setToken(E(this.config),n.token))}loginPublic(t){return Kt({...this.config,...t}).then(n=>this.setToken(A(this.config),n.token))}logoutPublic(){const t=this.getPublicToken();return Wt({...this.config,token:t}).then(()=>this.removeToken(A(this.config)))}logoutEc(){const t=this.getEcToken();return Yt({...this.config,token:t}).then(()=>this.removeToken(E(this.config)))}hasPublicToken(){return!!this.getPublicToken()}hasEcToken(){return!!this.getEcToken()}hasAnyToken(){return!!this.getEcToken()||!!this.getPublicToken()}getBestToken(){try{return this.getEcToken()||this.getPublicToken()}catch{return}}clean(t=!0){return this.set({_clean:t})}maybeClean(t){return this.config._clean?Bn(t):t}model(t){return this.set({model:t})}token(t){return this.set({token:t})}dmShortID(t){return this.set({dmShortID:t})}dm(t){return this.dmShortID(t)}dmID(t){return this.set({dmID:t})}assetGroup(t){return this.set({assetGroup:t})}assetgroup(t){return this.assetGroup(t)}subdomain(t){return this.set({subdomain:t})}resource(t){return this.set({resource:t})}route(t){return this.set({route:t})}publicApi(){return Zt(this.config)}async getDatamanager(t){const n=await this.getBestToken();return en({...this.config,dmID:t,token:n})}async dmList(t={}){const n=await this.getBestToken();return Xt({...this.config,options:t,token:n})}async modelList(t={}){const n=await this.getBestToken();return Qt({...this.config,options:t,token:n})}}const R=ne.join(Ee.homedir(),".ec-fdk"),P=ne.join(R,"auth.json");function M(){try{return v.existsSync(P)?JSON.parse(v.readFileSync(P,"utf-8")):{}}catch{return{}}}function Q(e){v.existsSync(R)||v.mkdirSync(R,{recursive:!0,mode:448}),v.writeFileSync(P,JSON.stringify(e,null,2),{mode:384})}const T={get(e){return M()[e]},set(e,t){const n=M();n[e]=t,Q(n)},remove(e){const t=M();delete t[e],Q(t)}};function Gn(e){const t=ve.createInterface({input:process.stdin,output:process.stderr});return new Promise(n=>{t.question(e,r=>{t.close(),n(r)})})}function Nn(e){return new Promise(t=>{process.stderr.write(e);const n=process.stdin;n.setRawMode(!0),n.resume(),n.setEncoding("utf-8");let r="";const s=o=>{for(const i of o){if(i===""&&(process.stderr.write(`
5
5
  `),process.exit(130)),i==="\r"||i===`
6
6
  `){n.setRawMode(!1),n.pause(),n.removeListener("data",s),process.stderr.write(`
7
- `),t(r);return}if(i===""||i==="\b"){r.length>0&&(r=r.slice(0,-1),process.stderr.write("\b \b"));continue}r+=i,process.stderr.write("*")}};n.on("data",s)})}const ue={stage:{authEndpoint:"https://login.cachena.entrecode.de/oidc/auth",tokenEndpoint:"https://login.cachena.entrecode.de/oidc/token"},live:{authEndpoint:"https://login.entrecode.de/oidc/auth",tokenEndpoint:"https://login.entrecode.de/oidc/token"}},P="ec-fdk-cli",Q="http://localhost:19836/callback",Nn=12e4;function j(e){return e.toString("base64url")}function xn(){return j(G.randomBytes(32))}function jn(e){return j(G.createHash("sha256").update(e).digest())}function Jn(e){const t=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Ie.exec(`${t} ${JSON.stringify(e)}`)}const Fn=`<!DOCTYPE html><html><body style="font-family:system-ui;display:flex;justify-content:center;align-items:center;height:100vh;margin:0">
7
+ `),t(r);return}if(i===""||i==="\b"){r.length>0&&(r=r.slice(0,-1),process.stderr.write("\b \b"));continue}r+=i,process.stderr.write("*")}};n.on("data",s)})}const le={stage:{authEndpoint:"https://login.cachena.entrecode.de/oidc/auth",tokenEndpoint:"https://login.cachena.entrecode.de/oidc/token"},live:{authEndpoint:"https://login.entrecode.de/oidc/auth",tokenEndpoint:"https://login.entrecode.de/oidc/token"}},B="ec-fdk-cli",Z="http://localhost:19836/callback",xn=12e4;function J(e){return e.toString("base64url")}function jn(){return J(N.randomBytes(32))}function Jn(e){return J(N.createHash("sha256").update(e).digest())}function Fn(e){const t=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Ae.exec(`${t} ${JSON.stringify(e)}`)}const Hn=`<!DOCTYPE html><html><body style="font-family:system-ui;display:flex;justify-content:center;align-items:center;height:100vh;margin:0">
8
8
  <div style="text-align:center"><h1>Login successful</h1><p>You can close this tab.</p></div></body></html>`,S=e=>`<!DOCTYPE html><html><body style="font-family:system-ui;display:flex;justify-content:center;align-items:center;height:100vh;margin:0">
9
- <div style="text-align:center"><h1>Login failed</h1><p>${e}</p></div></body></html>`;async function Hn(e,t){const{tokenEndpoint:n}=ue[e],r=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",client_id:P,refresh_token:t})});if(!r.ok){const a=await r.text();throw new Error(`Token refresh failed: ${r.status} ${a}`)}const s=await r.json();if(!s.access_token)throw new Error("No access_token in refresh response");return{access_token:s.access_token,refresh_token:s.refresh_token}}function zn(e){const{authEndpoint:t,tokenEndpoint:n}=ue[e],r=xn(),s=jn(r),a=j(G.randomBytes(16));return new Promise((i,o)=>{const c=ve.createServer(async(y,w)=>{if(!y.url?.startsWith("/callback")){w.writeHead(404),w.end();return}const $=new URL(y.url,"http://localhost").searchParams,J=$.get("code"),ge=$.get("state"),C=$.get("error");if(C){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S($.get("error_description")||C)),g(),o(new Error($.get("error_description")||C));return}if(ge!==a){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S("State mismatch")),g(),o(new Error("State mismatch — possible CSRF attack"));return}if(!J){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S("No authorization code received")),g(),o(new Error("No authorization code received"));return}try{const D=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:P,redirect_uri:Q,code:J,code_verifier:r})});if(!D.ok){const me=await D.text();throw new Error(`Token exchange failed: ${D.status} ${me}`)}const F=await D.json(),H=F.access_token;if(!H)throw new Error("No access_token in token response");w.writeHead(200,{"Content-Type":"text/html"}),w.end(Fn),g(),i({access_token:H,refresh_token:F.refresh_token})}catch(D){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S(D.message)),g(),o(D)}}),u=setTimeout(()=>{g(),o(new Error("Login timed out after 2 minutes"))},Nn);function g(){clearTimeout(u),c.close()}c.listen(19836,()=>{const y=`${t}?`+new URLSearchParams({client_id:P,redirect_uri:Q,response_type:"code",scope:"openid offline_access",state:a,code_challenge:s,code_challenge_method:"S256"}).toString();process.stderr.write(`Opening browser for login...
10
- `),Jn(y)}),c.on("error",y=>{g(),o(new Error(`Could not start local server: ${y.message}`))})})}const B=be.createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:document.currentScript&&document.currentScript.src||new URL("cli.cjs",document.baseURI).href),{version:Kn}=B("../package.json"),Vn=`ec.fdk <command> [options]
9
+ <div style="text-align:center"><h1>Login failed</h1><p>${e}</p></div></body></html>`;async function zn(e,t){const{tokenEndpoint:n}=le[e],r=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",client_id:B,refresh_token:t})});if(!r.ok){const o=await r.text();throw new Error(`Token refresh failed: ${r.status} ${o}`)}const s=await r.json();if(!s.access_token)throw new Error("No access_token in refresh response");return{access_token:s.access_token,refresh_token:s.refresh_token}}function Kn(e){const{authEndpoint:t,tokenEndpoint:n}=le[e],r=jn(),s=Jn(r),o=J(N.randomBytes(16));return new Promise((i,a)=>{const c=Ie.createServer(async(y,w)=>{if(!y.url?.startsWith("/callback")){w.writeHead(404),w.end();return}const $=new URL(y.url,"http://localhost").searchParams,F=$.get("code"),ge=$.get("state"),U=$.get("error");if(U){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S($.get("error_description")||U)),m(),a(new Error($.get("error_description")||U));return}if(ge!==o){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S("State mismatch")),m(),a(new Error("State mismatch — possible CSRF attack"));return}if(!F){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S("No authorization code received")),m(),a(new Error("No authorization code received"));return}try{const D=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:B,redirect_uri:Z,code:F,code_verifier:r})});if(!D.ok){const he=await D.text();throw new Error(`Token exchange failed: ${D.status} ${he}`)}const H=await D.json(),z=H.access_token;if(!z)throw new Error("No access_token in token response");w.writeHead(200,{"Content-Type":"text/html"}),w.end(Hn),m(),i({access_token:z,refresh_token:H.refresh_token})}catch(D){w.writeHead(200,{"Content-Type":"text/html"}),w.end(S(D.message)),m(),a(D)}}),u=setTimeout(()=>{m(),a(new Error("Login timed out after 2 minutes"))},xn);function m(){clearTimeout(u),c.close()}c.listen(19836,()=>{const y=`${t}?`+new URLSearchParams({client_id:B,redirect_uri:Z,response_type:"code",scope:"openid offline_access",state:o,code_challenge:s,code_challenge_method:"S256"}).toString();process.stderr.write(`Opening browser for login...
10
+ `),Fn(y)}),c.on("error",y=>{m(),a(new Error(`Could not start local server: ${y.message}`))})})}const G=$e.createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:document.currentScript&&document.currentScript.src||new URL("cli.cjs",document.baseURI).href),{version:_}=G("../package.json"),Vn=`ec.fdk <command> [options]
11
11
 
12
12
  Commands:
13
13
  login Login via browser (OIDC). Use --password for email/password prompt.
@@ -111,37 +111,39 @@ Options:
111
111
  --md Output entries as readable markdown
112
112
  -v, --version Show version
113
113
  --password Use email/password login instead of browser
114
- -h, --help Show help`;function _(e){return Object.fromEntries(e.map(t=>{const n=t.indexOf("=");return n===-1&&l(`Invalid filter: "${t}" (expected key=value)`),[t.slice(0,n),t.slice(n+1)]}))}function l(e){process.stderr.write(`Error: ${e}
115
- `),process.exit(2)}function Yn(){return new Promise(e=>{let t="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",n=>t+=n),process.stdin.on("end",()=>e(t))})}async function k(e){if(e)try{return JSON.parse(e)}catch{l("--data must be valid JSON")}if(!process.stdin.isTTY){const t=await Yn();t.trim()||l("No data provided via stdin");try{return JSON.parse(t)}catch{l("Stdin must be valid JSON")}}l("Provide --data or pipe JSON via stdin")}function I(e){if(!e||typeof e!="object")return e;const{_links:t,_embedded:n,...r}=e;return r}function q(e){return!e||typeof e!="object"?e:Array.isArray(e.items)?{...e,items:e.items.map(I)}:I(e)}const Z=40;function ee(e){return e.length>Z?e.slice(0,Z-2)+"..":e}function le(e){return e==null?"":ee(typeof e=="object"?JSON.stringify(e):String(e))}function fe(e){return Object.keys(e).filter(t=>!t.startsWith("_"))}function L(e,t){return"| "+e.map((n,r)=>n.padEnd(t[r])).join(" | ")+" |"}function Wn(e){const t=fe(e),n=t.map(u=>le(e[u])),r=Math.max(5,...t.map(u=>u.length)),s=Math.max(5,...n.map(u=>u.length)),a=[r,s],i=L(["Field","Value"],a),o="| "+a.map(u=>"-".repeat(u)).join(" | ")+" |",c=t.map((u,g)=>L([u,n[g]],a));return`${i}
116
- ${o}
117
- ${c.join(`
118
- `)}`}function Xn(e){if(!e.items.length)return"No entries found.";const t=fe(e.items[0]),n=e.items.map(o=>t.map(c=>le(o[c]))),r=t.map((o,c)=>Math.max(o.length,...n.map(u=>u[c].length))),s=L(t,r),a="| "+r.map(o=>"-".repeat(o)).join(" | ")+" |",i=n.map(o=>L(o,r));return`${s}
114
+ -h, --help Show help`;function q(e){return Object.fromEntries(e.map(t=>{const n=t.indexOf("=");return n===-1&&l(`Invalid filter: "${t}" (expected key=value)`),[t.slice(0,n),t.slice(n+1)]}))}function l(e){process.stderr.write(`Error: ${e}
115
+ `),process.exit(2)}function Yn(){return new Promise(e=>{let t="";process.stdin.setEncoding("utf-8"),process.stdin.on("data",n=>t+=n),process.stdin.on("end",()=>e(t))})}async function k(e){if(e)try{return JSON.parse(e)}catch{l("--data must be valid JSON")}if(!process.stdin.isTTY){const t=await Yn();t.trim()||l("No data provided via stdin");try{return JSON.parse(t)}catch{l("Stdin must be valid JSON")}}l("Provide --data or pipe JSON via stdin")}function I(e){if(!e||typeof e!="object")return e;const{_links:t,_embedded:n,...r}=e;return r}function O(e){return!e||typeof e!="object"?e:Array.isArray(e.items)?{...e,items:e.items.map(I)}:I(e)}const ee=40;function te(e){return e.length>ee?e.slice(0,ee-2)+"..":e}function fe(e){return e==null?"":te(typeof e=="object"?JSON.stringify(e):String(e))}function me(e){return Object.keys(e).filter(t=>!t.startsWith("_"))}function L(e,t){return"| "+e.map((n,r)=>n.padEnd(t[r])).join(" | ")+" |"}function Wn(e){const t=me(e),n=t.map(u=>fe(e[u])),r=Math.max(5,...t.map(u=>u.length)),s=Math.max(5,...n.map(u=>u.length)),o=[r,s],i=L(["Field","Value"],o),a="| "+o.map(u=>"-".repeat(u)).join(" | ")+" |",c=t.map((u,m)=>L([u,n[m]],o));return`${i}
119
116
  ${a}
117
+ ${c.join(`
118
+ `)}`}function Xn(e){if(!e.items.length)return"No entries found.";const t=me(e.items[0]),n=e.items.map(a=>t.map(c=>fe(a[c]))),r=t.map((a,c)=>Math.max(a.length,...n.map(u=>u[c].length))),s=L(t,r),o="| "+r.map(a=>"-".repeat(a)).join(" | ")+" |",i=n.map(a=>L(a,r));return`${s}
119
+ ${o}
120
120
  ${i.join(`
121
121
  `)}
122
122
 
123
- ${e.items.length} of ${e.total} entries`}async function Qn(){const{values:e,positionals:t}=Te.parseArgs({allowPositionals:!0,options:{env:{type:"string",short:"e",default:"stage"},dm:{type:"string",short:"d"},model:{type:"string",short:"m"},id:{type:"string",short:"i"},data:{type:"string"},size:{type:"string",short:"s"},page:{type:"string",short:"p"},sort:{type:"string"},filter:{type:"string",short:"f",multiple:!0,default:[]},fields:{type:"string"},rid:{type:"string"},"account-id":{type:"string"},assetgroup:{type:"string"},resource:{type:"string"},subdomain:{type:"string"},raw:{type:"boolean",default:!1},md:{type:"boolean",default:!1},password:{type:"boolean",default:!1},dir:{type:"string"},version:{type:"boolean",short:"v"},help:{type:"boolean",short:"h"}}});e.version&&(console.log(Kn),process.exit(0)),(e.help||t.length===0)&&(console.log(Vn),process.exit(0));const n=t[0],r=e.env;r!=="stage"&&r!=="live"&&l('--env must be "stage" or "live"');const s=new x({env:r,storageAdapter:T});if(n!=="login"&&n!=="logout"){const a=s.getEcToken(),i=T.get(`${r}_refresh`);if(a&&i)try{const o=JSON.parse(Buffer.from(a.split(".")[1],"base64url").toString());if(o.exp&&o.exp*1e3<Date.now()){const c=await Hn(r,i);s.setEcToken(c.access_token),c.refresh_token&&T.set(`${r}_refresh`,c.refresh_token)}}catch{}}if(n==="login"){try{if(e.password){const a=await Bn("Email: "),i=await Gn("Password: ");await s.loginEc({email:a,password:i})}else{const a=await zn(r);s.setEcToken(a.access_token),a.refresh_token&&T.set(`${r}_refresh`,a.refresh_token)}process.stderr.write(`Logged in to ${r} successfully.
124
- `)}catch(a){process.stderr.write(`Login failed: ${a.message}
125
- `),process.exit(1)}return}if(n==="whoami"){const a=s.getEcToken();a||(process.stderr.write(`Not logged in to ${r}.
126
- `),process.exit(1));try{const i=JSON.parse(Buffer.from(a.split(".")[1],"base64url").toString()),o={env:r};i.email&&(o.email=i.email),i.sub&&(o.accountID=i.sub),i.iss&&(o.issuer=i.iss),i.exp&&(o.expires=new Date(i.exp*1e3).toISOString()),process.stdout.write(JSON.stringify(o,null,2)+`
127
- `)}catch{l("Could not decode token")}return}if(n==="install-skill"){const{mkdirSync:a,copyFileSync:i}=await import("node:fs"),{join:o,resolve:c}=await import("node:path"),{homedir:u}=await import("node:os"),g=e.dir?c(e.dir):o(u(),".claude"),y=o(g,"skills","ec-fdk"),w=B.resolve("../skill/SKILL.md");a(y,{recursive:!0}),i(w,o(y,"SKILL.md")),T.set("skill_path",y),process.stderr.write(`Installed skill to ${y}/SKILL.md
128
- `);return}if(n==="update"){const{execSync:a}=await import("node:child_process");process.stderr.write(`Updating ec.fdk...
129
- `);try{a("npm i -g ec.fdk@latest",{stdio:"inherit"})}catch{l("Failed to update ec.fdk")}const i=T.get("skill_path");if(i){const{mkdirSync:o,copyFileSync:c}=await import("node:fs"),{join:u}=await import("node:path"),g=B.resolve("../skill/SKILL.md");o(i,{recursive:!0}),c(g,u(i,"SKILL.md")),process.stderr.write(`Updated skill at ${i}/SKILL.md
123
+ ${e.items.length} of ${e.total} entries`}async function Qn(){const{values:e,positionals:t}=be.parseArgs({allowPositionals:!0,options:{env:{type:"string",short:"e",default:"stage"},dm:{type:"string",short:"d"},model:{type:"string",short:"m"},id:{type:"string",short:"i"},data:{type:"string"},size:{type:"string",short:"s"},page:{type:"string",short:"p"},sort:{type:"string"},filter:{type:"string",short:"f",multiple:!0,default:[]},fields:{type:"string"},rid:{type:"string"},"account-id":{type:"string"},assetgroup:{type:"string"},resource:{type:"string"},subdomain:{type:"string"},raw:{type:"boolean",default:!1},md:{type:"boolean",default:!1},password:{type:"boolean",default:!1},dir:{type:"string"},version:{type:"boolean",short:"v"},help:{type:"boolean",short:"h"}}});e.version&&(console.log(_),process.exit(0)),(e.help||t.length===0)&&(console.log(Vn),process.exit(0));const n=t[0],r=e.env;r!=="stage"&&r!=="live"&&l('--env must be "stage" or "live"');const s=new j({env:r,storageAdapter:T});if(n!=="login"&&n!=="logout"){const o=s.getEcToken(),i=T.get(`${r}_refresh`);if(o&&i)try{const a=JSON.parse(Buffer.from(o.split(".")[1],"base64url").toString());if(a.exp&&a.exp*1e3<Date.now()){const c=await zn(r,i);s.setEcToken(c.access_token),c.refresh_token&&T.set(`${r}_refresh`,c.refresh_token)}}catch{}}if(n==="login"){try{if(e.password){const o=await Gn("Email: "),i=await Nn("Password: ");await s.loginEc({email:o,password:i})}else{const o=await Kn(r);s.setEcToken(o.access_token),o.refresh_token&&T.set(`${r}_refresh`,o.refresh_token)}process.stderr.write(`Logged in to ${r} successfully.
124
+ `)}catch(o){process.stderr.write(`Login failed: ${o.message}
125
+ `),process.exit(1)}return}if(n==="whoami"){const o=s.getEcToken();o||(process.stderr.write(`Not logged in to ${r}.
126
+ `),process.exit(1));try{const i=JSON.parse(Buffer.from(o.split(".")[1],"base64url").toString()),a={env:r};i.email&&(a.email=i.email),i.sub&&(a.accountID=i.sub),i.iss&&(a.issuer=i.iss),i.exp&&(a.expires=new Date(i.exp*1e3).toISOString()),process.stdout.write(JSON.stringify(a,null,2)+`
127
+ `)}catch{l("Could not decode token")}return}if(n==="install-skill"){const{mkdirSync:o,copyFileSync:i}=await import("node:fs"),{join:a,resolve:c}=await import("node:path"),{homedir:u}=await import("node:os"),m=e.dir?c(e.dir):a(u(),".claude"),y=a(m,"skills","ec-fdk"),w=G.resolve("../skill/SKILL.md");o(y,{recursive:!0}),i(w,a(y,"SKILL.md")),T.set("skill_path",y),process.stderr.write(`Installed skill to ${y}/SKILL.md
128
+ `);return}if(n==="update"){const{execSync:o}=await import("node:child_process");process.stderr.write(`Current version: ${_}
129
+ `);try{o("npm i -g ec.fdk@latest",{stdio:"inherit"})}catch{l("Failed to update ec.fdk")}const i=o("ec.fdk --version",{encoding:"utf-8"}).trim();i===_?process.stderr.write(`Already on latest version ${_}.
130
+ `):process.stderr.write(`Updated to ${i}.
131
+ `);const a=T.get("skill_path");if(a){const{mkdirSync:c,copyFileSync:u}=await import("node:fs"),{join:m}=await import("node:path"),y=G.resolve("../skill/SKILL.md");c(a,{recursive:!0}),u(y,m(a,"SKILL.md")),process.stderr.write(`Updated skill at ${a}/SKILL.md
130
132
  `)}return}if(n==="logout"){try{s.hasEcToken()&&await s.logoutEc()}catch{}s.removeEcToken(),T.remove(`${r}_refresh`),process.stderr.write(`Logged out of ${r}.
131
- `);return}try{let a;const i=()=>{const o={..._(e.filter)};return e.size&&(o.size=Number(e.size)),e.page&&(o.page=Number(e.page)),e.sort&&(o.sort=[e.sort]),e.fields&&(o._fields=e.fields),o};switch(n){case"dmList":{a=await s.dmList(i()),e.raw||(a=q(a));break}case"modelList":{e.id||l("--id (datamanager UUID) is required for modelList"),a=await s.dmID(e.id).modelList(i()),e.raw||(a=q(a));break}case"getDatamanager":{e.id||l("--id (datamanager UUID) is required for getDatamanager"),a=await s.getDatamanager(e.id),e.raw||(a=q(a));break}case"resourceList":{e.resource||l("--resource is required for resourceList");let o=s.resource(e.resource);e.subdomain&&(o=o.subdomain(e.subdomain)),a=await o.resourceList(i()),e.raw||(a=q(a));break}case"resourceGet":{e.resource||l("--resource is required for resourceGet");let o=s.resource(e.resource);e.subdomain&&(o=o.subdomain(e.subdomain)),a=await o.resourceGet(_(e.filter)),e.raw||(a=I(a));break}case"resourceEdit":{e.resource||l("--resource is required for resourceEdit");let o=s.resource(e.resource);e.subdomain&&(o=o.subdomain(e.subdomain));const c=await k(e.data);if(a=await o.resourceEdit(_(e.filter),c),!a){process.stderr.write(`Resource updated.
132
- `);return}e.raw||(a=I(a));break}case"resourceDelete":{e.resource||l("--resource is required for resourceDelete");let o=s.resource(e.resource);e.subdomain&&(o=o.subdomain(e.subdomain)),await o.resourceDelete(_(e.filter)),process.stderr.write(`Resource deleted.
133
- `);return}case"getStats":{a=await s.getStats(i());break}case"getHistory":{a=await s.getHistory(i());break}case"entryList":case"getEntry":case"createEntry":case"editEntry":case"deleteEntry":case"getSchema":{e.dm||l("--dm is required"),e.model||l("--model is required");const o=s.dm(e.dm).model(e.model).clean(!e.raw);switch(n){case"entryList":{a=await o.entryList(i());break}case"getEntry":{e.id||l("--id is required for getEntry"),a=await o.getEntry(e.id);break}case"createEntry":{const c=await k(e.data);a=await o.createEntry(c);break}case"editEntry":{e.id||l("--id is required for editEntry");const c=await k(e.data);a=await o.editEntry(e.id,c);break}case"deleteEntry":{e.id||l("--id is required for deleteEntry"),await o.deleteEntry(e.id),process.stderr.write(`Entry deleted.
134
- `);return}case"getSchema":{a=await o.getSchema();break}}break}case"createDatamanager":{const o=await k(e.data);a=await s.createDatamanager(o);break}case"editDatamanager":{e.id||l("--id (datamanager UUID) is required for editDatamanager");const o=await k(e.data);a=await s.editDatamanager(e.id,o);break}case"deleteDatamanager":{e.id||l("--id (datamanager UUID) is required for deleteDatamanager"),await s.deleteDatamanager(e.id),process.stderr.write(`Datamanager deleted.
135
- `);return}case"createModel":{e.id||l("--id (datamanager UUID) is required for createModel");const o=await k(e.data);a=await s.dmID(e.id).createModel(o);break}case"editModel":{e.id||l("--id (datamanager UUID) is required for editModel"),e.rid||l("--rid (model ID) is required for editModel");const o=await k(e.data);a=await s.dmID(e.id).editModel(e.rid,o);break}case"deleteModel":{e.id||l("--id (datamanager UUID) is required for deleteModel"),e.rid||l("--rid (model ID) is required for deleteModel"),await s.dmID(e.id).deleteModel(e.rid),process.stderr.write(`Model deleted.
136
- `);return}case"createTemplate":{const o=await k(e.data);a=await s.createTemplate(o);break}case"createAssetGroup":{e.id||l("--id (datamanager UUID) is required for createAssetGroup");const o=await k(e.data);a=await s.dmID(e.id).createAssetGroup(o);break}case"editAssetGroup":{e.id||l("--id (datamanager UUID) is required for editAssetGroup"),e.rid||l("--rid (asset group ID) is required for editAssetGroup");const o=await k(e.data);a=await s.dmID(e.id).editAssetGroup(e.rid,o);break}case"editAsset":{e.dm||l("--dm (short ID) is required for editAsset"),e.assetgroup||l("--assetgroup is required for editAsset"),e.rid||l("--rid (asset ID) is required for editAsset");const o=await k(e.data);a=await s.dm(e.dm).assetGroup(e.assetgroup).editAsset(e.rid,o);break}case"editDmClient":{e.id||l("--id (datamanager UUID) is required for editDmClient"),e.rid||l("--rid (client ID) is required for editDmClient");const o=await k(e.data);a=await s.dmID(e.id).editDmClient(e.rid,o);break}case"createRole":{e.id||l("--id (datamanager UUID) is required for createRole");const o=await k(e.data);a=await s.dmID(e.id).createRole(o);break}case"editRole":{e.id||l("--id (datamanager UUID) is required for editRole"),e.rid||l("--rid (role ID) is required for editRole");const o=await k(e.data);a=await s.dmID(e.id).editRole(e.rid,o);break}case"deleteRole":{e.id||l("--id (datamanager UUID) is required for deleteRole"),e.rid||l("--rid (role ID) is required for deleteRole"),await s.dmID(e.id).deleteRole(e.rid),process.stderr.write(`Role deleted.
137
- `);return}case"editDmAccount":{e.id||l("--id (datamanager UUID) is required for editDmAccount"),e["account-id"]||l("--account-id is required for editDmAccount");const o=await k(e.data);a=await s.dmID(e.id).editDmAccount(e["account-id"],o);break}case"deleteDmAccount":{e.id||l("--id (datamanager UUID) is required for deleteDmAccount"),e["account-id"]||l("--account-id is required for deleteDmAccount"),await s.dmID(e.id).deleteDmAccount(e["account-id"]),process.stderr.write(`DM account deleted.
138
- `);return}case"createAccountClient":{const o=await k(e.data);a=await s.createAccountClient(o);break}case"editAccountClient":{e.rid||l("--rid (client ID) is required for editAccountClient");const o=await k(e.data);a=await s.editAccountClient(e.rid,o);break}case"deleteAccountClient":{e.rid||l("--rid (client ID) is required for deleteAccountClient"),await s.deleteAccountClient(e.rid),process.stderr.write(`Account client deleted.
139
- `);return}case"createGroup":{const o=await k(e.data);a=await s.createGroup(o);break}case"editGroup":{e.rid||l("--rid (group ID) is required for editGroup");const o=await k(e.data);a=await s.editGroup(e.rid,o);break}case"deleteGroup":{e.rid||l("--rid (group ID) is required for deleteGroup"),await s.deleteGroup(e.rid),process.stderr.write(`Group deleted.
140
- `);return}case"createInvite":{const o=await k(e.data);a=await s.createInvite(o);break}case"editInvite":{e.rid||l("--rid (invite ID) is required for editInvite");const o=await k(e.data);a=await s.editInvite(e.rid,o);break}case"deleteInvite":{e.rid||l("--rid (invite ID) is required for deleteInvite"),await s.deleteInvite(e.rid),process.stderr.write(`Invite deleted.
141
- `);return}case"editAccount":{e["account-id"]||l("--account-id is required for editAccount");const o=await k(e.data);if(a=await s.editAccount(e["account-id"],o),!a){process.stderr.write(`Account updated.
142
- `);return}break}case"listTokens":{e["account-id"]||l("--account-id is required for listTokens");const o=await s.listTokens(e["account-id"]);a=e.raw?o:o.map(I);break}case"createToken":{e["account-id"]||l("--account-id is required for createToken"),a=await s.createToken(e["account-id"]);break}case"deleteToken":{e["account-id"]||l("--account-id is required for deleteToken"),e.rid||l("--rid (access token ID) is required for deleteToken"),await s.deleteToken(e["account-id"],e.rid),process.stderr.write(`Token deleted.
143
- `);return}default:l(`Unknown command: ${n}`)}e.md&&a&&typeof a=="object"?Array.isArray(a.items)?process.stdout.write(Xn(a)+`
144
- `):process.stdout.write(Wn(a)+`
145
- `):process.stdout.write(JSON.stringify(a,null,2)+`
146
- `)}catch(a){process.stderr.write(`${a.message}
133
+ `);return}try{let o;const i=()=>{const a={...q(e.filter)};return e.size&&(a.size=Number(e.size)),e.page&&(a.page=Number(e.page)),e.sort&&(a.sort=[e.sort]),e.fields&&(a._fields=e.fields),a};switch(n){case"dmList":{o=await s.dmList(i()),e.raw||(o=O(o));break}case"modelList":{e.id||l("--id (datamanager UUID) is required for modelList"),o=await s.dmID(e.id).modelList(i()),e.raw||(o=O(o));break}case"getDatamanager":{e.id||l("--id (datamanager UUID) is required for getDatamanager"),o=await s.getDatamanager(e.id),e.raw||(o=O(o));break}case"resourceList":{e.resource||l("--resource is required for resourceList");let a=s.resource(e.resource);e.subdomain&&(a=a.subdomain(e.subdomain)),o=await a.resourceList(i()),e.raw||(o=O(o));break}case"resourceGet":{e.resource||l("--resource is required for resourceGet");let a=s.resource(e.resource);e.subdomain&&(a=a.subdomain(e.subdomain)),o=await a.resourceGet(q(e.filter)),e.raw||(o=I(o));break}case"resourceEdit":{e.resource||l("--resource is required for resourceEdit");let a=s.resource(e.resource);e.subdomain&&(a=a.subdomain(e.subdomain));const c=await k(e.data);if(o=await a.resourceEdit(q(e.filter),c),!o){process.stderr.write(`Resource updated.
134
+ `);return}e.raw||(o=I(o));break}case"resourceDelete":{e.resource||l("--resource is required for resourceDelete");let a=s.resource(e.resource);e.subdomain&&(a=a.subdomain(e.subdomain)),await a.resourceDelete(q(e.filter)),process.stderr.write(`Resource deleted.
135
+ `);return}case"getStats":{o=await s.getStats(i());break}case"getHistory":{o=await s.getHistory(i());break}case"entryList":case"getEntry":case"createEntry":case"editEntry":case"deleteEntry":case"getSchema":{e.dm||l("--dm is required"),e.model||l("--model is required");const a=s.dm(e.dm).model(e.model).clean(!e.raw);switch(n){case"entryList":{o=await a.entryList(i());break}case"getEntry":{e.id||l("--id is required for getEntry"),o=await a.getEntry(e.id);break}case"createEntry":{const c=await k(e.data);o=await a.createEntry(c);break}case"editEntry":{e.id||l("--id is required for editEntry");const c=await k(e.data);o=await a.editEntry(e.id,c);break}case"deleteEntry":{e.id||l("--id is required for deleteEntry"),await a.deleteEntry(e.id),process.stderr.write(`Entry deleted.
136
+ `);return}case"getSchema":{o=await a.getSchema();break}}break}case"createDatamanager":{const a=await k(e.data);o=await s.createDatamanager(a);break}case"editDatamanager":{e.id||l("--id (datamanager UUID) is required for editDatamanager");const a=await k(e.data);o=await s.editDatamanager(e.id,a);break}case"deleteDatamanager":{e.id||l("--id (datamanager UUID) is required for deleteDatamanager"),await s.deleteDatamanager(e.id),process.stderr.write(`Datamanager deleted.
137
+ `);return}case"createModel":{e.id||l("--id (datamanager UUID) is required for createModel");const a=await k(e.data);o=await s.dmID(e.id).createModel(a);break}case"editModel":{e.id||l("--id (datamanager UUID) is required for editModel"),e.rid||l("--rid (model ID) is required for editModel");const a=await k(e.data);o=await s.dmID(e.id).editModel(e.rid,a);break}case"deleteModel":{e.id||l("--id (datamanager UUID) is required for deleteModel"),e.rid||l("--rid (model ID) is required for deleteModel"),await s.dmID(e.id).deleteModel(e.rid),process.stderr.write(`Model deleted.
138
+ `);return}case"createTemplate":{const a=await k(e.data);o=await s.createTemplate(a);break}case"createAssetGroup":{e.id||l("--id (datamanager UUID) is required for createAssetGroup");const a=await k(e.data);o=await s.dmID(e.id).createAssetGroup(a);break}case"editAssetGroup":{e.id||l("--id (datamanager UUID) is required for editAssetGroup"),e.rid||l("--rid (asset group ID) is required for editAssetGroup");const a=await k(e.data);o=await s.dmID(e.id).editAssetGroup(e.rid,a);break}case"editAsset":{e.dm||l("--dm (short ID) is required for editAsset"),e.assetgroup||l("--assetgroup is required for editAsset"),e.rid||l("--rid (asset ID) is required for editAsset");const a=await k(e.data);o=await s.dm(e.dm).assetGroup(e.assetgroup).editAsset(e.rid,a);break}case"editDmClient":{e.id||l("--id (datamanager UUID) is required for editDmClient"),e.rid||l("--rid (client ID) is required for editDmClient");const a=await k(e.data);o=await s.dmID(e.id).editDmClient(e.rid,a);break}case"createRole":{e.id||l("--id (datamanager UUID) is required for createRole");const a=await k(e.data);o=await s.dmID(e.id).createRole(a);break}case"editRole":{e.id||l("--id (datamanager UUID) is required for editRole"),e.rid||l("--rid (role ID) is required for editRole");const a=await k(e.data);o=await s.dmID(e.id).editRole(e.rid,a);break}case"deleteRole":{e.id||l("--id (datamanager UUID) is required for deleteRole"),e.rid||l("--rid (role ID) is required for deleteRole"),await s.dmID(e.id).deleteRole(e.rid),process.stderr.write(`Role deleted.
139
+ `);return}case"editDmAccount":{e.id||l("--id (datamanager UUID) is required for editDmAccount"),e["account-id"]||l("--account-id is required for editDmAccount");const a=await k(e.data);o=await s.dmID(e.id).editDmAccount(e["account-id"],a);break}case"deleteDmAccount":{e.id||l("--id (datamanager UUID) is required for deleteDmAccount"),e["account-id"]||l("--account-id is required for deleteDmAccount"),await s.dmID(e.id).deleteDmAccount(e["account-id"]),process.stderr.write(`DM account deleted.
140
+ `);return}case"createAccountClient":{const a=await k(e.data);o=await s.createAccountClient(a);break}case"editAccountClient":{e.rid||l("--rid (client ID) is required for editAccountClient");const a=await k(e.data);o=await s.editAccountClient(e.rid,a);break}case"deleteAccountClient":{e.rid||l("--rid (client ID) is required for deleteAccountClient"),await s.deleteAccountClient(e.rid),process.stderr.write(`Account client deleted.
141
+ `);return}case"createGroup":{const a=await k(e.data);o=await s.createGroup(a);break}case"editGroup":{e.rid||l("--rid (group ID) is required for editGroup");const a=await k(e.data);o=await s.editGroup(e.rid,a);break}case"deleteGroup":{e.rid||l("--rid (group ID) is required for deleteGroup"),await s.deleteGroup(e.rid),process.stderr.write(`Group deleted.
142
+ `);return}case"createInvite":{const a=await k(e.data);o=await s.createInvite(a);break}case"editInvite":{e.rid||l("--rid (invite ID) is required for editInvite");const a=await k(e.data);o=await s.editInvite(e.rid,a);break}case"deleteInvite":{e.rid||l("--rid (invite ID) is required for deleteInvite"),await s.deleteInvite(e.rid),process.stderr.write(`Invite deleted.
143
+ `);return}case"editAccount":{e["account-id"]||l("--account-id is required for editAccount");const a=await k(e.data);if(o=await s.editAccount(e["account-id"],a),!o){process.stderr.write(`Account updated.
144
+ `);return}break}case"listTokens":{e["account-id"]||l("--account-id is required for listTokens");const a=await s.listTokens(e["account-id"]);o=e.raw?a:a.map(I);break}case"createToken":{e["account-id"]||l("--account-id is required for createToken"),o=await s.createToken(e["account-id"]);break}case"deleteToken":{e["account-id"]||l("--account-id is required for deleteToken"),e.rid||l("--rid (access token ID) is required for deleteToken"),await s.deleteToken(e["account-id"],e.rid),process.stderr.write(`Token deleted.
145
+ `);return}default:l(`Unknown command: ${n}`)}e.md&&o&&typeof o=="object"?Array.isArray(o.items)?process.stdout.write(Xn(o)+`
146
+ `):process.stdout.write(Wn(o)+`
147
+ `):process.stdout.write(JSON.stringify(o,null,2)+`
148
+ `)}catch(o){process.stderr.write(`${o.message}
147
149
  `),process.exit(1)}}Qn();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ec.fdk",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "description": "ec frontend sdk",
5
5
  "main": "dist/index.cjs",
6
6
  "bin": {