@httpstate/typescript 0.0.30 → 0.0.31

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.
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var v=(n,t)=>{for(var e in t)i(n,e,{get:t[e],enumerable:!0})},m=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of l(t))!p.call(n,r)&&r!==e&&i(n,r,{get:()=>t[r],enumerable:!(s=c(t,r))||s.enumerable});return n};var b=n=>m(i({},"__esModule",{value:!0}),n);var h={};v(h,{default:()=>f,get:()=>a,load:()=>d,read:()=>g,set:()=>o,write:()=>u});module.exports=b(h);var a=async n=>{let t=await fetch("https://httpstate.com/"+n);if(t.status===200)return await t.text()},d=async()=>{for(let n of document.querySelectorAll("[httpstate]")){let t=n.getAttribute("httpstate"),e=globalThis.httpstate(t).on("change",s=>n.innerHTML=s.data);e.emit("change",await e.get())}},g=async n=>a(n),o=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,u=async(n,t)=>o(n,t),E=n=>{let t={addEventListener:(e,s)=>t.et.addEventListener(e,s),data:void 0,emit:(e,s)=>(t.et.dispatchEvent(Object.assign(new Event(e),{data:s})),t),et:new EventTarget,get:async()=>{console.log("get");let e=await a(t.uuid);return e!==t.data&&setTimeout(()=>{console.log("change"),t.emit("change",t.data)},0),t.data=e,t.data},off:(e,s)=>(t.removeEventListener(e,s),t),on:(e,s)=>(t.addEventListener(e,s),t),read:async()=>g(t.uuid),removeEventListener:(e,s)=>t.et.removeEventListener(e,s),set:async e=>o(t.uuid,e),uuid:n,write:async e=>u(t.uuid,e),ws:new WebSocket("wss://httpstate.com/"+n)};return t.ws.addEventListener("close",e=>console.log("close",e)),t.ws.addEventListener("error",e=>console.log("error",e)),t.ws.addEventListener("message",async e=>{let s=await e.data.text();s&&s.length>30&&s.substring(0,32)===t.uuid&&s.substring(45,46)==="1"&&(t.data=s,t.emit("change",t.data))}),t.ws.addEventListener("open",()=>t.ws.send(JSON.stringify({open:t.uuid}))),t.ws.interval=setInterval(()=>{t.ws.readyState===WebSocket.OPEN?t.ws.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(()=>{console.log("_.get"),t.get()},0),t},f=E;typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("load",async()=>{globalThis.httpstate&&(globalThis.httpstate=Object.assign(globalThis.httpstate.default,globalThis.httpstate)),await d()},{once:!0});0&&(module.exports={get,load,read,set,write});
1
+ "use strict";var a=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var m=(n,t)=>{for(var e in t)a(n,e,{get:t[e],enumerable:!0})},p=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of l(t))!f.call(n,i)&&i!==e&&a(n,i,{get:()=>t[i],enumerable:!(s=c(t,i))||s.enumerable});return n};var h=n=>p(a({},"__esModule",{value:!0}),n);var w={};m(w,{default:()=>v,get:()=>r,load:()=>o,read:()=>g,set:()=>d,write:()=>u});module.exports=h(w);var r=async n=>{let t=await fetch("https://httpstate.com/"+n);if(t.status===200)return await t.text()},o=async()=>{for(let n of document.querySelectorAll("[httpstate]")){let t=n.getAttribute("httpstate"),e=globalThis.httpstate(t).on("change",s=>n.innerHTML=s.data);e.emit("change",await e.get())}},g=async n=>r(n),d=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,u=async(n,t)=>d(n,t),b=n=>{let t={addEventListener:(e,s)=>t.on(e,s),data:void 0,emit:(e,s)=>{if(t.et[e])for(let i of t.et[e])i.call(t,s);return t},et:{},get:async()=>{let e=await r(t.uuid);return e!==t.data&&setTimeout(()=>t.emit("change",t.data),0),t.data=e,t.data},off:(e,s)=>(t.et[e]&&(t.et[e]=t.et[e].filter(i=>i!==s),t.et[e].length||delete t.et[e]),t),on:(e,s)=>(t.et[e]||(t.et[e]=[]),t.et[e].push(s),t),read:async()=>g(t.uuid),removeEventListener:(e,s)=>t.off(e,s),set:async e=>d(t.uuid,e),uuid:n,write:async e=>u(t.uuid,e),ws:new WebSocket("wss://httpstate.com/"+n)};return t.ws.addEventListener("close",e=>console.log("close",e)),t.ws.addEventListener("error",e=>console.log("error",e)),t.ws.addEventListener("message",async e=>{let s=await e.data.text();s&&s.length>30&&s.substring(0,32)===t.uuid&&s.substring(45,46)==="1"&&(t.data=s.substring(46),t.emit("change",t.data))}),t.ws.addEventListener("open",()=>t.ws.send(JSON.stringify({open:t.uuid}))),t.ws.interval=setInterval(()=>{t.ws.readyState===WebSocket.OPEN?t.ws.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(t.get,0),t},v=b;typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("load",async()=>{globalThis.httpstate&&(globalThis.httpstate=Object.assign(globalThis.httpstate.default,globalThis.httpstate)),await o()},{once:!0});0&&(module.exports={get,load,read,set,write});
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// HTTP State, https://httpstate.com/\n// Copyright (C) Alex Morales, 2026\n//\n// Unless otherwise stated in particular files or directories, this software is free software.\n// You can redistribute it and/or modify it under the terms of the GNU Affero\n// General Public License as published by the Free Software Foundation, either\n// version 3 of the License, or (at your option) any later version.\n\nexport const get:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid);\n\n if(response.status === 200)\n return await response.text();\n};\n\nexport const load:() => Promise<void> = async ():Promise<void> => {\n for(const node of document.querySelectorAll('[httpstate]')) {\n const uuid:null|string = node.getAttribute('httpstate');\n\n const state:HttpState = (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\n\n state.emit('change', await state.get());\n }\n};\n\nexport const read:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => get(uuid);\n\nexport const set:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid, {\n body:data,\n headers:{ 'Content-Type':'text/plain;charset=UTF-8' },\n method:'POST'\n });\n\n return response.status;\n};\n\nexport const write:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\n// HTTP State\nexport type HttpState = {\n addEventListener(type:string, callback:null|EventListenerOrEventListenerObject):void;\n data?:undefined|string;\n emit(type:string, data:undefined|string):HttpState;\n et:EventTarget;\n get():Promise<undefined|string>;\n off(type:string, callback:null|EventListenerOrEventListenerObject):HttpState;\n on(type:string, callback:null|EventListenerOrEventListenerObject):HttpState;\n read():Promise<undefined|string>;\n removeEventListener(type:string, callback:null|EventListenerOrEventListenerObject):void;\n set(data:string):Promise<number>;\n uuid:string;\n write(data:string):Promise<number>;\n ws:WebSocket;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n addEventListener:(type:string, callback:null|EventListenerOrEventListenerObject) => _.et.addEventListener(type, callback),\n data:undefined,\n emit:(type:string, data:string) => {\n _.et.dispatchEvent(Object.assign(new Event(type), { data }));\n\n return _;\n },\n et:new EventTarget(),\n get:async ():Promise<undefined|string> => {\n console.log('get');\n\n const data = await get(_.uuid);\n\n if(data !== _.data)\n setTimeout(() => {\n console.log('change');\n\n _.emit('change', _.data);\n }, 0);\n \n _.data = data;\n\n return _.data;\n },\n off:(type:string, callback:null|EventListenerOrEventListenerObject) => {\n _.removeEventListener(type, callback);\n\n return _;\n },\n on:(type:string, callback:null|EventListenerOrEventListenerObject) => {\n _.addEventListener(type, callback);\n\n return _;\n },\n read:async ():Promise<undefined|string> => read(_.uuid),\n removeEventListener:(type:string, callback:null|EventListenerOrEventListenerObject) => _.et.removeEventListener(type, callback),\n set:async (data:string):Promise<number> => set(_.uuid, data),\n uuid,\n write:async (data:string):Promise<number> => write(_.uuid, data),\n ws:new WebSocket('wss://httpstate.com/' + uuid)\n };\n\n _.ws.addEventListener('close', e => console.log('close', e));\n _.ws.addEventListener('error', e => console.log('error', e));\n _.ws.addEventListener('message', async e => {\n const data = await e.data.text();\n\n if(\n data\n && data.length > 30\n && data.substring(0, 32) === _.uuid\n && data.substring(45, 46) === '1'\n ) {\n _.data = data;\n\n _.emit('change', _.data);\n }\n });\n _.ws.addEventListener('open', () => _.ws.send(JSON.stringify({ open:_.uuid })));\n\n (_.ws as any).interval = setInterval(() => {\n if(_.ws.readyState === WebSocket.OPEN)\n _.ws.send('0');\n else\n clearInterval((_.ws as any).interval);\n }, 1000*30); // 30 SECONDS\n\n setTimeout(() => {\n console.log('_.get');\n\n _.get();\n }, 0);\n\n return _;\n};\n\nexport default httpstate;\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('load', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = Object.assign(\n (globalThis as any).httpstate.default,\n (globalThis as any).httpstate\n );\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","index_default","get","load","read","set","write","__toCommonJS","uuid","response","node","state","e","data","httpstate","_","type","callback"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// HTTP State, https://httpstate.com/\n// Copyright (C) Alex Morales, 2026\n//\n// Unless otherwise stated in particular files or directories, this software is free software.\n// You can redistribute it and/or modify it under the terms of the GNU Affero\n// General Public License as published by the Free Software Foundation, either\n// version 3 of the License, or (at your option) any later version.\n\nexport const get:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid);\n\n if(response.status === 200)\n return await response.text();\n};\n\nexport const load:() => Promise<void> = async ():Promise<void> => {\n for(const node of document.querySelectorAll('[httpstate]')) {\n const uuid:null|string = node.getAttribute('httpstate');\n\n const state:HttpState = (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\n\n state.emit('change', await state.get());\n }\n};\n\nexport const read:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => get(uuid);\n\nexport const set:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid, {\n body:data,\n headers:{ 'Content-Type':'text/plain;charset=UTF-8' },\n method:'POST'\n });\n\n return response.status;\n};\n\nexport const write:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\n// HTTP State\nexport type HttpState = {\n addEventListener(type:string, callback:(data:undefined|string) => void):void;\n data?:undefined|string;\n emit(type:string, data:undefined|string):HttpState;\n et:{ [type:string]:((data:undefined|string) => void)[] };\n get():Promise<undefined|string>;\n off(type:string, callback:(data:undefined|string) => void):HttpState;\n on(type:string, callback:(data:undefined|string) => void):HttpState;\n read():Promise<undefined|string>;\n removeEventListener(type:string, callback:(data:undefined|string) => void):void;\n set(data:string):Promise<number>;\n uuid:string;\n write(data:string):Promise<number>;\n ws:WebSocket;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n addEventListener:(type:string, callback:(data:undefined|string) => void) => _.on(type, callback),\n data:undefined,\n emit:(type:string, data:string) => {\n if(_.et[type])\n for(const callback of _.et[type])\n callback.call(_, data);\n\n return _;\n },\n et:{},\n get:async ():Promise<undefined|string> => {\n const data = await get(_.uuid);\n\n if(data !== _.data)\n setTimeout(() => _.emit('change', _.data), 0);\n \n _.data = data;\n\n return _.data;\n },\n off:(type:string, callback:(data:undefined|string) => void) => {\n if(_.et[type]) {\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!_.et[type].length)\n delete _.et[type];\n }\n\n return _;\n },\n on:(type:string, callback:(data:undefined|string) => void) => {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n\n return _;\n },\n read:async ():Promise<undefined|string> => read(_.uuid),\n removeEventListener:(type:string, callback:(data:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<number> => set(_.uuid, data),\n uuid,\n write:async (data:string):Promise<number> => write(_.uuid, data),\n ws:new WebSocket('wss://httpstate.com/' + uuid)\n };\n\n _.ws.addEventListener('close', e => console.log('close', e));\n _.ws.addEventListener('error', e => console.log('error', e));\n _.ws.addEventListener('message', async e => {\n const data = await e.data.text();\n\n if(\n data\n && data.length > 30\n && data.substring(0, 32) === _.uuid\n && data.substring(45, 46) === '1'\n ) {\n _.data = data.substring(46);\n\n _.emit('change', _.data);\n }\n });\n _.ws.addEventListener('open', () => _.ws.send(JSON.stringify({ open:_.uuid })));\n\n (_.ws as any).interval = setInterval(() => {\n if(_.ws.readyState === WebSocket.OPEN)\n _.ws.send('0');\n else\n clearInterval((_.ws as any).interval);\n }, 1000*30); // 30 SECONDS\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default httpstate;\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('load', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = Object.assign(\n (globalThis as any).httpstate.default,\n (globalThis as any).httpstate\n );\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","index_default","get","load","read","set","write","__toCommonJS","uuid","response","node","state","e","data","httpstate","_","type","callback","_callback"]}
package/dist/index.d.cts CHANGED
@@ -4,15 +4,17 @@ declare const read: (uuid: string) => Promise<undefined | string>;
4
4
  declare const set: (uuid: string, data: string) => Promise<number>;
5
5
  declare const write: (uuid: string, data: string) => Promise<number>;
6
6
  type HttpState = {
7
- addEventListener(type: string, callback: null | EventListenerOrEventListenerObject): void;
7
+ addEventListener(type: string, callback: (data: undefined | string) => void): void;
8
8
  data?: undefined | string;
9
9
  emit(type: string, data: undefined | string): HttpState;
10
- et: EventTarget;
10
+ et: {
11
+ [type: string]: ((data: undefined | string) => void)[];
12
+ };
11
13
  get(): Promise<undefined | string>;
12
- off(type: string, callback: null | EventListenerOrEventListenerObject): HttpState;
13
- on(type: string, callback: null | EventListenerOrEventListenerObject): HttpState;
14
+ off(type: string, callback: (data: undefined | string) => void): HttpState;
15
+ on(type: string, callback: (data: undefined | string) => void): HttpState;
14
16
  read(): Promise<undefined | string>;
15
- removeEventListener(type: string, callback: null | EventListenerOrEventListenerObject): void;
17
+ removeEventListener(type: string, callback: (data: undefined | string) => void): void;
16
18
  set(data: string): Promise<number>;
17
19
  uuid: string;
18
20
  write(data: string): Promise<number>;
package/dist/index.d.ts CHANGED
@@ -4,15 +4,17 @@ declare const read: (uuid: string) => Promise<undefined | string>;
4
4
  declare const set: (uuid: string, data: string) => Promise<number>;
5
5
  declare const write: (uuid: string, data: string) => Promise<number>;
6
6
  type HttpState = {
7
- addEventListener(type: string, callback: null | EventListenerOrEventListenerObject): void;
7
+ addEventListener(type: string, callback: (data: undefined | string) => void): void;
8
8
  data?: undefined | string;
9
9
  emit(type: string, data: undefined | string): HttpState;
10
- et: EventTarget;
10
+ et: {
11
+ [type: string]: ((data: undefined | string) => void)[];
12
+ };
11
13
  get(): Promise<undefined | string>;
12
- off(type: string, callback: null | EventListenerOrEventListenerObject): HttpState;
13
- on(type: string, callback: null | EventListenerOrEventListenerObject): HttpState;
14
+ off(type: string, callback: (data: undefined | string) => void): HttpState;
15
+ on(type: string, callback: (data: undefined | string) => void): HttpState;
14
16
  read(): Promise<undefined | string>;
15
- removeEventListener(type: string, callback: null | EventListenerOrEventListenerObject): void;
17
+ removeEventListener(type: string, callback: (data: undefined | string) => void): void;
16
18
  set(data: string): Promise<number>;
17
19
  uuid: string;
18
20
  write(data: string): Promise<number>;
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- var r=async s=>{let t=await fetch("https://httpstate.com/"+s);if(t.status===200)return await t.text()},a=async()=>{for(let s of document.querySelectorAll("[httpstate]")){let t=s.getAttribute("httpstate"),e=globalThis.httpstate(t).on("change",n=>s.innerHTML=n.data);e.emit("change",await e.get())}},o=async s=>r(s),i=async(s,t)=>(await fetch("https://httpstate.com/"+s,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,d=async(s,t)=>i(s,t),g=s=>{let t={addEventListener:(e,n)=>t.et.addEventListener(e,n),data:void 0,emit:(e,n)=>(t.et.dispatchEvent(Object.assign(new Event(e),{data:n})),t),et:new EventTarget,get:async()=>{console.log("get");let e=await r(t.uuid);return e!==t.data&&setTimeout(()=>{console.log("change"),t.emit("change",t.data)},0),t.data=e,t.data},off:(e,n)=>(t.removeEventListener(e,n),t),on:(e,n)=>(t.addEventListener(e,n),t),read:async()=>o(t.uuid),removeEventListener:(e,n)=>t.et.removeEventListener(e,n),set:async e=>i(t.uuid,e),uuid:s,write:async e=>d(t.uuid,e),ws:new WebSocket("wss://httpstate.com/"+s)};return t.ws.addEventListener("close",e=>console.log("close",e)),t.ws.addEventListener("error",e=>console.log("error",e)),t.ws.addEventListener("message",async e=>{let n=await e.data.text();n&&n.length>30&&n.substring(0,32)===t.uuid&&n.substring(45,46)==="1"&&(t.data=n,t.emit("change",t.data))}),t.ws.addEventListener("open",()=>t.ws.send(JSON.stringify({open:t.uuid}))),t.ws.interval=setInterval(()=>{t.ws.readyState===WebSocket.OPEN?t.ws.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(()=>{console.log("_.get"),t.get()},0),t},u=g;typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("load",async()=>{globalThis.httpstate&&(globalThis.httpstate=Object.assign(globalThis.httpstate.default,globalThis.httpstate)),await a()},{once:!0});export{u as default,r as get,a as load,o as read,i as set,d as write};
1
+ var a=async s=>{let t=await fetch("https://httpstate.com/"+s);if(t.status===200)return await t.text()},d=async()=>{for(let s of document.querySelectorAll("[httpstate]")){let t=s.getAttribute("httpstate"),e=globalThis.httpstate(t).on("change",n=>s.innerHTML=n.data);e.emit("change",await e.get())}},o=async s=>a(s),r=async(s,t)=>(await fetch("https://httpstate.com/"+s,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,g=async(s,t)=>r(s,t),u=s=>{let t={addEventListener:(e,n)=>t.on(e,n),data:void 0,emit:(e,n)=>{if(t.et[e])for(let i of t.et[e])i.call(t,n);return t},et:{},get:async()=>{let e=await a(t.uuid);return e!==t.data&&setTimeout(()=>t.emit("change",t.data),0),t.data=e,t.data},off:(e,n)=>(t.et[e]&&(t.et[e]=t.et[e].filter(i=>i!==n),t.et[e].length||delete t.et[e]),t),on:(e,n)=>(t.et[e]||(t.et[e]=[]),t.et[e].push(n),t),read:async()=>o(t.uuid),removeEventListener:(e,n)=>t.off(e,n),set:async e=>r(t.uuid,e),uuid:s,write:async e=>g(t.uuid,e),ws:new WebSocket("wss://httpstate.com/"+s)};return t.ws.addEventListener("close",e=>console.log("close",e)),t.ws.addEventListener("error",e=>console.log("error",e)),t.ws.addEventListener("message",async e=>{let n=await e.data.text();n&&n.length>30&&n.substring(0,32)===t.uuid&&n.substring(45,46)==="1"&&(t.data=n.substring(46),t.emit("change",t.data))}),t.ws.addEventListener("open",()=>t.ws.send(JSON.stringify({open:t.uuid}))),t.ws.interval=setInterval(()=>{t.ws.readyState===WebSocket.OPEN?t.ws.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(t.get,0),t},c=u;typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("load",async()=>{globalThis.httpstate&&(globalThis.httpstate=Object.assign(globalThis.httpstate.default,globalThis.httpstate)),await d()},{once:!0});export{c as default,a as get,d as load,o as read,r as set,g as write};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// HTTP State, https://httpstate.com/\n// Copyright (C) Alex Morales, 2026\n//\n// Unless otherwise stated in particular files or directories, this software is free software.\n// You can redistribute it and/or modify it under the terms of the GNU Affero\n// General Public License as published by the Free Software Foundation, either\n// version 3 of the License, or (at your option) any later version.\n\nexport const get:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid);\n\n if(response.status === 200)\n return await response.text();\n};\n\nexport const load:() => Promise<void> = async ():Promise<void> => {\n for(const node of document.querySelectorAll('[httpstate]')) {\n const uuid:null|string = node.getAttribute('httpstate');\n\n const state:HttpState = (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\n\n state.emit('change', await state.get());\n }\n};\n\nexport const read:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => get(uuid);\n\nexport const set:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid, {\n body:data,\n headers:{ 'Content-Type':'text/plain;charset=UTF-8' },\n method:'POST'\n });\n\n return response.status;\n};\n\nexport const write:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\n// HTTP State\nexport type HttpState = {\n addEventListener(type:string, callback:null|EventListenerOrEventListenerObject):void;\n data?:undefined|string;\n emit(type:string, data:undefined|string):HttpState;\n et:EventTarget;\n get():Promise<undefined|string>;\n off(type:string, callback:null|EventListenerOrEventListenerObject):HttpState;\n on(type:string, callback:null|EventListenerOrEventListenerObject):HttpState;\n read():Promise<undefined|string>;\n removeEventListener(type:string, callback:null|EventListenerOrEventListenerObject):void;\n set(data:string):Promise<number>;\n uuid:string;\n write(data:string):Promise<number>;\n ws:WebSocket;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n addEventListener:(type:string, callback:null|EventListenerOrEventListenerObject) => _.et.addEventListener(type, callback),\n data:undefined,\n emit:(type:string, data:string) => {\n _.et.dispatchEvent(Object.assign(new Event(type), { data }));\n\n return _;\n },\n et:new EventTarget(),\n get:async ():Promise<undefined|string> => {\n console.log('get');\n\n const data = await get(_.uuid);\n\n if(data !== _.data)\n setTimeout(() => {\n console.log('change');\n\n _.emit('change', _.data);\n }, 0);\n \n _.data = data;\n\n return _.data;\n },\n off:(type:string, callback:null|EventListenerOrEventListenerObject) => {\n _.removeEventListener(type, callback);\n\n return _;\n },\n on:(type:string, callback:null|EventListenerOrEventListenerObject) => {\n _.addEventListener(type, callback);\n\n return _;\n },\n read:async ():Promise<undefined|string> => read(_.uuid),\n removeEventListener:(type:string, callback:null|EventListenerOrEventListenerObject) => _.et.removeEventListener(type, callback),\n set:async (data:string):Promise<number> => set(_.uuid, data),\n uuid,\n write:async (data:string):Promise<number> => write(_.uuid, data),\n ws:new WebSocket('wss://httpstate.com/' + uuid)\n };\n\n _.ws.addEventListener('close', e => console.log('close', e));\n _.ws.addEventListener('error', e => console.log('error', e));\n _.ws.addEventListener('message', async e => {\n const data = await e.data.text();\n\n if(\n data\n && data.length > 30\n && data.substring(0, 32) === _.uuid\n && data.substring(45, 46) === '1'\n ) {\n _.data = data;\n\n _.emit('change', _.data);\n }\n });\n _.ws.addEventListener('open', () => _.ws.send(JSON.stringify({ open:_.uuid })));\n\n (_.ws as any).interval = setInterval(() => {\n if(_.ws.readyState === WebSocket.OPEN)\n _.ws.send('0');\n else\n clearInterval((_.ws as any).interval);\n }, 1000*30); // 30 SECONDS\n\n setTimeout(() => {\n console.log('_.get');\n\n _.get();\n }, 0);\n\n return _;\n};\n\nexport default httpstate;\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('load', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = Object.assign(\n (globalThis as any).httpstate.default,\n (globalThis as any).httpstate\n );\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["get","uuid","response","load","node","state","e","read","set","data","write","httpstate","_","type","callback","index_default"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// HTTP State, https://httpstate.com/\n// Copyright (C) Alex Morales, 2026\n//\n// Unless otherwise stated in particular files or directories, this software is free software.\n// You can redistribute it and/or modify it under the terms of the GNU Affero\n// General Public License as published by the Free Software Foundation, either\n// version 3 of the License, or (at your option) any later version.\n\nexport const get:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid);\n\n if(response.status === 200)\n return await response.text();\n};\n\nexport const load:() => Promise<void> = async ():Promise<void> => {\n for(const node of document.querySelectorAll('[httpstate]')) {\n const uuid:null|string = node.getAttribute('httpstate');\n\n const state:HttpState = (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\n\n state.emit('change', await state.get());\n }\n};\n\nexport const read:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => get(uuid);\n\nexport const set:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid, {\n body:data,\n headers:{ 'Content-Type':'text/plain;charset=UTF-8' },\n method:'POST'\n });\n\n return response.status;\n};\n\nexport const write:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\n// HTTP State\nexport type HttpState = {\n addEventListener(type:string, callback:(data:undefined|string) => void):void;\n data?:undefined|string;\n emit(type:string, data:undefined|string):HttpState;\n et:{ [type:string]:((data:undefined|string) => void)[] };\n get():Promise<undefined|string>;\n off(type:string, callback:(data:undefined|string) => void):HttpState;\n on(type:string, callback:(data:undefined|string) => void):HttpState;\n read():Promise<undefined|string>;\n removeEventListener(type:string, callback:(data:undefined|string) => void):void;\n set(data:string):Promise<number>;\n uuid:string;\n write(data:string):Promise<number>;\n ws:WebSocket;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n addEventListener:(type:string, callback:(data:undefined|string) => void) => _.on(type, callback),\n data:undefined,\n emit:(type:string, data:string) => {\n if(_.et[type])\n for(const callback of _.et[type])\n callback.call(_, data);\n\n return _;\n },\n et:{},\n get:async ():Promise<undefined|string> => {\n const data = await get(_.uuid);\n\n if(data !== _.data)\n setTimeout(() => _.emit('change', _.data), 0);\n \n _.data = data;\n\n return _.data;\n },\n off:(type:string, callback:(data:undefined|string) => void) => {\n if(_.et[type]) {\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!_.et[type].length)\n delete _.et[type];\n }\n\n return _;\n },\n on:(type:string, callback:(data:undefined|string) => void) => {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n\n return _;\n },\n read:async ():Promise<undefined|string> => read(_.uuid),\n removeEventListener:(type:string, callback:(data:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<number> => set(_.uuid, data),\n uuid,\n write:async (data:string):Promise<number> => write(_.uuid, data),\n ws:new WebSocket('wss://httpstate.com/' + uuid)\n };\n\n _.ws.addEventListener('close', e => console.log('close', e));\n _.ws.addEventListener('error', e => console.log('error', e));\n _.ws.addEventListener('message', async e => {\n const data = await e.data.text();\n\n if(\n data\n && data.length > 30\n && data.substring(0, 32) === _.uuid\n && data.substring(45, 46) === '1'\n ) {\n _.data = data.substring(46);\n\n _.emit('change', _.data);\n }\n });\n _.ws.addEventListener('open', () => _.ws.send(JSON.stringify({ open:_.uuid })));\n\n (_.ws as any).interval = setInterval(() => {\n if(_.ws.readyState === WebSocket.OPEN)\n _.ws.send('0');\n else\n clearInterval((_.ws as any).interval);\n }, 1000*30); // 30 SECONDS\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default httpstate;\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('load', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = Object.assign(\n (globalThis as any).httpstate.default,\n (globalThis as any).httpstate\n );\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["get","uuid","response","load","node","state","e","read","set","data","write","httpstate","_","type","callback","_callback","index_default"]}
@@ -1,2 +1,2 @@
1
- "use strict";var httpstate=(()=>{var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var v=(n,t)=>{for(var e in t)i(n,e,{get:t[e],enumerable:!0})},m=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of l(t))!p.call(n,r)&&r!==e&&i(n,r,{get:()=>t[r],enumerable:!(s=c(t,r))||s.enumerable});return n};var b=n=>m(i({},"__esModule",{value:!0}),n);var h={};v(h,{default:()=>f,get:()=>a,load:()=>d,read:()=>g,set:()=>o,write:()=>u});var a=async n=>{let t=await fetch("https://httpstate.com/"+n);if(t.status===200)return await t.text()},d=async()=>{for(let n of document.querySelectorAll("[httpstate]")){let t=n.getAttribute("httpstate"),e=globalThis.httpstate(t).on("change",s=>n.innerHTML=s.data);e.emit("change",await e.get())}},g=async n=>a(n),o=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,u=async(n,t)=>o(n,t),E=n=>{let t={addEventListener:(e,s)=>t.et.addEventListener(e,s),data:void 0,emit:(e,s)=>(t.et.dispatchEvent(Object.assign(new Event(e),{data:s})),t),et:new EventTarget,get:async()=>{console.log("get");let e=await a(t.uuid);return e!==t.data&&setTimeout(()=>{console.log("change"),t.emit("change",t.data)},0),t.data=e,t.data},off:(e,s)=>(t.removeEventListener(e,s),t),on:(e,s)=>(t.addEventListener(e,s),t),read:async()=>g(t.uuid),removeEventListener:(e,s)=>t.et.removeEventListener(e,s),set:async e=>o(t.uuid,e),uuid:n,write:async e=>u(t.uuid,e),ws:new WebSocket("wss://httpstate.com/"+n)};return t.ws.addEventListener("close",e=>console.log("close",e)),t.ws.addEventListener("error",e=>console.log("error",e)),t.ws.addEventListener("message",async e=>{let s=await e.data.text();s&&s.length>30&&s.substring(0,32)===t.uuid&&s.substring(45,46)==="1"&&(t.data=s,t.emit("change",t.data))}),t.ws.addEventListener("open",()=>t.ws.send(JSON.stringify({open:t.uuid}))),t.ws.interval=setInterval(()=>{t.ws.readyState===WebSocket.OPEN?t.ws.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(()=>{console.log("_.get"),t.get()},0),t},f=E;typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("load",async()=>{globalThis.httpstate&&(globalThis.httpstate=Object.assign(globalThis.httpstate.default,globalThis.httpstate)),await d()},{once:!0});return b(h);})();
1
+ "use strict";var httpstate=(()=>{var a=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var m=(n,t)=>{for(var e in t)a(n,e,{get:t[e],enumerable:!0})},p=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of l(t))!f.call(n,i)&&i!==e&&a(n,i,{get:()=>t[i],enumerable:!(s=c(t,i))||s.enumerable});return n};var h=n=>p(a({},"__esModule",{value:!0}),n);var w={};m(w,{default:()=>v,get:()=>r,load:()=>o,read:()=>g,set:()=>d,write:()=>u});var r=async n=>{let t=await fetch("https://httpstate.com/"+n);if(t.status===200)return await t.text()},o=async()=>{for(let n of document.querySelectorAll("[httpstate]")){let t=n.getAttribute("httpstate"),e=globalThis.httpstate(t).on("change",s=>n.innerHTML=s.data);e.emit("change",await e.get())}},g=async n=>r(n),d=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,u=async(n,t)=>d(n,t),b=n=>{let t={addEventListener:(e,s)=>t.on(e,s),data:void 0,emit:(e,s)=>{if(t.et[e])for(let i of t.et[e])i.call(t,s);return t},et:{},get:async()=>{let e=await r(t.uuid);return e!==t.data&&setTimeout(()=>t.emit("change",t.data),0),t.data=e,t.data},off:(e,s)=>(t.et[e]&&(t.et[e]=t.et[e].filter(i=>i!==s),t.et[e].length||delete t.et[e]),t),on:(e,s)=>(t.et[e]||(t.et[e]=[]),t.et[e].push(s),t),read:async()=>g(t.uuid),removeEventListener:(e,s)=>t.off(e,s),set:async e=>d(t.uuid,e),uuid:n,write:async e=>u(t.uuid,e),ws:new WebSocket("wss://httpstate.com/"+n)};return t.ws.addEventListener("close",e=>console.log("close",e)),t.ws.addEventListener("error",e=>console.log("error",e)),t.ws.addEventListener("message",async e=>{let s=await e.data.text();s&&s.length>30&&s.substring(0,32)===t.uuid&&s.substring(45,46)==="1"&&(t.data=s.substring(46),t.emit("change",t.data))}),t.ws.addEventListener("open",()=>t.ws.send(JSON.stringify({open:t.uuid}))),t.ws.interval=setInterval(()=>{t.ws.readyState===WebSocket.OPEN?t.ws.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(t.get,0),t},v=b;typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("load",async()=>{globalThis.httpstate&&(globalThis.httpstate=Object.assign(globalThis.httpstate.default,globalThis.httpstate)),await o()},{once:!0});return h(w);})();
2
2
  //# sourceMappingURL=index.global.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// HTTP State, https://httpstate.com/\n// Copyright (C) Alex Morales, 2026\n//\n// Unless otherwise stated in particular files or directories, this software is free software.\n// You can redistribute it and/or modify it under the terms of the GNU Affero\n// General Public License as published by the Free Software Foundation, either\n// version 3 of the License, or (at your option) any later version.\n\nexport const get:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid);\n\n if(response.status === 200)\n return await response.text();\n};\n\nexport const load:() => Promise<void> = async ():Promise<void> => {\n for(const node of document.querySelectorAll('[httpstate]')) {\n const uuid:null|string = node.getAttribute('httpstate');\n\n const state:HttpState = (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\n\n state.emit('change', await state.get());\n }\n};\n\nexport const read:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => get(uuid);\n\nexport const set:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid, {\n body:data,\n headers:{ 'Content-Type':'text/plain;charset=UTF-8' },\n method:'POST'\n });\n\n return response.status;\n};\n\nexport const write:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\n// HTTP State\nexport type HttpState = {\n addEventListener(type:string, callback:null|EventListenerOrEventListenerObject):void;\n data?:undefined|string;\n emit(type:string, data:undefined|string):HttpState;\n et:EventTarget;\n get():Promise<undefined|string>;\n off(type:string, callback:null|EventListenerOrEventListenerObject):HttpState;\n on(type:string, callback:null|EventListenerOrEventListenerObject):HttpState;\n read():Promise<undefined|string>;\n removeEventListener(type:string, callback:null|EventListenerOrEventListenerObject):void;\n set(data:string):Promise<number>;\n uuid:string;\n write(data:string):Promise<number>;\n ws:WebSocket;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n addEventListener:(type:string, callback:null|EventListenerOrEventListenerObject) => _.et.addEventListener(type, callback),\n data:undefined,\n emit:(type:string, data:string) => {\n _.et.dispatchEvent(Object.assign(new Event(type), { data }));\n\n return _;\n },\n et:new EventTarget(),\n get:async ():Promise<undefined|string> => {\n console.log('get');\n\n const data = await get(_.uuid);\n\n if(data !== _.data)\n setTimeout(() => {\n console.log('change');\n\n _.emit('change', _.data);\n }, 0);\n \n _.data = data;\n\n return _.data;\n },\n off:(type:string, callback:null|EventListenerOrEventListenerObject) => {\n _.removeEventListener(type, callback);\n\n return _;\n },\n on:(type:string, callback:null|EventListenerOrEventListenerObject) => {\n _.addEventListener(type, callback);\n\n return _;\n },\n read:async ():Promise<undefined|string> => read(_.uuid),\n removeEventListener:(type:string, callback:null|EventListenerOrEventListenerObject) => _.et.removeEventListener(type, callback),\n set:async (data:string):Promise<number> => set(_.uuid, data),\n uuid,\n write:async (data:string):Promise<number> => write(_.uuid, data),\n ws:new WebSocket('wss://httpstate.com/' + uuid)\n };\n\n _.ws.addEventListener('close', e => console.log('close', e));\n _.ws.addEventListener('error', e => console.log('error', e));\n _.ws.addEventListener('message', async e => {\n const data = await e.data.text();\n\n if(\n data\n && data.length > 30\n && data.substring(0, 32) === _.uuid\n && data.substring(45, 46) === '1'\n ) {\n _.data = data;\n\n _.emit('change', _.data);\n }\n });\n _.ws.addEventListener('open', () => _.ws.send(JSON.stringify({ open:_.uuid })));\n\n (_.ws as any).interval = setInterval(() => {\n if(_.ws.readyState === WebSocket.OPEN)\n _.ws.send('0');\n else\n clearInterval((_.ws as any).interval);\n }, 1000*30); // 30 SECONDS\n\n setTimeout(() => {\n console.log('_.get');\n\n _.get();\n }, 0);\n\n return _;\n};\n\nexport default httpstate;\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('load', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = Object.assign(\n (globalThis as any).httpstate.default,\n (globalThis as any).httpstate\n );\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","index_default","get","load","read","set","write","uuid","response","node","state","e","data","httpstate","_","type","callback"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// HTTP State, https://httpstate.com/\n// Copyright (C) Alex Morales, 2026\n//\n// Unless otherwise stated in particular files or directories, this software is free software.\n// You can redistribute it and/or modify it under the terms of the GNU Affero\n// General Public License as published by the Free Software Foundation, either\n// version 3 of the License, or (at your option) any later version.\n\nexport const get:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid);\n\n if(response.status === 200)\n return await response.text();\n};\n\nexport const load:() => Promise<void> = async ():Promise<void> => {\n for(const node of document.querySelectorAll('[httpstate]')) {\n const uuid:null|string = node.getAttribute('httpstate');\n\n const state:HttpState = (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\n\n state.emit('change', await state.get());\n }\n};\n\nexport const read:(uuid:string) => Promise<undefined|string> = async (uuid:string):Promise<undefined|string> => get(uuid);\n\nexport const set:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => {\n const response:Response = await fetch('https://httpstate.com/' + uuid, {\n body:data,\n headers:{ 'Content-Type':'text/plain;charset=UTF-8' },\n method:'POST'\n });\n\n return response.status;\n};\n\nexport const write:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\n// HTTP State\nexport type HttpState = {\n addEventListener(type:string, callback:(data:undefined|string) => void):void;\n data?:undefined|string;\n emit(type:string, data:undefined|string):HttpState;\n et:{ [type:string]:((data:undefined|string) => void)[] };\n get():Promise<undefined|string>;\n off(type:string, callback:(data:undefined|string) => void):HttpState;\n on(type:string, callback:(data:undefined|string) => void):HttpState;\n read():Promise<undefined|string>;\n removeEventListener(type:string, callback:(data:undefined|string) => void):void;\n set(data:string):Promise<number>;\n uuid:string;\n write(data:string):Promise<number>;\n ws:WebSocket;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n addEventListener:(type:string, callback:(data:undefined|string) => void) => _.on(type, callback),\n data:undefined,\n emit:(type:string, data:string) => {\n if(_.et[type])\n for(const callback of _.et[type])\n callback.call(_, data);\n\n return _;\n },\n et:{},\n get:async ():Promise<undefined|string> => {\n const data = await get(_.uuid);\n\n if(data !== _.data)\n setTimeout(() => _.emit('change', _.data), 0);\n \n _.data = data;\n\n return _.data;\n },\n off:(type:string, callback:(data:undefined|string) => void) => {\n if(_.et[type]) {\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!_.et[type].length)\n delete _.et[type];\n }\n\n return _;\n },\n on:(type:string, callback:(data:undefined|string) => void) => {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n\n return _;\n },\n read:async ():Promise<undefined|string> => read(_.uuid),\n removeEventListener:(type:string, callback:(data:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<number> => set(_.uuid, data),\n uuid,\n write:async (data:string):Promise<number> => write(_.uuid, data),\n ws:new WebSocket('wss://httpstate.com/' + uuid)\n };\n\n _.ws.addEventListener('close', e => console.log('close', e));\n _.ws.addEventListener('error', e => console.log('error', e));\n _.ws.addEventListener('message', async e => {\n const data = await e.data.text();\n\n if(\n data\n && data.length > 30\n && data.substring(0, 32) === _.uuid\n && data.substring(45, 46) === '1'\n ) {\n _.data = data.substring(46);\n\n _.emit('change', _.data);\n }\n });\n _.ws.addEventListener('open', () => _.ws.send(JSON.stringify({ open:_.uuid })));\n\n (_.ws as any).interval = setInterval(() => {\n if(_.ws.readyState === WebSocket.OPEN)\n _.ws.send('0');\n else\n clearInterval((_.ws as any).interval);\n }, 1000*30); // 30 SECONDS\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default httpstate;\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('load', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = Object.assign(\n (globalThis as any).httpstate.default,\n (globalThis as any).httpstate\n );\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","index_default","get","load","read","set","write","uuid","response","node","state","e","data","httpstate","_","type","callback","_callback"]}
package/package.json CHANGED
@@ -25,5 +25,5 @@
25
25
  },
26
26
  "type": "module",
27
27
  "types": "dist/index.d.ts",
28
- "version": "0.0.30"
28
+ "version": "0.0.31"
29
29
  }