quote0 1.0.0-alpha.1 → 1.0.0-alpha.3

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.
@@ -3,7 +3,7 @@ interface BaseClientArgs {
3
3
  apiKey: string;
4
4
  }
5
5
  declare class BaseClient {
6
- apiKey: string;
6
+ protected apiKey: string;
7
7
  constructor({
8
8
  apiKey
9
9
  }: BaseClientArgs);
@@ -13,16 +13,20 @@ declare class BaseClient {
13
13
  width: number;
14
14
  height: number;
15
15
  };
16
- readonly display: {
17
- width: number;
18
- height: number;
19
- };
20
16
  protected composeApiUrl(path: string): string;
21
17
  protected fetchApi(path: string, options?: RequestInit): Promise<unknown>;
22
18
  }
23
19
  //#endregion
24
20
  //#region src/api/modules/content.d.ts
25
21
  declare class ContentModule extends BaseClient {
22
+ next({
23
+ deviceId
24
+ }: {
25
+ deviceId: string;
26
+ }): Promise<{
27
+ code: number;
28
+ message: string;
29
+ }>;
26
30
  pushImage({
27
31
  deviceId
28
32
  }: {
@@ -84,6 +88,10 @@ declare class Quote0 extends BaseClient {
84
88
  device: DeviceModule;
85
89
  content: ContentModule;
86
90
  constructor(args: BaseClientArgs);
91
+ readonly display: {
92
+ width: number;
93
+ height: number;
94
+ };
87
95
  }
88
96
  //#endregion
89
97
  export { Quote0 as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/api/base.ts","../../src/api/modules/content.ts","../../src/api/modules/device.ts","../../src/api/index.ts"],"mappings":";UAAiB,cAAA;EACf,MAAA;AAAA;AAAA,cAGI,UAAA;EACJ,MAAA;;IACc;EAAA,GAAU,cAAA;EAAA,gBAIR,YAAA;EAAA,mBACG,WAAA;EAAA,gBAEH,OAAA;;;;WACP,OAAA;;;;YAEC,aAAA,CAAc,IAAA;EAAA,UAMR,QAAA,CAAS,IAAA,UAAc,OAAA,GAAU,WAAA,GAAW,OAAA;AAAA;;;cCpBxD,aAAA,SAAsB,UAAA;EACpB,SAAA,CAAA;IACF;EAAA;IAAc,QAAA;EAAA,GAChB,OAAA;IACE,UAAA;IACA,KAAA;IACA,IAAA;IACA,MAAA;IACA,UAAA;IACA,YAAA;IAWA,OAAA;EAAA,IACD,OAAA;;;;;;;cCrBC,YAAA,SAAqB,UAAA;EACnB,IAAA,CAAA,GAAI,OAAA;;;;;;EAWJ,MAAA,CAAA;IAAS;EAAA;IAAc,QAAA;EAAA,IAAkB,OAAA;;;;;MAQzC,OAAA;MACA,OAAA;MACA,WAAA;MACA,OAAA;MACA,IAAA;IAAA;;MAGA,IAAA;MACA,OAAA;QACE,OAAA;QACA,MAAA;QACA,KAAA;MAAA;MAEF,IAAA;QACE,OAAA;QACA,KAAA;MAAA;IAAA;EAAA;AAAA;;;cCjCJ,MAAA,SAAe,UAAA;EACnB,MAAA,EAAQ,YAAA;EACR,OAAA,EAAS,aAAA;cAEG,IAAA,EAAM,cAAA;AAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/api/base.ts","../../src/api/modules/content.ts","../../src/api/modules/device.ts","../../src/api/index.ts"],"mappings":";UAAiB,cAAA;EACf,MAAA;AAAA;AAAA,cAGI,UAAA;EAAA,UACM,MAAA;;IACI;EAAA,GAAU,cAAA;EAAA,gBAIR,YAAA;EAAA,mBACG,WAAA;EAAA,gBAEH,OAAA;;;;YAEN,aAAA,CAAc,IAAA;EAAA,UAMR,QAAA,CAAS,IAAA,UAAc,OAAA,GAAU,WAAA,GAAW,OAAA;AAAA;;;cCnBxD,aAAA,SAAsB,UAAA;EACpB,IAAA,CAAA;IAAO;EAAA;IAAc,QAAA;EAAA,IAAkB,OAAA;;;;EAWvC,SAAA,CAAA;IACF;EAAA;IAAc,QAAA;EAAA,GAChB,OAAA;IACE,UAAA;IACA,KAAA;IACA,IAAA;IACA,MAAA;IACA,UAAA;IACA,YAAA;IAWA,OAAA;EAAA,IACD,OAAA;;;;;;;cChCC,YAAA,SAAqB,UAAA;EACnB,IAAA,CAAA,GAAI,OAAA;;;;;;EAWJ,MAAA,CAAA;IAAS;EAAA;IAAc,QAAA;EAAA,IAAkB,OAAA;;;;;MAQzC,OAAA;MACA,OAAA;MACA,WAAA;MACA,OAAA;MACA,IAAA;IAAA;;MAGA,IAAA;MACA,OAAA;QACE,OAAA;QACA,MAAA;QACA,KAAA;MAAA;MAEF,IAAA;QACE,OAAA;QACA,KAAA;MAAA;IAAA;EAAA;AAAA;;;cCjCJ,MAAA,SAAe,UAAA;EACnB,MAAA,EAAQ,YAAA;EACR,OAAA,EAAS,aAAA;cAEG,IAAA,EAAM,cAAA;EAAA,SAOT,OAAA"}
@@ -1,2 +1,2 @@
1
- import{n as e,r as t,t as n}from"../device-DeH9R_WK.mjs";var r=class extends t{device;content;constructor(t){super(t),this.device=new n(t),this.content=new e(t)}};export{r as default};
1
+ import{n as e,r as t,t as n}from"../device-CSVHxulH.mjs";var r=class extends t{device;content;constructor(t){super(t),this.device=new n(t),this.content=new e(t)}display=t.DISPLAY};export{r as default};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/api/index.ts"],"sourcesContent":["import BaseClient, { type BaseClientArgs } from './base'\nimport ContentModule from './modules/content'\nimport DeviceModule from './modules/device'\n\nclass Quote0 extends BaseClient {\n device: DeviceModule\n content: ContentModule\n\n constructor(args: BaseClientArgs) {\n super(args)\n\n this.device = new DeviceModule(args)\n this.content = new ContentModule(args)\n }\n}\n\nexport default Quote0\n"],"mappings":"yDAIA,IAAM,EAAN,cAAqB,CAAW,CAC9B,OACA,QAEA,YAAY,EAAsB,CAChC,MAAM,EAAK,CAEX,KAAK,OAAS,IAAI,EAAa,EAAK,CACpC,KAAK,QAAU,IAAI,EAAc,EAAK"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/api/index.ts"],"sourcesContent":["import BaseClient, { type BaseClientArgs } from './base'\nimport ContentModule from './modules/content'\nimport DeviceModule from './modules/device'\n\nclass Quote0 extends BaseClient {\n device: DeviceModule\n content: ContentModule\n\n constructor(args: BaseClientArgs) {\n super(args)\n\n this.device = new DeviceModule(args)\n this.content = new ContentModule(args)\n }\n\n readonly display = BaseClient.DISPLAY\n}\n\nexport default Quote0\n"],"mappings":"yDAIA,IAAM,EAAN,cAAqB,CAAW,CAC9B,OACA,QAEA,YAAY,EAAsB,CAChC,MAAM,EAAK,CAEX,KAAK,OAAS,IAAI,EAAa,EAAK,CACpC,KAAK,QAAU,IAAI,EAAc,EAAK,CAGxC,QAAmB,EAAW"}
@@ -0,0 +1,2 @@
1
+ var e=class e{apiKey;constructor({apiKey:e}){this.apiKey=e}static API_ENDPOINT=`https://dot.mindreset.tech/api`;apiEndpoint=e.API_ENDPOINT;static DISPLAY={width:296,height:152};composeApiUrl(e){return e.startsWith(`/`)?this.apiEndpoint+e:this.apiEndpoint+`/`+e}async fetchApi(e,t){let n=this.composeApiUrl(e),r=Object.assign({method:`GET`,headers:{"Content-Type":`application/json`,Authorization:`Bearer `+this.apiKey}},t??{});try{let e=await fetch(n,r);if(e.ok)return await e.json();throw Error(`API request failed with status ${e.status}: ${e.statusText}`)}catch(e){throw e}}},t=class extends e{async next({deviceId:e}){return await this.fetchApi(`/authV2/open/device/${e}/next`,{method:`POST`})}async pushImage({deviceId:e},t){return await this.fetchApi(`/authV2/open/device/${e}/image`,{method:`POST`,body:JSON.stringify(t)})}},n=class extends e{async list(){return await this.fetchApi(`/authV2/open/devices`)}async status({deviceId:e}){return await this.fetchApi(`/authV2/open/device/${e}/status`)}};export{t as n,e as r,n as t};
2
+ //# sourceMappingURL=device-CSVHxulH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-CSVHxulH.mjs","names":[],"sources":["../src/api/base.ts","../src/api/modules/content.ts","../src/api/modules/device.ts"],"sourcesContent":["export interface BaseClientArgs {\n apiKey: string\n}\n\nclass BaseClient {\n protected apiKey: string\n constructor({ apiKey }: BaseClientArgs) {\n this.apiKey = apiKey\n }\n\n static readonly API_ENDPOINT = 'https://dot.mindreset.tech/api'\n protected readonly apiEndpoint = BaseClient.API_ENDPOINT\n\n static readonly DISPLAY = { width: 296, height: 152 }\n\n protected composeApiUrl(path: string) {\n return path.startsWith('/')\n ? this.apiEndpoint + path\n : this.apiEndpoint + '/' + path\n }\n\n protected async fetchApi(path: string, options?: RequestInit) {\n const url = this.composeApiUrl(path)\n const mergedOptions = Object.assign(\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + this.apiKey,\n },\n },\n options ?? {},\n )\n\n try {\n const response = await fetch(url, mergedOptions)\n\n if (response.ok) {\n return await response.json()\n } else {\n throw new Error(\n `API request failed with status ${response.status}: ${response.statusText}`,\n )\n }\n } catch (error) {\n throw error\n }\n }\n}\n\nexport default BaseClient\n","import BaseClient from '../base'\n\nclass ContentModule extends BaseClient {\n async next({ deviceId }: { deviceId: string }) {\n const response = (await this.fetchApi(\n `/authV2/open/device/${deviceId}/next`,\n {\n method: 'POST',\n },\n )) as { code: number; message: string }\n\n return response\n }\n\n async pushImage(\n { deviceId }: { deviceId: string },\n options: {\n refreshNow?: boolean\n image: string\n link?: string\n border?: 0 | 1\n ditherType?: 'DIFFUSION' | 'ORDERED' | 'NONE'\n ditherKernel?:\n | 'THRESHOLD'\n | 'ATKINSON'\n | 'BURKES'\n | 'FLOYD_STEINBERG'\n | 'SIERRA2'\n | 'STUCKI'\n | 'JARVIS_JUDICE_NINKE'\n | 'DIFFUSION_ROW'\n | 'DIFFUSION_COLUMN'\n | 'DIFFUSION_2D'\n taskKey?: string\n },\n ) {\n const response = (await this.fetchApi(\n `/authV2/open/device/${deviceId}/image`,\n { method: 'POST', body: JSON.stringify(options) },\n )) as { code: number; message: string }\n\n return response\n }\n}\n\nexport default ContentModule\n","import BaseClient from '../base'\n\nclass DeviceModule extends BaseClient {\n async list() {\n const response = (await this.fetchApi(`/authV2/open/devices`)) as {\n id: string\n series: string\n model: string\n edition: 1 | 2\n }[]\n\n return response\n }\n\n async status({ deviceId }: { deviceId: string }) {\n const response = (await this.fetchApi(\n `/authV2/open/device/${deviceId}/status`,\n )) as {\n deviceId: string\n alias: string | null\n location: string | null\n status: {\n version: string\n current: string\n description: string\n battery: string\n wifi: string\n }\n renderInfo: {\n last: string\n current: {\n rotated: boolean\n border: number\n image: string[]\n }\n next: {\n battery: string\n power: string\n }\n }\n }\n\n return response\n }\n}\n\nexport default DeviceModule\n"],"mappings":"AAIA,IAAM,EAAN,MAAM,CAAW,CACf,OACA,YAAY,CAAE,UAA0B,CACtC,KAAK,OAAS,EAGhB,OAAgB,aAAe,iCAC/B,YAAiC,EAAW,aAE5C,OAAgB,QAAU,CAAE,MAAO,IAAK,OAAQ,IAAK,CAErD,cAAwB,EAAc,CACpC,OAAO,EAAK,WAAW,IAAI,CACvB,KAAK,YAAc,EACnB,KAAK,YAAc,IAAM,EAG/B,MAAgB,SAAS,EAAc,EAAuB,CAC5D,IAAM,EAAM,KAAK,cAAc,EAAK,CAC9B,EAAgB,OAAO,OAC3B,CACE,OAAQ,MACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAY,KAAK,OACjC,CACF,CACD,GAAW,EAAE,CACd,CAED,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,EAAK,EAAc,CAEhD,GAAI,EAAS,GACX,OAAO,MAAM,EAAS,MAAM,CAE5B,MAAU,MACR,kCAAkC,EAAS,OAAO,IAAI,EAAS,aAChE,OAEI,EAAO,CACd,MAAM,KC3CN,EAAN,cAA4B,CAAW,CACrC,MAAM,KAAK,CAAE,YAAkC,CAQ7C,OAPkB,MAAM,KAAK,SAC3B,uBAAuB,EAAS,OAChC,CACE,OAAQ,OACT,CACF,CAKH,MAAM,UACJ,CAAE,YACF,EAmBA,CAMA,OALkB,MAAM,KAAK,SAC3B,uBAAuB,EAAS,QAChC,CAAE,OAAQ,OAAQ,KAAM,KAAK,UAAU,EAAQ,CAAE,CAClD,GCrCC,EAAN,cAA2B,CAAW,CACpC,MAAM,MAAO,CAQX,OAPkB,MAAM,KAAK,SAAS,uBAAuB,CAU/D,MAAM,OAAO,CAAE,YAAkC,CA4B/C,OA3BkB,MAAM,KAAK,SAC3B,uBAAuB,EAAS,SACjC"}
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import e from"./api/index.mjs";import t from"yargs";import{hideBin as n}from"yargs/helpers";import{Box as r,Text as i,render as a}from"ink";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import l from"react";import{UncontrolledTextInput as u}from"ink-text-input";import d from"conf";import{parse as f,stringify as p}from"yaml";function m({...e}){return s(r,{borderStyle:`round`,flexDirection:`column`,...e})}const h={border:(...e)=>({borderTop:e.includes(`top`),borderRight:e.includes(`right`),borderBottom:e.includes(`bottom`),borderLeft:e.includes(`left`)})};function g({isLast:e,...t}){return s(r,{...e!==!0&&{borderStyle:`single`,borderDimColor:!0,...h.border(`bottom`)},paddingX:1,flexDirection:`column`,...t})}function _({children:e}){let t=l.Children.toArray(e);return s(o,{children:[...t.map((e,n)=>s(g,{isLast:n===t.length-1,children:e}))]})}function v({leading:e,children:t,trailing:n,...a}){return c(r,{justifyContent:`space-between`,...a,children:[c(r,{children:[e&&c(o,{children:[e,s(i,{children:` `})]}),t]}),s(r,{children:n})]})}const y=new d({projectName:`quote0`,fileExtension:`yaml`,serialize:p,deserialize:f}),b=new e({apiKey:y.get(`apiKey`,``)});t(n(process.argv)).scriptName(`quote0`).command(`auth`,`Enter and save API key`,e=>e,async e=>{a(s(()=>{let[e,t]=l.useState(!1);return s(m,{children:c(_,{children:[s(v,{children:s(i,{children:`Authentication`})}),e?s(i,{dimColor:!0,children:`API key saved`}):s(u,{initialValue:y.get(`apiKey`,``),onSubmit:e=>{e.length===0?(y.delete(`apiKey`),t(!0)):(y.set(`apiKey`,e),t(!0))},placeholder:`API key…`,mask:`*`})]})})},{}))}).command(`status`,`Check device status`,e=>e,async e=>{try{let e=await b.device.status({deviceId:`ABCDABCDABCD`});a(s(m,{children:c(_,{children:[s(v,{trailing:c(i,{children:[s(i,{dimColor:!0,children:`Device ID: `}),e.deviceId]}),children:c(r,{gap:1,children:[s(i,{children:e.alias}),s(i,{dimColor:!0,children:e.location}),s(i,{dimColor:!0,children:e.status.battery})]})}),s(r,{flexDirection:`column`,children:[...[[`Status`,e.status.current],[`Last Render`,e.renderInfo.last],[`Next Render (Battery)`,e.renderInfo.next.battery],[`Next Render (Power)`,e.renderInfo.next.power],[`Current Images`,e.renderInfo.current.image.length],[`Version`,c(i,{children:[s(i,{dimColor:!0,children:`v`}),e.status.version]})]].map(([e,t])=>s(v,{trailing:s(i,{children:t}),children:s(i,{dimColor:!0,children:e})}))]})]})}))}catch(e){console.error(e)}}).command(`image`,`Push an image to device`,e=>e,async e=>{a(s(()=>s(m,{children:c(_,{children:[s(v,{children:s(i,{children:`Progress`})}),s(r,{justifyContent:`center`,alignItems:`center`,children:s(i,{dimColor:!0,children:`To be implemented`})})]})}),{}))}).demandCommand(1,`Please specify a command`).parse();export{};
2
+ import e from"./api/index.mjs";import t from"yargs";import{hideBin as n}from"yargs/helpers";import{Box as r,Text as i,render as a}from"ink";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import l from"react";import{UncontrolledTextInput as u}from"ink-text-input";import d from"conf";import{parse as f,stringify as p}from"yaml";function m({...e}){return s(r,{borderStyle:`round`,flexDirection:`column`,...e})}const h={border:(...e)=>({borderTop:e.includes(`top`),borderRight:e.includes(`right`),borderBottom:e.includes(`bottom`),borderLeft:e.includes(`left`)})};function g({isLast:e,...t}){return s(r,{...e!==!0&&{borderStyle:`single`,borderDimColor:!0,...h.border(`bottom`)},paddingX:1,flexDirection:`column`,...t})}function _({children:e}){let t=l.Children.toArray(e);return s(o,{children:[...t.map((e,n)=>s(g,{isLast:n===t.length-1,children:e}))]})}function v({leading:e,children:t,trailing:n,...a}){return c(r,{justifyContent:`space-between`,...a,children:[c(r,{children:[e&&c(o,{children:[e,s(i,{children:` `})]}),t]}),s(r,{children:n})]})}const y=new d({projectName:`quote0`,fileExtension:`yaml`,serialize:p,deserialize:f}),b=new e({apiKey:y.get(`apiKey`,``)});t(n(process.argv)).scriptName(`quote0`).command(`auth`,`Enter and save API key`,e=>e,async e=>{a(s(()=>{let[e,t]=l.useState(!1);return s(m,{children:c(_,{children:[s(v,{children:s(i,{children:`Authentication`})}),e?s(i,{dimColor:!0,children:`API key saved`}):s(u,{initialValue:y.get(`apiKey`,``),onSubmit:e=>{e.length===0?(y.delete(`apiKey`),t(!0)):(y.set(`apiKey`,e),t(!0))},placeholder:`API key…`,mask:`*`})]})})},{}))}).command(`device`,`Manage devices`,e=>e.command(`list`,`List all devices`,e=>e,async e=>{try{let e=await b.device.list();a(s(()=>s(m,{children:c(_,{children:[s(v,{trailing:c(i,{dimColor:!0,children:[e.length,`/`,e.length]}),children:s(i,{children:`Devices`})}),[...e.length===0?[s(v,{children:s(i,{dimColor:!0,children:`No devices found`})})]:e.map(e=>c(r,{flexDirection:`column`,children:[s(v,{trailing:s(i,{children:e.id}),children:s(i,{dimColor:!0,children:`ID`})}),s(v,{trailing:s(i,{children:e.series}),children:s(i,{dimColor:!0,children:`Series`})}),s(v,{trailing:s(i,{children:e.model}),children:s(i,{dimColor:!0,children:`Model`})}),s(v,{trailing:s(i,{children:e.edition}),children:s(i,{dimColor:!0,children:`Edition`})})]}))]]})}),{}))}catch(e){console.error(e)}}).command(`status <device-id>`,`Check device status`,e=>e.positional(`device-id`,{describe:`Device ID to check status for`,type:`string`}),async e=>{try{let t=await b.device.status({deviceId:e.deviceId});a(s(m,{children:c(_,{children:[s(v,{trailing:c(i,{children:[s(i,{dimColor:!0,children:`Device ID: `}),t.deviceId]}),children:c(r,{gap:1,children:[s(i,{children:t.alias}),s(i,{dimColor:!0,children:t.location}),s(i,{dimColor:!0,children:t.status.battery})]})}),s(r,{flexDirection:`column`,children:[...[[`Status`,t.status.current],[`Last Render`,t.renderInfo.last],[`Next Render (Battery)`,t.renderInfo.next.battery],[`Next Render (Power)`,t.renderInfo.next.power],[`Current Images`,t.renderInfo.current.image.length],[`Version`,c(i,{children:[s(i,{dimColor:!0,children:`v`}),t.status.version]})]].map(([e,t])=>s(v,{trailing:s(i,{children:t}),children:s(i,{dimColor:!0,children:e})}))]})]})}))}catch(e){console.error(e)}}),async e=>{}).command(`content`,`Manage content`,e=>e.command(`next <device-id>`,`Switch to next content`,e=>e.positional(`device-id`,{describe:`Device ID to switch content for`,type:`string`}),async e=>{try{let t=await b.content.next({deviceId:e.deviceId});a(s(m,{children:c(_,{children:[s(i,{children:`Next Content`}),s(i,{children:t.message})]})}))}catch(e){console.error(e)}}).command(`image`,`Push an image to device`,e=>e,async e=>{a(s(()=>s(m,{children:c(_,{children:[s(i,{children:`Progress`}),s(i,{dimColor:!0,children:`To be implemented`})]})}),{}))}),async e=>{}).demandCommand(1,`Please specify a command`).strict().parse();export{};
3
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/components/Container.tsx","../src/utils/ink-props-helpers.ts","../src/components/Section.tsx","../src/components/ListItem.tsx","../package.json","../src/config.ts","../src/index.tsx"],"sourcesContent":["import { Box } from 'ink'\nimport type React from 'react'\n\nexport default function Container({\n ...props\n}: React.ComponentProps<typeof Box>) {\n return <Box borderStyle=\"round\" flexDirection=\"column\" {...props} />\n}\n","const inkPropsHelpers = {\n border: (...directions: ('top' | 'right' | 'bottom' | 'left')[]) => {\n return {\n borderTop: directions.includes('top'),\n borderRight: directions.includes('right'),\n borderBottom: directions.includes('bottom'),\n borderLeft: directions.includes('left'),\n }\n },\n}\n\nexport default inkPropsHelpers\n","import { Box } from 'ink'\nimport { inkPropsHelpers } from '../utils'\nimport React from 'react'\n\nfunction Section({\n isLast,\n ...props\n}: React.ComponentProps<typeof Box> & { isLast?: boolean }) {\n return (\n <Box\n {...(isLast !== true && {\n borderStyle: 'single',\n borderDimColor: true,\n ...inkPropsHelpers.border('bottom'),\n })}\n paddingX={1}\n flexDirection=\"column\"\n {...props}\n />\n )\n}\n\nfunction SectionList({ children }: { children: React.ReactNode }) {\n const arrayChildren = React.Children.toArray(children)\n return (\n <>\n {...arrayChildren.map((child, i) => (\n <Section isLast={i === arrayChildren.length - 1}>{child}</Section>\n ))}\n </>\n )\n}\n\nexport { Section, SectionList }\nexport default Section\n","import { Box, Text } from 'ink'\n\nexport default function ListItem({\n leading,\n children,\n trailing,\n ...props\n}: React.ComponentProps<typeof Box> & {\n leading?: React.ReactNode\n children?: React.ReactNode\n trailing?: React.ReactNode\n}) {\n return (\n <Box justifyContent=\"space-between\" {...props}>\n <Box>\n {leading && (\n <>\n {leading}\n <Text> </Text>\n </>\n )}\n {children}\n </Box>\n <Box>{trailing}</Box>\n </Box>\n )\n}\n","","import Conf from 'conf'\nimport { parse, stringify } from 'yaml'\nimport { name } from '../package.json'\n\nconst config = new Conf({\n projectName: name,\n fileExtension: 'yaml',\n serialize: stringify,\n deserialize: parse,\n})\n\nexport default config\n","#!/usr/bin/env node\n\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\nimport { Box, render, Text } from 'ink'\nimport Quote0 from './api'\nimport Container from './components/Container'\nimport { SectionList } from './components/Section'\nimport ListItem from './components/ListItem'\nimport { UncontrolledTextInput } from 'ink-text-input'\nimport config from './config'\nimport React from 'react'\n\nconst quote0 = new Quote0({\n apiKey: config.get('apiKey', ''),\n})\n\nyargs(hideBin(process.argv))\n .scriptName('quote0')\n .command(\n 'auth',\n 'Enter and save API key',\n yargs => yargs,\n async argv => {\n const Main = () => {\n const [submitted, setSubmitted] = React.useState(false)\n\n return (\n <Container>\n <SectionList>\n <ListItem>\n <Text>Authentication</Text>\n </ListItem>\n {!submitted ? (\n <UncontrolledTextInput\n initialValue={config.get('apiKey', '')}\n onSubmit={v => {\n if (v.length === 0) {\n config.delete('apiKey')\n setSubmitted(true)\n } else {\n config.set('apiKey', v)\n setSubmitted(true)\n }\n }}\n placeholder=\"API key…\"\n mask=\"*\"\n />\n ) : (\n <Text dimColor>API key saved</Text>\n )}\n </SectionList>\n </Container>\n )\n }\n\n render(<Main />)\n },\n )\n .command(\n 'status',\n 'Check device status',\n yargs => yargs,\n async argv => {\n try {\n const response = await quote0.device.status({\n deviceId: 'ABCDABCDABCD',\n })\n\n render(\n <Container>\n <SectionList>\n <ListItem\n trailing={\n <Text>\n <Text dimColor>Device ID: </Text>\n {response.deviceId}\n </Text>\n }\n >\n <Box gap={1}>\n <Text>{response.alias}</Text>\n <Text dimColor>{response.location}</Text>\n <Text dimColor>{response.status.battery}</Text>\n </Box>\n </ListItem>\n <Box flexDirection=\"column\">\n {...[\n ['Status', response.status.current],\n ['Last Render', response.renderInfo.last],\n ['Next Render (Battery)', response.renderInfo.next.battery],\n ['Next Render (Power)', response.renderInfo.next.power],\n ['Current Images', response.renderInfo.current.image.length],\n [\n 'Version',\n <Text>\n <Text dimColor>v</Text>\n {response.status.version}\n </Text>,\n ],\n ].map(([k, v]) => (\n <ListItem trailing={<Text>{v}</Text>}>\n <Text dimColor>{k}</Text>\n </ListItem>\n ))}\n </Box>\n </SectionList>\n </Container>,\n )\n } catch (error) {\n console.error(error)\n }\n },\n )\n .command(\n 'image',\n 'Push an image to device',\n yargs => yargs,\n async argv => {\n const Main = () => {\n return (\n <Container>\n <SectionList>\n <ListItem>\n <Text>Progress</Text>\n </ListItem>\n <Box justifyContent=\"center\" alignItems=\"center\">\n <Text dimColor>To be implemented</Text>\n </Box>\n </SectionList>\n </Container>\n )\n }\n\n render(<Main />)\n },\n )\n .demandCommand(1, 'Please specify a command')\n .parse()\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/components/Container.tsx","../src/utils/ink-props-helpers.ts","../src/components/Section.tsx","../src/components/ListItem.tsx","../package.json","../src/config.ts","../src/index.tsx"],"sourcesContent":["import { Box } from 'ink'\nimport type React from 'react'\n\nexport default function Container({\n ...props\n}: React.ComponentProps<typeof Box>) {\n return <Box borderStyle=\"round\" flexDirection=\"column\" {...props} />\n}\n","const inkPropsHelpers = {\n border: (...directions: ('top' | 'right' | 'bottom' | 'left')[]) => {\n return {\n borderTop: directions.includes('top'),\n borderRight: directions.includes('right'),\n borderBottom: directions.includes('bottom'),\n borderLeft: directions.includes('left'),\n }\n },\n}\n\nexport default inkPropsHelpers\n","import { Box } from 'ink'\nimport { inkPropsHelpers } from '../utils'\nimport React from 'react'\n\nfunction Section({\n isLast,\n ...props\n}: React.ComponentProps<typeof Box> & { isLast?: boolean }) {\n return (\n <Box\n {...(isLast !== true && {\n borderStyle: 'single',\n borderDimColor: true,\n ...inkPropsHelpers.border('bottom'),\n })}\n paddingX={1}\n flexDirection=\"column\"\n {...props}\n />\n )\n}\n\nfunction SectionList({ children }: { children: React.ReactNode }) {\n const arrayChildren = React.Children.toArray(children)\n return (\n <>\n {...arrayChildren.map((child, i) => (\n <Section isLast={i === arrayChildren.length - 1}>{child}</Section>\n ))}\n </>\n )\n}\n\nexport { Section, SectionList }\nexport default Section\n","import { Box, Text } from 'ink'\n\nexport default function ListItem({\n leading,\n children,\n trailing,\n ...props\n}: React.ComponentProps<typeof Box> & {\n leading?: React.ReactNode\n children?: React.ReactNode\n trailing?: React.ReactNode\n}) {\n return (\n <Box justifyContent=\"space-between\" {...props}>\n <Box>\n {leading && (\n <>\n {leading}\n <Text> </Text>\n </>\n )}\n {children}\n </Box>\n <Box>{trailing}</Box>\n </Box>\n )\n}\n","","import Conf from 'conf'\nimport { parse, stringify } from 'yaml'\nimport { name } from '../package.json'\n\nconst config = new Conf({\n projectName: name,\n fileExtension: 'yaml',\n serialize: stringify,\n deserialize: parse,\n})\n\nexport default config\n","#!/usr/bin/env node\n\nimport yargs from 'yargs'\nimport { hideBin } from 'yargs/helpers'\nimport { Box, render, Text } from 'ink'\nimport Quote0 from './api'\nimport Container from './components/Container'\nimport { SectionList } from './components/Section'\nimport ListItem from './components/ListItem'\nimport { UncontrolledTextInput } from 'ink-text-input'\nimport config from './config'\nimport React from 'react'\n\nconst quote0 = new Quote0({\n apiKey: config.get('apiKey', ''),\n})\n\nyargs(hideBin(process.argv))\n .scriptName('quote0')\n .command(\n 'auth',\n 'Enter and save API key',\n yargs => yargs,\n async argv => {\n const Main = () => {\n const [submitted, setSubmitted] = React.useState(false)\n\n return (\n <Container>\n <SectionList>\n <ListItem>\n <Text>Authentication</Text>\n </ListItem>\n {!submitted ? (\n <UncontrolledTextInput\n initialValue={config.get('apiKey', '')}\n onSubmit={v => {\n if (v.length === 0) {\n config.delete('apiKey')\n setSubmitted(true)\n } else {\n config.set('apiKey', v)\n setSubmitted(true)\n }\n }}\n placeholder=\"API key…\"\n mask=\"*\"\n />\n ) : (\n <Text dimColor>API key saved</Text>\n )}\n </SectionList>\n </Container>\n )\n }\n\n render(<Main />)\n },\n )\n .command(\n 'device',\n 'Manage devices',\n yargs =>\n yargs\n .command(\n 'list',\n 'List all devices',\n yargs => yargs,\n async argv => {\n try {\n const devices = await quote0.device.list()\n\n const Main = () => (\n <Container>\n <SectionList>\n <ListItem\n trailing={\n <Text dimColor>\n {devices.length}/{devices.length}\n </Text>\n }\n >\n <Text>Devices</Text>\n </ListItem>\n {...devices.length === 0\n ? [\n <ListItem>\n <Text dimColor>No devices found</Text>\n </ListItem>,\n ]\n : devices.map(device => (\n <Box flexDirection=\"column\">\n <ListItem trailing={<Text>{device.id}</Text>}>\n <Text dimColor>ID</Text>\n </ListItem>\n <ListItem trailing={<Text>{device.series}</Text>}>\n <Text dimColor>Series</Text>\n </ListItem>\n <ListItem trailing={<Text>{device.model}</Text>}>\n <Text dimColor>Model</Text>\n </ListItem>\n <ListItem trailing={<Text>{device.edition}</Text>}>\n <Text dimColor>Edition</Text>\n </ListItem>\n </Box>\n ))}\n </SectionList>\n </Container>\n )\n\n render(<Main />)\n } catch (error) {\n console.error(error)\n }\n },\n )\n .command(\n 'status <device-id>',\n 'Check device status',\n yargs =>\n yargs.positional('device-id', {\n describe: 'Device ID to check status for',\n type: 'string',\n }),\n async argv => {\n try {\n const response = await quote0.device.status({\n deviceId: argv.deviceId!,\n })\n\n render(\n <Container>\n <SectionList>\n <ListItem\n trailing={\n <Text>\n <Text dimColor>Device ID: </Text>\n {response.deviceId}\n </Text>\n }\n >\n <Box gap={1}>\n <Text>{response.alias}</Text>\n <Text dimColor>{response.location}</Text>\n <Text dimColor>{response.status.battery}</Text>\n </Box>\n </ListItem>\n <Box flexDirection=\"column\">\n {...[\n ['Status', response.status.current],\n ['Last Render', response.renderInfo.last],\n [\n 'Next Render (Battery)',\n response.renderInfo.next.battery,\n ],\n ['Next Render (Power)', response.renderInfo.next.power],\n [\n 'Current Images',\n response.renderInfo.current.image.length,\n ],\n [\n 'Version',\n <Text>\n <Text dimColor>v</Text>\n {response.status.version}\n </Text>,\n ],\n ].map(([k, v]) => (\n <ListItem trailing={<Text>{v}</Text>}>\n <Text dimColor>{k}</Text>\n </ListItem>\n ))}\n </Box>\n </SectionList>\n </Container>,\n )\n } catch (error) {\n console.error(error)\n }\n },\n ),\n async argv => {},\n )\n .command(\n 'content',\n 'Manage content',\n yargs =>\n yargs\n .command(\n 'next <device-id>',\n 'Switch to next content',\n yargs =>\n yargs.positional('device-id', {\n describe: 'Device ID to switch content for',\n type: 'string',\n }),\n async argv => {\n try {\n const response = await quote0.content.next({\n deviceId: argv.deviceId!,\n })\n\n render(\n <Container>\n <SectionList>\n <Text>Next Content</Text>\n <Text>{response.message}</Text>\n </SectionList>\n </Container>,\n )\n } catch (error) {\n console.error(error)\n }\n },\n )\n .command(\n 'image',\n 'Push an image to device',\n yargs => yargs,\n async argv => {\n const Main = () => {\n return (\n <Container>\n <SectionList>\n <Text>Progress</Text>\n <Text dimColor>To be implemented</Text>\n </SectionList>\n </Container>\n )\n }\n\n render(<Main />)\n },\n ),\n async argv => {},\n )\n .demandCommand(1, 'Please specify a command')\n .strict()\n .parse()\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quote0",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.3",
4
4
  "description": "TypeScript SDK and CLI for Quote/0.",
5
5
  "type": "module",
6
6
  "main": "dist/api/index.mjs",
@@ -1,2 +0,0 @@
1
- var e=class e{apiKey;constructor({apiKey:e}){this.apiKey=e}static API_ENDPOINT=`https://dot.mindreset.tech/api`;apiEndpoint=e.API_ENDPOINT;static DISPLAY={width:296,height:152};display=e.DISPLAY;composeApiUrl(e){return e.startsWith(`/`)?this.apiEndpoint+e:this.apiEndpoint+`/`+e}async fetchApi(e,t){let n=this.composeApiUrl(e),r=Object.assign({method:`GET`,headers:{"Content-Type":`application/json`,Authorization:`Bearer `+this.apiKey}},t??{});try{let e=await fetch(n,r);if(e.ok)return await e.json();throw Error(`API request failed with status ${e.status}: ${e.statusText}`)}catch(e){throw e}}},t=class extends e{async pushImage({deviceId:e},t){return await this.fetchApi(`/authV2/open/device/${e}/image`,{method:`POST`,body:JSON.stringify(t)})}},n=class extends e{async list(){return await this.fetchApi(`/api/authV2/open/devices`)}async status({deviceId:e}){return await this.fetchApi(`/authV2/open/device/${e}/status`)}};export{t as n,e as r,n as t};
2
- //# sourceMappingURL=device-DeH9R_WK.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-DeH9R_WK.mjs","names":[],"sources":["../src/api/base.ts","../src/api/modules/content.ts","../src/api/modules/device.ts"],"sourcesContent":["export interface BaseClientArgs {\n apiKey: string\n}\n\nclass BaseClient {\n apiKey: string\n constructor({ apiKey }: BaseClientArgs) {\n this.apiKey = apiKey\n }\n\n static readonly API_ENDPOINT = 'https://dot.mindreset.tech/api'\n protected readonly apiEndpoint = BaseClient.API_ENDPOINT\n\n static readonly DISPLAY = { width: 296, height: 152 }\n readonly display = BaseClient.DISPLAY\n\n protected composeApiUrl(path: string) {\n return path.startsWith('/')\n ? this.apiEndpoint + path\n : this.apiEndpoint + '/' + path\n }\n\n protected async fetchApi(path: string, options?: RequestInit) {\n const url = this.composeApiUrl(path)\n const mergedOptions = Object.assign(\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + this.apiKey,\n },\n },\n options ?? {},\n )\n\n try {\n const response = await fetch(url, mergedOptions)\n\n if (response.ok) {\n return await response.json()\n } else {\n throw new Error(\n `API request failed with status ${response.status}: ${response.statusText}`,\n )\n }\n } catch (error) {\n throw error\n }\n }\n}\n\nexport default BaseClient\n","import BaseClient from '../base'\n\nclass ContentModule extends BaseClient {\n async pushImage(\n { deviceId }: { deviceId: string },\n options: {\n refreshNow?: boolean\n image: string\n link?: string\n border?: 0 | 1\n ditherType?: 'DIFFUSION' | 'ORDERED' | 'NONE'\n ditherKernel?:\n | 'THRESHOLD'\n | 'ATKINSON'\n | 'BURKES'\n | 'FLOYD_STEINBERG'\n | 'SIERRA2'\n | 'STUCKI'\n | 'JARVIS_JUDICE_NINKE'\n | 'DIFFUSION_ROW'\n | 'DIFFUSION_COLUMN'\n | 'DIFFUSION_2D'\n taskKey?: string\n },\n ) {\n const response = (await this.fetchApi(\n `/authV2/open/device/${deviceId}/image`,\n { method: 'POST', body: JSON.stringify(options) },\n )) as { code: number; message: string }\n\n return response\n }\n}\n\nexport default ContentModule\n","import BaseClient from '../base'\n\nclass DeviceModule extends BaseClient {\n async list() {\n const response = (await this.fetchApi(`/api/authV2/open/devices`)) as {\n id: string\n series: string\n model: string\n edition: 1 | 2\n }[]\n\n return response\n }\n\n async status({ deviceId }: { deviceId: string }) {\n const response = (await this.fetchApi(\n `/authV2/open/device/${deviceId}/status`,\n )) as {\n deviceId: string\n alias: string | null\n location: string | null\n status: {\n version: string\n current: string\n description: string\n battery: string\n wifi: string\n }\n renderInfo: {\n last: string\n current: {\n rotated: boolean\n border: number\n image: string[]\n }\n next: {\n battery: string\n power: string\n }\n }\n }\n\n return response\n }\n}\n\nexport default DeviceModule\n"],"mappings":"AAIA,IAAM,EAAN,MAAM,CAAW,CACf,OACA,YAAY,CAAE,UAA0B,CACtC,KAAK,OAAS,EAGhB,OAAgB,aAAe,iCAC/B,YAAiC,EAAW,aAE5C,OAAgB,QAAU,CAAE,MAAO,IAAK,OAAQ,IAAK,CACrD,QAAmB,EAAW,QAE9B,cAAwB,EAAc,CACpC,OAAO,EAAK,WAAW,IAAI,CACvB,KAAK,YAAc,EACnB,KAAK,YAAc,IAAM,EAG/B,MAAgB,SAAS,EAAc,EAAuB,CAC5D,IAAM,EAAM,KAAK,cAAc,EAAK,CAC9B,EAAgB,OAAO,OAC3B,CACE,OAAQ,MACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAY,KAAK,OACjC,CACF,CACD,GAAW,EAAE,CACd,CAED,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,EAAK,EAAc,CAEhD,GAAI,EAAS,GACX,OAAO,MAAM,EAAS,MAAM,CAE5B,MAAU,MACR,kCAAkC,EAAS,OAAO,IAAI,EAAS,aAChE,OAEI,EAAO,CACd,MAAM,KC5CN,EAAN,cAA4B,CAAW,CACrC,MAAM,UACJ,CAAE,YACF,EAmBA,CAMA,OALkB,MAAM,KAAK,SAC3B,uBAAuB,EAAS,QAChC,CAAE,OAAQ,OAAQ,KAAM,KAAK,UAAU,EAAQ,CAAE,CAClD,GC1BC,EAAN,cAA2B,CAAW,CACpC,MAAM,MAAO,CAQX,OAPkB,MAAM,KAAK,SAAS,2BAA2B,CAUnE,MAAM,OAAO,CAAE,YAAkC,CA4B/C,OA3BkB,MAAM,KAAK,SAC3B,uBAAuB,EAAS,SACjC"}