@alva-ai/toolkit 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";var AlvaToolkit=(()=>{var w=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var x=(r,e)=>{for(var t in e)w(r,t,{get:e[t],enumerable:!0})},U=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of E(e))!F.call(r,i)&&i!==t&&w(r,i,{get:()=>e[i],enumerable:!(s=j(e,i))||s.enumerable});return r};var O=r=>U(w({},"__esModule",{value:!0}),r);var L={};x(L,{AlvaClient:()=>b,AlvaError:()=>o,VERSION:()=>D});var o=class extends Error{code;status;constructor(e,t,s){super(t),this.name="AlvaError",this.code=e,this.status=s}};var l=class{constructor(e){this.client=e}client;async read(e){let t=await this.client._request("GET","/api/v1/fs/read",{query:{path:e.path,offset:e.offset,size:e.size}});if(!(t instanceof ArrayBuffer))return t;try{let s=new TextDecoder("utf-8",{fatal:!0}).decode(t);try{return JSON.parse(s)}catch{return s}}catch{return t}}async write(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/fs/write",{body:{path:e.path,data:e.data,mkdir_parents:e.mkdir_parents}})}async rawWrite(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/fs/write",{query:{path:e.path,mkdir_parents:e.mkdir_parents},rawBody:e.body})}async stat(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/stat",{query:{path:e.path}})}async readdir(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/readdir",{query:{path:e.path,recursive:e.recursive}})}async mkdir(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/mkdir",{body:{path:e.path}})}async remove(e){this.client._requireAuth(),await this.client._request("DELETE","/api/v1/fs/remove",{query:{path:e.path,recursive:e.recursive}})}async rename(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/rename",{body:{old_path:e.old_path,new_path:e.new_path}})}async copy(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/copy",{body:{src_path:e.src_path,dst_path:e.dst_path}})}async symlink(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/symlink",{body:{target_path:e.target_path,link_path:e.link_path}})}async readlink(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/readlink",{query:{path:e.path}})}async chmod(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/chmod",{body:{path:e.path,mode:e.mode}})}async grant(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/grant",{body:{path:e.path,subject:e.subject,permission:e.permission}})}async revoke(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/revoke",{body:{path:e.path,subject:e.subject,permission:e.permission}})}};var m=class{constructor(e){this.client=e}client;async execute(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/run",{body:{code:e.code,entry_path:e.entry_path,working_dir:e.working_dir,args:e.args}})}};var p=class{constructor(e){this.client=e}client;async create(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/deploy/cronjob",{body:{name:e.name,path:e.path,cron_expression:e.cron_expression,args:e.args,push_notify:e.push_notify}})}async list(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/deploy/cronjobs",{query:{limit:e?.limit,cursor:e?.cursor}})}async get(e){return this.client._requireAuth(),this.client._request("GET",`/api/v1/deploy/cronjob/${e.id}`)}async update(e){this.client._requireAuth();let{id:t,...s}=e;return this.client._request("PATCH",`/api/v1/deploy/cronjob/${t}`,{body:s})}async delete(e){this.client._requireAuth(),await this.client._request("DELETE",`/api/v1/deploy/cronjob/${e.id}`)}async pause(e){this.client._requireAuth(),await this.client._request("POST",`/api/v1/deploy/cronjob/${e.id}/pause`)}async resume(e){this.client._requireAuth(),await this.client._request("POST",`/api/v1/deploy/cronjob/${e.id}/resume`)}async listRuns(e){return this.client._requireAuth(),this.client._request("GET",`/api/v1/deploy/cronjob/${e.cronjob_id}/runs`,{query:{first:e.first,cursor:e.cursor}})}async getRunLogs(e){return this.client._requireAuth(),this.client._request("GET",`/api/v1/deploy/cronjob/${e.cronjob_id}/runs/${e.run_id}/logs`)}};var d=class{constructor(e){this.client=e}client;async feed(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/release/feed",{body:{name:e.name,version:e.version,cronjob_id:e.cronjob_id,view_json:e.view_json,description:e.description}})}async playbookDraft(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/draft/playbook",{body:{name:e.name,display_name:e.display_name,description:e.description,feeds:e.feeds,trading_symbols:e.trading_symbols,changelog:e.changelog}})}async playbook(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/release/playbook",{body:{name:e.name,version:e.version,feeds:e.feeds,changelog:e.changelog}})}};var h=class{constructor(e){this.client=e}client;async create(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/secrets",{body:{name:e.name,value:e.value}})}async list(){return this.client._requireAuth(),this.client._request("GET","/api/v1/secrets")}async get(e){this.client._requireAuth();let t=encodeURIComponent(e.name);return this.client._request("GET",`/api/v1/secrets/${t}`)}async update(e){this.client._requireAuth();let t=encodeURIComponent(e.name);await this.client._request("PUT",`/api/v1/secrets/${t}`,{body:{value:e.value}})}async delete(e){this.client._requireAuth();let t=encodeURIComponent(e.name);await this.client._request("DELETE",`/api/v1/secrets/${t}`)}};var y=class{constructor(e){this.client=e}client;async doc(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/sdk/doc",{query:{name:e.name}})}async partitions(){return this.client._requireAuth(),this.client._request("GET","/api/v1/sdk/partitions")}async partitionSummary(e){this.client._requireAuth();let t=encodeURIComponent(e.partition);return this.client._request("GET",`/api/v1/sdk/partitions/${t}/summary`)}};var _=class{constructor(e){this.client=e}client;async list(){return{skills:(await this.client._request("GET","/api/v1/skills",{baseUrl:this.client.arraysBaseUrl,noAuth:!0})).data??[]}}async summary(e){let t=encodeURIComponent(e.name),i=(await this.client._request("GET",`/api/v1/skills/${t}`,{baseUrl:this.client.arraysBaseUrl,noAuth:!0})).data?.[0];if(!i)throw new Error(`empty skills summary response for "${e.name}"`);return i}async endpoint(e){let t=encodeURIComponent(e.name),i=(await this.client._request("GET",`/api/v1/skills/${t}`,{baseUrl:this.client.arraysBaseUrl,noAuth:!0,query:{endpoint:e.file}})).data?.[0];if(!i)throw new Error(`empty skills endpoint response for "${e.name}" file "${e.file}"`);return i}};var P=class{constructor(e){this.client=e}client;async create(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment",{body:{username:e.username,name:e.name,content:e.content,parent_id:e.parent_id}})}async pin(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment/pin",{body:{comment_id:e.comment_id}})}async unpin(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment/unpin",{body:{comment_id:e.comment_id}})}};var R=class{constructor(e){this.client=e}client;async save(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/remix",{body:{child:e.child,parents:e.parents}})}};var v=class{constructor(e){this.client=e}client;async capture(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/screenshot",{query:{url:e.url,selector:e.selector,xpath:e.xpath}})}};var q=class{constructor(e){this.client=e}client;async me(){return this.client._requireAuth(),this.client._request("GET","/api/v1/me")}};var f=class{constructor(e){this.client=e}client;async accounts(){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/accounts")}async portfolio(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/portfolio",{query:{accountId:e}})}async orders(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/orders",{query:{accountId:e.accountId,source:e.source,since:e.since,limit:e.limit}})}async subscriptions(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/subscriptions",{query:{accountId:e}})}async equityHistory(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/equity-history",{query:{accountId:e.accountId,timeframe:e.timeframe,sinceMs:e.sinceMs,untilMs:e.untilMs}})}async riskRules(){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/risk-rules")}async subscribe(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/trading/subscribe",{body:e})}async unsubscribe(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/trading/unsubscribe",{body:{subscriptionId:e}})}async execute(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/trading/execute",{body:e})}async updateRiskRules(e){return this.client._requireAuth(),this.client._request("PUT","/api/v1/trading/risk-rules",{body:e})}};var g=class{constructor(e){this.client=e}client;async ensure(){return this.client._requireAuth(),this.client._request("POST","/api/v1/arrays-jwt/ensure")}async status(){return this.client._requireAuth(),this.client._request("GET","/api/v1/arrays-jwt/status")}};var G="https://api-llm.prd.alva.ai",I="https://data-tools.prd.space.id",b=class{baseUrl;arraysBaseUrl;viewer_token;apiKey;_fs;_run;_deploy;_release;_secrets;_sdk;_skills;_comments;_remix;_screenshot;_user;_trading;_arraysJwt;constructor(e){this.baseUrl=e.baseUrl??G,this.arraysBaseUrl=e.arraysBaseUrl??I,this.viewer_token=e.viewer_token,this.apiKey=e.apiKey}get fs(){return this._fs??=new l(this)}get run(){return this._run??=new m(this)}get deploy(){return this._deploy??=new p(this)}get release(){return this._release??=new d(this)}get secrets(){return this._secrets??=new h(this)}get sdk(){return this._sdk??=new y(this)}get skills(){return this._skills??=new _(this)}get comments(){return this._comments??=new P(this)}get remix(){return this._remix??=new R(this)}get screenshot(){return this._screenshot??=new v(this)}get user(){return this._user??=new q(this)}get trading(){return this._trading??=new f(this)}get arraysJwt(){return this._arraysJwt??=new g(this)}_requireAuth(){if(!this.viewer_token&&!this.apiKey)throw new o("UNAUTHENTICATED","Authentication is required. Pass viewer_token or apiKey in the constructor.",401)}async _request(e,t,s){let C=`${s?.baseUrl??this.baseUrl}${t}`;if(s?.query){let a=new URLSearchParams;for(let[c,T]of Object.entries(s.query))T!=null&&a.set(c,String(T));let k=a.toString();k&&(C+=`?${k}`)}let u={};s?.noAuth||(this.viewer_token?u["x-Playbook-Viewer"]=this.viewer_token:this.apiKey&&(u["X-Alva-Api-Key"]=this.apiKey));let A;s?.rawBody!==void 0?(u["Content-Type"]="application/octet-stream",A=s.rawBody):s?.body!==void 0&&(u["Content-Type"]="application/json",A=JSON.stringify(s.body));let n;try{n=await fetch(C,{method:e,headers:u,body:A})}catch(a){throw new o("NETWORK_ERROR",a instanceof Error?a.message:"Network request failed",0)}if(!n.ok){let a=await n.text().catch(()=>"");if((n.headers.get("content-type")??"").includes("application/json")&&a)try{let c=JSON.parse(a);if(c.error)throw new o(c.error.code??"UNKNOWN",c.error.message??`HTTP ${n.status}`,n.status)}catch(c){if(c instanceof o)throw c}throw new o("UNKNOWN",`HTTP ${n.status}: ${a.slice(0,200)}`,n.status)}if(n.status===204)return;let S=n.headers.get("content-type")??"";return S.includes("application/octet-stream")||S.includes("image/")?n.arrayBuffer():n.json()}};var D="0.3.1";return O(L);})();
1
+ "use strict";var AlvaToolkit=(()=>{var w=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var L=(s,e)=>{for(var t in e)w(s,t,{get:e[t],enumerable:!0})},I=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of x(e))!O.call(s,i)&&i!==t&&w(s,i,{get:()=>e[i],enumerable:!(r=U(e,i))||r.enumerable});return s};var G=s=>I(w({},"__esModule",{value:!0}),s);var B={};L(B,{AlvaClient:()=>k,AlvaError:()=>o,VERSION:()=>D});var o=class extends Error{code;status;constructor(e,t,r){super(t),this.name="AlvaError",this.code=e,this.status=r}};var l=class{constructor(e){this.client=e}client;async read(e){let t=await this.client._request("GET","/api/v1/fs/read",{query:{path:e.path,offset:e.offset,size:e.size}});if(!(t instanceof ArrayBuffer))return t;try{let r=new TextDecoder("utf-8",{fatal:!0}).decode(t);try{return JSON.parse(r)}catch{return r}}catch{return t}}async write(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/fs/write",{body:{path:e.path,data:e.data,mkdir_parents:e.mkdir_parents}})}async rawWrite(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/fs/write",{query:{path:e.path,mkdir_parents:e.mkdir_parents},rawBody:e.body})}async stat(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/stat",{query:{path:e.path}})}async readdir(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/readdir",{query:{path:e.path,recursive:e.recursive}})}async mkdir(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/mkdir",{body:{path:e.path}})}async remove(e){this.client._requireAuth(),await this.client._request("DELETE","/api/v1/fs/remove",{query:{path:e.path,recursive:e.recursive}})}async rename(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/rename",{body:{old_path:e.old_path,new_path:e.new_path}})}async copy(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/copy",{body:{src_path:e.src_path,dst_path:e.dst_path}})}async symlink(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/symlink",{body:{target_path:e.target_path,link_path:e.link_path}})}async readlink(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/readlink",{query:{path:e.path}})}async chmod(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/chmod",{body:{path:e.path,mode:e.mode}})}async grant(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/grant",{body:{path:e.path,subject:e.subject,permission:e.permission}})}async revoke(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/revoke",{body:{path:e.path,subject:e.subject,permission:e.permission}})}};var p=class{constructor(e){this.client=e}client;async execute(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/run",{body:{code:e.code,entry_path:e.entry_path,working_dir:e.working_dir,args:e.args}})}};var m=class{constructor(e){this.client=e}client;async create(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/deploy/cronjob",{body:{name:e.name,path:e.path,cron_expression:e.cron_expression,args:e.args,push_notify:e.push_notify}})}async list(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/deploy/cronjobs",{query:{limit:e?.limit,cursor:e?.cursor}})}async get(e){return this.client._requireAuth(),this.client._request("GET",`/api/v1/deploy/cronjob/${e.id}`)}async update(e){this.client._requireAuth();let{id:t,...r}=e;return this.client._request("PATCH",`/api/v1/deploy/cronjob/${t}`,{body:r})}async delete(e){this.client._requireAuth(),await this.client._request("DELETE",`/api/v1/deploy/cronjob/${e.id}`)}async pause(e){this.client._requireAuth(),await this.client._request("POST",`/api/v1/deploy/cronjob/${e.id}/pause`)}async resume(e){this.client._requireAuth(),await this.client._request("POST",`/api/v1/deploy/cronjob/${e.id}/resume`)}async listRuns(e){return this.client._requireAuth(),this.client._request("GET",`/api/v1/deploy/cronjob/${e.cronjob_id}/runs`,{query:{first:e.first,cursor:e.cursor}})}async getRunLogs(e){return this.client._requireAuth(),this.client._request("GET",`/api/v1/deploy/cronjob/${e.cronjob_id}/runs/${e.run_id}/logs`)}};var d=class{constructor(e){this.client=e}client;async feed(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/release/feed",{body:{name:e.name,version:e.version,cronjob_id:e.cronjob_id,view_json:e.view_json,description:e.description,changelog:e.changelog}})}async playbookDraft(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/draft/playbook",{body:{name:e.name,display_name:e.display_name,description:e.description,feeds:e.feeds,trading_symbols:e.trading_symbols}})}async playbook(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/release/playbook",{body:{name:e.name,version:e.version,feeds:e.feeds,changelog:e.changelog}})}};var h=class{constructor(e){this.client=e}client;async create(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/secrets",{body:{name:e.name,value:e.value}})}async list(){return this.client._requireAuth(),this.client._request("GET","/api/v1/secrets")}async get(e){this.client._requireAuth();let t=encodeURIComponent(e.name);return this.client._request("GET",`/api/v1/secrets/${t}`)}async update(e){this.client._requireAuth();let t=encodeURIComponent(e.name);await this.client._request("PUT",`/api/v1/secrets/${t}`,{body:{value:e.value}})}async delete(e){this.client._requireAuth();let t=encodeURIComponent(e.name);await this.client._request("DELETE",`/api/v1/secrets/${t}`)}};var y=class{constructor(e){this.client=e}client;async doc(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/sdk/doc",{query:{name:e.name}})}async partitions(){return this.client._requireAuth(),this.client._request("GET","/api/v1/sdk/partitions")}async partitionSummary(e){this.client._requireAuth();let t=encodeURIComponent(e.partition);return this.client._request("GET",`/api/v1/sdk/partitions/${t}/summary`)}};var P=class{constructor(e){this.client=e}client;async list(){return{skills:(await this.client._request("GET","/api/v1/skills",{baseUrl:this.client.arraysBaseUrl,noAuth:!0})).data??[]}}async summary(e){let t=encodeURIComponent(e.name),i=(await this.client._request("GET",`/api/v1/skills/${t}`,{baseUrl:this.client.arraysBaseUrl,noAuth:!0})).data?.[0];if(!i)throw new Error(`empty skills summary response for "${e.name}"`);return i}async endpoint(e){let t=encodeURIComponent(e.name),i=(await this.client._request("GET",`/api/v1/skills/${t}`,{baseUrl:this.client.arraysBaseUrl,noAuth:!0,query:{endpoint:e.file}})).data?.[0];if(!i)throw new Error(`empty skills endpoint response for "${e.name}" file "${e.file}"`);return i}};var _=class{constructor(e){this.client=e}client;async create(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment",{body:{username:e.username,name:e.name,content:e.content,parent_id:e.parent_id}})}async pin(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment/pin",{body:{comment_id:e.comment_id}})}async unpin(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment/unpin",{body:{comment_id:e.comment_id}})}};var R=class{constructor(e){this.client=e}client;async save(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/remix",{body:{child:e.child,parents:e.parents}})}};var b=class{constructor(e){this.client=e}client;async capture(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/screenshot",{query:{url:e.url,selector:e.selector,xpath:e.xpath}})}};var f=class{constructor(e){this.client=e}client;async me(){return this.client._requireAuth(),this.client._request("GET","/api/v1/me")}};var v=class{constructor(e){this.client=e}client;async accounts(){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/accounts")}async portfolio(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/portfolio",{query:{accountId:e}})}async orders(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/orders",{query:{accountId:e.accountId,source:e.source,since:e.since,limit:e.limit}})}async subscriptions(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/subscriptions",{query:{accountId:e}})}async equityHistory(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/equity-history",{query:{accountId:e.accountId,timeframe:e.timeframe,sinceMs:e.sinceMs,untilMs:e.untilMs}})}async riskRules(){return this.client._requireAuth(),this.client._request("GET","/api/v1/trading/risk-rules")}async subscribe(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/trading/subscribe",{body:e})}async unsubscribe(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/trading/unsubscribe",{body:{subscriptionId:e}})}async execute(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/trading/execute",{body:e})}async updateRiskRules(e){return this.client._requireAuth(),this.client._request("PUT","/api/v1/trading/risk-rules",{body:e})}};var q=class{constructor(e){this.client=e}client;async ensure(){return this.client._requireAuth(),this.client._request("POST","/api/v1/arrays-jwt/ensure")}async status(){return this.client._requireAuth(),this.client._request("GET","/api/v1/arrays-jwt/status")}};var g=class{constructor(e){this.client=e}client;async listPlaybook(e){this.client._requireAuth();let t=`/api/v1/playbook/${encodeURIComponent(e.username)}/${encodeURIComponent(e.name)}/notifications`;return this.client._request("GET",t,{query:F(e)})}async listFeed(e){this.client._requireAuth();let t=`/api/v1/feed/${encodeURIComponent(e.username)}/${encodeURIComponent(e.name)}/notifications`;return this.client._request("GET",t,{query:F(e)})}};function F(s){let e={};return s.channel&&(e.channel=s.channel),s.status&&(e.status=s.status),s.since_time!==void 0&&s.since_time>0&&(e.since_time=String(s.since_time)),s.first!==void 0&&s.first>0&&(e.first=String(s.first)),s.cursor&&(e.cursor=s.cursor),e}var A=class{constructor(e){this.client=e}client;async subscribePlaybook(e){this.client._requireAuth();let t=`/api/v1/playbook/${encodeURIComponent(e.username)}/${encodeURIComponent(e.name)}/push-subscription`;return this.client._request("POST",t)}async unsubscribePlaybook(e){this.client._requireAuth();let t=`/api/v1/playbook/${encodeURIComponent(e.username)}/${encodeURIComponent(e.name)}/push-subscription`;return this.client._request("DELETE",t)}async list(e={}){this.client._requireAuth();let t={};return e.include_history!==void 0&&(t.include_history=String(e.include_history)),this.client._request("GET","/api/v1/me/push-subscriptions",{query:t})}};var $="https://api-llm.prd.alva.ai",N="https://data-tools.prd.space.id",k=class{baseUrl;arraysBaseUrl;viewer_token;apiKey;_fs;_run;_deploy;_release;_secrets;_sdk;_skills;_comments;_remix;_screenshot;_user;_trading;_arraysJwt;_notifications;_pushSubscriptions;constructor(e){this.baseUrl=e.baseUrl??$,this.arraysBaseUrl=e.arraysBaseUrl??N,this.viewer_token=e.viewer_token,this.apiKey=e.apiKey}get fs(){return this._fs??=new l(this)}get run(){return this._run??=new p(this)}get deploy(){return this._deploy??=new m(this)}get release(){return this._release??=new d(this)}get secrets(){return this._secrets??=new h(this)}get sdk(){return this._sdk??=new y(this)}get skills(){return this._skills??=new P(this)}get comments(){return this._comments??=new _(this)}get remix(){return this._remix??=new R(this)}get screenshot(){return this._screenshot??=new b(this)}get user(){return this._user??=new f(this)}get trading(){return this._trading??=new v(this)}get arraysJwt(){return this._arraysJwt??=new q(this)}get notifications(){return this._notifications??=new g(this)}get pushSubscriptions(){return this._pushSubscriptions??=new A(this)}_requireAuth(){if(!this.viewer_token&&!this.apiKey)throw new o("UNAUTHENTICATED","Authentication is required. Pass viewer_token or apiKey in the constructor.",401)}async _request(e,t,r){let j=`${r?.baseUrl??this.baseUrl}${t}`;if(r?.query){let a=new URLSearchParams;for(let[c,C]of Object.entries(r.query))C!=null&&a.set(c,String(C));let T=a.toString();T&&(j+=`?${T}`)}let u={};r?.noAuth||(this.viewer_token?u["x-Playbook-Viewer"]=this.viewer_token:this.apiKey&&(u["X-Alva-Api-Key"]=this.apiKey));let S;r?.rawBody!==void 0?(u["Content-Type"]="application/octet-stream",S=r.rawBody):r?.body!==void 0&&(u["Content-Type"]="application/json",S=JSON.stringify(r.body));let n;try{n=await fetch(j,{method:e,headers:u,body:S})}catch(a){throw new o("NETWORK_ERROR",a instanceof Error?a.message:"Network request failed",0)}if(!n.ok){let a=await n.text().catch(()=>"");if((n.headers.get("content-type")??"").includes("application/json")&&a)try{let c=JSON.parse(a);if(c.error)throw new o(c.error.code??"UNKNOWN",c.error.message??`HTTP ${n.status}`,n.status)}catch(c){if(c instanceof o)throw c}throw new o("UNKNOWN",`HTTP ${n.status}: ${a.slice(0,200)}`,n.status)}if(n.status===204)return;let E=n.headers.get("content-type")??"";return E.includes("application/octet-stream")||E.includes("image/")?n.arrayBuffer():n.json()}};var D="0.4.0";return G(B);})();
2
2
  //# sourceMappingURL=browser.global.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser.ts","../src/error.ts","../src/resources/fs.ts","../src/resources/run.ts","../src/resources/deploy.ts","../src/resources/release.ts","../src/resources/secrets.ts","../src/resources/sdkDocs.ts","../src/resources/skills.ts","../src/resources/comments.ts","../src/resources/remix.ts","../src/resources/screenshot.ts","../src/resources/user.ts","../src/resources/trading.ts","../src/resources/arraysJwt.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["export * from './index.js';\n","export class AlvaError extends Error {\n readonly code: string;\n readonly status: number;\n\n constructor(code: string, message: string, status: number) {\n super(message);\n this.name = 'AlvaError';\n this.code = code;\n this.status = status;\n }\n}\n\nexport class CliUsageError extends Error {\n readonly command?: string;\n\n constructor(message: string, command?: string) {\n super(message);\n this.name = 'CliUsageError';\n this.command = command;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FsReadParams,\n FsWriteParams,\n FsRawWriteParams,\n FsWriteResponse,\n FsStat,\n FsReaddirParams,\n FsReaddirResponse,\n FsMkdirParams,\n FsRemoveParams,\n FsRenameParams,\n FsCopyParams,\n FsSymlinkParams,\n FsReadlinkParams,\n FsChmodParams,\n FsGrantParams,\n FsRevokeParams,\n} from '../types.js';\n\nexport class FsResource {\n constructor(private client: AlvaClient) {}\n\n /** Returns `ArrayBuffer` for binary files, or parsed JSON for time-series virtual paths. */\n async read(params: FsReadParams): Promise<ArrayBuffer | unknown> {\n const result = await this.client._request('GET', '/api/v1/fs/read', {\n query: { path: params.path, offset: params.offset, size: params.size },\n });\n if (!(result instanceof ArrayBuffer)) return result;\n try {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(result);\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n } catch {\n return result;\n }\n }\n\n /** Write file using JSON body (Mode 2). For text content. */\n async write(params: FsWriteParams): Promise<FsWriteResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/fs/write', {\n body: {\n path: params.path,\n data: params.data,\n mkdir_parents: params.mkdir_parents,\n },\n }) as Promise<FsWriteResponse>;\n }\n\n /** Write file using raw body (Mode 1). Supports binary data. Path and options are query params. */\n async rawWrite(params: FsRawWriteParams): Promise<FsWriteResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/fs/write', {\n query: {\n path: params.path,\n mkdir_parents: params.mkdir_parents,\n },\n rawBody: params.body,\n }) as Promise<FsWriteResponse>;\n }\n\n async stat(params: { path: string }): Promise<FsStat> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/stat', {\n query: { path: params.path },\n }) as Promise<FsStat>;\n }\n\n async readdir(params: FsReaddirParams): Promise<FsReaddirResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/readdir', {\n query: { path: params.path, recursive: params.recursive },\n }) as Promise<FsReaddirResponse>;\n }\n\n async mkdir(params: FsMkdirParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/mkdir', {\n body: { path: params.path },\n });\n }\n\n async remove(params: FsRemoveParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('DELETE', '/api/v1/fs/remove', {\n query: { path: params.path, recursive: params.recursive },\n });\n }\n\n async rename(params: FsRenameParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/rename', {\n body: { old_path: params.old_path, new_path: params.new_path },\n });\n }\n\n async copy(params: FsCopyParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/copy', {\n body: { src_path: params.src_path, dst_path: params.dst_path },\n });\n }\n\n async symlink(params: FsSymlinkParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/symlink', {\n body: {\n target_path: params.target_path,\n link_path: params.link_path,\n },\n });\n }\n\n async readlink(params: FsReadlinkParams): Promise<{ target: string }> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/readlink', {\n query: { path: params.path },\n }) as Promise<{ target: string }>;\n }\n\n async chmod(params: FsChmodParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/chmod', {\n body: { path: params.path, mode: params.mode },\n });\n }\n\n async grant(params: FsGrantParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/grant', {\n body: {\n path: params.path,\n subject: params.subject,\n permission: params.permission,\n },\n });\n }\n\n async revoke(params: FsRevokeParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/revoke', {\n body: {\n path: params.path,\n subject: params.subject,\n permission: params.permission,\n },\n });\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { RunRequest, RunResponse } from '../types.js';\n\nexport class RunResource {\n constructor(private client: AlvaClient) {}\n\n async execute(params: RunRequest): Promise<RunResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/run', {\n body: {\n code: params.code,\n entry_path: params.entry_path,\n working_dir: params.working_dir,\n args: params.args,\n },\n }) as Promise<RunResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n CronjobCreateRequest,\n Cronjob,\n CronjobListParams,\n CronjobListResponse,\n CronjobUpdateRequest,\n CronjobRunsListParams,\n CronjobRunsListResponse,\n CronjobRunLogsResponse,\n} from '../types.js';\n\nexport class DeployResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CronjobCreateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/deploy/cronjob', {\n body: {\n name: params.name,\n path: params.path,\n cron_expression: params.cron_expression,\n args: params.args,\n push_notify: params.push_notify,\n },\n }) as Promise<Cronjob>;\n }\n\n async list(params?: CronjobListParams): Promise<CronjobListResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/deploy/cronjobs', {\n query: { limit: params?.limit, cursor: params?.cursor },\n }) as Promise<CronjobListResponse>;\n }\n\n async get(params: { id: number }): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.id}`\n ) as Promise<Cronjob>;\n }\n\n async update(params: CronjobUpdateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n const { id, ...body } = params;\n return this.client._request('PATCH', `/api/v1/deploy/cronjob/${id}`, {\n body,\n }) as Promise<Cronjob>;\n }\n\n async delete(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request('DELETE', `/api/v1/deploy/cronjob/${params.id}`);\n }\n\n async pause(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/pause`\n );\n }\n\n async resume(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/resume`\n );\n }\n\n async listRuns(\n params: CronjobRunsListParams\n ): Promise<CronjobRunsListResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs`,\n {\n query: { first: params.first, cursor: params.cursor },\n }\n ) as Promise<CronjobRunsListResponse>;\n }\n\n async getRunLogs(params: {\n cronjob_id: number;\n run_id: number;\n }): Promise<CronjobRunLogsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs/${params.run_id}/logs`\n ) as Promise<CronjobRunLogsResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FeedReleaseRequest,\n FeedReleaseResponse,\n PlaybookDraftRequest,\n PlaybookDraftResponse,\n PlaybookReleaseRequest,\n PlaybookReleaseResponse,\n} from '../types.js';\n\nexport class ReleaseResource {\n constructor(private client: AlvaClient) {}\n\n async feed(params: FeedReleaseRequest): Promise<FeedReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/feed', {\n body: {\n name: params.name,\n version: params.version,\n cronjob_id: params.cronjob_id,\n view_json: params.view_json,\n description: params.description,\n },\n }) as Promise<FeedReleaseResponse>;\n }\n\n async playbookDraft(\n params: PlaybookDraftRequest\n ): Promise<PlaybookDraftResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/draft/playbook', {\n body: {\n name: params.name,\n display_name: params.display_name,\n description: params.description,\n feeds: params.feeds,\n trading_symbols: params.trading_symbols,\n changelog: params.changelog,\n },\n }) as Promise<PlaybookDraftResponse>;\n }\n\n async playbook(\n params: PlaybookReleaseRequest\n ): Promise<PlaybookReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/playbook', {\n body: {\n name: params.name,\n version: params.version,\n feeds: params.feeds,\n changelog: params.changelog,\n },\n }) as Promise<PlaybookReleaseResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateSecretRequest, Secret, SecretMetadata } from '../types.js';\n\nexport class SecretsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateSecretRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/secrets', {\n body: { name: params.name, value: params.value },\n });\n }\n\n async list(): Promise<{ secrets: SecretMetadata[] }> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/secrets') as Promise<{\n secrets: SecretMetadata[];\n }>;\n }\n\n async get(params: { name: string }): Promise<Secret> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n return this.client._request(\n 'GET',\n `/api/v1/secrets/${encoded}`\n ) as Promise<Secret>;\n }\n\n async update(params: { name: string; value: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('PUT', `/api/v1/secrets/${encoded}`, {\n body: { value: params.value },\n });\n }\n\n async delete(params: { name: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('DELETE', `/api/v1/secrets/${encoded}`);\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n ModuleDoc,\n PartitionsResponse,\n PartitionSummaryResponse,\n} from '../types.js';\n\nexport class SdkDocsResource {\n constructor(private client: AlvaClient) {}\n\n async doc(params: { name: string }): Promise<ModuleDoc> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/sdk/doc', {\n query: { name: params.name },\n }) as Promise<ModuleDoc>;\n }\n\n async partitions(): Promise<PartitionsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/sdk/partitions'\n ) as Promise<PartitionsResponse>;\n }\n\n async partitionSummary(params: {\n partition: string;\n }): Promise<PartitionSummaryResponse> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.partition);\n return this.client._request(\n 'GET',\n `/api/v1/sdk/partitions/${encoded}/summary`\n ) as Promise<PartitionSummaryResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\n\nexport interface SkillSummary {\n name: string;\n description: string;\n}\n\nexport interface SkillDoc {\n name: string;\n description: string;\n content: string;\n}\n\nexport class SkillsResource {\n constructor(private client: AlvaClient) {}\n\n async list(): Promise<{ skills: SkillSummary[] }> {\n const res = (await this.client._request('GET', '/api/v1/skills', {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n })) as Envelope<SkillSummary[]>;\n return { skills: res.data ?? [] };\n }\n\n async summary(params: { name: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc)\n throw new Error(`empty skills summary response for \"${params.name}\"`);\n return doc;\n }\n\n async endpoint(params: { name: string; file: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n query: { endpoint: params.file },\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc) {\n throw new Error(\n `empty skills endpoint response for \"${params.name}\" file \"${params.file}\"`\n );\n }\n return doc;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateCommentRequest, Comment } from '../types.js';\n\nexport class CommentsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateCommentRequest): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment', {\n body: {\n username: params.username,\n name: params.name,\n content: params.content,\n parent_id: params.parent_id,\n },\n }) as Promise<Comment>;\n }\n\n async pin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/pin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n\n async unpin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/unpin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { RemixRequest } from '../types.js';\n\nexport class RemixResource {\n constructor(private client: AlvaClient) {}\n\n async save(params: RemixRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/remix', {\n body: {\n child: params.child,\n parents: params.parents,\n },\n });\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { ScreenshotParams } from '../types.js';\n\nexport class ScreenshotResource {\n constructor(private client: AlvaClient) {}\n\n async capture(params: ScreenshotParams): Promise<ArrayBuffer> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/screenshot', {\n query: {\n url: params.url,\n selector: params.selector,\n xpath: params.xpath,\n },\n }) as Promise<ArrayBuffer>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { UserProfile } from '../types.js';\n\nexport class UserResource {\n constructor(private client: AlvaClient) {}\n\n async me(): Promise<UserProfile> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/me') as Promise<UserProfile>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n TradingAccount,\n TradingPortfolio,\n TradingOrder,\n TradingSubscription,\n EquityPoint,\n TradingRiskRule,\n TradingRiskRuleInput,\n ExecuteSignalResult,\n} from '../types.js';\n\nexport class TradingResource {\n constructor(private client: AlvaClient) {}\n\n async accounts(): Promise<TradingAccount[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/accounts') as Promise<\n TradingAccount[]\n >;\n }\n\n async portfolio(accountId: string): Promise<TradingPortfolio> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/portfolio', {\n query: { accountId },\n }) as Promise<TradingPortfolio>;\n }\n\n async orders(params: {\n accountId: string;\n source?: string;\n since?: number;\n limit?: number;\n }): Promise<TradingOrder[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/orders', {\n query: {\n accountId: params.accountId,\n source: params.source,\n since: params.since,\n limit: params.limit,\n },\n }) as Promise<TradingOrder[]>;\n }\n\n async subscriptions(accountId: string): Promise<TradingSubscription[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/subscriptions', {\n query: { accountId },\n }) as Promise<TradingSubscription[]>;\n }\n\n async equityHistory(params: {\n accountId: string;\n timeframe?: string;\n sinceMs?: number;\n untilMs?: number;\n }): Promise<EquityPoint[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/equity-history', {\n query: {\n accountId: params.accountId,\n timeframe: params.timeframe,\n sinceMs: params.sinceMs,\n untilMs: params.untilMs,\n },\n }) as Promise<EquityPoint[]>;\n }\n\n async riskRules(): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/trading/risk-rules'\n ) as Promise<TradingRiskRule>;\n }\n\n async subscribe(params: {\n accountId: string;\n sourceUsername: string;\n sourceFeed: string;\n playbookId: string;\n playbookVersion: string;\n executeLatest?: boolean;\n }): Promise<TradingSubscription> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/subscribe', {\n body: params,\n }) as Promise<TradingSubscription>;\n }\n\n async unsubscribe(\n subscriptionId: string\n ): Promise<{ unsubscribedId: string }> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/unsubscribe', {\n body: { subscriptionId },\n }) as Promise<{ unsubscribedId: string }>;\n }\n\n async execute(params: {\n accountId: string;\n signalJson: string;\n dryRun: boolean;\n sourceUsername?: string;\n sourceFeed?: string;\n }): Promise<ExecuteSignalResult> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/execute', {\n body: params,\n }) as Promise<ExecuteSignalResult>;\n }\n\n async updateRiskRules(rules: TradingRiskRuleInput): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request('PUT', '/api/v1/trading/risk-rules', {\n body: rules,\n }) as Promise<TradingRiskRule>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n EnsureArraysJwtResponse,\n ArraysJwtStatusResponse,\n} from '../types.js';\n\nexport class ArraysJwtResource {\n constructor(private client: AlvaClient) {}\n\n /** Idempotently sign-or-renew the Arrays JWT server-side. */\n async ensure(): Promise<EnsureArraysJwtResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'POST',\n '/api/v1/arrays-jwt/ensure'\n ) as Promise<EnsureArraysJwtResponse>;\n }\n\n /** Report the current Arrays JWT state for the authenticated user. */\n async status(): Promise<ArraysJwtStatusResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/arrays-jwt/status'\n ) as Promise<ArraysJwtStatusResponse>;\n }\n}\n","import { AlvaError } from './error.js';\nimport type { AlvaClientConfig } from './types.js';\nimport { FsResource } from './resources/fs.js';\nimport { RunResource } from './resources/run.js';\nimport { DeployResource } from './resources/deploy.js';\nimport { ReleaseResource } from './resources/release.js';\nimport { SecretsResource } from './resources/secrets.js';\nimport { SdkDocsResource } from './resources/sdkDocs.js';\nimport { SkillsResource } from './resources/skills.js';\nimport { CommentsResource } from './resources/comments.js';\nimport { RemixResource } from './resources/remix.js';\nimport { ScreenshotResource } from './resources/screenshot.js';\nimport { UserResource } from './resources/user.js';\nimport { TradingResource } from './resources/trading.js';\nimport { ArraysJwtResource } from './resources/arraysJwt.js';\n\nconst DEFAULT_BASE_URL = 'https://api-llm.prd.alva.ai';\nexport const DEFAULT_ARRAYS_BASE_URL = 'https://data-tools.prd.space.id';\n\ninterface RequestOptions {\n query?: Record<string, unknown>;\n body?: unknown;\n /** Send raw body with application/octet-stream content type (for binary writes). */\n rawBody?: BodyInit;\n /** Override the base URL for this request (e.g. the Arrays data-tools endpoint). */\n baseUrl?: string;\n /** If true, skip attaching any Alva auth header (X-Alva-Api-Key / x-Playbook-Viewer). */\n noAuth?: boolean;\n}\n\nexport class AlvaClient {\n readonly baseUrl: string;\n readonly arraysBaseUrl: string;\n readonly viewer_token?: string;\n readonly apiKey?: string;\n\n private _fs?: FsResource;\n private _run?: RunResource;\n private _deploy?: DeployResource;\n private _release?: ReleaseResource;\n private _secrets?: SecretsResource;\n private _sdk?: SdkDocsResource;\n private _skills?: SkillsResource;\n private _comments?: CommentsResource;\n private _remix?: RemixResource;\n private _screenshot?: ScreenshotResource;\n private _user?: UserResource;\n private _trading?: TradingResource;\n private _arraysJwt?: ArraysJwtResource;\n\n constructor(config: AlvaClientConfig) {\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.arraysBaseUrl = config.arraysBaseUrl ?? DEFAULT_ARRAYS_BASE_URL;\n this.viewer_token = config.viewer_token;\n this.apiKey = config.apiKey;\n }\n\n get fs(): FsResource {\n return (this._fs ??= new FsResource(this));\n }\n get run(): RunResource {\n return (this._run ??= new RunResource(this));\n }\n get deploy(): DeployResource {\n return (this._deploy ??= new DeployResource(this));\n }\n get release(): ReleaseResource {\n return (this._release ??= new ReleaseResource(this));\n }\n get secrets(): SecretsResource {\n return (this._secrets ??= new SecretsResource(this));\n }\n get sdk(): SdkDocsResource {\n return (this._sdk ??= new SdkDocsResource(this));\n }\n get skills(): SkillsResource {\n return (this._skills ??= new SkillsResource(this));\n }\n get comments(): CommentsResource {\n return (this._comments ??= new CommentsResource(this));\n }\n get remix(): RemixResource {\n return (this._remix ??= new RemixResource(this));\n }\n get screenshot(): ScreenshotResource {\n return (this._screenshot ??= new ScreenshotResource(this));\n }\n get user(): UserResource {\n return (this._user ??= new UserResource(this));\n }\n get trading(): TradingResource {\n return (this._trading ??= new TradingResource(this));\n }\n get arraysJwt(): ArraysJwtResource {\n return (this._arraysJwt ??= new ArraysJwtResource(this));\n }\n\n _requireAuth(): void {\n if (!this.viewer_token && !this.apiKey) {\n throw new AlvaError(\n 'UNAUTHENTICATED',\n 'Authentication is required. Pass viewer_token or apiKey in the constructor.',\n 401\n );\n }\n }\n\n async _request(\n method: string,\n path: string,\n options?: RequestOptions\n ): Promise<unknown> {\n const baseUrl = options?.baseUrl ?? this.baseUrl;\n let url = `${baseUrl}${path}`;\n\n if (options?.query) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined && value !== null) {\n params.set(key, String(value));\n }\n }\n const qs = params.toString();\n if (qs) {\n url += `?${qs}`;\n }\n }\n\n const headers: Record<string, string> = {};\n if (!options?.noAuth) {\n if (this.viewer_token) {\n headers['x-Playbook-Viewer'] = this.viewer_token;\n } else if (this.apiKey) {\n headers['X-Alva-Api-Key'] = this.apiKey;\n }\n }\n\n let fetchBody: BodyInit | undefined;\n if (options?.rawBody !== undefined) {\n headers['Content-Type'] = 'application/octet-stream';\n fetchBody = options.rawBody;\n } else if (options?.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n fetchBody = JSON.stringify(options.body);\n }\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers,\n body: fetchBody,\n });\n } catch (err) {\n throw new AlvaError(\n 'NETWORK_ERROR',\n err instanceof Error ? err.message : 'Network request failed',\n 0\n );\n }\n\n if (!response.ok) {\n // Read body as text first to avoid double consumption\n const bodyText = await response.text().catch(() => '');\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json') && bodyText) {\n try {\n const data = JSON.parse(bodyText) as {\n error?: { code?: string; message?: string };\n };\n if (data.error) {\n throw new AlvaError(\n data.error.code ?? 'UNKNOWN',\n data.error.message ?? `HTTP ${response.status}`,\n response.status\n );\n }\n } catch (e) {\n if (e instanceof AlvaError) throw e;\n // JSON parse failed or no error envelope — fall through\n }\n }\n throw new AlvaError(\n 'UNKNOWN',\n `HTTP ${response.status}: ${bodyText.slice(0, 200)}`,\n response.status\n );\n }\n\n // Handle 204 No Content and empty responses\n if (response.status === 204) {\n return undefined;\n }\n\n const contentType = response.headers.get('content-type') ?? '';\n if (\n contentType.includes('application/octet-stream') ||\n contentType.includes('image/')\n ) {\n return response.arrayBuffer();\n }\n\n return response.json();\n }\n}\n","declare const __VERSION__: string;\n\n/** SDK version, injected at build time from package.json. */\nexport const VERSION: string =\n typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev';\n\nexport { AlvaClient } from './client.js';\nexport { AlvaError } from './error.js';\nexport type {\n AlvaClientConfig,\n FsReadParams,\n FsWriteParams,\n FsRawWriteParams,\n FsWriteResponse,\n FsStat,\n FsReaddirParams,\n FsEntry,\n FsReaddirResponse,\n FsMkdirParams,\n FsRemoveParams,\n FsRenameParams,\n FsCopyParams,\n FsSymlinkParams,\n FsReadlinkParams,\n FsChmodParams,\n FsGrantParams,\n FsRevokeParams,\n} from './types.js';\n"],"mappings":"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","names":["browser_exports","__export","AlvaClient","AlvaError","VERSION","AlvaError","code","message","status","FsResource","client","params","result","text","RunResource","client","params","DeployResource","client","params","id","body","ReleaseResource","client","params","SecretsResource","client","params","encoded","SdkDocsResource","client","params","encoded","SkillsResource","client","params","encoded","doc","CommentsResource","client","params","RemixResource","client","params","ScreenshotResource","client","params","UserResource","client","TradingResource","client","accountId","params","subscriptionId","rules","ArraysJwtResource","client","DEFAULT_BASE_URL","DEFAULT_ARRAYS_BASE_URL","AlvaClient","config","FsResource","RunResource","DeployResource","ReleaseResource","SecretsResource","SdkDocsResource","SkillsResource","CommentsResource","RemixResource","ScreenshotResource","UserResource","TradingResource","ArraysJwtResource","AlvaError","method","path","options","url","params","key","value","qs","headers","fetchBody","response","err","bodyText","data","e","contentType","VERSION"]}
1
+ {"version":3,"sources":["../src/browser.ts","../src/error.ts","../src/resources/fs.ts","../src/resources/run.ts","../src/resources/deploy.ts","../src/resources/release.ts","../src/resources/secrets.ts","../src/resources/sdkDocs.ts","../src/resources/skills.ts","../src/resources/comments.ts","../src/resources/remix.ts","../src/resources/screenshot.ts","../src/resources/user.ts","../src/resources/trading.ts","../src/resources/arraysJwt.ts","../src/resources/notifications.ts","../src/resources/pushSubscriptions.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["export * from './index.js';\n","export class AlvaError extends Error {\n readonly code: string;\n readonly status: number;\n\n constructor(code: string, message: string, status: number) {\n super(message);\n this.name = 'AlvaError';\n this.code = code;\n this.status = status;\n }\n}\n\nexport class CliUsageError extends Error {\n readonly command?: string;\n\n constructor(message: string, command?: string) {\n super(message);\n this.name = 'CliUsageError';\n this.command = command;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FsReadParams,\n FsWriteParams,\n FsRawWriteParams,\n FsWriteResponse,\n FsStat,\n FsReaddirParams,\n FsReaddirResponse,\n FsMkdirParams,\n FsRemoveParams,\n FsRenameParams,\n FsCopyParams,\n FsSymlinkParams,\n FsReadlinkParams,\n FsChmodParams,\n FsGrantParams,\n FsRevokeParams,\n} from '../types.js';\n\nexport class FsResource {\n constructor(private client: AlvaClient) {}\n\n /** Returns `ArrayBuffer` for binary files, or parsed JSON for time-series virtual paths. */\n async read(params: FsReadParams): Promise<ArrayBuffer | unknown> {\n const result = await this.client._request('GET', '/api/v1/fs/read', {\n query: { path: params.path, offset: params.offset, size: params.size },\n });\n if (!(result instanceof ArrayBuffer)) return result;\n try {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(result);\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n } catch {\n return result;\n }\n }\n\n /** Write file using JSON body (Mode 2). For text content. */\n async write(params: FsWriteParams): Promise<FsWriteResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/fs/write', {\n body: {\n path: params.path,\n data: params.data,\n mkdir_parents: params.mkdir_parents,\n },\n }) as Promise<FsWriteResponse>;\n }\n\n /** Write file using raw body (Mode 1). Supports binary data. Path and options are query params. */\n async rawWrite(params: FsRawWriteParams): Promise<FsWriteResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/fs/write', {\n query: {\n path: params.path,\n mkdir_parents: params.mkdir_parents,\n },\n rawBody: params.body,\n }) as Promise<FsWriteResponse>;\n }\n\n async stat(params: { path: string }): Promise<FsStat> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/stat', {\n query: { path: params.path },\n }) as Promise<FsStat>;\n }\n\n async readdir(params: FsReaddirParams): Promise<FsReaddirResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/readdir', {\n query: { path: params.path, recursive: params.recursive },\n }) as Promise<FsReaddirResponse>;\n }\n\n async mkdir(params: FsMkdirParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/mkdir', {\n body: { path: params.path },\n });\n }\n\n async remove(params: FsRemoveParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('DELETE', '/api/v1/fs/remove', {\n query: { path: params.path, recursive: params.recursive },\n });\n }\n\n async rename(params: FsRenameParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/rename', {\n body: { old_path: params.old_path, new_path: params.new_path },\n });\n }\n\n async copy(params: FsCopyParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/copy', {\n body: { src_path: params.src_path, dst_path: params.dst_path },\n });\n }\n\n async symlink(params: FsSymlinkParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/symlink', {\n body: {\n target_path: params.target_path,\n link_path: params.link_path,\n },\n });\n }\n\n async readlink(params: FsReadlinkParams): Promise<{ target: string }> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/readlink', {\n query: { path: params.path },\n }) as Promise<{ target: string }>;\n }\n\n async chmod(params: FsChmodParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/chmod', {\n body: { path: params.path, mode: params.mode },\n });\n }\n\n async grant(params: FsGrantParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/grant', {\n body: {\n path: params.path,\n subject: params.subject,\n permission: params.permission,\n },\n });\n }\n\n async revoke(params: FsRevokeParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/revoke', {\n body: {\n path: params.path,\n subject: params.subject,\n permission: params.permission,\n },\n });\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { RunRequest, RunResponse } from '../types.js';\n\nexport class RunResource {\n constructor(private client: AlvaClient) {}\n\n async execute(params: RunRequest): Promise<RunResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/run', {\n body: {\n code: params.code,\n entry_path: params.entry_path,\n working_dir: params.working_dir,\n args: params.args,\n },\n }) as Promise<RunResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n CronjobCreateRequest,\n Cronjob,\n CronjobListParams,\n CronjobListResponse,\n CronjobUpdateRequest,\n CronjobRunsListParams,\n CronjobRunsListResponse,\n CronjobRunLogsResponse,\n} from '../types.js';\n\nexport class DeployResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CronjobCreateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/deploy/cronjob', {\n body: {\n name: params.name,\n path: params.path,\n cron_expression: params.cron_expression,\n args: params.args,\n push_notify: params.push_notify,\n },\n }) as Promise<Cronjob>;\n }\n\n async list(params?: CronjobListParams): Promise<CronjobListResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/deploy/cronjobs', {\n query: { limit: params?.limit, cursor: params?.cursor },\n }) as Promise<CronjobListResponse>;\n }\n\n async get(params: { id: number }): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.id}`\n ) as Promise<Cronjob>;\n }\n\n async update(params: CronjobUpdateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n const { id, ...body } = params;\n return this.client._request('PATCH', `/api/v1/deploy/cronjob/${id}`, {\n body,\n }) as Promise<Cronjob>;\n }\n\n async delete(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request('DELETE', `/api/v1/deploy/cronjob/${params.id}`);\n }\n\n async pause(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/pause`\n );\n }\n\n async resume(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/resume`\n );\n }\n\n async listRuns(\n params: CronjobRunsListParams\n ): Promise<CronjobRunsListResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs`,\n {\n query: { first: params.first, cursor: params.cursor },\n }\n ) as Promise<CronjobRunsListResponse>;\n }\n\n async getRunLogs(params: {\n cronjob_id: number;\n run_id: number;\n }): Promise<CronjobRunLogsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs/${params.run_id}/logs`\n ) as Promise<CronjobRunLogsResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FeedReleaseRequest,\n FeedReleaseResponse,\n PlaybookDraftRequest,\n PlaybookDraftResponse,\n PlaybookReleaseRequest,\n PlaybookReleaseResponse,\n} from '../types.js';\n\nexport class ReleaseResource {\n constructor(private client: AlvaClient) {}\n\n async feed(params: FeedReleaseRequest): Promise<FeedReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/feed', {\n body: {\n name: params.name,\n version: params.version,\n cronjob_id: params.cronjob_id,\n view_json: params.view_json,\n description: params.description,\n changelog: params.changelog,\n },\n }) as Promise<FeedReleaseResponse>;\n }\n\n async playbookDraft(\n params: PlaybookDraftRequest\n ): Promise<PlaybookDraftResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/draft/playbook', {\n body: {\n name: params.name,\n display_name: params.display_name,\n description: params.description,\n feeds: params.feeds,\n trading_symbols: params.trading_symbols,\n },\n }) as Promise<PlaybookDraftResponse>;\n }\n\n async playbook(\n params: PlaybookReleaseRequest\n ): Promise<PlaybookReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/playbook', {\n body: {\n name: params.name,\n version: params.version,\n feeds: params.feeds,\n changelog: params.changelog,\n },\n }) as Promise<PlaybookReleaseResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateSecretRequest, Secret, SecretMetadata } from '../types.js';\n\nexport class SecretsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateSecretRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/secrets', {\n body: { name: params.name, value: params.value },\n });\n }\n\n async list(): Promise<{ secrets: SecretMetadata[] }> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/secrets') as Promise<{\n secrets: SecretMetadata[];\n }>;\n }\n\n async get(params: { name: string }): Promise<Secret> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n return this.client._request(\n 'GET',\n `/api/v1/secrets/${encoded}`\n ) as Promise<Secret>;\n }\n\n async update(params: { name: string; value: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('PUT', `/api/v1/secrets/${encoded}`, {\n body: { value: params.value },\n });\n }\n\n async delete(params: { name: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('DELETE', `/api/v1/secrets/${encoded}`);\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n ModuleDoc,\n PartitionsResponse,\n PartitionSummaryResponse,\n} from '../types.js';\n\nexport class SdkDocsResource {\n constructor(private client: AlvaClient) {}\n\n async doc(params: { name: string }): Promise<ModuleDoc> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/sdk/doc', {\n query: { name: params.name },\n }) as Promise<ModuleDoc>;\n }\n\n async partitions(): Promise<PartitionsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/sdk/partitions'\n ) as Promise<PartitionsResponse>;\n }\n\n async partitionSummary(params: {\n partition: string;\n }): Promise<PartitionSummaryResponse> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.partition);\n return this.client._request(\n 'GET',\n `/api/v1/sdk/partitions/${encoded}/summary`\n ) as Promise<PartitionSummaryResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\n\nexport interface SkillSummary {\n name: string;\n description: string;\n}\n\nexport interface SkillDoc {\n name: string;\n description: string;\n content: string;\n}\n\nexport class SkillsResource {\n constructor(private client: AlvaClient) {}\n\n async list(): Promise<{ skills: SkillSummary[] }> {\n const res = (await this.client._request('GET', '/api/v1/skills', {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n })) as Envelope<SkillSummary[]>;\n return { skills: res.data ?? [] };\n }\n\n async summary(params: { name: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc)\n throw new Error(`empty skills summary response for \"${params.name}\"`);\n return doc;\n }\n\n async endpoint(params: { name: string; file: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n query: { endpoint: params.file },\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc) {\n throw new Error(\n `empty skills endpoint response for \"${params.name}\" file \"${params.file}\"`\n );\n }\n return doc;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateCommentRequest, Comment } from '../types.js';\n\nexport class CommentsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateCommentRequest): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment', {\n body: {\n username: params.username,\n name: params.name,\n content: params.content,\n parent_id: params.parent_id,\n },\n }) as Promise<Comment>;\n }\n\n async pin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/pin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n\n async unpin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/unpin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { RemixRequest } from '../types.js';\n\nexport class RemixResource {\n constructor(private client: AlvaClient) {}\n\n async save(params: RemixRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/remix', {\n body: {\n child: params.child,\n parents: params.parents,\n },\n });\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { ScreenshotParams } from '../types.js';\n\nexport class ScreenshotResource {\n constructor(private client: AlvaClient) {}\n\n async capture(params: ScreenshotParams): Promise<ArrayBuffer> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/screenshot', {\n query: {\n url: params.url,\n selector: params.selector,\n xpath: params.xpath,\n },\n }) as Promise<ArrayBuffer>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { UserProfile } from '../types.js';\n\nexport class UserResource {\n constructor(private client: AlvaClient) {}\n\n async me(): Promise<UserProfile> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/me') as Promise<UserProfile>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n TradingAccount,\n TradingPortfolio,\n TradingOrder,\n TradingSubscription,\n EquityPoint,\n TradingRiskRule,\n TradingRiskRuleInput,\n ExecuteSignalResult,\n} from '../types.js';\n\nexport class TradingResource {\n constructor(private client: AlvaClient) {}\n\n async accounts(): Promise<TradingAccount[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/accounts') as Promise<\n TradingAccount[]\n >;\n }\n\n async portfolio(accountId: string): Promise<TradingPortfolio> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/portfolio', {\n query: { accountId },\n }) as Promise<TradingPortfolio>;\n }\n\n async orders(params: {\n accountId: string;\n source?: string;\n since?: number;\n limit?: number;\n }): Promise<TradingOrder[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/orders', {\n query: {\n accountId: params.accountId,\n source: params.source,\n since: params.since,\n limit: params.limit,\n },\n }) as Promise<TradingOrder[]>;\n }\n\n async subscriptions(accountId: string): Promise<TradingSubscription[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/subscriptions', {\n query: { accountId },\n }) as Promise<TradingSubscription[]>;\n }\n\n async equityHistory(params: {\n accountId: string;\n timeframe?: string;\n sinceMs?: number;\n untilMs?: number;\n }): Promise<EquityPoint[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/equity-history', {\n query: {\n accountId: params.accountId,\n timeframe: params.timeframe,\n sinceMs: params.sinceMs,\n untilMs: params.untilMs,\n },\n }) as Promise<EquityPoint[]>;\n }\n\n async riskRules(): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/trading/risk-rules'\n ) as Promise<TradingRiskRule>;\n }\n\n async subscribe(params: {\n accountId: string;\n sourceUsername: string;\n sourceFeed: string;\n playbookId: string;\n playbookVersion: string;\n executeLatest?: boolean;\n }): Promise<TradingSubscription> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/subscribe', {\n body: params,\n }) as Promise<TradingSubscription>;\n }\n\n async unsubscribe(\n subscriptionId: string\n ): Promise<{ unsubscribedId: string }> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/unsubscribe', {\n body: { subscriptionId },\n }) as Promise<{ unsubscribedId: string }>;\n }\n\n async execute(params: {\n accountId: string;\n signalJson: string;\n dryRun: boolean;\n sourceUsername?: string;\n sourceFeed?: string;\n }): Promise<ExecuteSignalResult> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/execute', {\n body: params,\n }) as Promise<ExecuteSignalResult>;\n }\n\n async updateRiskRules(rules: TradingRiskRuleInput): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request('PUT', '/api/v1/trading/risk-rules', {\n body: rules,\n }) as Promise<TradingRiskRule>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n EnsureArraysJwtResponse,\n ArraysJwtStatusResponse,\n} from '../types.js';\n\nexport class ArraysJwtResource {\n constructor(private client: AlvaClient) {}\n\n /** Idempotently sign-or-renew the Arrays JWT server-side. */\n async ensure(): Promise<EnsureArraysJwtResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'POST',\n '/api/v1/arrays-jwt/ensure'\n ) as Promise<EnsureArraysJwtResponse>;\n }\n\n /** Report the current Arrays JWT state for the authenticated user. */\n async status(): Promise<ArraysJwtStatusResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/arrays-jwt/status'\n ) as Promise<ArraysJwtStatusResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FeedNotificationListResponse,\n NotificationListParams,\n PlaybookNotificationListResponse,\n} from '../types.js';\n\nexport class NotificationsResource {\n constructor(private client: AlvaClient) {}\n\n /**\n * List the caller's notification history for one playbook\n * `(username, name)`. Returns `NOT_FOUND` when the playbook is\n * private or does not exist (the two cases are deliberately\n * indistinguishable to prevent namespace enumeration).\n */\n async listPlaybook(\n params: NotificationListParams\n ): Promise<PlaybookNotificationListResponse> {\n this.client._requireAuth();\n const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;\n return this.client._request('GET', path, {\n query: buildQuery(params),\n }) as Promise<PlaybookNotificationListResponse>;\n }\n\n /**\n * List the caller's notification history for one feed\n * `(username, name)`. Authorization is alfs read on\n * `/alva/home/<username>/feeds/<name>`.\n */\n async listFeed(\n params: NotificationListParams\n ): Promise<FeedNotificationListResponse> {\n this.client._requireAuth();\n const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;\n return this.client._request('GET', path, {\n query: buildQuery(params),\n }) as Promise<FeedNotificationListResponse>;\n }\n}\n\nfunction buildQuery(params: NotificationListParams): Record<string, string> {\n const q: Record<string, string> = {};\n if (params.channel) q.channel = params.channel;\n if (params.status) q.status = params.status;\n if (params.since_time !== undefined && params.since_time > 0) {\n q.since_time = String(params.since_time);\n }\n if (params.first !== undefined && params.first > 0) {\n q.first = String(params.first);\n }\n if (params.cursor) q.cursor = params.cursor;\n return q;\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n PushSubscriptionListParams,\n PushSubscriptionListResponse,\n PushSubscriptionPlaybookParams,\n SubscribePushTargetResponse,\n UnsubscribePushTargetResponse,\n} from '../types.js';\n\n/**\n * Personal push subscriptions — opt the caller in or out of personal\n * DM/web push for a target. Independent of social follow:\n *\n * - `subscribePlaybook` does not start following.\n * - `unsubscribePlaybook` does not unfollow.\n * - Following a playbook elsewhere will compound-subscribe automatically.\n *\n * Backed by alva-gateway REST (mirrors the GraphQL surface in\n * `pkg/schema/push_subscription.graphql`).\n */\nexport class PushSubscriptionsResource {\n constructor(private client: AlvaClient) {}\n\n /**\n * Opt into personal push for one playbook `(username, name)`.\n * Idempotent. Auth: callers must be able to read the playbook\n * (public/paid pass; private requires explicit alfs grant).\n */\n async subscribePlaybook(\n params: PushSubscriptionPlaybookParams\n ): Promise<SubscribePushTargetResponse> {\n this.client._requireAuth();\n const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;\n return this.client._request(\n 'POST',\n path\n ) as Promise<SubscribePushTargetResponse>;\n }\n\n /**\n * Soft-disable personal push for one playbook `(username, name)`.\n * Does NOT remove any social follow. Idempotent.\n */\n async unsubscribePlaybook(\n params: PushSubscriptionPlaybookParams\n ): Promise<UnsubscribePushTargetResponse> {\n this.client._requireAuth();\n const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;\n return this.client._request(\n 'DELETE',\n path\n ) as Promise<UnsubscribePushTargetResponse>;\n }\n\n /**\n * List the caller's personal push subscriptions across all targets.\n * Defaults to currently-active rows only; pass `include_history=true`\n * to also return previously-unsubscribed rows.\n */\n async list(\n params: PushSubscriptionListParams = {}\n ): Promise<PushSubscriptionListResponse> {\n this.client._requireAuth();\n const query: Record<string, string> = {};\n if (params.include_history !== undefined) {\n query.include_history = String(params.include_history);\n }\n return this.client._request('GET', '/api/v1/me/push-subscriptions', {\n query,\n }) as Promise<PushSubscriptionListResponse>;\n }\n}\n","import { AlvaError } from './error.js';\nimport type { AlvaClientConfig } from './types.js';\nimport { FsResource } from './resources/fs.js';\nimport { RunResource } from './resources/run.js';\nimport { DeployResource } from './resources/deploy.js';\nimport { ReleaseResource } from './resources/release.js';\nimport { SecretsResource } from './resources/secrets.js';\nimport { SdkDocsResource } from './resources/sdkDocs.js';\nimport { SkillsResource } from './resources/skills.js';\nimport { CommentsResource } from './resources/comments.js';\nimport { RemixResource } from './resources/remix.js';\nimport { ScreenshotResource } from './resources/screenshot.js';\nimport { UserResource } from './resources/user.js';\nimport { TradingResource } from './resources/trading.js';\nimport { ArraysJwtResource } from './resources/arraysJwt.js';\nimport { NotificationsResource } from './resources/notifications.js';\nimport { PushSubscriptionsResource } from './resources/pushSubscriptions.js';\n\nconst DEFAULT_BASE_URL = 'https://api-llm.prd.alva.ai';\nexport const DEFAULT_ARRAYS_BASE_URL = 'https://data-tools.prd.space.id';\n\ninterface RequestOptions {\n query?: Record<string, unknown>;\n body?: unknown;\n /** Send raw body with application/octet-stream content type (for binary writes). */\n rawBody?: BodyInit;\n /** Override the base URL for this request (e.g. the Arrays data-tools endpoint). */\n baseUrl?: string;\n /** If true, skip attaching any Alva auth header (X-Alva-Api-Key / x-Playbook-Viewer). */\n noAuth?: boolean;\n}\n\nexport class AlvaClient {\n readonly baseUrl: string;\n readonly arraysBaseUrl: string;\n readonly viewer_token?: string;\n readonly apiKey?: string;\n\n private _fs?: FsResource;\n private _run?: RunResource;\n private _deploy?: DeployResource;\n private _release?: ReleaseResource;\n private _secrets?: SecretsResource;\n private _sdk?: SdkDocsResource;\n private _skills?: SkillsResource;\n private _comments?: CommentsResource;\n private _remix?: RemixResource;\n private _screenshot?: ScreenshotResource;\n private _user?: UserResource;\n private _trading?: TradingResource;\n private _arraysJwt?: ArraysJwtResource;\n private _notifications?: NotificationsResource;\n private _pushSubscriptions?: PushSubscriptionsResource;\n\n constructor(config: AlvaClientConfig) {\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.arraysBaseUrl = config.arraysBaseUrl ?? DEFAULT_ARRAYS_BASE_URL;\n this.viewer_token = config.viewer_token;\n this.apiKey = config.apiKey;\n }\n\n get fs(): FsResource {\n return (this._fs ??= new FsResource(this));\n }\n get run(): RunResource {\n return (this._run ??= new RunResource(this));\n }\n get deploy(): DeployResource {\n return (this._deploy ??= new DeployResource(this));\n }\n get release(): ReleaseResource {\n return (this._release ??= new ReleaseResource(this));\n }\n get secrets(): SecretsResource {\n return (this._secrets ??= new SecretsResource(this));\n }\n get sdk(): SdkDocsResource {\n return (this._sdk ??= new SdkDocsResource(this));\n }\n get skills(): SkillsResource {\n return (this._skills ??= new SkillsResource(this));\n }\n get comments(): CommentsResource {\n return (this._comments ??= new CommentsResource(this));\n }\n get remix(): RemixResource {\n return (this._remix ??= new RemixResource(this));\n }\n get screenshot(): ScreenshotResource {\n return (this._screenshot ??= new ScreenshotResource(this));\n }\n get user(): UserResource {\n return (this._user ??= new UserResource(this));\n }\n get trading(): TradingResource {\n return (this._trading ??= new TradingResource(this));\n }\n get arraysJwt(): ArraysJwtResource {\n return (this._arraysJwt ??= new ArraysJwtResource(this));\n }\n get notifications(): NotificationsResource {\n return (this._notifications ??= new NotificationsResource(this));\n }\n get pushSubscriptions(): PushSubscriptionsResource {\n return (this._pushSubscriptions ??= new PushSubscriptionsResource(this));\n }\n\n _requireAuth(): void {\n if (!this.viewer_token && !this.apiKey) {\n throw new AlvaError(\n 'UNAUTHENTICATED',\n 'Authentication is required. Pass viewer_token or apiKey in the constructor.',\n 401\n );\n }\n }\n\n async _request(\n method: string,\n path: string,\n options?: RequestOptions\n ): Promise<unknown> {\n const baseUrl = options?.baseUrl ?? this.baseUrl;\n let url = `${baseUrl}${path}`;\n\n if (options?.query) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined && value !== null) {\n params.set(key, String(value));\n }\n }\n const qs = params.toString();\n if (qs) {\n url += `?${qs}`;\n }\n }\n\n const headers: Record<string, string> = {};\n if (!options?.noAuth) {\n if (this.viewer_token) {\n headers['x-Playbook-Viewer'] = this.viewer_token;\n } else if (this.apiKey) {\n headers['X-Alva-Api-Key'] = this.apiKey;\n }\n }\n\n let fetchBody: BodyInit | undefined;\n if (options?.rawBody !== undefined) {\n headers['Content-Type'] = 'application/octet-stream';\n fetchBody = options.rawBody;\n } else if (options?.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n fetchBody = JSON.stringify(options.body);\n }\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers,\n body: fetchBody,\n });\n } catch (err) {\n throw new AlvaError(\n 'NETWORK_ERROR',\n err instanceof Error ? err.message : 'Network request failed',\n 0\n );\n }\n\n if (!response.ok) {\n // Read body as text first to avoid double consumption\n const bodyText = await response.text().catch(() => '');\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json') && bodyText) {\n try {\n const data = JSON.parse(bodyText) as {\n error?: { code?: string; message?: string };\n };\n if (data.error) {\n throw new AlvaError(\n data.error.code ?? 'UNKNOWN',\n data.error.message ?? `HTTP ${response.status}`,\n response.status\n );\n }\n } catch (e) {\n if (e instanceof AlvaError) throw e;\n // JSON parse failed or no error envelope — fall through\n }\n }\n throw new AlvaError(\n 'UNKNOWN',\n `HTTP ${response.status}: ${bodyText.slice(0, 200)}`,\n response.status\n );\n }\n\n // Handle 204 No Content and empty responses\n if (response.status === 204) {\n return undefined;\n }\n\n const contentType = response.headers.get('content-type') ?? '';\n if (\n contentType.includes('application/octet-stream') ||\n contentType.includes('image/')\n ) {\n return response.arrayBuffer();\n }\n\n return response.json();\n }\n}\n","declare const __VERSION__: string;\n\n/** SDK version, injected at build time from package.json. */\nexport const VERSION: string =\n typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev';\n\nexport { AlvaClient } from './client.js';\nexport { AlvaError } from './error.js';\nexport type {\n AlvaClientConfig,\n FsReadParams,\n FsWriteParams,\n FsRawWriteParams,\n FsWriteResponse,\n FsStat,\n FsReaddirParams,\n FsEntry,\n FsReaddirResponse,\n FsMkdirParams,\n FsRemoveParams,\n FsRenameParams,\n FsCopyParams,\n FsSymlinkParams,\n FsReadlinkParams,\n FsChmodParams,\n FsGrantParams,\n FsRevokeParams,\n} from './types.js';\n"],"mappings":"+bAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,cAAAC,EAAA,YAAAC,ICAO,IAAMC,EAAN,cAAwB,KAAM,CAC1B,KACA,OAET,YAAYC,EAAcC,EAAiBC,EAAgB,CACzD,MAAMD,CAAO,EACb,KAAK,KAAO,YACZ,KAAK,KAAOD,EACZ,KAAK,OAASE,CAChB,CACF,ECUO,IAAMC,EAAN,KAAiB,CACtB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAGpB,MAAM,KAAKC,EAAsD,CAC/D,IAAMC,EAAS,MAAM,KAAK,OAAO,SAAS,MAAO,kBAAmB,CAClE,MAAO,CAAE,KAAMD,EAAO,KAAM,OAAQA,EAAO,OAAQ,KAAMA,EAAO,IAAK,CACvE,CAAC,EACD,GAAI,EAAEC,aAAkB,aAAc,OAAOA,EAC7C,GAAI,CACF,IAAMC,EAAO,IAAI,YAAY,QAAS,CAAE,MAAO,EAAK,CAAC,EAAE,OAAOD,CAAM,EACpE,GAAI,CACF,OAAO,KAAK,MAAMC,CAAI,CACxB,MAAQ,CACN,OAAOA,CACT,CACF,MAAQ,CACN,OAAOD,CACT,CACF,CAGA,MAAM,MAAMD,EAAiD,CAC3D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACtD,KAAM,CACJ,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,cAAeA,EAAO,aACxB,CACF,CAAC,CACH,CAGA,MAAM,SAASA,EAAoD,CACjE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACtD,MAAO,CACL,KAAMA,EAAO,KACb,cAAeA,EAAO,aACxB,EACA,QAASA,EAAO,IAClB,CAAC,CACH,CAEA,MAAM,KAAKA,EAA2C,CACpD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,kBAAmB,CACpD,MAAO,CAAE,KAAMA,EAAO,IAAK,CAC7B,CAAC,CACH,CAEA,MAAM,QAAQA,EAAqD,CACjE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,qBAAsB,CACvD,MAAO,CAAE,KAAMA,EAAO,KAAM,UAAWA,EAAO,SAAU,CAC1D,CAAC,CACH,CAEA,MAAM,MAAMA,EAAsC,CAChD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACrD,KAAM,CAAE,KAAMA,EAAO,IAAK,CAC5B,CAAC,CACH,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,SAAU,oBAAqB,CACxD,MAAO,CAAE,KAAMA,EAAO,KAAM,UAAWA,EAAO,SAAU,CAC1D,CAAC,CACH,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,oBAAqB,CACtD,KAAM,CAAE,SAAUA,EAAO,SAAU,SAAUA,EAAO,QAAS,CAC/D,CAAC,CACH,CAEA,MAAM,KAAKA,EAAqC,CAC9C,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,kBAAmB,CACpD,KAAM,CAAE,SAAUA,EAAO,SAAU,SAAUA,EAAO,QAAS,CAC/D,CAAC,CACH,CAEA,MAAM,QAAQA,EAAwC,CACpD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,qBAAsB,CACvD,KAAM,CACJ,YAAaA,EAAO,YACpB,UAAWA,EAAO,SACpB,CACF,CAAC,CACH,CAEA,MAAM,SAASA,EAAuD,CACpE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,sBAAuB,CACxD,MAAO,CAAE,KAAMA,EAAO,IAAK,CAC7B,CAAC,CACH,CAEA,MAAM,MAAMA,EAAsC,CAChD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACrD,KAAM,CAAE,KAAMA,EAAO,KAAM,KAAMA,EAAO,IAAK,CAC/C,CAAC,CACH,CAEA,MAAM,MAAMA,EAAsC,CAChD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACrD,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,WAAYA,EAAO,UACrB,CACF,CAAC,CACH,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,oBAAqB,CACtD,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,WAAYA,EAAO,UACrB,CACF,CAAC,CACH,CACF,ECrJO,IAAMG,EAAN,KAAkB,CACvB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,QAAQC,EAA0C,CACtD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,cAAe,CACjD,KAAM,CACJ,KAAMA,EAAO,KACb,WAAYA,EAAO,WACnB,YAAaA,EAAO,YACpB,KAAMA,EAAO,IACf,CACF,CAAC,CACH,CACF,ECLO,IAAMC,EAAN,KAAqB,CAC1B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,OAAOC,EAAgD,CAC3D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,yBAA0B,CAC5D,KAAM,CACJ,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,gBAAiBA,EAAO,gBACxB,KAAMA,EAAO,KACb,YAAaA,EAAO,WACtB,CACF,CAAC,CACH,CAEA,MAAM,KAAKA,EAA0D,CACnE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,0BAA2B,CAC5D,MAAO,CAAE,MAAOA,GAAQ,MAAO,OAAQA,GAAQ,MAAO,CACxD,CAAC,CACH,CAEA,MAAM,IAAIA,EAA0C,CAClD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,0BAA0BA,EAAO,EAAE,EACrC,CACF,CAEA,MAAM,OAAOA,EAAgD,CAC3D,KAAK,OAAO,aAAa,EACzB,GAAM,CAAE,GAAAC,EAAI,GAAGC,CAAK,EAAIF,EACxB,OAAO,KAAK,OAAO,SAAS,QAAS,0BAA0BC,CAAE,GAAI,CACnE,KAAAC,CACF,CAAC,CACH,CAEA,MAAM,OAAOF,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,SAAU,0BAA0BA,EAAO,EAAE,EAAE,CAC5E,CAEA,MAAM,MAAMA,EAAuC,CACjD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAChB,OACA,0BAA0BA,EAAO,EAAE,QACrC,CACF,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAChB,OACA,0BAA0BA,EAAO,EAAE,SACrC,CACF,CAEA,MAAM,SACJA,EACkC,CAClC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,0BAA0BA,EAAO,UAAU,QAC3C,CACE,MAAO,CAAE,MAAOA,EAAO,MAAO,OAAQA,EAAO,MAAO,CACtD,CACF,CACF,CAEA,MAAM,WAAWA,EAGmB,CAClC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,0BAA0BA,EAAO,UAAU,SAASA,EAAO,MAAM,OACnE,CACF,CACF,ECrFO,IAAMG,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,KAAKC,EAA0D,CACnE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,uBAAwB,CAC1D,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,WAAYA,EAAO,WACnB,UAAWA,EAAO,UAClB,YAAaA,EAAO,YACpB,UAAWA,EAAO,SACpB,CACF,CAAC,CACH,CAEA,MAAM,cACJA,EACgC,CAChC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,yBAA0B,CAC5D,KAAM,CACJ,KAAMA,EAAO,KACb,aAAcA,EAAO,aACrB,YAAaA,EAAO,YACpB,MAAOA,EAAO,MACd,gBAAiBA,EAAO,eAC1B,CACF,CAAC,CACH,CAEA,MAAM,SACJA,EACkC,CAClC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,2BAA4B,CAC9D,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,MAAOA,EAAO,MACd,UAAWA,EAAO,SACpB,CACF,CAAC,CACH,CACF,ECpDO,IAAMC,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,OAAOC,EAA4C,CACvD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,kBAAmB,CACpD,KAAM,CAAE,KAAMA,EAAO,KAAM,MAAOA,EAAO,KAAM,CACjD,CAAC,CACH,CAEA,MAAM,MAA+C,CACnD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,iBAAiB,CAGtD,CAEA,MAAM,IAAIA,EAA2C,CACnD,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAC9C,OAAO,KAAK,OAAO,SACjB,MACA,mBAAmBC,CAAO,EAC5B,CACF,CAEA,MAAM,OAAOD,EAAwD,CACnE,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAC9C,MAAM,KAAK,OAAO,SAAS,MAAO,mBAAmBC,CAAO,GAAI,CAC9D,KAAM,CAAE,MAAOD,EAAO,KAAM,CAC9B,CAAC,CACH,CAEA,MAAM,OAAOA,EAAyC,CACpD,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAC9C,MAAM,KAAK,OAAO,SAAS,SAAU,mBAAmBC,CAAO,EAAE,CACnE,CACF,ECnCO,IAAMC,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,IAAIC,EAA8C,CACtD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,kBAAmB,CACpD,MAAO,CAAE,KAAMA,EAAO,IAAK,CAC7B,CAAC,CACH,CAEA,MAAM,YAA0C,CAC9C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,wBACF,CACF,CAEA,MAAM,iBAAiBA,EAEe,CACpC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,SAAS,EACnD,OAAO,KAAK,OAAO,SACjB,MACA,0BAA0BC,CAAO,UACnC,CACF,CACF,ECpBO,IAAMC,EAAN,KAAqB,CAC1B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,MAA4C,CAKhD,MAAO,CAAE,QAJI,MAAM,KAAK,OAAO,SAAS,MAAO,iBAAkB,CAC/D,QAAS,KAAK,OAAO,cACrB,OAAQ,EACV,CAAC,GACoB,MAAQ,CAAC,CAAE,CAClC,CAEA,MAAM,QAAQC,EAA6C,CACzD,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EASxCE,GARO,MAAM,KAAK,OAAO,SAC7B,MACA,kBAAkBD,CAAO,GACzB,CACE,QAAS,KAAK,OAAO,cACrB,OAAQ,EACV,CACF,GACgB,OAAO,CAAC,EACxB,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCF,EAAO,IAAI,GAAG,EACtE,OAAOE,CACT,CAEA,MAAM,SAASF,EAA2D,CACxE,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAUxCE,GATO,MAAM,KAAK,OAAO,SAC7B,MACA,kBAAkBD,CAAO,GACzB,CACE,QAAS,KAAK,OAAO,cACrB,OAAQ,GACR,MAAO,CAAE,SAAUD,EAAO,IAAK,CACjC,CACF,GACgB,OAAO,CAAC,EACxB,GAAI,CAACE,EACH,MAAM,IAAI,MACR,uCAAuCF,EAAO,IAAI,WAAWA,EAAO,IAAI,GAC1E,EAEF,OAAOE,CACT,CACF,EC1DO,IAAMC,EAAN,KAAuB,CAC5B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,OAAOC,EAAgD,CAC3D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,2BAA4B,CAC9D,KAAM,CACJ,SAAUA,EAAO,SACjB,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,UAAWA,EAAO,SACpB,CACF,CAAC,CACH,CAEA,MAAM,IAAIA,EAAkD,CAC1D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,+BAAgC,CAClE,KAAM,CAAE,WAAYA,EAAO,UAAW,CACxC,CAAC,CACH,CAEA,MAAM,MAAMA,EAAkD,CAC5D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,iCAAkC,CACpE,KAAM,CAAE,WAAYA,EAAO,UAAW,CACxC,CAAC,CACH,CACF,EC5BO,IAAMC,EAAN,KAAoB,CACzB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,KAAKC,EAAqC,CAC9C,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,gBAAiB,CAClD,KAAM,CACJ,MAAOA,EAAO,MACd,QAASA,EAAO,OAClB,CACF,CAAC,CACH,CACF,ECZO,IAAMC,EAAN,KAAyB,CAC9B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,QAAQC,EAAgD,CAC5D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,qBAAsB,CACvD,MAAO,CACL,IAAKA,EAAO,IACZ,SAAUA,EAAO,SACjB,MAAOA,EAAO,KAChB,CACF,CAAC,CACH,CACF,ECbO,IAAMC,EAAN,KAAmB,CACxB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,IAA2B,CAC/B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,YAAY,CACjD,CACF,ECEO,IAAMC,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,UAAsC,CAC1C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,0BAA0B,CAG/D,CAEA,MAAM,UAAUC,EAA8C,CAC5D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,4BAA6B,CAC9D,MAAO,CAAE,UAAAA,CAAU,CACrB,CAAC,CACH,CAEA,MAAM,OAAOC,EAKe,CAC1B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,yBAA0B,CAC3D,MAAO,CACL,UAAWA,EAAO,UAClB,OAAQA,EAAO,OACf,MAAOA,EAAO,MACd,MAAOA,EAAO,KAChB,CACF,CAAC,CACH,CAEA,MAAM,cAAcD,EAAmD,CACrE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,gCAAiC,CAClE,MAAO,CAAE,UAAAA,CAAU,CACrB,CAAC,CACH,CAEA,MAAM,cAAcC,EAKO,CACzB,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,iCAAkC,CACnE,MAAO,CACL,UAAWA,EAAO,UAClB,UAAWA,EAAO,UAClB,QAASA,EAAO,QAChB,QAASA,EAAO,OAClB,CACF,CAAC,CACH,CAEA,MAAM,WAAsC,CAC1C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,4BACF,CACF,CAEA,MAAM,UAAUA,EAOiB,CAC/B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,4BAA6B,CAC/D,KAAMA,CACR,CAAC,CACH,CAEA,MAAM,YACJC,EACqC,CACrC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,8BAA+B,CACjE,KAAM,CAAE,eAAAA,CAAe,CACzB,CAAC,CACH,CAEA,MAAM,QAAQD,EAMmB,CAC/B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,0BAA2B,CAC7D,KAAMA,CACR,CAAC,CACH,CAEA,MAAM,gBAAgBE,EAAuD,CAC3E,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,6BAA8B,CAC/D,KAAMA,CACR,CAAC,CACH,CACF,EClHO,IAAMC,EAAN,KAAwB,CAC7B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAGpB,MAAM,QAA2C,CAC/C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,OACA,2BACF,CACF,CAGA,MAAM,QAA2C,CAC/C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,2BACF,CACF,CACF,ECnBO,IAAMC,EAAN,KAA4B,CACjC,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAQpB,MAAM,aACJC,EAC2C,CAC3C,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,oBAAoB,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,iBACvG,OAAO,KAAK,OAAO,SAAS,MAAOC,EAAM,CACvC,MAAOC,EAAWF,CAAM,CAC1B,CAAC,CACH,CAOA,MAAM,SACJA,EACuC,CACvC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,gBAAgB,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,iBACnG,OAAO,KAAK,OAAO,SAAS,MAAOC,EAAM,CACvC,MAAOC,EAAWF,CAAM,CAC1B,CAAC,CACH,CACF,EAEA,SAASE,EAAWF,EAAwD,CAC1E,IAAMG,EAA4B,CAAC,EACnC,OAAIH,EAAO,UAASG,EAAE,QAAUH,EAAO,SACnCA,EAAO,SAAQG,EAAE,OAASH,EAAO,QACjCA,EAAO,aAAe,QAAaA,EAAO,WAAa,IACzDG,EAAE,WAAa,OAAOH,EAAO,UAAU,GAErCA,EAAO,QAAU,QAAaA,EAAO,MAAQ,IAC/CG,EAAE,MAAQ,OAAOH,EAAO,KAAK,GAE3BA,EAAO,SAAQG,EAAE,OAASH,EAAO,QAC9BG,CACT,CClCO,IAAMC,EAAN,KAAgC,CACrC,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAOpB,MAAM,kBACJC,EACsC,CACtC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,oBAAoB,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,qBACvG,OAAO,KAAK,OAAO,SACjB,OACAC,CACF,CACF,CAMA,MAAM,oBACJD,EACwC,CACxC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,oBAAoB,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,qBACvG,OAAO,KAAK,OAAO,SACjB,SACAC,CACF,CACF,CAOA,MAAM,KACJD,EAAqC,CAAC,EACC,CACvC,KAAK,OAAO,aAAa,EACzB,IAAME,EAAgC,CAAC,EACvC,OAAIF,EAAO,kBAAoB,SAC7BE,EAAM,gBAAkB,OAAOF,EAAO,eAAe,GAEhD,KAAK,OAAO,SAAS,MAAO,gCAAiC,CAClE,MAAAE,CACF,CAAC,CACH,CACF,ECrDA,IAAMC,EAAmB,8BACZC,EAA0B,kCAa1BC,EAAN,KAAiB,CACb,QACA,cACA,aACA,OAED,IACA,KACA,QACA,SACA,SACA,KACA,QACA,UACA,OACA,YACA,MACA,SACA,WACA,eACA,mBAER,YAAYC,EAA0B,CACpC,KAAK,QAAUA,EAAO,SAAWH,EACjC,KAAK,cAAgBG,EAAO,eAAiBF,EAC7C,KAAK,aAAeE,EAAO,aAC3B,KAAK,OAASA,EAAO,MACvB,CAEA,IAAI,IAAiB,CACnB,OAAQ,KAAK,MAAQ,IAAIC,EAAW,IAAI,CAC1C,CACA,IAAI,KAAmB,CACrB,OAAQ,KAAK,OAAS,IAAIC,EAAY,IAAI,CAC5C,CACA,IAAI,QAAyB,CAC3B,OAAQ,KAAK,UAAY,IAAIC,EAAe,IAAI,CAClD,CACA,IAAI,SAA2B,CAC7B,OAAQ,KAAK,WAAa,IAAIC,EAAgB,IAAI,CACpD,CACA,IAAI,SAA2B,CAC7B,OAAQ,KAAK,WAAa,IAAIC,EAAgB,IAAI,CACpD,CACA,IAAI,KAAuB,CACzB,OAAQ,KAAK,OAAS,IAAIC,EAAgB,IAAI,CAChD,CACA,IAAI,QAAyB,CAC3B,OAAQ,KAAK,UAAY,IAAIC,EAAe,IAAI,CAClD,CACA,IAAI,UAA6B,CAC/B,OAAQ,KAAK,YAAc,IAAIC,EAAiB,IAAI,CACtD,CACA,IAAI,OAAuB,CACzB,OAAQ,KAAK,SAAW,IAAIC,EAAc,IAAI,CAChD,CACA,IAAI,YAAiC,CACnC,OAAQ,KAAK,cAAgB,IAAIC,EAAmB,IAAI,CAC1D,CACA,IAAI,MAAqB,CACvB,OAAQ,KAAK,QAAU,IAAIC,EAAa,IAAI,CAC9C,CACA,IAAI,SAA2B,CAC7B,OAAQ,KAAK,WAAa,IAAIC,EAAgB,IAAI,CACpD,CACA,IAAI,WAA+B,CACjC,OAAQ,KAAK,aAAe,IAAIC,EAAkB,IAAI,CACxD,CACA,IAAI,eAAuC,CACzC,OAAQ,KAAK,iBAAmB,IAAIC,EAAsB,IAAI,CAChE,CACA,IAAI,mBAA+C,CACjD,OAAQ,KAAK,qBAAuB,IAAIC,EAA0B,IAAI,CACxE,CAEA,cAAqB,CACnB,GAAI,CAAC,KAAK,cAAgB,CAAC,KAAK,OAC9B,MAAM,IAAIC,EACR,kBACA,8EACA,GACF,CAEJ,CAEA,MAAM,SACJC,EACAC,EACAC,EACkB,CAElB,IAAIC,EAAM,GADMD,GAAS,SAAW,KAAK,OACrB,GAAGD,CAAI,GAE3B,GAAIC,GAAS,MAAO,CAClB,IAAME,EAAS,IAAI,gBACnB,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQJ,EAAQ,KAAK,EAC1BI,GAAU,MACnCF,EAAO,IAAIC,EAAK,OAAOC,CAAK,CAAC,EAGjC,IAAMC,EAAKH,EAAO,SAAS,EACvBG,IACFJ,GAAO,IAAII,CAAE,GAEjB,CAEA,IAAMC,EAAkC,CAAC,EACpCN,GAAS,SACR,KAAK,aACPM,EAAQ,mBAAmB,EAAI,KAAK,aAC3B,KAAK,SACdA,EAAQ,gBAAgB,EAAI,KAAK,SAIrC,IAAIC,EACAP,GAAS,UAAY,QACvBM,EAAQ,cAAc,EAAI,2BAC1BC,EAAYP,EAAQ,SACXA,GAAS,OAAS,SAC3BM,EAAQ,cAAc,EAAI,mBAC1BC,EAAY,KAAK,UAAUP,EAAQ,IAAI,GAGzC,IAAIQ,EACJ,GAAI,CACFA,EAAW,MAAM,MAAMP,EAAK,CAC1B,OAAAH,EACA,QAAAQ,EACA,KAAMC,CACR,CAAC,CACH,OAASE,EAAK,CACZ,MAAM,IAAIZ,EACR,gBACAY,aAAe,MAAQA,EAAI,QAAU,yBACrC,CACF,CACF,CAEA,GAAI,CAACD,EAAS,GAAI,CAEhB,IAAME,EAAW,MAAMF,EAAS,KAAK,EAAE,MAAM,IAAM,EAAE,EAErD,IADoBA,EAAS,QAAQ,IAAI,cAAc,GAAK,IAC5C,SAAS,kBAAkB,GAAKE,EAC9C,GAAI,CACF,IAAMC,EAAO,KAAK,MAAMD,CAAQ,EAGhC,GAAIC,EAAK,MACP,MAAM,IAAId,EACRc,EAAK,MAAM,MAAQ,UACnBA,EAAK,MAAM,SAAW,QAAQH,EAAS,MAAM,GAC7CA,EAAS,MACX,CAEJ,OAASI,EAAG,CACV,GAAIA,aAAaf,EAAW,MAAMe,CAEpC,CAEF,MAAM,IAAIf,EACR,UACA,QAAQW,EAAS,MAAM,KAAKE,EAAS,MAAM,EAAG,GAAG,CAAC,GAClDF,EAAS,MACX,CACF,CAGA,GAAIA,EAAS,SAAW,IACtB,OAGF,IAAMK,EAAcL,EAAS,QAAQ,IAAI,cAAc,GAAK,GAC5D,OACEK,EAAY,SAAS,0BAA0B,GAC/CA,EAAY,SAAS,QAAQ,EAEtBL,EAAS,YAAY,EAGvBA,EAAS,KAAK,CACvB,CACF,ECnNO,IAAMM,EAC0B","names":["browser_exports","__export","AlvaClient","AlvaError","VERSION","AlvaError","code","message","status","FsResource","client","params","result","text","RunResource","client","params","DeployResource","client","params","id","body","ReleaseResource","client","params","SecretsResource","client","params","encoded","SdkDocsResource","client","params","encoded","SkillsResource","client","params","encoded","doc","CommentsResource","client","params","RemixResource","client","params","ScreenshotResource","client","params","UserResource","client","TradingResource","client","accountId","params","subscriptionId","rules","ArraysJwtResource","client","NotificationsResource","client","params","path","buildQuery","q","PushSubscriptionsResource","client","params","path","query","DEFAULT_BASE_URL","DEFAULT_ARRAYS_BASE_URL","AlvaClient","config","FsResource","RunResource","DeployResource","ReleaseResource","SecretsResource","SdkDocsResource","SkillsResource","CommentsResource","RemixResource","ScreenshotResource","UserResource","TradingResource","ArraysJwtResource","NotificationsResource","PushSubscriptionsResource","AlvaError","method","path","options","url","params","key","value","qs","headers","fetchBody","response","err","bodyText","data","e","contentType","VERSION"]}
package/dist/cli.js CHANGED
@@ -252,7 +252,8 @@ var ReleaseResource = class {
252
252
  version: params.version,
253
253
  cronjob_id: params.cronjob_id,
254
254
  view_json: params.view_json,
255
- description: params.description
255
+ description: params.description,
256
+ changelog: params.changelog
256
257
  }
257
258
  });
258
259
  }
@@ -264,8 +265,7 @@ var ReleaseResource = class {
264
265
  display_name: params.display_name,
265
266
  description: params.description,
266
267
  feeds: params.feeds,
267
- trading_symbols: params.trading_symbols,
268
- changelog: params.changelog
268
+ trading_symbols: params.trading_symbols
269
269
  }
270
270
  });
271
271
  }
@@ -577,6 +577,100 @@ var ArraysJwtResource = class {
577
577
  }
578
578
  };
579
579
 
580
+ // src/resources/notifications.ts
581
+ var NotificationsResource = class {
582
+ constructor(client) {
583
+ this.client = client;
584
+ }
585
+ client;
586
+ /**
587
+ * List the caller's notification history for one playbook
588
+ * `(username, name)`. Returns `NOT_FOUND` when the playbook is
589
+ * private or does not exist (the two cases are deliberately
590
+ * indistinguishable to prevent namespace enumeration).
591
+ */
592
+ async listPlaybook(params) {
593
+ this.client._requireAuth();
594
+ const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;
595
+ return this.client._request("GET", path, {
596
+ query: buildQuery(params)
597
+ });
598
+ }
599
+ /**
600
+ * List the caller's notification history for one feed
601
+ * `(username, name)`. Authorization is alfs read on
602
+ * `/alva/home/<username>/feeds/<name>`.
603
+ */
604
+ async listFeed(params) {
605
+ this.client._requireAuth();
606
+ const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;
607
+ return this.client._request("GET", path, {
608
+ query: buildQuery(params)
609
+ });
610
+ }
611
+ };
612
+ function buildQuery(params) {
613
+ const q = {};
614
+ if (params.channel) q.channel = params.channel;
615
+ if (params.status) q.status = params.status;
616
+ if (params.since_time !== void 0 && params.since_time > 0) {
617
+ q.since_time = String(params.since_time);
618
+ }
619
+ if (params.first !== void 0 && params.first > 0) {
620
+ q.first = String(params.first);
621
+ }
622
+ if (params.cursor) q.cursor = params.cursor;
623
+ return q;
624
+ }
625
+
626
+ // src/resources/pushSubscriptions.ts
627
+ var PushSubscriptionsResource = class {
628
+ constructor(client) {
629
+ this.client = client;
630
+ }
631
+ client;
632
+ /**
633
+ * Opt into personal push for one playbook `(username, name)`.
634
+ * Idempotent. Auth: callers must be able to read the playbook
635
+ * (public/paid pass; private requires explicit alfs grant).
636
+ */
637
+ async subscribePlaybook(params) {
638
+ this.client._requireAuth();
639
+ const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;
640
+ return this.client._request(
641
+ "POST",
642
+ path
643
+ );
644
+ }
645
+ /**
646
+ * Soft-disable personal push for one playbook `(username, name)`.
647
+ * Does NOT remove any social follow. Idempotent.
648
+ */
649
+ async unsubscribePlaybook(params) {
650
+ this.client._requireAuth();
651
+ const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;
652
+ return this.client._request(
653
+ "DELETE",
654
+ path
655
+ );
656
+ }
657
+ /**
658
+ * List the caller's personal push subscriptions across all targets.
659
+ * Defaults to currently-active rows only; pass `include_history=true`
660
+ * to also return previously-unsubscribed rows.
661
+ */
662
+ async list(params = {}) {
663
+ this.client._requireAuth();
664
+ const query = {};
665
+ if (params.include_history !== void 0) {
666
+ query.include_history = String(params.include_history);
667
+ }
668
+ return this.client._request("GET", "/api/v1/me/push-subscriptions", {
669
+ query
670
+ });
671
+ }
672
+ };
673
+
580
674
  // src/client.ts
581
675
  var DEFAULT_BASE_URL = "https://api-llm.prd.alva.ai";
582
676
  var DEFAULT_ARRAYS_BASE_URL = "https://data-tools.prd.space.id";
@@ -598,6 +692,8 @@ var AlvaClient = class {
598
692
  _user;
599
693
  _trading;
600
694
  _arraysJwt;
695
+ _notifications;
696
+ _pushSubscriptions;
601
697
  constructor(config) {
602
698
  this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
603
699
  this.arraysBaseUrl = config.arraysBaseUrl ?? DEFAULT_ARRAYS_BASE_URL;
@@ -643,6 +739,12 @@ var AlvaClient = class {
643
739
  get arraysJwt() {
644
740
  return this._arraysJwt ??= new ArraysJwtResource(this);
645
741
  }
742
+ get notifications() {
743
+ return this._notifications ??= new NotificationsResource(this);
744
+ }
745
+ get pushSubscriptions() {
746
+ return this._pushSubscriptions ??= new PushSubscriptionsResource(this);
747
+ }
646
748
  _requireAuth() {
647
749
  if (!this.viewer_token && !this.apiKey) {
648
750
  throw new AlvaError(
@@ -1002,7 +1104,7 @@ async function runPostConfigureHooks(client, deps) {
1002
1104
  import * as fs from "fs";
1003
1105
  import * as os2 from "os";
1004
1106
  import * as fsPromises2 from "fs/promises";
1005
- var CLI_VERSION = true ? "0.3.1" : "dev";
1107
+ var CLI_VERSION = true ? "0.4.0" : "dev";
1006
1108
  function isVersionOlderThan(a, b) {
1007
1109
  const parse = (v) => {
1008
1110
  if (!v) return null;
@@ -1312,12 +1414,12 @@ Feed flags:
1312
1414
  --cronjob-id <id> ID of the backing cronjob (required)
1313
1415
  --view-json <json> View configuration JSON
1314
1416
  --description <text> Feed description
1417
+ --changelog <text> Per-major changelog summary
1315
1418
 
1316
1419
  Playbook-draft flags:
1317
1420
  --name <name> URL-safe playbook name, unique per user (required)
1318
1421
  --display-name <name> Human-readable title, max 40 chars (required)
1319
1422
  --feeds <json> JSON array of {feed_id, feed_major?} (required)
1320
- --changelog <text> Release changelog
1321
1423
  --description <text> Playbook description
1322
1424
  --trading-symbols <json> JSON array of tickers, e.g. '["BTC","ETH"]' (max 50)
1323
1425
 
@@ -1336,7 +1438,7 @@ Display name conventions:
1336
1438
  Examples:
1337
1439
  alva release feed --name btc-ema --version 1.0.0 --cronjob-id 42
1338
1440
  alva release feed --name nvda-insiders --version 1.0.0 --cronjob-id 43 --description "NVDA insider trading activity"
1339
- alva release playbook-draft --name btc-dashboard --display-name "BTC Trend Dashboard" --feeds '[{"feed_id":100}]' --changelog "Initial release" --trading-symbols '["BTC"]'
1441
+ alva release playbook-draft --name btc-dashboard --display-name "BTC Trend Dashboard" --feeds '[{"feed_id":100}]' --trading-symbols '["BTC"]'
1340
1442
  alva release playbook --name btc-dashboard --version v1.0.0 --feeds '[{"feed_id":100}]' --changelog "Initial release"`,
1341
1443
  secrets: `Usage: alva secrets <subcommand> [options]
1342
1444
 
@@ -1877,7 +1979,8 @@ async function dispatch(client, args, meta) {
1877
1979
  version: requireFlag(flags, "version", "release feed"),
1878
1980
  cronjob_id: requireNumericFlag(flags, "cronjob-id", "release feed"),
1879
1981
  view_json: jsonParse(flags["view-json"]),
1880
- description: flags["description"]
1982
+ description: flags["description"],
1983
+ changelog: flags["changelog"]
1881
1984
  });
1882
1985
  case "playbook-draft":
1883
1986
  return client.release.playbookDraft({
@@ -1891,8 +1994,7 @@ async function dispatch(client, args, meta) {
1891
1994
  feeds: jsonParse(
1892
1995
  requireFlag(flags, "feeds", "release playbook-draft")
1893
1996
  ),
1894
- trading_symbols: flags["trading-symbols"] ? jsonParse(flags["trading-symbols"]) : void 0,
1895
- changelog: flags["changelog"]
1997
+ trading_symbols: flags["trading-symbols"] ? jsonParse(flags["trading-symbols"]) : void 0
1896
1998
  });
1897
1999
  case "playbook":
1898
2000
  return client.release.playbook({