@ikalogic/at1000 0.1.2 → 0.1.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.
Files changed (123) hide show
  1. package/build/{at1000-BfFhFt1X.d.mts → at1000--0fsMQ83.d.cts} +8 -7
  2. package/build/at1000--0fsMQ83.d.cts.map +1 -0
  3. package/build/{at1000-CVUsyt17.d.cts → at1000-BowpRIxV.d.mts} +8 -7
  4. package/build/at1000-BowpRIxV.d.mts.map +1 -0
  5. package/build/at1000-CYNSd3Yp.cjs +2 -0
  6. package/build/at1000-CYNSd3Yp.cjs.map +1 -0
  7. package/build/at1000-Dm22ae18.mjs +2 -0
  8. package/build/at1000-Dm22ae18.mjs.map +1 -0
  9. package/build/browser.cjs +2 -1
  10. package/build/browser.cjs.map +1 -0
  11. package/build/browser.d.cts +14 -8
  12. package/build/browser.d.cts.map +1 -0
  13. package/build/browser.d.mts +14 -8
  14. package/build/browser.d.mts.map +1 -0
  15. package/build/browser.mjs +2 -1
  16. package/build/browser.mjs.map +1 -0
  17. package/build/{com-BdsqVRMC.mjs → com-9odKA1Fj.mjs} +1 -1
  18. package/build/com-9odKA1Fj.mjs.map +1 -0
  19. package/build/{com-BHaGVMz5.cjs → com-B1QZqhWz.cjs} +1 -1
  20. package/build/com-B1QZqhWz.cjs.map +1 -0
  21. package/build/{com-DkFgtUtq.d.cts → com-BNsFbKeD.d.mts} +20 -13
  22. package/build/{com-DkFgtUtq.d.cts.map → com-BNsFbKeD.d.mts.map} +1 -1
  23. package/build/{com-woRkoeGD.d.mts → com-qCDie6XG.d.cts} +20 -13
  24. package/build/{com-woRkoeGD.d.mts.map → com-qCDie6XG.d.cts.map} +1 -1
  25. package/build/com.cjs +1 -1
  26. package/build/com.d.cts +1 -1
  27. package/build/com.d.mts +1 -1
  28. package/build/com.mjs +1 -1
  29. package/build/{gpio-DSTG-dmv.cjs → gpio-BRimmVQo.cjs} +1 -1
  30. package/build/gpio-BRimmVQo.cjs.map +1 -0
  31. package/build/{gpio-Dw8CAaDH.d.cts → gpio-BVsd0CYe.d.cts} +8 -5
  32. package/build/{gpio-Dw8CAaDH.d.cts.map → gpio-BVsd0CYe.d.cts.map} +1 -1
  33. package/build/{gpio-CxHnpe7Y.mjs → gpio-nD6e5nNZ.mjs} +1 -1
  34. package/build/gpio-nD6e5nNZ.mjs.map +1 -0
  35. package/build/{gpio-iqFA_xSb.d.mts → gpio-xOzaMp-y.d.mts} +8 -5
  36. package/build/{gpio-iqFA_xSb.d.mts.map → gpio-xOzaMp-y.d.mts.map} +1 -1
  37. package/build/gpio.cjs +1 -1
  38. package/build/gpio.d.cts +2 -2
  39. package/build/gpio.d.mts +2 -2
  40. package/build/gpio.mjs +1 -1
  41. package/build/{hmi-BMM-GMeM.d.mts → hmi-BY5MO6bQ.d.cts} +40 -18
  42. package/build/hmi-BY5MO6bQ.d.cts.map +1 -0
  43. package/build/{hmi-Cx7xLvkd.d.cts → hmi-CdttEybP.d.mts} +40 -18
  44. package/build/hmi-CdttEybP.d.mts.map +1 -0
  45. package/build/hmi-DVUFmRMo.cjs +2 -0
  46. package/build/hmi-DVUFmRMo.cjs.map +1 -0
  47. package/build/hmi-dJ8Y4DVD.mjs +2 -0
  48. package/build/hmi-dJ8Y4DVD.mjs.map +1 -0
  49. package/build/hmi.cjs +1 -1
  50. package/build/hmi.d.cts +1 -1
  51. package/build/hmi.d.mts +1 -1
  52. package/build/hmi.mjs +1 -1
  53. package/build/{management-BRYyWntE.mjs → management-CGmaS4-D.mjs} +1 -1
  54. package/build/management-CGmaS4-D.mjs.map +1 -0
  55. package/build/{management-DYOPvugC.d.mts → management-COw5z8sl.d.cts} +2 -1
  56. package/build/management-COw5z8sl.d.cts.map +1 -0
  57. package/build/{management-CecISx9d.d.cts → management-CinGOMF_.d.mts} +2 -1
  58. package/build/management-CinGOMF_.d.mts.map +1 -0
  59. package/build/{management-B758IJfF.cjs → management-PEkkZaQ3.cjs} +1 -1
  60. package/build/management-PEkkZaQ3.cjs.map +1 -0
  61. package/build/management.cjs +1 -1
  62. package/build/management.d.cts +1 -1
  63. package/build/management.d.mts +1 -1
  64. package/build/management.mjs +1 -1
  65. package/build/node.cjs +1 -1
  66. package/build/node.cjs.map +1 -1
  67. package/build/node.d.cts +10 -8
  68. package/build/node.d.cts.map +1 -1
  69. package/build/node.d.mts +9 -8
  70. package/build/node.d.mts.map +1 -1
  71. package/build/node.mjs +1 -1
  72. package/build/node.mjs.map +1 -1
  73. package/build/{power-kf9bMNDS.mjs → power-B1rs9Bqf.mjs} +1 -1
  74. package/build/power-B1rs9Bqf.mjs.map +1 -0
  75. package/build/{power-DtLWOEQI.cjs → power-BpI1_Yav.cjs} +1 -1
  76. package/build/power-BpI1_Yav.cjs.map +1 -0
  77. package/build/{power-OjShJGj_.d.mts → power-Cjtv2FqK.d.mts} +12 -8
  78. package/build/{power-CaK3L5t4.d.cts.map → power-Cjtv2FqK.d.mts.map} +1 -1
  79. package/build/{power-CaK3L5t4.d.cts → power-DmpPdg12.d.cts} +12 -8
  80. package/build/{power-OjShJGj_.d.mts.map → power-DmpPdg12.d.cts.map} +1 -1
  81. package/build/power.cjs +1 -1
  82. package/build/power.d.cts +2 -2
  83. package/build/power.d.mts +2 -2
  84. package/build/power.mjs +1 -1
  85. package/build/{relays-CGntlBiE.d.mts → relays-BR6408vm.d.mts} +3 -1
  86. package/build/relays-BR6408vm.d.mts.map +1 -0
  87. package/build/{relays-Dn_EI0HH.d.cts → relays-CoF1h8ZQ.d.cts} +3 -1
  88. package/build/relays-CoF1h8ZQ.d.cts.map +1 -0
  89. package/build/{relays-8a3YZaV7.cjs → relays-D_kWwwIR.cjs} +1 -1
  90. package/build/relays-D_kWwwIR.cjs.map +1 -0
  91. package/build/{relays-Cwtrx0B-.mjs → relays-I7rKvd13.mjs} +1 -1
  92. package/build/relays-I7rKvd13.mjs.map +1 -0
  93. package/build/relays.cjs +1 -1
  94. package/build/relays.d.cts +1 -1
  95. package/build/relays.d.mts +1 -1
  96. package/build/relays.mjs +1 -1
  97. package/package.json +12 -4
  98. package/build/at1000-BfFhFt1X.d.mts.map +0 -1
  99. package/build/at1000-CVUsyt17.d.cts.map +0 -1
  100. package/build/at1000-CnsQtUcX.mjs +0 -2
  101. package/build/at1000-CnsQtUcX.mjs.map +0 -1
  102. package/build/at1000-DvQtWopt.cjs +0 -2
  103. package/build/at1000-DvQtWopt.cjs.map +0 -1
  104. package/build/com-BHaGVMz5.cjs.map +0 -1
  105. package/build/com-BdsqVRMC.mjs.map +0 -1
  106. package/build/gpio-CxHnpe7Y.mjs.map +0 -1
  107. package/build/gpio-DSTG-dmv.cjs.map +0 -1
  108. package/build/hmi-B04X0czX.mjs +0 -2
  109. package/build/hmi-B04X0czX.mjs.map +0 -1
  110. package/build/hmi-BMM-GMeM.d.mts.map +0 -1
  111. package/build/hmi-Cx7xLvkd.d.cts.map +0 -1
  112. package/build/hmi-DSFhbR-Y.cjs +0 -2
  113. package/build/hmi-DSFhbR-Y.cjs.map +0 -1
  114. package/build/management-B758IJfF.cjs.map +0 -1
  115. package/build/management-BRYyWntE.mjs.map +0 -1
  116. package/build/management-CecISx9d.d.cts.map +0 -1
  117. package/build/management-DYOPvugC.d.mts.map +0 -1
  118. package/build/power-DtLWOEQI.cjs.map +0 -1
  119. package/build/power-kf9bMNDS.mjs.map +0 -1
  120. package/build/relays-8a3YZaV7.cjs.map +0 -1
  121. package/build/relays-CGntlBiE.d.mts.map +0 -1
  122. package/build/relays-Cwtrx0B-.mjs.map +0 -1
  123. package/build/relays-Dn_EI0HH.d.cts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.cts","names":[],"sources":["../src/node.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAGqB,MAAA,SAAe,UAAA;wCACS,QAAQ"}
1
+ {"version":3,"file":"node.d.cts","names":[],"sources":["../src/node.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;cAIa,MAAA,SAAe,UAAA;wCACiB,QAAQ"}
package/build/node.d.mts CHANGED
@@ -1,16 +1,17 @@
1
- import "./com-woRkoeGD.mjs";
1
+ import "./com-BNsFbKeD.mjs";
2
2
  import "./common-ClinPNdn.mjs";
3
- import "./management-DYOPvugC.mjs";
4
- import "./gpio-iqFA_xSb.mjs";
5
- import "./hmi-BMM-GMeM.mjs";
6
- import "./power-OjShJGj_.mjs";
7
- import "./relays-CGntlBiE.mjs";
8
- import { t as AT1000Base } from "./at1000-BfFhFt1X.mjs";
3
+ import "./management-CinGOMF_.mjs";
4
+ import "./gpio-xOzaMp-y.mjs";
5
+ import "./hmi-CdttEybP.mjs";
6
+ import "./power-Cjtv2FqK.mjs";
7
+ import "./relays-BR6408vm.mjs";
8
+ import { t as AT1000Base } from "./at1000-BowpRIxV.mjs";
9
9
 
10
10
  //#region src/node.d.ts
11
+ /** @hideconstructor */
11
12
  declare class AT1000 extends AT1000Base {
12
13
  static findDevices(timeout?: number): Promise<AT1000[]>;
13
14
  }
14
15
  //#endregion
15
- export { AT1000 as default };
16
+ export { AT1000 };
16
17
  //# sourceMappingURL=node.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.mts","names":[],"sources":["../src/node.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAGqB,MAAA,SAAe,UAAA;wCACS,QAAQ"}
1
+ {"version":3,"file":"node.d.mts","names":[],"sources":["../src/node.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;cAIa,MAAA,SAAe,UAAA;wCACiB,QAAQ"}
package/build/node.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import"./com-BdsqVRMC.mjs";import"./common-DSzy5K03.mjs";import"./gpio-CxHnpe7Y.mjs";import"./hmi-B04X0czX.mjs";import"./management-BRYyWntE.mjs";import"./power-kf9bMNDS.mjs";import"./relays-Cwtrx0B-.mjs";import{t as e}from"./at1000-CnsQtUcX.mjs";import t from"dns-packet";import{EventEmitter as n}from"node:events";import r from"node:util";import i from"ip-address";import a from"node:os";import o from"node:dgram";const s=`224.0.0.251`,c=`FF02::FB`,l=5353,u=`IPv4`,d=`IPv6`,f=[u,4,d,6];var p=class e{static getInterfaces(t){return t?e.getInterfacesFromStrings(t):e.getAllInterfaces()}static getAllInterfaces(){let e=[],t=[],n=a.networkInterfaces();for(let[r,i]of Object.entries(n))t.includes(r)||(t.push(r),i?.forEach(t=>{t.internal||!f.includes(t.family)||/^(2002|2001):/gi.exec(t.address)||e.push({name:r,address:t.address,family:t.family})}));if(!e.length)throw Error(`No usable network interfaces returned by OS.`);return e}static getInterfacesFromStrings(t){let n=Array.isArray(t)?t:[t],r=this.getAllInterfaces().filter(t=>n.reduce((n,r)=>n||!!(e.stringMatchesAddress(r,t.address)||t.name===r),!1));if(!r||!r.length)throw Error(`No usable network interfaces returned by OS.`);return r}static stringMatchesAddress(e,t){let n,r;try{n=new i.Address4(e),r=new i.Address4(t)}catch{try{n=new i.Address6(e),r=new i.Address6(t)}catch{return!1}}return n.bigInt()===r.bigInt()}};const m={interfaces:[],reuseAddr:!0,ttl:255,loopback:!0,onMessage:(e,t)=>{console.log(`Message `+e.toString())},socketError:e=>{console.log(`Socket error `+e.message)}};var h=class e{static validateSettings(e){if(!e.multicastAddress)throw Error(`Socket settings require multicastAddress`);if(!e.multicastPort)throw Error(`Socket settings require multicastPort`)}static createMulticastSocket(t){return new Promise((n,r)=>{let a=Object.assign({},m,t);e.validateSettings(a);let s=o.createSocket({type:i.Address4.isValid(a.multicastAddress)?`udp4`:`udp6`,reuseAddr:a.reuseAddr}),c=!1;s.on(`error`,e=>{c?a.socketError(e):(s.close(),n({success:!1,error:e}))}).on(`listening`,()=>{c=!0,s.setMulticastTTL(a.ttl??255),s.setMulticastLoopback(a.loopback??!0);let t=e.addMulticastMemberships(s,a);if(!t.memberships.length){c=!1,s.close(),n({success:!1,error:Error(`No interface memberships for multicast address `+a.multicastAddress)});return}n(Object.assign({success:!0},t,{socket:s}))}).on(`message`,(e,t)=>{a.onMessage(e,t)}),s.bind({port:a.multicastPort,exclusive:!1})})}static addMulticastMemberships(t,n){let r=[],a=[],o=i.Address4.isValid(n.multicastAddress)?[u,4]:[d,6];return n.interfaces.forEach(i=>{if(o.includes(i.family))try{t.addMembership(n.multicastAddress,e.interfaceAddress(i)),r.push(i)}catch{a.push(i)}}),{memberships:r,failedMemberships:a}}static async createSendSocket(t,n,r,i){return new Promise((a,s)=>{let c=o.createSocket({type:[u,4].includes(t.family)?`udp4`:`udp6`,reuseAddr:!!n.reuseAddr});c.once(`error`,e=>{c.close(),a({success:!1,error:Error(e.message)})}).on(`error`,i).on(`listening`,()=>{a({success:!0,iface:t,socket:c,send:c.send.bind(c)})}).on(`message`,(e,n)=>{n.interface=t.name,r(e,n)}).bind(n.srcPort||0,e.interfaceAddress(t))})}static interfaceAddress(e){return`${e.address}${[u,4].includes(e.family)?``:`%`+e.name}`}};const g={reuseAddr:!0,srcPort:0,interfaces:null,ttl:255,loopback:!0,debug:!1};var _=class extends n{Config;ready;receiveSockets;sendSockets;interfaces;destroyed;constructor(e){super(),this.Config=Object.assign({},g,e),this.ready=!1,this.receiveSockets=[],this.sendSockets=[]}async init(){try{this.interfaces=p.getInterfaces(this.Config.interfaces||void 0)}catch(e){throw this.emitError(e),e}return this.emitDebug(`Scanner interfaces: ${r.inspect(this.interfaces)}`),await this.createReceiveSockets(),await this.createSendSockets(),this.receiveSockets.length&&this.sendSockets.length&&(this.ready=!0),this.ready}async createReceiveSockets(){if(!this.interfaces)return[];let e=this.interfaces.filter(e=>[u,4].includes(e.family)),t=this.interfaces.filter(e=>[d,6].includes(e.family));if(this.emitDebug(`Create receive sockets for${e.length?` `+u:``}${e.length&&t.length?` and`:``}${t.length?` `+d:``}`),e.length){let t=await h.createMulticastSocket({multicastAddress:s,multicastPort:l,interfaces:e,onMessage:this.onMessage.bind(this),socketError:this.socketError.bind(this)});t.success?this.receiveSockets.push(t):t.error&&this.emitError(t.error.message)}if(t.length){let e=await h.createMulticastSocket({multicastAddress:c,multicastPort:l,interfaces:t,onMessage:this.onMessage.bind(this),socketError:this.socketError.bind(this)});e.success?this.receiveSockets.push(e):e.error&&this.emitError(e.error.message)}return this.receiveSockets}async createSendSockets(){if(this.interfaces){this.emitDebug(`Create send sockets on ${this.interfaces.length} interfaces/addresses.`);for(let e=0;e<this.interfaces.length;e++){let t=await h.createSendSocket(this.interfaces[e],this.Config,this.onMessage.bind(this),this.socketError.bind(this));t.success?this.sendSockets.push(t):t.error&&this.emitError(t.error.message)}}}onMessage(e,n){let r;try{r=t.decode(e)}catch(e){return this.emitWarn(e)}this.emit(`packet`,r,n)}socketError(e){e.code===`EACCES`||e.code===`EADDRINUSE`||e.code===`EADDRNOTAVAIL`?this.emitError(e):this.emitWarn(e)}query(e,t){let n;if(typeof e==`string`)n=[{name:e,type:t||`ANY`}];else if(Array.isArray(e))n=e;else throw Error(`Query questions must be an array of mDNS query questions.`);let i={type:`query`,questions:n};this.emitDebug(`Send mDNS query: ${r.inspect(i)}`),this.send(i)}send(e){if(this.destroyed)return;let n=t.encode(e);for(let e=0;e<this.sendSockets.length;e++){let t=this.sendSockets[e];t.send&&t.iface&&(t.send(n,0,n.length,l,[u,4].includes(t.iface.family)?s:c+`%`+t.iface.name),this.emitDebug(`Send packet on ${t.iface.address}`))}}destroy(){this.ready=!1,this.sendSockets.forEach(e=>e.socket?.close()),this.sendSockets=[],this.receiveSockets.forEach(e=>e.socket?.close()),this.receiveSockets=[]}emitError(e){this.emit(`error`,e)}emitWarn(e){this.emit(`warn`,e)}emitDebug(e){this.Config.debug&&this.emit(`debug`,e)}};const v={debug:!1};var y=class extends n{Config;scanner;types;namedServices;packetListener;constructor(e,t){super(),this.packetListener=this.onPacket.bind(this),this.scanner=e,this.Config=Object.assign({},v,t),this.types=[],this.namedServices={},this.forwardEvents(this.scanner),this.reset()}reset(){this.removeMDNSListener(this.scanner),this.types=[],this.namedServices={},this.listenMDNSEvents(this.scanner)}forwardEvents(e){e.on(`error`,e=>{this.emitError(e)}).on(`warn`,e=>{this.emitWarn(e)}).on(`debug`,e=>{this.emitDebug(e)})}listenMDNSEvents(e){e.on(`packet`,this.packetListener)}removeMDNSListener(e){e.removeListener(`packet`,this.packetListener)}onPacket(e,t){switch(this.emitDebug(`Received packet type ${e.type} from ${t.address}.`),e.type){case`query`:this.emit(`query`,e,t);break;case`response`:this.emitDebug(`Received response packet from ${t.address} with ${e.answers?e.answers.length:0} answers and ${e.additionals?e.additionals.length:0} additionals.`),e.answers&&this.processAnswers(e.answers,t),e.additionals&&this.processAnswers(e.additionals,t);break}}processAnswers(e,t){this.emitDebug(`Processing answers or additionals...`);let n=this.processSRVAnswers(e);this.processTXTAnswers(e),this.processAAnswers(e),this.processAAAAAnswers(e),this.processPTRAnswers(e,t),n.forEach(e=>{this.emit(`discovered`,{type:`service`,data:this.namedServices[e]})})}processSRVAnswers(e){let t=[];return e.forEach(e=>{if(e.type!==`SRV`)return;this.emitDebug(`Processing SRV answer.`);let n=e.name.toString();t.includes(n)||t.push(n),this.namedServices[n]=this.namedServices[n]||{},this.namedServices[n].service=e,this.namedServices[n].host=e.data.target.toString(),this.namedServices[n].port=e.data.port}),t}processTXTAnswers(e){e.forEach(e=>{if(e.type!==`TXT`)return;this.emitDebug(`Processing TXT answer.`);let t=e.data;if(Array.isArray(t)&&t.length>1){let n=e.name.toString();this.namedServices[n]=this.namedServices[n]||{},this.namedServices[n].txt=this.answerDataToKeyValues(Buffer.concat(t))}else if(Buffer.isBuffer(t)){let n=e.name.toString();this.namedServices[n]=this.namedServices[n]||{},this.namedServices[n].txt=this.answerDataToKeyValues(t)}})}processAAnswers(e){e.forEach(e=>{if(e.type!==`A`)return;this.emitDebug(`Processing A answer.`);let t=e.name.toString(),n=e.data.toString();for(let e in this.namedServices)this.namedServices[e].host===t&&(this.namedServices[e].addresses=this.namedServices[e].addresses||[],this.namedServices[e].addresses.reduce((e,t)=>e||t.address===n,!1)||this.namedServices[e].addresses.push({family:u,address:n}))})}processAAAAAnswers(e){e.forEach(e=>{if(e.type!==`AAAA`)return;this.emitDebug(`Processing AAAA answer.`);let t=e.name.toString(),n=e.data.toString();for(let e in this.namedServices)this.namedServices[e].host===t&&(this.namedServices[e].addresses=this.namedServices[e].addresses||[],this.namedServices[e].addresses.reduce((e,t)=>e||t.address===n,!1)||this.namedServices[e].addresses.push({family:d,address:n}))})}processPTRAnswers(e,t){e.forEach(e=>{if(e.type!==`PTR`)return;this.emitDebug(`Processing PTR answer.`);let n=this.serviceTypeFromPTR(e),r=e.data.toString();n!==r&&(this.namedServices[r]=this.namedServices[r]||{},this.namedServices[r].name=r.replace(`.`+n,``),this.namedServices[r].rinfo=t)})}serviceTypeFromPTR(e){let t=e.data,n=/(?:^|^.+?(?:\.))(_.*)$/gm.exec(t.toString()),r=n?n[1]:t.toString();return this.types.includes(r)||(this.types.push(r),this.emit(`discovered`,{type:`type`,data:r}),this.emitDebug(`Scanning service type ${r}.`),this.scanner.query(r,`ANY`)),r}answerDataToKeyValues(e){let t=[],n={},r=0,i=e[r];for(;i;){let a=e.slice(r+1,r+1+i);t.push(a.toString());let o=/^([^=]+)=([^=]*)$/.exec(a.toString());o&&(n[o[1]]=o[2]),r=r+1+i,i=e[r]}return{strings:t,keyValuePairs:n}}emitError(e){this.emit(`error`,e)}emitWarn(e){this.emit(`warn`,e)}emitDebug(e){this.Config.debug&&this.emit(`debug`,e)}};const b=async(t=500)=>{t<10&&(t=10);let n=new _({debug:!0}),r=new y(n);if(r.on(`error`,e=>{if(!e.includes(`bind ENOENT`))throw Error(e)}),!await n.init())throw Error(`Failed to initialize mDNS scanner`);n.query(`_at1000_server._tcp.local`),await new Promise(e=>setTimeout(e,t));let i=[...new Set(Object.values(r.namedServices).filter(e=>e!==void 0&&e.service!==void 0).filter(e=>e.service.name.endsWith(`_at1000_server._tcp.local`)).map(e=>e.addresses.filter(e=>e.family==`IPv4`).pop()?.address).filter(e=>e!==void 0))].map(t=>e.create(t));return n.destroy(),await Promise.all(i)};var x=class extends e{static findDevices(e=500){return b(e)}};export{x as default};
1
+ import"./com-9odKA1Fj.mjs";import"./common-DSzy5K03.mjs";import"./gpio-nD6e5nNZ.mjs";import"./hmi-dJ8Y4DVD.mjs";import"./management-CGmaS4-D.mjs";import"./power-B1rs9Bqf.mjs";import"./relays-I7rKvd13.mjs";import{t as e}from"./at1000-Dm22ae18.mjs";import t from"dns-packet";import{EventEmitter as n}from"node:events";import r from"node:util";import i from"ip-address";import a from"node:os";import o from"node:dgram";const s=`224.0.0.251`,c=`FF02::FB`,l=5353,u=`IPv4`,d=`IPv6`,f=[u,4,d,6];var p=class e{static getInterfaces(t){return t?e.getInterfacesFromStrings(t):e.getAllInterfaces()}static getAllInterfaces(){let e=[],t=[],n=a.networkInterfaces();for(let[r,i]of Object.entries(n))t.includes(r)||(t.push(r),i?.forEach(t=>{t.internal||!f.includes(t.family)||/^(2002|2001):/gi.exec(t.address)||e.push({name:r,address:t.address,family:t.family})}));if(!e.length)throw Error(`No usable network interfaces returned by OS.`);return e}static getInterfacesFromStrings(t){let n=Array.isArray(t)?t:[t],r=this.getAllInterfaces().filter(t=>n.reduce((n,r)=>n||!!(e.stringMatchesAddress(r,t.address)||t.name===r),!1));if(!r||!r.length)throw Error(`No usable network interfaces returned by OS.`);return r}static stringMatchesAddress(e,t){let n,r;try{n=new i.Address4(e),r=new i.Address4(t)}catch{try{n=new i.Address6(e),r=new i.Address6(t)}catch{return!1}}return n.bigInt()===r.bigInt()}};const m={interfaces:[],reuseAddr:!0,ttl:255,loopback:!0,onMessage:(e,t)=>{console.log(`Message `+e.toString())},socketError:e=>{console.log(`Socket error `+e.message)}};var h=class e{static validateSettings(e){if(!e.multicastAddress)throw Error(`Socket settings require multicastAddress`);if(!e.multicastPort)throw Error(`Socket settings require multicastPort`)}static createMulticastSocket(t){return new Promise((n,r)=>{let a=Object.assign({},m,t);e.validateSettings(a);let s=o.createSocket({type:i.Address4.isValid(a.multicastAddress)?`udp4`:`udp6`,reuseAddr:a.reuseAddr}),c=!1;s.on(`error`,e=>{c?a.socketError(e):(s.close(),n({success:!1,error:e}))}).on(`listening`,()=>{c=!0,s.setMulticastTTL(a.ttl??255),s.setMulticastLoopback(a.loopback??!0);let t=e.addMulticastMemberships(s,a);if(!t.memberships.length){c=!1,s.close(),n({success:!1,error:Error(`No interface memberships for multicast address `+a.multicastAddress)});return}n(Object.assign({success:!0},t,{socket:s}))}).on(`message`,(e,t)=>{a.onMessage(e,t)}),s.bind({port:a.multicastPort,exclusive:!1})})}static addMulticastMemberships(t,n){let r=[],a=[],o=i.Address4.isValid(n.multicastAddress)?[u,4]:[d,6];return n.interfaces.forEach(i=>{if(o.includes(i.family))try{t.addMembership(n.multicastAddress,e.interfaceAddress(i)),r.push(i)}catch{a.push(i)}}),{memberships:r,failedMemberships:a}}static async createSendSocket(t,n,r,i){return new Promise((a,s)=>{let c=o.createSocket({type:[u,4].includes(t.family)?`udp4`:`udp6`,reuseAddr:!!n.reuseAddr});c.once(`error`,e=>{c.close(),a({success:!1,error:Error(e.message)})}).on(`error`,i).on(`listening`,()=>{a({success:!0,iface:t,socket:c,send:c.send.bind(c)})}).on(`message`,(e,n)=>{n.interface=t.name,r(e,n)}).bind(n.srcPort||0,e.interfaceAddress(t))})}static interfaceAddress(e){return`${e.address}${[u,4].includes(e.family)?``:`%`+e.name}`}};const g={reuseAddr:!0,srcPort:0,interfaces:null,ttl:255,loopback:!0,debug:!1};var _=class extends n{Config;ready;receiveSockets;sendSockets;interfaces;destroyed;constructor(e){super(),this.Config=Object.assign({},g,e),this.ready=!1,this.receiveSockets=[],this.sendSockets=[]}async init(){try{this.interfaces=p.getInterfaces(this.Config.interfaces||void 0)}catch(e){throw this.emitError(e),e}return this.emitDebug(`Scanner interfaces: ${r.inspect(this.interfaces)}`),await this.createReceiveSockets(),await this.createSendSockets(),this.receiveSockets.length&&this.sendSockets.length&&(this.ready=!0),this.ready}async createReceiveSockets(){if(!this.interfaces)return[];let e=this.interfaces.filter(e=>[u,4].includes(e.family)),t=this.interfaces.filter(e=>[d,6].includes(e.family));if(this.emitDebug(`Create receive sockets for${e.length?` `+u:``}${e.length&&t.length?` and`:``}${t.length?` `+d:``}`),e.length){let t=await h.createMulticastSocket({multicastAddress:s,multicastPort:l,interfaces:e,onMessage:this.onMessage.bind(this),socketError:this.socketError.bind(this)});t.success?this.receiveSockets.push(t):t.error&&this.emitError(t.error.message)}if(t.length){let e=await h.createMulticastSocket({multicastAddress:c,multicastPort:l,interfaces:t,onMessage:this.onMessage.bind(this),socketError:this.socketError.bind(this)});e.success?this.receiveSockets.push(e):e.error&&this.emitError(e.error.message)}return this.receiveSockets}async createSendSockets(){if(this.interfaces){this.emitDebug(`Create send sockets on ${this.interfaces.length} interfaces/addresses.`);for(let e=0;e<this.interfaces.length;e++){let t=await h.createSendSocket(this.interfaces[e],this.Config,this.onMessage.bind(this),this.socketError.bind(this));t.success?this.sendSockets.push(t):t.error&&this.emitError(t.error.message)}}}onMessage(e,n){let r;try{r=t.decode(e)}catch(e){return this.emitWarn(e)}this.emit(`packet`,r,n)}socketError(e){e.code===`EACCES`||e.code===`EADDRINUSE`||e.code===`EADDRNOTAVAIL`?this.emitError(e):this.emitWarn(e)}query(e,t){let n;if(typeof e==`string`)n=[{name:e,type:t||`ANY`}];else if(Array.isArray(e))n=e;else throw Error(`Query questions must be an array of mDNS query questions.`);let i={type:`query`,questions:n};this.emitDebug(`Send mDNS query: ${r.inspect(i)}`),this.send(i)}send(e){if(this.destroyed)return;let n=t.encode(e);for(let e=0;e<this.sendSockets.length;e++){let t=this.sendSockets[e];t.send&&t.iface&&(t.send(n,0,n.length,l,[u,4].includes(t.iface.family)?s:c+`%`+t.iface.name),this.emitDebug(`Send packet on ${t.iface.address}`))}}destroy(){this.ready=!1,this.sendSockets.forEach(e=>e.socket?.close()),this.sendSockets=[],this.receiveSockets.forEach(e=>e.socket?.close()),this.receiveSockets=[]}emitError(e){this.emit(`error`,e)}emitWarn(e){this.emit(`warn`,e)}emitDebug(e){this.Config.debug&&this.emit(`debug`,e)}};const v={debug:!1};var y=class extends n{Config;scanner;types;namedServices;packetListener;constructor(e,t){super(),this.packetListener=this.onPacket.bind(this),this.scanner=e,this.Config=Object.assign({},v,t),this.types=[],this.namedServices={},this.forwardEvents(this.scanner),this.reset()}reset(){this.removeMDNSListener(this.scanner),this.types=[],this.namedServices={},this.listenMDNSEvents(this.scanner)}forwardEvents(e){e.on(`error`,e=>{this.emitError(e)}).on(`warn`,e=>{this.emitWarn(e)}).on(`debug`,e=>{this.emitDebug(e)})}listenMDNSEvents(e){e.on(`packet`,this.packetListener)}removeMDNSListener(e){e.removeListener(`packet`,this.packetListener)}onPacket(e,t){switch(this.emitDebug(`Received packet type ${e.type} from ${t.address}.`),e.type){case`query`:this.emit(`query`,e,t);break;case`response`:this.emitDebug(`Received response packet from ${t.address} with ${e.answers?e.answers.length:0} answers and ${e.additionals?e.additionals.length:0} additionals.`),e.answers&&this.processAnswers(e.answers,t),e.additionals&&this.processAnswers(e.additionals,t);break}}processAnswers(e,t){this.emitDebug(`Processing answers or additionals...`);let n=this.processSRVAnswers(e);this.processTXTAnswers(e),this.processAAnswers(e),this.processAAAAAnswers(e),this.processPTRAnswers(e,t),n.forEach(e=>{this.emit(`discovered`,{type:`service`,data:this.namedServices[e]})})}processSRVAnswers(e){let t=[];return e.forEach(e=>{if(e.type!==`SRV`)return;this.emitDebug(`Processing SRV answer.`);let n=e.name.toString();t.includes(n)||t.push(n),this.namedServices[n]=this.namedServices[n]||{},this.namedServices[n].service=e,this.namedServices[n].host=e.data.target.toString(),this.namedServices[n].port=e.data.port}),t}processTXTAnswers(e){e.forEach(e=>{if(e.type!==`TXT`)return;this.emitDebug(`Processing TXT answer.`);let t=e.data;if(Array.isArray(t)&&t.length>1){let n=e.name.toString();this.namedServices[n]=this.namedServices[n]||{},this.namedServices[n].txt=this.answerDataToKeyValues(Buffer.concat(t))}else if(Buffer.isBuffer(t)){let n=e.name.toString();this.namedServices[n]=this.namedServices[n]||{},this.namedServices[n].txt=this.answerDataToKeyValues(t)}})}processAAnswers(e){e.forEach(e=>{if(e.type!==`A`)return;this.emitDebug(`Processing A answer.`);let t=e.name.toString(),n=e.data.toString();for(let e in this.namedServices)this.namedServices[e].host===t&&(this.namedServices[e].addresses=this.namedServices[e].addresses||[],this.namedServices[e].addresses.reduce((e,t)=>e||t.address===n,!1)||this.namedServices[e].addresses.push({family:u,address:n}))})}processAAAAAnswers(e){e.forEach(e=>{if(e.type!==`AAAA`)return;this.emitDebug(`Processing AAAA answer.`);let t=e.name.toString(),n=e.data.toString();for(let e in this.namedServices)this.namedServices[e].host===t&&(this.namedServices[e].addresses=this.namedServices[e].addresses||[],this.namedServices[e].addresses.reduce((e,t)=>e||t.address===n,!1)||this.namedServices[e].addresses.push({family:d,address:n}))})}processPTRAnswers(e,t){e.forEach(e=>{if(e.type!==`PTR`)return;this.emitDebug(`Processing PTR answer.`);let n=this.serviceTypeFromPTR(e),r=e.data.toString();n!==r&&(this.namedServices[r]=this.namedServices[r]||{},this.namedServices[r].name=r.replace(`.`+n,``),this.namedServices[r].rinfo=t)})}serviceTypeFromPTR(e){let t=e.data,n=/(?:^|^.+?(?:\.))(_.*)$/gm.exec(t.toString()),r=n?n[1]:t.toString();return this.types.includes(r)||(this.types.push(r),this.emit(`discovered`,{type:`type`,data:r}),this.emitDebug(`Scanning service type ${r}.`),this.scanner.query(r,`ANY`)),r}answerDataToKeyValues(e){let t=[],n={},r=0,i=e[r];for(;i;){let a=e.slice(r+1,r+1+i);t.push(a.toString());let o=/^([^=]+)=([^=]*)$/.exec(a.toString());o&&(n[o[1]]=o[2]),r=r+1+i,i=e[r]}return{strings:t,keyValuePairs:n}}emitError(e){this.emit(`error`,e)}emitWarn(e){this.emit(`warn`,e)}emitDebug(e){this.Config.debug&&this.emit(`debug`,e)}};const b=async(t=500)=>{t<10&&(t=10);let n=new _({debug:!0}),r=new y(n);if(r.on(`error`,e=>{if(!e.includes(`bind ENOENT`))throw Error(e)}),!await n.init())throw Error(`Failed to initialize mDNS scanner`);n.query(`_at1000_server._tcp.local`),await new Promise(e=>setTimeout(e,t));let i=[...new Set(Object.values(r.namedServices).filter(e=>e!==void 0&&e.service!==void 0).filter(e=>e.service.name.endsWith(`_at1000_server._tcp.local`)).map(e=>e.addresses.filter(e=>e.family==`IPv4`).pop()?.address).filter(e=>e!==void 0))].map(t=>e.create(t));return n.destroy(),await Promise.all(i)};var x=class extends e{static findDevices(e=500){return b(e)}};export{x as AT1000};
2
2
  //# sourceMappingURL=node.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.mjs","names":["Constants.IPv4","Constants.IPv4_INT","Constants.IPv6","Constants.IPv6_INT","interfaces: NetworkInterface[]","names: string[]","stringAddress: IP.Address4 | IP.Address6","addressAddress: IP.Address4 | IP.Address6","e","memberships: NetworkInterface[]","failedMemberships: NetworkInterface[]","Constants.IPv4","Constants.IPv4_INT","Constants.IPv6","Constants.IPv6_INT","Defaults: Required<ScannerConfig>","Defaults","Interfaces","Constants.IPv4","Constants.IPv4_INT","Constants.IPv6","Constants.IPv6_INT","Sockets","Constants.MDNS_IPV4","Constants.MDNS_PORT","Constants.MDNS_IPV6","packet: Packet","questionArray: Question[]","Defaults: Required<ServicesConfig>","serviceNames: string[]","Constants.IPv4","Constants.IPv6","strings: string[]","kvPairs: Record<string, string>","Scanner","Services","AT1000"],"sources":["../src/mdns-scanner/constants.ts","../src/mdns-scanner/interfaces.ts","../src/mdns-scanner/sockets.ts","../src/mdns-scanner/scanner.ts","../src/mdns-scanner/services.ts","../src/discovery.ts","../src/node.ts"],"sourcesContent":["export const MDNS_IPV4 = '224.0.0.251';\nexport const MDNS_IPV6 = 'FF02::FB';\nexport const MDNS_PORT = 5353;\nexport const IPv4 = 'IPv4';\nexport const IPv4_INT = 4; // beginning in node 18 family is integer\nexport const IPv6 = 'IPv6';\nexport const IPv6_INT = 6; // beginning in node 18 family is integer\nexport const ANY_IPV4 = '0.0.0.0';\nexport const ANY_IPV6 = '::';\n\nexport const ErrorMessages = { NO_INTERFACES: 'No available interfaces.' };\n","import IP from 'ip-address';\nimport OS from 'node:os';\nimport * as Constants from './constants.js';\n\nconst SupportedFamilies = [Constants.IPv4, Constants.IPv4_INT, Constants.IPv6, Constants.IPv6_INT];\n\nexport interface NetworkInterface {\n name: string;\n address: string;\n family: string | number;\n}\n\nclass Interfaces {\n // select appropriate method based on argument\n static getInterfaces(interfaceStrings?: string | string[]): NetworkInterface[] {\n return (!interfaceStrings\n ? Interfaces.getAllInterfaces()\n : Interfaces.getInterfacesFromStrings(interfaceStrings));\n }\n\n // get all usable interfaces from OS\n static getAllInterfaces(): NetworkInterface[] {\n const interfaces: NetworkInterface[] = [];\n const names: string[] = [];\n const osInterfaces = OS.networkInterfaces();\n for (const [name, iface] of Object.entries(osInterfaces)) {\n if (names.includes(name)) {\n continue;\n }\n names.push(name);\n iface?.forEach((assignment) => {\n // check if interface is usable\n if (\n assignment.internal // cannot use internal\n || !SupportedFamilies.includes(assignment.family) // can only use IPv4 and IPv6 family\n || /^(2002|2001):/ig.exec(assignment.address) // cannot use IPv6 special prefix\n ) return;\n interfaces.push({ name: name, address: assignment.address, family: assignment.family });\n });\n }\n if (!interfaces.length) throw new Error('No usable network interfaces returned by OS.');\n return interfaces;\n }\n\n // get interfaces from configuration strings\n static getInterfacesFromStrings(interfaceStrings: string | string[]): NetworkInterface[] {\n const interfaceArray = Array.isArray(interfaceStrings) ? interfaceStrings : [interfaceStrings];\n const interfaces = this.getAllInterfaces().filter((iface) => {\n return interfaceArray.reduce((result, interfaceString) => {\n // return result || (((IP.isV4Format(interfaceString) || IP.isV6Format(interfaceString)) && IP.isEqual(iface.address, interfaceString)) || iface.name === interfaceString ? true : false);\n return result\n || (Interfaces.stringMatchesAddress(interfaceString, iface.address)\n || iface.name === interfaceString\n ? true\n : false);\n }, false);\n });\n if (!interfaces || !interfaces.length) {\n throw new Error('No usable network interfaces returned by OS.');\n }\n return interfaces;\n }\n\n // compare interface settings string to os interface address\n static stringMatchesAddress(ifaceString: string, address: string): boolean {\n // try to create address objects\n let stringAddress: IP.Address4 | IP.Address6;\n let addressAddress: IP.Address4 | IP.Address6;\n try {\n stringAddress = new IP.Address4(ifaceString);\n addressAddress = new IP.Address4(address);\n // oxlint-disable-next-line no-unused-vars\n } catch (e) {\n try {\n stringAddress = new IP.Address6(ifaceString);\n addressAddress = new IP.Address6(address);\n // oxlint-disable-next-line no-unused-vars\n } catch (e) {\n return false;\n }\n }\n // compare addresses\n return stringAddress.bigInt() === addressAddress.bigInt();\n }\n}\n\nexport default Interfaces;\n","import IP from 'ip-address';\nimport type { RemoteInfo, Socket as DgramSocket } from 'node:dgram';\nimport DGram from 'node:dgram';\nimport * as Constants from './constants.js';\nimport type { NetworkInterface } from './interfaces.js';\n\nexport interface MulticastSettings {\n multicastAddress: string;\n multicastPort: number;\n interfaces: NetworkInterface[];\n reuseAddr?: boolean;\n ttl?: number;\n loopback?: boolean;\n onMessage: (message: Buffer, rinfo: RemoteInfo) => void;\n socketError: (error: Error) => void;\n}\n\nexport interface SendSocketSettings {\n reuseAddr?: boolean;\n srcPort?: number;\n}\n\nexport interface SocketResult {\n success: boolean;\n socket?: DgramSocket;\n memberships?: NetworkInterface[];\n failedMemberships?: NetworkInterface[];\n error?: Error;\n iface?: NetworkInterface;\n send?: (...args: any[]) => void;\n}\n\nconst MulticastDefaults = {\n interfaces: [],\n reuseAddr: true,\n ttl: 255,\n loopback: true,\n onMessage: (message: Buffer, _rinfo: RemoteInfo) => {\n console.log('Message ' + message.toString());\n },\n socketError: (error: Error) => {\n console.log('Socket error ' + error.message);\n },\n};\n\nclass Sockets {\n static validateSettings(settings: Partial<MulticastSettings>): void {\n if (!settings.multicastAddress) {\n throw new Error('Socket settings require multicastAddress');\n }\n if (!settings.multicastPort) {\n throw new Error('Socket settings require multicastPort');\n }\n }\n\n // create a multicast socket and add interfaces to group membership\n static createMulticastSocket(settings: Partial<MulticastSettings>): Promise<SocketResult> {\n return new Promise((resolve, _reject) => {\n const mergedSettings = Object.assign({}, MulticastDefaults, settings) as MulticastSettings;\n Sockets.validateSettings(mergedSettings);\n // create multicast socket to listen for packets\n const socket = DGram.createSocket({\n type: (IP.Address4.isValid(mergedSettings.multicastAddress) ? 'udp4' : 'udp6'),\n reuseAddr: mergedSettings.reuseAddr,\n });\n // track bind status with local variable\n let isListening = false;\n // add event listeners to socket\n socket\n .on('error', (error) => {\n if (isListening) {\n mergedSettings.socketError(error);\n } else {\n socket.close();\n resolve({ success: false, error: error });\n }\n })\n .on('listening', () => {\n isListening = true;\n socket.setMulticastTTL(mergedSettings.ttl ?? 255);\n socket.setMulticastLoopback(mergedSettings.loopback ?? true);\n const result = Sockets.addMulticastMemberships(socket, mergedSettings);\n if (!result.memberships.length) {\n isListening = false;\n socket.close();\n resolve({\n success: false,\n error: new Error(\n 'No interface memberships for multicast address ' + mergedSettings.multicastAddress,\n ),\n });\n return;\n }\n resolve(Object.assign({ success: true }, result, { socket }));\n })\n .on('message', (msg, rinfo) => {\n mergedSettings.onMessage(msg, rinfo);\n });\n // bind socket\n socket.bind({ port: mergedSettings.multicastPort, exclusive: false });\n });\n }\n\n // add interfaces to multicast membership group on socket\n static addMulticastMemberships(\n socket: DgramSocket,\n settings: MulticastSettings,\n ): { memberships: NetworkInterface[]; failedMemberships: NetworkInterface[] } {\n const memberships: NetworkInterface[] = [];\n const failedMemberships: NetworkInterface[] = [];\n const family = IP.Address4.isValid(settings.multicastAddress)\n ? [Constants.IPv4, Constants.IPv4_INT]\n : [Constants.IPv6, Constants.IPv6_INT];\n settings.interfaces.forEach((iface) => {\n if (!family.includes(iface.family)) return; // unsupported family\n try {\n socket.addMembership(settings.multicastAddress, Sockets.interfaceAddress(iface));\n memberships.push(iface);\n // oxlint-disable-next-line no-unused-vars\n } catch (error) {\n failedMemberships.push(iface);\n }\n });\n return { memberships, failedMemberships };\n }\n\n // create a socket to be used when sending mDNS packets\n static async createSendSocket(\n iface: NetworkInterface,\n settings: SendSocketSettings,\n onMessage: (message: Buffer, rinfo: RemoteInfo) => void,\n socketError: (error: Error) => void,\n ): Promise<SocketResult> {\n return new Promise((resolve, _reject) => {\n const socket = DGram.createSocket({\n type: ([Constants.IPv4, Constants.IPv4_INT].includes(iface.family) ? 'udp4' : 'udp6'),\n reuseAddr: settings.reuseAddr ? true : false,\n });\n socket\n .once('error', (error) => {\n socket.close();\n resolve({ success: false, error: new Error(error.message) });\n })\n .on('error', socketError)\n .on('listening', () => {\n resolve({ success: true, iface, socket, send: socket.send.bind(socket) });\n })\n .on('message', (msg, rinfo: RemoteInfo & { interface?: string }) => {\n // include interface name so we know where the message came in\n rinfo.interface = iface.name;\n onMessage(msg, rinfo);\n })\n .bind(settings.srcPort || 0, Sockets.interfaceAddress(iface));\n });\n }\n\n // format an interface address for mDNS socket\n static interfaceAddress(iface: NetworkInterface): string {\n // return interface address with IPv6 scope if needed\n return `${iface.address}${([Constants.IPv4, Constants.IPv4_INT].includes(iface.family)\n ? ''\n : '%' + iface.name)}`;\n }\n}\n\nexport default Sockets;\n","import type { Packet, Question, RecordType } from 'dns-packet';\nimport DNSPacket from 'dns-packet';\nimport type { RemoteInfo } from 'node:dgram';\nimport { EventEmitter } from 'node:events';\nimport Util from 'node:util';\nimport * as Constants from './constants.js';\nimport type { NetworkInterface } from './interfaces.js';\nimport Interfaces from './interfaces.js';\nimport type { SocketResult } from './sockets.js';\nimport Sockets from './sockets.js';\n\nexport interface ScannerConfig {\n reuseAddr?: boolean;\n srcPort?: number;\n interfaces?: string | string[] | null;\n ttl?: number;\n loopback?: boolean;\n debug?: boolean;\n}\n\ntype Socket = SocketResult;\n\nconst Defaults: Required<ScannerConfig> = {\n reuseAddr: true,\n srcPort: 0,\n interfaces: null,\n ttl: 255,\n loopback: true,\n debug: false,\n};\n\nclass MDNSScanner extends EventEmitter {\n Config: Required<ScannerConfig>;\n ready: boolean;\n receiveSockets: Socket[];\n sendSockets: Socket[];\n interfaces?: NetworkInterface[];\n destroyed?: boolean;\n\n constructor(config?: ScannerConfig) {\n super();\n this.Config = Object.assign({}, Defaults, config);\n this.ready = false;\n this.receiveSockets = [];\n this.sendSockets = [];\n }\n\n // initialize the scanner\n async init(): Promise<boolean> {\n try {\n this.interfaces = Interfaces.getInterfaces(this.Config.interfaces || undefined);\n } catch (error) {\n this.emitError(error);\n throw error;\n }\n this.emitDebug(`Scanner interfaces: ${Util.inspect(this.interfaces)}`);\n await this.createReceiveSockets();\n await this.createSendSockets();\n if (this.receiveSockets.length && this.sendSockets.length) this.ready = true;\n return this.ready;\n }\n\n // create sockets that will receive mDNS packets\n async createReceiveSockets(): Promise<Socket[]> {\n if (!this.interfaces) return [];\n const ipv4 = this.interfaces.filter(i =>\n [Constants.IPv4, Constants.IPv4_INT].includes(i.family)\n );\n const ipv6 = this.interfaces.filter(i =>\n [Constants.IPv6, Constants.IPv6_INT].includes(i.family)\n );\n this.emitDebug(\n `Create receive sockets for${ipv4.length ? ' ' + Constants.IPv4 : ''}${\n ipv4.length && ipv6.length\n ? ' and'\n : ''\n }${ipv6.length ? ' ' + Constants.IPv6 : ''}`,\n );\n if (ipv4.length) {\n const ipv4Socket = await Sockets.createMulticastSocket({\n multicastAddress: Constants.MDNS_IPV4,\n multicastPort: Constants.MDNS_PORT,\n interfaces: ipv4,\n onMessage: this.onMessage.bind(this),\n socketError: this.socketError.bind(this),\n });\n if (ipv4Socket.success) this.receiveSockets.push(ipv4Socket);\n else if (ipv4Socket.error) this.emitError(ipv4Socket.error.message);\n }\n if (ipv6.length) {\n const ipv6Socket = await Sockets.createMulticastSocket({\n multicastAddress: Constants.MDNS_IPV6,\n multicastPort: Constants.MDNS_PORT,\n interfaces: ipv6,\n onMessage: this.onMessage.bind(this),\n socketError: this.socketError.bind(this),\n });\n if (ipv6Socket.success) this.receiveSockets.push(ipv6Socket);\n else if (ipv6Socket.error) this.emitError(ipv6Socket.error.message);\n }\n return this.receiveSockets;\n }\n\n // create sockets used to send out mDNS packets\n async createSendSockets(): Promise<void> {\n if (!this.interfaces) return;\n this.emitDebug(`Create send sockets on ${this.interfaces.length} interfaces/addresses.`);\n for (let i = 0; i < this.interfaces.length; i++) {\n const sendSocket = await Sockets.createSendSocket(\n this.interfaces[i],\n this.Config,\n this.onMessage.bind(this),\n this.socketError.bind(this),\n );\n if (sendSocket.success) this.sendSockets.push(sendSocket);\n else if (sendSocket.error) this.emitError(sendSocket.error.message);\n }\n }\n\n // handle receive socket message\n onMessage(message: Buffer, rinfo: RemoteInfo): void {\n let packet: Packet;\n try {\n packet = DNSPacket.decode(message);\n } catch (error) {\n return this.emitWarn(error);\n }\n this.emit('packet', packet, rinfo);\n }\n\n // handle socket errors\n socketError(error: any): void {\n if (error.code === 'EACCES' || error.code === 'EADDRINUSE' || error.code === 'EADDRNOTAVAIL') {\n this.emitError(error);\n } else {\n this.emitWarn(error);\n }\n }\n\n // send an mDNS query, questions can be an array of formatted questions or a single question name string, qtype is optionally used with name string\n // oxlint-disable-next-line no-redundant-type-constituents\n query(questions: string | Question[], qtype?: RecordType | string): void {\n let questionArray: Question[];\n if (typeof questions === 'string') {\n questionArray = [{ name: questions, type: (qtype || 'ANY') as RecordType }];\n } else if (Array.isArray(questions)) {\n questionArray = questions;\n } else {\n throw new Error('Query questions must be an array of mDNS query questions.');\n }\n const query = { type: 'query' as const, questions: questionArray };\n this.emitDebug(`Send mDNS query: ${Util.inspect(query)}`);\n this.send(query);\n }\n\n // send mDNS packet\n send(value: Packet): void {\n if (this.destroyed) return;\n const packet = DNSPacket.encode(value);\n for (let i = 0; i < this.sendSockets.length; i++) {\n const socket = this.sendSockets[i];\n if (socket.send && socket.iface) {\n socket.send(\n packet,\n 0,\n packet.length,\n Constants.MDNS_PORT,\n [Constants.IPv4, Constants.IPv4_INT].includes(socket.iface.family)\n ? Constants.MDNS_IPV4\n : Constants.MDNS_IPV6 + '%' + socket.iface.name,\n );\n this.emitDebug(`Send packet on ${socket.iface.address}`);\n }\n }\n }\n\n // destroy this scanner\n destroy(): void {\n this.ready = false;\n this.sendSockets.forEach(s => s.socket?.close());\n this.sendSockets = [];\n this.receiveSockets.forEach(s => s.socket?.close());\n this.receiveSockets = [];\n }\n\n ////////////////////////\n // emit event methods //\n ////////////////////////\n\n emitError(error: any): void {\n this.emit('error', error);\n }\n\n emitWarn(message: any): void {\n this.emit('warn', message);\n }\n\n emitDebug(message: string): void {\n if (this.Config.debug) this.emit('debug', message);\n }\n}\n\nexport default MDNSScanner;\n","import type { Answer, Packet } from 'dns-packet';\nimport type { RemoteInfo } from 'node:dgram';\nimport { EventEmitter } from 'node:events';\nimport * as Constants from './constants.js';\nimport type MDNSScanner from './scanner.js';\n\nexport interface ServicesConfig {\n debug?: boolean;\n}\n\nexport interface NamedService {\n service?: Answer;\n host?: string;\n port?: number;\n txt?: { strings: string[]; keyValuePairs: Record<string, string> };\n addresses?: Array<{ family: string; address: string }>;\n name?: string;\n rinfo?: RemoteInfo;\n}\n\nconst Defaults: Required<ServicesConfig> = { debug: false };\n\nclass MDNSServices extends EventEmitter {\n Config: Required<ServicesConfig>;\n scanner: MDNSScanner;\n types: string[];\n namedServices: Record<string, NamedService>;\n private packetListener: (packet: Packet, rinfo: RemoteInfo) => void;\n\n constructor(scanner: MDNSScanner, config?: ServicesConfig) {\n super();\n this.packetListener = this.onPacket.bind(this);\n this.scanner = scanner;\n this.Config = Object.assign({}, Defaults, config);\n this.types = [];\n this.namedServices = {};\n this.forwardEvents(this.scanner);\n this.reset();\n }\n\n // reset services\n reset(): void {\n this.removeMDNSListener(this.scanner);\n this.types = [];\n this.namedServices = {};\n this.listenMDNSEvents(this.scanner);\n }\n\n // forward events received from scanner\n forwardEvents(scanner: MDNSScanner): void {\n scanner\n .on('error', (error: any) => {\n this.emitError(error);\n })\n .on('warn', (message: any) => {\n this.emitWarn(message);\n })\n .on('debug', (message: string) => {\n this.emitDebug(message);\n });\n }\n\n // handle packets from scanner\n listenMDNSEvents(scanner: MDNSScanner): void {\n scanner.on('packet', this.packetListener);\n }\n\n // remove packet listener\n removeMDNSListener(scanner: MDNSScanner): void {\n scanner.removeListener('packet', this.packetListener);\n }\n\n // on scanner packet handler\n onPacket(packet: Packet, rinfo: RemoteInfo): void {\n this.emitDebug(`Received packet type ${packet.type} from ${rinfo.address}.`);\n switch (packet.type) {\n case 'query':\n this.emit('query', packet, rinfo);\n break;\n\n case 'response':\n this.emitDebug(\n `Received response packet from ${rinfo.address} with ${\n packet.answers\n ? packet.answers.length\n : 0\n } answers and ${packet.additionals ? packet.additionals.length : 0} additionals.`,\n );\n if (packet.answers) this.processAnswers(packet.answers, rinfo);\n if (packet.additionals) this.processAnswers(packet.additionals, rinfo);\n\n break;\n }\n }\n\n // process answers or additionals in a response type packet\n processAnswers(answers: Answer[], rinfo: RemoteInfo): void {\n this.emitDebug('Processing answers or additionals...');\n // process service answers\n const serviceNames = this.processSRVAnswers(answers);\n this.processTXTAnswers(answers);\n this.processAAnswers(answers);\n this.processAAAAAnswers(answers);\n this.processPTRAnswers(answers, rinfo);\n serviceNames.forEach(name => {\n this.emit('discovered', { type: 'service', data: this.namedServices[name] });\n });\n }\n\n processSRVAnswers(answers: Answer[]): string[] {\n const serviceNames: string[] = [];\n answers.forEach(answer => {\n if (answer.type !== 'SRV') return;\n this.emitDebug(`Processing SRV answer.`);\n const fullName = answer.name.toString();\n if (!serviceNames.includes(fullName)) serviceNames.push(fullName);\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].service = answer;\n this.namedServices[fullName].host = (answer.data as any).target.toString();\n this.namedServices[fullName].port = (answer.data as any).port;\n });\n return serviceNames;\n }\n\n processTXTAnswers(answers: Answer[]): void {\n answers.forEach(answer => {\n if (answer.type !== 'TXT') return;\n this.emitDebug(`Processing TXT answer.`);\n const data = answer.data as Buffer | Buffer[];\n if (Array.isArray(data) && data.length > 1) {\n const fullName = answer.name.toString();\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].txt = this.answerDataToKeyValues(Buffer.concat(data));\n } else if (Buffer.isBuffer(data)) {\n const fullName = answer.name.toString();\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].txt = this.answerDataToKeyValues(data);\n }\n });\n }\n\n processAAnswers(answers: Answer[]): void {\n answers.forEach(answer => {\n if (answer.type !== 'A') return;\n this.emitDebug(`Processing A answer.`);\n const hostName = answer.name.toString();\n const address = (answer as any).data.toString();\n for (const serviceName in this.namedServices) {\n if (this.namedServices[serviceName].host !== hostName) continue;\n this.namedServices[serviceName].addresses = this.namedServices[serviceName].addresses || [];\n const exists = this.namedServices[serviceName].addresses!.reduce((e, a) => {\n return e || a.address === address;\n }, false);\n if (!exists) {\n this.namedServices[serviceName].addresses!.push({ family: Constants.IPv4, address });\n }\n }\n });\n }\n\n processAAAAAnswers(answers: Answer[]): void {\n answers.forEach(answer => {\n if (answer.type !== 'AAAA') return;\n this.emitDebug(`Processing AAAA answer.`);\n const hostName = answer.name.toString();\n const address = (answer as any).data.toString();\n for (const serviceName in this.namedServices) {\n if (this.namedServices[serviceName].host !== hostName) continue;\n this.namedServices[serviceName].addresses = this.namedServices[serviceName].addresses || [];\n const exists = this.namedServices[serviceName].addresses!.reduce((e, a) => {\n return e || a.address === address;\n }, false);\n if (!exists) {\n this.namedServices[serviceName].addresses!.push({ family: Constants.IPv6, address });\n }\n }\n });\n }\n\n processPTRAnswers(answers: Answer[], rinfo: RemoteInfo): void {\n answers.forEach(answer => {\n if (answer.type !== 'PTR') return;\n this.emitDebug(`Processing PTR answer.`);\n const serviceType = this.serviceTypeFromPTR(answer);\n const fullName = (answer as any).data.toString();\n // build host service definition if fullName is a host service\n if (serviceType !== fullName) {\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].name = fullName.replace('.' + serviceType, '');\n this.namedServices[fullName].rinfo = rinfo;\n }\n });\n }\n\n // extract service type from answer data\n serviceTypeFromPTR(answer: Answer): string {\n const data = (answer as any).data;\n const match = /(?:^|^.+?(?:\\.))(_.*)$/mg.exec(data.toString()); // get service type without hostname\n const serviceType = match ? match[1] : data.toString();\n if (!this.types.includes(serviceType)) {\n this.types.push(serviceType);\n this.emit('discovered', { type: 'type', data: serviceType });\n this.emitDebug(`Scanning service type ${serviceType}.`);\n this.scanner.query(serviceType, 'ANY');\n }\n return serviceType;\n }\n\n // extract the key=value pairs from a TXT data buffer\n answerDataToKeyValues(\n data: Buffer,\n ): { strings: string[]; keyValuePairs: Record<string, string> } {\n const strings: string[] = [];\n const kvPairs: Record<string, string> = {};\n let kvPointer = 0;\n let kvLen = data[kvPointer];\n while (kvLen) {\n const pair = data.slice(kvPointer + 1, kvPointer + 1 + kvLen);\n strings.push(pair.toString());\n const kvMatch = /^([^=]+)=([^=]*)$/.exec(pair.toString());\n if (kvMatch) {\n kvPairs[kvMatch[1]] = kvMatch[2];\n }\n kvPointer = kvPointer + 1 + kvLen;\n kvLen = data[kvPointer];\n }\n return { strings: strings, keyValuePairs: kvPairs };\n }\n\n ////////////////////////\n // emit event methods //\n ////////////////////////\n\n emitError(error: any): void {\n this.emit('error', error);\n }\n\n emitWarn(message: any): void {\n this.emit('warn', message);\n }\n\n emitDebug(message: string): void {\n if (this.Config.debug) this.emit('debug', message);\n }\n}\n\nexport default MDNSServices;\n","import { AT1000Base as AT1000 } from './at1000';\n\nimport { Scanner, Services } from './mdns-scanner';\n\nexport const findDevices = async (timeout: number = 500): Promise<AT1000[]> => {\n if (timeout < 10) {\n timeout = 10;\n }\n\n let scanner = new Scanner({ debug: true });\n let services = new Services(scanner);\n\n services.on('error', (error: string) => {\n if (!error.includes('bind ENOENT')) {\n throw Error(error);\n }\n });\n\n let ready = await scanner.init();\n if (!ready) {\n throw new Error('Failed to initialize mDNS scanner');\n }\n scanner.query('_at1000_server._tcp.local');\n\n await new Promise((r) => setTimeout(r, timeout));\n\n // Extract unique IPv4 addresses from discovered services\n const addresses = [\n ...new Set(\n Object\n .values(services.namedServices)\n .filter((s: any) =>\n s !== undefined && s.service !== undefined\n )\n .filter((s: any) => (s.service.name as string).endsWith('_at1000_server._tcp.local'))\n .map((s: any) => s.addresses.filter((a: any) => a.family == 'IPv4').pop()?.address)\n .filter((ipv4: string | undefined) => ipv4 !== undefined),\n ),\n ];\n\n const devices = addresses.map((ipv4) => AT1000.create(ipv4));\n\n scanner.destroy();\n\n return await Promise.all(devices);\n};\n","import { AT1000Base } from './at1000';\nimport { findDevices } from './discovery';\n\nexport default class AT1000 extends AT1000Base {\n static findDevices(timeout: number = 500): Promise<AT1000[]> {\n return findDevices(timeout);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"node.mjs","names":["Constants.IPv4","Constants.IPv4_INT","Constants.IPv6","Constants.IPv6_INT","interfaces: NetworkInterface[]","names: string[]","stringAddress: IP.Address4 | IP.Address6","addressAddress: IP.Address4 | IP.Address6","e","memberships: NetworkInterface[]","failedMemberships: NetworkInterface[]","Constants.IPv4","Constants.IPv4_INT","Constants.IPv6","Constants.IPv6_INT","Defaults: Required<ScannerConfig>","Defaults","Interfaces","Constants.IPv4","Constants.IPv4_INT","Constants.IPv6","Constants.IPv6_INT","Sockets","Constants.MDNS_IPV4","Constants.MDNS_PORT","Constants.MDNS_IPV6","packet: Packet","questionArray: Question[]","Defaults: Required<ServicesConfig>","serviceNames: string[]","Constants.IPv4","Constants.IPv6","strings: string[]","kvPairs: Record<string, string>","Scanner","Services","AT1000"],"sources":["../src/mdns-scanner/constants.ts","../src/mdns-scanner/interfaces.ts","../src/mdns-scanner/sockets.ts","../src/mdns-scanner/scanner.ts","../src/mdns-scanner/services.ts","../src/discovery.ts","../src/node.ts"],"sourcesContent":["export const MDNS_IPV4 = '224.0.0.251';\nexport const MDNS_IPV6 = 'FF02::FB';\nexport const MDNS_PORT = 5353;\nexport const IPv4 = 'IPv4';\nexport const IPv4_INT = 4; // beginning in node 18 family is integer\nexport const IPv6 = 'IPv6';\nexport const IPv6_INT = 6; // beginning in node 18 family is integer\nexport const ANY_IPV4 = '0.0.0.0';\nexport const ANY_IPV6 = '::';\n\nexport const ErrorMessages = { NO_INTERFACES: 'No available interfaces.' };\n","import IP from 'ip-address';\nimport OS from 'node:os';\nimport * as Constants from './constants.js';\n\nconst SupportedFamilies = [Constants.IPv4, Constants.IPv4_INT, Constants.IPv6, Constants.IPv6_INT];\n\nexport interface NetworkInterface {\n name: string;\n address: string;\n family: string | number;\n}\n\nclass Interfaces {\n // select appropriate method based on argument\n static getInterfaces(interfaceStrings?: string | string[]): NetworkInterface[] {\n return (!interfaceStrings\n ? Interfaces.getAllInterfaces()\n : Interfaces.getInterfacesFromStrings(interfaceStrings));\n }\n\n // get all usable interfaces from OS\n static getAllInterfaces(): NetworkInterface[] {\n const interfaces: NetworkInterface[] = [];\n const names: string[] = [];\n const osInterfaces = OS.networkInterfaces();\n for (const [name, iface] of Object.entries(osInterfaces)) {\n if (names.includes(name)) {\n continue;\n }\n names.push(name);\n iface?.forEach((assignment) => {\n // check if interface is usable\n if (\n assignment.internal // cannot use internal\n || !SupportedFamilies.includes(assignment.family) // can only use IPv4 and IPv6 family\n || /^(2002|2001):/ig.exec(assignment.address) // cannot use IPv6 special prefix\n ) return;\n interfaces.push({ name: name, address: assignment.address, family: assignment.family });\n });\n }\n if (!interfaces.length) throw new Error('No usable network interfaces returned by OS.');\n return interfaces;\n }\n\n // get interfaces from configuration strings\n static getInterfacesFromStrings(interfaceStrings: string | string[]): NetworkInterface[] {\n const interfaceArray = Array.isArray(interfaceStrings) ? interfaceStrings : [interfaceStrings];\n const interfaces = this.getAllInterfaces().filter((iface) => {\n return interfaceArray.reduce((result, interfaceString) => {\n // return result || (((IP.isV4Format(interfaceString) || IP.isV6Format(interfaceString)) && IP.isEqual(iface.address, interfaceString)) || iface.name === interfaceString ? true : false);\n return result\n || (Interfaces.stringMatchesAddress(interfaceString, iface.address)\n || iface.name === interfaceString\n ? true\n : false);\n }, false);\n });\n if (!interfaces || !interfaces.length) {\n throw new Error('No usable network interfaces returned by OS.');\n }\n return interfaces;\n }\n\n // compare interface settings string to os interface address\n static stringMatchesAddress(ifaceString: string, address: string): boolean {\n // try to create address objects\n let stringAddress: IP.Address4 | IP.Address6;\n let addressAddress: IP.Address4 | IP.Address6;\n try {\n stringAddress = new IP.Address4(ifaceString);\n addressAddress = new IP.Address4(address);\n // oxlint-disable-next-line no-unused-vars\n } catch (e) {\n try {\n stringAddress = new IP.Address6(ifaceString);\n addressAddress = new IP.Address6(address);\n // oxlint-disable-next-line no-unused-vars\n } catch (e) {\n return false;\n }\n }\n // compare addresses\n return stringAddress.bigInt() === addressAddress.bigInt();\n }\n}\n\nexport default Interfaces;\n","import IP from 'ip-address';\nimport type { RemoteInfo, Socket as DgramSocket } from 'node:dgram';\nimport DGram from 'node:dgram';\nimport * as Constants from './constants.js';\nimport type { NetworkInterface } from './interfaces.js';\n\nexport interface MulticastSettings {\n multicastAddress: string;\n multicastPort: number;\n interfaces: NetworkInterface[];\n reuseAddr?: boolean;\n ttl?: number;\n loopback?: boolean;\n onMessage: (message: Buffer, rinfo: RemoteInfo) => void;\n socketError: (error: Error) => void;\n}\n\nexport interface SendSocketSettings {\n reuseAddr?: boolean;\n srcPort?: number;\n}\n\nexport interface SocketResult {\n success: boolean;\n socket?: DgramSocket;\n memberships?: NetworkInterface[];\n failedMemberships?: NetworkInterface[];\n error?: Error;\n iface?: NetworkInterface;\n send?: (...args: any[]) => void;\n}\n\nconst MulticastDefaults = {\n interfaces: [],\n reuseAddr: true,\n ttl: 255,\n loopback: true,\n onMessage: (message: Buffer, _rinfo: RemoteInfo) => {\n console.log('Message ' + message.toString());\n },\n socketError: (error: Error) => {\n console.log('Socket error ' + error.message);\n },\n};\n\nclass Sockets {\n static validateSettings(settings: Partial<MulticastSettings>): void {\n if (!settings.multicastAddress) {\n throw new Error('Socket settings require multicastAddress');\n }\n if (!settings.multicastPort) {\n throw new Error('Socket settings require multicastPort');\n }\n }\n\n // create a multicast socket and add interfaces to group membership\n static createMulticastSocket(settings: Partial<MulticastSettings>): Promise<SocketResult> {\n return new Promise((resolve, _reject) => {\n const mergedSettings = Object.assign({}, MulticastDefaults, settings) as MulticastSettings;\n Sockets.validateSettings(mergedSettings);\n // create multicast socket to listen for packets\n const socket = DGram.createSocket({\n type: (IP.Address4.isValid(mergedSettings.multicastAddress) ? 'udp4' : 'udp6'),\n reuseAddr: mergedSettings.reuseAddr,\n });\n // track bind status with local variable\n let isListening = false;\n // add event listeners to socket\n socket\n .on('error', (error) => {\n if (isListening) {\n mergedSettings.socketError(error);\n } else {\n socket.close();\n resolve({ success: false, error: error });\n }\n })\n .on('listening', () => {\n isListening = true;\n socket.setMulticastTTL(mergedSettings.ttl ?? 255);\n socket.setMulticastLoopback(mergedSettings.loopback ?? true);\n const result = Sockets.addMulticastMemberships(socket, mergedSettings);\n if (!result.memberships.length) {\n isListening = false;\n socket.close();\n resolve({\n success: false,\n error: new Error(\n 'No interface memberships for multicast address ' + mergedSettings.multicastAddress,\n ),\n });\n return;\n }\n resolve(Object.assign({ success: true }, result, { socket }));\n })\n .on('message', (msg, rinfo) => {\n mergedSettings.onMessage(msg, rinfo);\n });\n // bind socket\n socket.bind({ port: mergedSettings.multicastPort, exclusive: false });\n });\n }\n\n // add interfaces to multicast membership group on socket\n static addMulticastMemberships(\n socket: DgramSocket,\n settings: MulticastSettings,\n ): { memberships: NetworkInterface[]; failedMemberships: NetworkInterface[] } {\n const memberships: NetworkInterface[] = [];\n const failedMemberships: NetworkInterface[] = [];\n const family = IP.Address4.isValid(settings.multicastAddress)\n ? [Constants.IPv4, Constants.IPv4_INT]\n : [Constants.IPv6, Constants.IPv6_INT];\n settings.interfaces.forEach((iface) => {\n if (!family.includes(iface.family)) return; // unsupported family\n try {\n socket.addMembership(settings.multicastAddress, Sockets.interfaceAddress(iface));\n memberships.push(iface);\n // oxlint-disable-next-line no-unused-vars\n } catch (error) {\n failedMemberships.push(iface);\n }\n });\n return { memberships, failedMemberships };\n }\n\n // create a socket to be used when sending mDNS packets\n static async createSendSocket(\n iface: NetworkInterface,\n settings: SendSocketSettings,\n onMessage: (message: Buffer, rinfo: RemoteInfo) => void,\n socketError: (error: Error) => void,\n ): Promise<SocketResult> {\n return new Promise((resolve, _reject) => {\n const socket = DGram.createSocket({\n type: ([Constants.IPv4, Constants.IPv4_INT].includes(iface.family) ? 'udp4' : 'udp6'),\n reuseAddr: settings.reuseAddr ? true : false,\n });\n socket\n .once('error', (error) => {\n socket.close();\n resolve({ success: false, error: new Error(error.message) });\n })\n .on('error', socketError)\n .on('listening', () => {\n resolve({ success: true, iface, socket, send: socket.send.bind(socket) });\n })\n .on('message', (msg, rinfo: RemoteInfo & { interface?: string }) => {\n // include interface name so we know where the message came in\n rinfo.interface = iface.name;\n onMessage(msg, rinfo);\n })\n .bind(settings.srcPort || 0, Sockets.interfaceAddress(iface));\n });\n }\n\n // format an interface address for mDNS socket\n static interfaceAddress(iface: NetworkInterface): string {\n // return interface address with IPv6 scope if needed\n return `${iface.address}${([Constants.IPv4, Constants.IPv4_INT].includes(iface.family)\n ? ''\n : '%' + iface.name)}`;\n }\n}\n\nexport default Sockets;\n","import type { Packet, Question, RecordType } from 'dns-packet';\nimport DNSPacket from 'dns-packet';\nimport type { RemoteInfo } from 'node:dgram';\nimport { EventEmitter } from 'node:events';\nimport Util from 'node:util';\nimport * as Constants from './constants.js';\nimport type { NetworkInterface } from './interfaces.js';\nimport Interfaces from './interfaces.js';\nimport type { SocketResult } from './sockets.js';\nimport Sockets from './sockets.js';\n\nexport interface ScannerConfig {\n reuseAddr?: boolean;\n srcPort?: number;\n interfaces?: string | string[] | null;\n ttl?: number;\n loopback?: boolean;\n debug?: boolean;\n}\n\ntype Socket = SocketResult;\n\nconst Defaults: Required<ScannerConfig> = {\n reuseAddr: true,\n srcPort: 0,\n interfaces: null,\n ttl: 255,\n loopback: true,\n debug: false,\n};\n\nclass MDNSScanner extends EventEmitter {\n Config: Required<ScannerConfig>;\n ready: boolean;\n receiveSockets: Socket[];\n sendSockets: Socket[];\n interfaces?: NetworkInterface[];\n destroyed?: boolean;\n\n constructor(config?: ScannerConfig) {\n super();\n this.Config = Object.assign({}, Defaults, config);\n this.ready = false;\n this.receiveSockets = [];\n this.sendSockets = [];\n }\n\n // initialize the scanner\n async init(): Promise<boolean> {\n try {\n this.interfaces = Interfaces.getInterfaces(this.Config.interfaces || undefined);\n } catch (error) {\n this.emitError(error);\n throw error;\n }\n this.emitDebug(`Scanner interfaces: ${Util.inspect(this.interfaces)}`);\n await this.createReceiveSockets();\n await this.createSendSockets();\n if (this.receiveSockets.length && this.sendSockets.length) this.ready = true;\n return this.ready;\n }\n\n // create sockets that will receive mDNS packets\n async createReceiveSockets(): Promise<Socket[]> {\n if (!this.interfaces) return [];\n const ipv4 = this.interfaces.filter(i =>\n [Constants.IPv4, Constants.IPv4_INT].includes(i.family)\n );\n const ipv6 = this.interfaces.filter(i =>\n [Constants.IPv6, Constants.IPv6_INT].includes(i.family)\n );\n this.emitDebug(\n `Create receive sockets for${ipv4.length ? ' ' + Constants.IPv4 : ''}${\n ipv4.length && ipv6.length\n ? ' and'\n : ''\n }${ipv6.length ? ' ' + Constants.IPv6 : ''}`,\n );\n if (ipv4.length) {\n const ipv4Socket = await Sockets.createMulticastSocket({\n multicastAddress: Constants.MDNS_IPV4,\n multicastPort: Constants.MDNS_PORT,\n interfaces: ipv4,\n onMessage: this.onMessage.bind(this),\n socketError: this.socketError.bind(this),\n });\n if (ipv4Socket.success) this.receiveSockets.push(ipv4Socket);\n else if (ipv4Socket.error) this.emitError(ipv4Socket.error.message);\n }\n if (ipv6.length) {\n const ipv6Socket = await Sockets.createMulticastSocket({\n multicastAddress: Constants.MDNS_IPV6,\n multicastPort: Constants.MDNS_PORT,\n interfaces: ipv6,\n onMessage: this.onMessage.bind(this),\n socketError: this.socketError.bind(this),\n });\n if (ipv6Socket.success) this.receiveSockets.push(ipv6Socket);\n else if (ipv6Socket.error) this.emitError(ipv6Socket.error.message);\n }\n return this.receiveSockets;\n }\n\n // create sockets used to send out mDNS packets\n async createSendSockets(): Promise<void> {\n if (!this.interfaces) return;\n this.emitDebug(`Create send sockets on ${this.interfaces.length} interfaces/addresses.`);\n for (let i = 0; i < this.interfaces.length; i++) {\n const sendSocket = await Sockets.createSendSocket(\n this.interfaces[i],\n this.Config,\n this.onMessage.bind(this),\n this.socketError.bind(this),\n );\n if (sendSocket.success) this.sendSockets.push(sendSocket);\n else if (sendSocket.error) this.emitError(sendSocket.error.message);\n }\n }\n\n // handle receive socket message\n onMessage(message: Buffer, rinfo: RemoteInfo): void {\n let packet: Packet;\n try {\n packet = DNSPacket.decode(message);\n } catch (error) {\n return this.emitWarn(error);\n }\n this.emit('packet', packet, rinfo);\n }\n\n // handle socket errors\n socketError(error: any): void {\n if (error.code === 'EACCES' || error.code === 'EADDRINUSE' || error.code === 'EADDRNOTAVAIL') {\n this.emitError(error);\n } else {\n this.emitWarn(error);\n }\n }\n\n // send an mDNS query, questions can be an array of formatted questions or a single question name string, qtype is optionally used with name string\n // oxlint-disable-next-line no-redundant-type-constituents\n query(questions: string | Question[], qtype?: RecordType | string): void {\n let questionArray: Question[];\n if (typeof questions === 'string') {\n questionArray = [{ name: questions, type: (qtype || 'ANY') as RecordType }];\n } else if (Array.isArray(questions)) {\n questionArray = questions;\n } else {\n throw new Error('Query questions must be an array of mDNS query questions.');\n }\n const query = { type: 'query' as const, questions: questionArray };\n this.emitDebug(`Send mDNS query: ${Util.inspect(query)}`);\n this.send(query);\n }\n\n // send mDNS packet\n send(value: Packet): void {\n if (this.destroyed) return;\n const packet = DNSPacket.encode(value);\n for (let i = 0; i < this.sendSockets.length; i++) {\n const socket = this.sendSockets[i];\n if (socket.send && socket.iface) {\n socket.send(\n packet,\n 0,\n packet.length,\n Constants.MDNS_PORT,\n [Constants.IPv4, Constants.IPv4_INT].includes(socket.iface.family)\n ? Constants.MDNS_IPV4\n : Constants.MDNS_IPV6 + '%' + socket.iface.name,\n );\n this.emitDebug(`Send packet on ${socket.iface.address}`);\n }\n }\n }\n\n // destroy this scanner\n destroy(): void {\n this.ready = false;\n this.sendSockets.forEach(s => s.socket?.close());\n this.sendSockets = [];\n this.receiveSockets.forEach(s => s.socket?.close());\n this.receiveSockets = [];\n }\n\n ////////////////////////\n // emit event methods //\n ////////////////////////\n\n emitError(error: any): void {\n this.emit('error', error);\n }\n\n emitWarn(message: any): void {\n this.emit('warn', message);\n }\n\n emitDebug(message: string): void {\n if (this.Config.debug) this.emit('debug', message);\n }\n}\n\nexport default MDNSScanner;\n","import type { Answer, Packet } from 'dns-packet';\nimport type { RemoteInfo } from 'node:dgram';\nimport { EventEmitter } from 'node:events';\nimport * as Constants from './constants.js';\nimport type MDNSScanner from './scanner.js';\n\nexport interface ServicesConfig {\n debug?: boolean;\n}\n\nexport interface NamedService {\n service?: Answer;\n host?: string;\n port?: number;\n txt?: { strings: string[]; keyValuePairs: Record<string, string> };\n addresses?: Array<{ family: string; address: string }>;\n name?: string;\n rinfo?: RemoteInfo;\n}\n\nconst Defaults: Required<ServicesConfig> = { debug: false };\n\nclass MDNSServices extends EventEmitter {\n Config: Required<ServicesConfig>;\n scanner: MDNSScanner;\n types: string[];\n namedServices: Record<string, NamedService>;\n private packetListener: (packet: Packet, rinfo: RemoteInfo) => void;\n\n constructor(scanner: MDNSScanner, config?: ServicesConfig) {\n super();\n this.packetListener = this.onPacket.bind(this);\n this.scanner = scanner;\n this.Config = Object.assign({}, Defaults, config);\n this.types = [];\n this.namedServices = {};\n this.forwardEvents(this.scanner);\n this.reset();\n }\n\n // reset services\n reset(): void {\n this.removeMDNSListener(this.scanner);\n this.types = [];\n this.namedServices = {};\n this.listenMDNSEvents(this.scanner);\n }\n\n // forward events received from scanner\n forwardEvents(scanner: MDNSScanner): void {\n scanner\n .on('error', (error: any) => {\n this.emitError(error);\n })\n .on('warn', (message: any) => {\n this.emitWarn(message);\n })\n .on('debug', (message: string) => {\n this.emitDebug(message);\n });\n }\n\n // handle packets from scanner\n listenMDNSEvents(scanner: MDNSScanner): void {\n scanner.on('packet', this.packetListener);\n }\n\n // remove packet listener\n removeMDNSListener(scanner: MDNSScanner): void {\n scanner.removeListener('packet', this.packetListener);\n }\n\n // on scanner packet handler\n onPacket(packet: Packet, rinfo: RemoteInfo): void {\n this.emitDebug(`Received packet type ${packet.type} from ${rinfo.address}.`);\n switch (packet.type) {\n case 'query':\n this.emit('query', packet, rinfo);\n break;\n\n case 'response':\n this.emitDebug(\n `Received response packet from ${rinfo.address} with ${\n packet.answers\n ? packet.answers.length\n : 0\n } answers and ${packet.additionals ? packet.additionals.length : 0} additionals.`,\n );\n if (packet.answers) this.processAnswers(packet.answers, rinfo);\n if (packet.additionals) this.processAnswers(packet.additionals, rinfo);\n\n break;\n }\n }\n\n // process answers or additionals in a response type packet\n processAnswers(answers: Answer[], rinfo: RemoteInfo): void {\n this.emitDebug('Processing answers or additionals...');\n // process service answers\n const serviceNames = this.processSRVAnswers(answers);\n this.processTXTAnswers(answers);\n this.processAAnswers(answers);\n this.processAAAAAnswers(answers);\n this.processPTRAnswers(answers, rinfo);\n serviceNames.forEach(name => {\n this.emit('discovered', { type: 'service', data: this.namedServices[name] });\n });\n }\n\n processSRVAnswers(answers: Answer[]): string[] {\n const serviceNames: string[] = [];\n answers.forEach(answer => {\n if (answer.type !== 'SRV') return;\n this.emitDebug(`Processing SRV answer.`);\n const fullName = answer.name.toString();\n if (!serviceNames.includes(fullName)) serviceNames.push(fullName);\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].service = answer;\n this.namedServices[fullName].host = (answer.data as any).target.toString();\n this.namedServices[fullName].port = (answer.data as any).port;\n });\n return serviceNames;\n }\n\n processTXTAnswers(answers: Answer[]): void {\n answers.forEach(answer => {\n if (answer.type !== 'TXT') return;\n this.emitDebug(`Processing TXT answer.`);\n const data = answer.data as Buffer | Buffer[];\n if (Array.isArray(data) && data.length > 1) {\n const fullName = answer.name.toString();\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].txt = this.answerDataToKeyValues(Buffer.concat(data));\n } else if (Buffer.isBuffer(data)) {\n const fullName = answer.name.toString();\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].txt = this.answerDataToKeyValues(data);\n }\n });\n }\n\n processAAnswers(answers: Answer[]): void {\n answers.forEach(answer => {\n if (answer.type !== 'A') return;\n this.emitDebug(`Processing A answer.`);\n const hostName = answer.name.toString();\n const address = (answer as any).data.toString();\n for (const serviceName in this.namedServices) {\n if (this.namedServices[serviceName].host !== hostName) continue;\n this.namedServices[serviceName].addresses = this.namedServices[serviceName].addresses || [];\n const exists = this.namedServices[serviceName].addresses!.reduce((e, a) => {\n return e || a.address === address;\n }, false);\n if (!exists) {\n this.namedServices[serviceName].addresses!.push({ family: Constants.IPv4, address });\n }\n }\n });\n }\n\n processAAAAAnswers(answers: Answer[]): void {\n answers.forEach(answer => {\n if (answer.type !== 'AAAA') return;\n this.emitDebug(`Processing AAAA answer.`);\n const hostName = answer.name.toString();\n const address = (answer as any).data.toString();\n for (const serviceName in this.namedServices) {\n if (this.namedServices[serviceName].host !== hostName) continue;\n this.namedServices[serviceName].addresses = this.namedServices[serviceName].addresses || [];\n const exists = this.namedServices[serviceName].addresses!.reduce((e, a) => {\n return e || a.address === address;\n }, false);\n if (!exists) {\n this.namedServices[serviceName].addresses!.push({ family: Constants.IPv6, address });\n }\n }\n });\n }\n\n processPTRAnswers(answers: Answer[], rinfo: RemoteInfo): void {\n answers.forEach(answer => {\n if (answer.type !== 'PTR') return;\n this.emitDebug(`Processing PTR answer.`);\n const serviceType = this.serviceTypeFromPTR(answer);\n const fullName = (answer as any).data.toString();\n // build host service definition if fullName is a host service\n if (serviceType !== fullName) {\n this.namedServices[fullName] = this.namedServices[fullName] || {};\n this.namedServices[fullName].name = fullName.replace('.' + serviceType, '');\n this.namedServices[fullName].rinfo = rinfo;\n }\n });\n }\n\n // extract service type from answer data\n serviceTypeFromPTR(answer: Answer): string {\n const data = (answer as any).data;\n const match = /(?:^|^.+?(?:\\.))(_.*)$/mg.exec(data.toString()); // get service type without hostname\n const serviceType = match ? match[1] : data.toString();\n if (!this.types.includes(serviceType)) {\n this.types.push(serviceType);\n this.emit('discovered', { type: 'type', data: serviceType });\n this.emitDebug(`Scanning service type ${serviceType}.`);\n this.scanner.query(serviceType, 'ANY');\n }\n return serviceType;\n }\n\n // extract the key=value pairs from a TXT data buffer\n answerDataToKeyValues(\n data: Buffer,\n ): { strings: string[]; keyValuePairs: Record<string, string> } {\n const strings: string[] = [];\n const kvPairs: Record<string, string> = {};\n let kvPointer = 0;\n let kvLen = data[kvPointer];\n while (kvLen) {\n const pair = data.slice(kvPointer + 1, kvPointer + 1 + kvLen);\n strings.push(pair.toString());\n const kvMatch = /^([^=]+)=([^=]*)$/.exec(pair.toString());\n if (kvMatch) {\n kvPairs[kvMatch[1]] = kvMatch[2];\n }\n kvPointer = kvPointer + 1 + kvLen;\n kvLen = data[kvPointer];\n }\n return { strings: strings, keyValuePairs: kvPairs };\n }\n\n ////////////////////////\n // emit event methods //\n ////////////////////////\n\n emitError(error: any): void {\n this.emit('error', error);\n }\n\n emitWarn(message: any): void {\n this.emit('warn', message);\n }\n\n emitDebug(message: string): void {\n if (this.Config.debug) this.emit('debug', message);\n }\n}\n\nexport default MDNSServices;\n","import { AT1000Base as AT1000 } from './at1000';\n\nimport { Scanner, Services } from './mdns-scanner';\n\nexport const findDevices = async (timeout: number = 500): Promise<AT1000[]> => {\n if (timeout < 10) {\n timeout = 10;\n }\n\n let scanner = new Scanner({ debug: true });\n let services = new Services(scanner);\n\n services.on('error', (error: string) => {\n if (!error.includes('bind ENOENT')) {\n throw Error(error);\n }\n });\n\n let ready = await scanner.init();\n if (!ready) {\n throw new Error('Failed to initialize mDNS scanner');\n }\n scanner.query('_at1000_server._tcp.local');\n\n await new Promise((r) => setTimeout(r, timeout));\n\n // Extract unique IPv4 addresses from discovered services\n const addresses = [\n ...new Set(\n Object\n .values(services.namedServices)\n .filter((s: any) => s !== undefined && s.service !== undefined)\n .filter((s: any) => (s.service.name as string).endsWith('_at1000_server._tcp.local'))\n .map((s: any) => s.addresses.filter((a: any) => a.family == 'IPv4').pop()?.address)\n .filter((ipv4: string | undefined) => ipv4 !== undefined),\n ),\n ];\n\n const devices = addresses.map((ipv4) => AT1000.create(ipv4));\n\n scanner.destroy();\n\n return await Promise.all(devices);\n};\n","import { AT1000Base } from './at1000';\nimport { findDevices } from './discovery';\n\n/** @hideconstructor */\nexport class AT1000 extends AT1000Base {\n static findDevices(timeout: number = 500): Promise<AT1000[]> {\n return findDevices(timeout);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import{t as e}from"./common-DSzy5K03.mjs";import*as t from"valibot";const n=t.object({enabled:t.boolean(),target_voltage:e,voltage:e,current:t.number()}),r=t.partial(t.pick(n,[`enabled`,`target_voltage`])),i=t.pick(n,[`enabled`,`current`,`voltage`]),a=t.pick(i,[`enabled`]),o=t.pick(n,[`current`]);var s=class{usb_count;dut_count=1;constructor(e,t){this.fetch=e,this.usb_count=t.capabilities.usb_ports.length}reset(){return this.fetch(`/power/reset`,{method:`POST`,parseResponse:()=>{}})}dut(e){if(e<0||e>=this.dut_count)throw Error(`Invalid DUT id ${e} (RESOURCE_NOT_FOUND)\n Suggestion: Use a DUT ID between 0 and ${this.dut_count-1}\n Path: /power/dut/${e}`);return new c(this.fetch,e)}usb(e){if(e<0||e>=this.usb_count)throw Error(`Invalid USB port ${e} (RESOURCE_NOT_FOUND)\n Suggestion: Use a USB port ID between 0 and ${this.usb_count-1}\n Path: /power/usb/${e}`);return new l(this.fetch,e)}relay_4(){return new u(this.fetch,4)}},c=class{constructor(e,t){this.fetch=e,this.id=t}reset(){return this.fetch(`/power/dut/${this.id}/reset`,{method:`POST`,parseResponse:()=>{}})}configure(e){return this.fetch(`/power/dut/${this.id}`,{method:`PATCH`,body:t.parse(r,e),schema:n})}async power_up(e){return this.configure({enabled:!0,target_voltage:e})}async power_down(){return this.configure({enabled:!1})}read(){return this.fetch(`/power/dut/${this.id}`,{schema:n})}async read_current(){return(await this.read()).current}async read_voltage(){return(await this.read()).voltage}},l=class{constructor(e,t){this.fetch=e,this.id=t}reset(){return this.fetch(`/power/usb/${this.id}/reset`,{method:`POST`,parseResponse:()=>{}})}configure(e){return this.fetch(`/power/usb/${this.id}`,{method:`PATCH`,body:t.parse(a,e),schema:i})}power_up(){return this.configure({enabled:!0})}power_down(){return this.configure({enabled:!1})}read(){return this.fetch(`/power/usb/${this.id}`,{schema:i})}async read_current(){return(await this.read()).current}async read_voltage(){return(await this.read()).voltage}},u=class{constructor(e,t){this.fetch=e,this.id=t}read(){return this.fetch(`/power/relay/${this.id}`,{schema:o})}async read_current(){return(await this.read()).current}};export{l as i,s as n,u as r,c as t};
2
- //# sourceMappingURL=power-kf9bMNDS.mjs.map
2
+ //# sourceMappingURL=power-B1rs9Bqf.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power-B1rs9Bqf.mjs","names":["fetch: UpFetch","id: number"],"sources":["../src/api/power.ts"],"sourcesContent":["import type { UpFetch } from 'up-fetch';\nimport * as v from 'valibot';\n\nimport { analogLevel, type AnalogOutputLevel } from './common';\nimport type { Device } from './management';\n\nexport type { AnalogOutputLevel };\n\nconst dutState = v.object({\n enabled: v.boolean(),\n target_voltage: analogLevel,\n voltage: analogLevel,\n current: v.number(),\n});\nexport type DutState = v.InferOutput<typeof dutState>;\n\nconst dutConfiguration = v.partial(v.pick(dutState, ['enabled', 'target_voltage']));\nexport type DutConfiguration = v.InferOutput<typeof dutConfiguration>;\n\nconst usbState = v.pick(dutState, ['enabled', 'current', 'voltage']);\nexport type UsbState = v.InferOutput<typeof usbState>;\n\nconst usbConfiguration = v.pick(usbState, ['enabled']);\nexport type UsbConfiguration = v.InferOutput<typeof usbConfiguration>;\n\nconst relayState = v.pick(dutState, ['current']);\nexport type RelayState = v.InferOutput<typeof relayState>;\n\n/** @hideconstructor */\nexport class PowerApi {\n private readonly usb_count: number;\n private readonly dut_count = 1;\n\n constructor(private readonly fetch: UpFetch, device: Device) {\n this.usb_count = device.capabilities.usb_ports.length;\n }\n\n /**\n * Resets the power API.\n */\n reset(): Promise<void> {\n return this.fetch('/power/reset', { method: 'POST', parseResponse: () => {} });\n }\n\n /**\n * Access a specific DUT by id.\n * @param id The DUT id.\n * @returns The DUT instance.\n */\n dut(id: number): Dut {\n if (id < 0 || id >= this.dut_count) {\n throw new Error(\n `Invalid DUT id ${id} (RESOURCE_NOT_FOUND)\\n Suggestion: Use a DUT ID between 0 and ${\n this.dut_count - 1\n }\\n Path: /power/dut/${id}`,\n );\n }\n\n return new Dut(this.fetch, id);\n }\n\n /**\n * Access a specific USB port by id.\n * @param id The USB port id.\n * @returns The USB port instance.\n */\n usb(id: number): Usb {\n if (id < 0 || id >= this.usb_count) {\n throw new Error(\n `Invalid USB port ${id} (RESOURCE_NOT_FOUND)\\n Suggestion: Use a USB port ID between 0 and ${\n this.usb_count - 1\n }\\n Path: /power/usb/${id}`,\n );\n }\n\n return new Usb(this.fetch, id);\n }\n\n /**\n * Access the relay at index 4.\n * @returns The relay instance.\n */\n relay_4(): RelayPower {\n return new RelayPower(this.fetch, 4);\n }\n}\n\n/** @hideconstructor */\nexport class Dut {\n constructor(private readonly fetch: UpFetch, public readonly id: number) {}\n\n /**\n * Resets the DUT.\n */\n reset(): Promise<void> {\n return this.fetch(`/power/dut/${this.id}/reset`, { method: 'POST', parseResponse: () => {} });\n }\n\n /**\n * Configures the DUT.\n * @param config The configuration to apply.\n * @returns The updated DUT state.\n */\n configure(config: DutConfiguration): Promise<DutState> {\n return this.fetch(`/power/dut/${this.id}`, {\n method: 'PATCH',\n body: v.parse(dutConfiguration, config),\n schema: dutState,\n });\n }\n\n /**\n * Powers up the DUT to the specified voltage.\n * @param voltage The target voltage to set.\n * @returns The updated DUT state.\n */\n async power_up(voltage: AnalogOutputLevel): Promise<DutState> {\n return this.configure({ enabled: true, target_voltage: voltage });\n }\n\n /**\n * Powers down the DUT.\n * @returns The updated DUT state.\n */\n async power_down(): Promise<DutState> {\n return this.configure({ enabled: false });\n }\n\n /**\n * Reads the current DUT state.\n * @returns The current DUT state.\n */\n read(): Promise<DutState> {\n return this.fetch(`/power/dut/${this.id}`, { schema: dutState });\n }\n\n /**\n * Reads the current drawn by the DUT.\n * @returns The current drawn by the DUT.\n */\n async read_current(): Promise<number> {\n return (await this.read()).current;\n }\n\n /**\n * Reads the voltage supplied to the DUT.\n * @returns The voltage supplied to the DUT.\n */\n async read_voltage(): Promise<number> {\n return (await this.read()).voltage;\n }\n}\n\n/** @hideconstructor */\nexport class Usb {\n constructor(private readonly fetch: UpFetch, public readonly id: number) {}\n\n /**\n * Resets the USB port.\n */\n reset(): Promise<void> {\n return this.fetch(`/power/usb/${this.id}/reset`, { method: 'POST', parseResponse: () => {} });\n }\n\n /**\n * Configures the USB port.\n * @param config The configuration to apply.\n * @returns The updated USB state.\n */\n configure(config: UsbConfiguration): Promise<UsbState> {\n return this.fetch(`/power/usb/${this.id}`, {\n method: 'PATCH',\n body: v.parse(usbConfiguration, config),\n schema: usbState,\n });\n }\n\n /**\n * Powers up the USB port.\n * @returns The updated USB state.\n */\n power_up(): Promise<UsbState> {\n return this.configure({ enabled: true });\n }\n\n /**\n * Powers down the USB port.\n * @returns The updated USB state.\n */\n power_down(): Promise<UsbState> {\n return this.configure({ enabled: false });\n }\n\n /**\n * Reads the current state of the USB port.\n * @returns The current USB state.\n */\n read(): Promise<UsbState> {\n return this.fetch(`/power/usb/${this.id}`, { schema: usbState });\n }\n\n /**\n * Reads the current drawn by the USB port.\n * @returns The current drawn by the USB port.\n */\n async read_current(): Promise<number> {\n return (await this.read()).current;\n }\n\n /**\n * Reads the voltage at the USB port.\n * @returns The voltage at the USB port.\n */\n async read_voltage(): Promise<number> {\n return (await this.read()).voltage;\n }\n}\n\n/** @hideconstructor */\nexport class RelayPower {\n constructor(private readonly fetch: UpFetch, public readonly id: number) {}\n\n /**\n * Reads the current state of the relay.\n * @returns The current relay state.\n */\n read(): Promise<RelayState> {\n return this.fetch(`/power/relay/${this.id}`, { schema: relayState });\n }\n\n /**\n * Reads the current drawn through the relay.\n * @returns The current drawn through the relay.\n */\n async read_current(): Promise<number> {\n return (await this.read()).current;\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  const e=require(`./chunk-DjWAcSYV.cjs`),t=require(`./common-ix04NEFn.cjs`);let n=require(`valibot`);n=e.t(n);const r=n.object({enabled:n.boolean(),target_voltage:t.t,voltage:t.t,current:n.number()}),i=n.partial(n.pick(r,[`enabled`,`target_voltage`])),a=n.pick(r,[`enabled`,`current`,`voltage`]),o=n.pick(a,[`enabled`]),s=n.pick(r,[`current`]);var c=class{usb_count;dut_count=1;constructor(e,t){this.fetch=e,this.usb_count=t.capabilities.usb_ports.length}reset(){return this.fetch(`/power/reset`,{method:`POST`,parseResponse:()=>{}})}dut(e){if(e<0||e>=this.dut_count)throw Error(`Invalid DUT id ${e} (RESOURCE_NOT_FOUND)\n Suggestion: Use a DUT ID between 0 and ${this.dut_count-1}\n Path: /power/dut/${e}`);return new l(this.fetch,e)}usb(e){if(e<0||e>=this.usb_count)throw Error(`Invalid USB port ${e} (RESOURCE_NOT_FOUND)\n Suggestion: Use a USB port ID between 0 and ${this.usb_count-1}\n Path: /power/usb/${e}`);return new u(this.fetch,e)}relay_4(){return new d(this.fetch,4)}},l=class{constructor(e,t){this.fetch=e,this.id=t}reset(){return this.fetch(`/power/dut/${this.id}/reset`,{method:`POST`,parseResponse:()=>{}})}configure(e){return this.fetch(`/power/dut/${this.id}`,{method:`PATCH`,body:n.parse(i,e),schema:r})}async power_up(e){return this.configure({enabled:!0,target_voltage:e})}async power_down(){return this.configure({enabled:!1})}read(){return this.fetch(`/power/dut/${this.id}`,{schema:r})}async read_current(){return(await this.read()).current}async read_voltage(){return(await this.read()).voltage}},u=class{constructor(e,t){this.fetch=e,this.id=t}reset(){return this.fetch(`/power/usb/${this.id}/reset`,{method:`POST`,parseResponse:()=>{}})}configure(e){return this.fetch(`/power/usb/${this.id}`,{method:`PATCH`,body:n.parse(o,e),schema:a})}power_up(){return this.configure({enabled:!0})}power_down(){return this.configure({enabled:!1})}read(){return this.fetch(`/power/usb/${this.id}`,{schema:a})}async read_current(){return(await this.read()).current}async read_voltage(){return(await this.read()).voltage}},d=class{constructor(e,t){this.fetch=e,this.id=t}read(){return this.fetch(`/power/relay/${this.id}`,{schema:s})}async read_current(){return(await this.read()).current}};Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
2
- //# sourceMappingURL=power-DtLWOEQI.cjs.map
2
+ //# sourceMappingURL=power-BpI1_Yav.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power-BpI1_Yav.cjs","names":["v","analogLevel","fetch: UpFetch","id: number"],"sources":["../src/api/power.ts"],"sourcesContent":["import type { UpFetch } from 'up-fetch';\nimport * as v from 'valibot';\n\nimport { analogLevel, type AnalogOutputLevel } from './common';\nimport type { Device } from './management';\n\nexport type { AnalogOutputLevel };\n\nconst dutState = v.object({\n enabled: v.boolean(),\n target_voltage: analogLevel,\n voltage: analogLevel,\n current: v.number(),\n});\nexport type DutState = v.InferOutput<typeof dutState>;\n\nconst dutConfiguration = v.partial(v.pick(dutState, ['enabled', 'target_voltage']));\nexport type DutConfiguration = v.InferOutput<typeof dutConfiguration>;\n\nconst usbState = v.pick(dutState, ['enabled', 'current', 'voltage']);\nexport type UsbState = v.InferOutput<typeof usbState>;\n\nconst usbConfiguration = v.pick(usbState, ['enabled']);\nexport type UsbConfiguration = v.InferOutput<typeof usbConfiguration>;\n\nconst relayState = v.pick(dutState, ['current']);\nexport type RelayState = v.InferOutput<typeof relayState>;\n\n/** @hideconstructor */\nexport class PowerApi {\n private readonly usb_count: number;\n private readonly dut_count = 1;\n\n constructor(private readonly fetch: UpFetch, device: Device) {\n this.usb_count = device.capabilities.usb_ports.length;\n }\n\n /**\n * Resets the power API.\n */\n reset(): Promise<void> {\n return this.fetch('/power/reset', { method: 'POST', parseResponse: () => {} });\n }\n\n /**\n * Access a specific DUT by id.\n * @param id The DUT id.\n * @returns The DUT instance.\n */\n dut(id: number): Dut {\n if (id < 0 || id >= this.dut_count) {\n throw new Error(\n `Invalid DUT id ${id} (RESOURCE_NOT_FOUND)\\n Suggestion: Use a DUT ID between 0 and ${\n this.dut_count - 1\n }\\n Path: /power/dut/${id}`,\n );\n }\n\n return new Dut(this.fetch, id);\n }\n\n /**\n * Access a specific USB port by id.\n * @param id The USB port id.\n * @returns The USB port instance.\n */\n usb(id: number): Usb {\n if (id < 0 || id >= this.usb_count) {\n throw new Error(\n `Invalid USB port ${id} (RESOURCE_NOT_FOUND)\\n Suggestion: Use a USB port ID between 0 and ${\n this.usb_count - 1\n }\\n Path: /power/usb/${id}`,\n );\n }\n\n return new Usb(this.fetch, id);\n }\n\n /**\n * Access the relay at index 4.\n * @returns The relay instance.\n */\n relay_4(): RelayPower {\n return new RelayPower(this.fetch, 4);\n }\n}\n\n/** @hideconstructor */\nexport class Dut {\n constructor(private readonly fetch: UpFetch, public readonly id: number) {}\n\n /**\n * Resets the DUT.\n */\n reset(): Promise<void> {\n return this.fetch(`/power/dut/${this.id}/reset`, { method: 'POST', parseResponse: () => {} });\n }\n\n /**\n * Configures the DUT.\n * @param config The configuration to apply.\n * @returns The updated DUT state.\n */\n configure(config: DutConfiguration): Promise<DutState> {\n return this.fetch(`/power/dut/${this.id}`, {\n method: 'PATCH',\n body: v.parse(dutConfiguration, config),\n schema: dutState,\n });\n }\n\n /**\n * Powers up the DUT to the specified voltage.\n * @param voltage The target voltage to set.\n * @returns The updated DUT state.\n */\n async power_up(voltage: AnalogOutputLevel): Promise<DutState> {\n return this.configure({ enabled: true, target_voltage: voltage });\n }\n\n /**\n * Powers down the DUT.\n * @returns The updated DUT state.\n */\n async power_down(): Promise<DutState> {\n return this.configure({ enabled: false });\n }\n\n /**\n * Reads the current DUT state.\n * @returns The current DUT state.\n */\n read(): Promise<DutState> {\n return this.fetch(`/power/dut/${this.id}`, { schema: dutState });\n }\n\n /**\n * Reads the current drawn by the DUT.\n * @returns The current drawn by the DUT.\n */\n async read_current(): Promise<number> {\n return (await this.read()).current;\n }\n\n /**\n * Reads the voltage supplied to the DUT.\n * @returns The voltage supplied to the DUT.\n */\n async read_voltage(): Promise<number> {\n return (await this.read()).voltage;\n }\n}\n\n/** @hideconstructor */\nexport class Usb {\n constructor(private readonly fetch: UpFetch, public readonly id: number) {}\n\n /**\n * Resets the USB port.\n */\n reset(): Promise<void> {\n return this.fetch(`/power/usb/${this.id}/reset`, { method: 'POST', parseResponse: () => {} });\n }\n\n /**\n * Configures the USB port.\n * @param config The configuration to apply.\n * @returns The updated USB state.\n */\n configure(config: UsbConfiguration): Promise<UsbState> {\n return this.fetch(`/power/usb/${this.id}`, {\n method: 'PATCH',\n body: v.parse(usbConfiguration, config),\n schema: usbState,\n });\n }\n\n /**\n * Powers up the USB port.\n * @returns The updated USB state.\n */\n power_up(): Promise<UsbState> {\n return this.configure({ enabled: true });\n }\n\n /**\n * Powers down the USB port.\n * @returns The updated USB state.\n */\n power_down(): Promise<UsbState> {\n return this.configure({ enabled: false });\n }\n\n /**\n * Reads the current state of the USB port.\n * @returns The current USB state.\n */\n read(): Promise<UsbState> {\n return this.fetch(`/power/usb/${this.id}`, { schema: usbState });\n }\n\n /**\n * Reads the current drawn by the USB port.\n * @returns The current drawn by the USB port.\n */\n async read_current(): Promise<number> {\n return (await this.read()).current;\n }\n\n /**\n * Reads the voltage at the USB port.\n * @returns The voltage at the USB port.\n */\n async read_voltage(): Promise<number> {\n return (await this.read()).voltage;\n }\n}\n\n/** @hideconstructor */\nexport class RelayPower {\n constructor(private readonly fetch: UpFetch, public readonly id: number) {}\n\n /**\n * Reads the current state of the relay.\n * @returns The current relay state.\n */\n read(): Promise<RelayState> {\n return this.fetch(`/power/relay/${this.id}`, { schema: relayState });\n }\n\n /**\n * Reads the current drawn through the relay.\n * @returns The current drawn through the relay.\n */\n async read_current(): Promise<number> {\n return (await this.read()).current;\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as AnalogOutputLevel } from "./common-ClinPNdn.mjs";
2
- import { n as Device } from "./management-DYOPvugC.mjs";
2
+ import { n as Device } from "./management-CinGOMF_.mjs";
3
3
  import { UpFetch } from "up-fetch";
4
4
  import * as v from "valibot";
5
5
 
@@ -16,7 +16,7 @@ declare const dutConfiguration: Omit<Omit<v.ObjectSchema<{
16
16
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
17
17
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
18
18
  readonly current: v.NumberSchema<undefined>;
19
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
19
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
20
20
  readonly entries: Pick<{
21
21
  readonly enabled: v.BooleanSchema<undefined>;
22
22
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -45,7 +45,7 @@ declare const dutConfiguration: Omit<Omit<v.ObjectSchema<{
45
45
  };
46
46
  readonly issue: v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, -24> | v.MaxValueIssue<number, 24> | v.ObjectIssue;
47
47
  } | undefined;
48
- }, "~types" | "~run" | "~standard" | "entries"> & {
48
+ }, "~standard" | "~types" | "~run" | "entries"> & {
49
49
  readonly entries: {
50
50
  readonly enabled: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
51
51
  readonly target_voltage: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>, undefined>;
@@ -79,7 +79,7 @@ declare const usbState: Omit<v.ObjectSchema<{
79
79
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
80
80
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
81
81
  readonly current: v.NumberSchema<undefined>;
82
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
82
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
83
83
  readonly entries: Pick<{
84
84
  readonly enabled: v.BooleanSchema<undefined>;
85
85
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -120,7 +120,7 @@ declare const usbConfiguration: Omit<Omit<v.ObjectSchema<{
120
120
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
121
121
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
122
122
  readonly current: v.NumberSchema<undefined>;
123
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
123
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
124
124
  readonly entries: Pick<{
125
125
  readonly enabled: v.BooleanSchema<undefined>;
126
126
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -154,7 +154,7 @@ declare const usbConfiguration: Omit<Omit<v.ObjectSchema<{
154
154
  };
155
155
  readonly issue: v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, -24> | v.MaxValueIssue<number, 24> | v.ObjectIssue;
156
156
  } | undefined;
157
- }, "~types" | "~run" | "~standard" | "entries"> & {
157
+ }, "~standard" | "~types" | "~run" | "entries"> & {
158
158
  readonly entries: Pick<Pick<{
159
159
  readonly enabled: v.BooleanSchema<undefined>;
160
160
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -185,7 +185,7 @@ declare const relayState: Omit<v.ObjectSchema<{
185
185
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
186
186
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
187
187
  readonly current: v.NumberSchema<undefined>;
188
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
188
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
189
189
  readonly entries: Pick<{
190
190
  readonly enabled: v.BooleanSchema<undefined>;
191
191
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -211,6 +211,7 @@ declare const relayState: Omit<v.ObjectSchema<{
211
211
  } | undefined;
212
212
  };
213
213
  type RelayState = v.InferOutput<typeof relayState>;
214
+ /** @hideconstructor */
214
215
  declare class PowerApi {
215
216
  private readonly fetch;
216
217
  private readonly usb_count;
@@ -238,6 +239,7 @@ declare class PowerApi {
238
239
  */
239
240
  relay_4(): RelayPower;
240
241
  }
242
+ /** @hideconstructor */
241
243
  declare class Dut {
242
244
  private readonly fetch;
243
245
  readonly id: number;
@@ -279,6 +281,7 @@ declare class Dut {
279
281
  */
280
282
  read_voltage(): Promise<number>;
281
283
  }
284
+ /** @hideconstructor */
282
285
  declare class Usb {
283
286
  private readonly fetch;
284
287
  readonly id: number;
@@ -319,6 +322,7 @@ declare class Usb {
319
322
  */
320
323
  read_voltage(): Promise<number>;
321
324
  }
325
+ /** @hideconstructor */
322
326
  declare class RelayPower {
323
327
  private readonly fetch;
324
328
  readonly id: number;
@@ -336,4 +340,4 @@ declare class RelayPower {
336
340
  }
337
341
  //#endregion
338
342
  export { RelayPower as a, UsbConfiguration as c, PowerApi as i, UsbState as l, DutConfiguration as n, RelayState as o, DutState as r, Usb as s, Dut as t };
339
- //# sourceMappingURL=power-OjShJGj_.d.mts.map
343
+ //# sourceMappingURL=power-Cjtv2FqK.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"power-CaK3L5t4.d.cts","names":[],"sources":["../src/api/power.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"power-Cjtv2FqK.d.mts","names":[],"sources":["../src/api/power.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as AnalogOutputLevel } from "./common-CsBdb633.cjs";
2
- import { n as Device } from "./management-CecISx9d.cjs";
2
+ import { n as Device } from "./management-COw5z8sl.cjs";
3
3
  import { UpFetch } from "up-fetch";
4
4
  import * as v from "valibot";
5
5
 
@@ -16,7 +16,7 @@ declare const dutConfiguration: Omit<Omit<v.ObjectSchema<{
16
16
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
17
17
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
18
18
  readonly current: v.NumberSchema<undefined>;
19
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
19
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
20
20
  readonly entries: Pick<{
21
21
  readonly enabled: v.BooleanSchema<undefined>;
22
22
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -45,7 +45,7 @@ declare const dutConfiguration: Omit<Omit<v.ObjectSchema<{
45
45
  };
46
46
  readonly issue: v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, -24> | v.MaxValueIssue<number, 24> | v.ObjectIssue;
47
47
  } | undefined;
48
- }, "~types" | "~run" | "~standard" | "entries"> & {
48
+ }, "~standard" | "~types" | "~run" | "entries"> & {
49
49
  readonly entries: {
50
50
  readonly enabled: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
51
51
  readonly target_voltage: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>, undefined>;
@@ -79,7 +79,7 @@ declare const usbState: Omit<v.ObjectSchema<{
79
79
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
80
80
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
81
81
  readonly current: v.NumberSchema<undefined>;
82
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
82
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
83
83
  readonly entries: Pick<{
84
84
  readonly enabled: v.BooleanSchema<undefined>;
85
85
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -120,7 +120,7 @@ declare const usbConfiguration: Omit<Omit<v.ObjectSchema<{
120
120
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
121
121
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
122
122
  readonly current: v.NumberSchema<undefined>;
123
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
123
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
124
124
  readonly entries: Pick<{
125
125
  readonly enabled: v.BooleanSchema<undefined>;
126
126
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -154,7 +154,7 @@ declare const usbConfiguration: Omit<Omit<v.ObjectSchema<{
154
154
  };
155
155
  readonly issue: v.BooleanIssue | v.NumberIssue | v.MinValueIssue<number, -24> | v.MaxValueIssue<number, 24> | v.ObjectIssue;
156
156
  } | undefined;
157
- }, "~types" | "~run" | "~standard" | "entries"> & {
157
+ }, "~standard" | "~types" | "~run" | "entries"> & {
158
158
  readonly entries: Pick<Pick<{
159
159
  readonly enabled: v.BooleanSchema<undefined>;
160
160
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -185,7 +185,7 @@ declare const relayState: Omit<v.ObjectSchema<{
185
185
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
186
186
  readonly voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
187
187
  readonly current: v.NumberSchema<undefined>;
188
- }, undefined>, "~types" | "~run" | "~standard" | "entries"> & {
188
+ }, undefined>, "~standard" | "~types" | "~run" | "entries"> & {
189
189
  readonly entries: Pick<{
190
190
  readonly enabled: v.BooleanSchema<undefined>;
191
191
  readonly target_voltage: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, -24, undefined>, v.MaxValueAction<number, 24, undefined>]>;
@@ -211,6 +211,7 @@ declare const relayState: Omit<v.ObjectSchema<{
211
211
  } | undefined;
212
212
  };
213
213
  type RelayState = v.InferOutput<typeof relayState>;
214
+ /** @hideconstructor */
214
215
  declare class PowerApi {
215
216
  private readonly fetch;
216
217
  private readonly usb_count;
@@ -238,6 +239,7 @@ declare class PowerApi {
238
239
  */
239
240
  relay_4(): RelayPower;
240
241
  }
242
+ /** @hideconstructor */
241
243
  declare class Dut {
242
244
  private readonly fetch;
243
245
  readonly id: number;
@@ -279,6 +281,7 @@ declare class Dut {
279
281
  */
280
282
  read_voltage(): Promise<number>;
281
283
  }
284
+ /** @hideconstructor */
282
285
  declare class Usb {
283
286
  private readonly fetch;
284
287
  readonly id: number;
@@ -319,6 +322,7 @@ declare class Usb {
319
322
  */
320
323
  read_voltage(): Promise<number>;
321
324
  }
325
+ /** @hideconstructor */
322
326
  declare class RelayPower {
323
327
  private readonly fetch;
324
328
  readonly id: number;
@@ -336,4 +340,4 @@ declare class RelayPower {
336
340
  }
337
341
  //#endregion
338
342
  export { RelayPower as a, UsbConfiguration as c, PowerApi as i, UsbState as l, DutConfiguration as n, RelayState as o, DutState as r, Usb as s, Dut as t };
339
- //# sourceMappingURL=power-CaK3L5t4.d.cts.map
343
+ //# sourceMappingURL=power-DmpPdg12.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"power-OjShJGj_.d.mts","names":[],"sources":["../src/api/power.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"power-DmpPdg12.d.cts","names":[],"sources":["../src/api/power.ts"],"sourcesContent":[],"mappings":"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"}
package/build/power.cjs CHANGED
@@ -1 +1 @@
1
- require(`./common-ix04NEFn.cjs`);const e=require(`./power-DtLWOEQI.cjs`);exports.Dut=e.t,exports.PowerApi=e.n,exports.RelayPower=e.r,exports.Usb=e.i;
1
+ require(`./common-ix04NEFn.cjs`);const e=require(`./power-BpI1_Yav.cjs`);exports.Dut=e.t,exports.PowerApi=e.n,exports.RelayPower=e.r,exports.Usb=e.i;
package/build/power.d.cts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { t as AnalogOutputLevel } from "./common-CsBdb633.cjs";
2
- import "./management-CecISx9d.cjs";
3
- import { a as RelayPower, c as UsbConfiguration, i as PowerApi, l as UsbState, n as DutConfiguration, o as RelayState, r as DutState, s as Usb, t as Dut } from "./power-CaK3L5t4.cjs";
2
+ import "./management-COw5z8sl.cjs";
3
+ import { a as RelayPower, c as UsbConfiguration, i as PowerApi, l as UsbState, n as DutConfiguration, o as RelayState, r as DutState, s as Usb, t as Dut } from "./power-DmpPdg12.cjs";
4
4
  export { AnalogOutputLevel, Dut, DutConfiguration, DutState, PowerApi, RelayPower, RelayState, Usb, UsbConfiguration, UsbState };