@httpstate/typescript 0.0.33 → 0.0.35

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 a=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(n,t)=>{for(var e in t)a(n,e,{get:t[e],enumerable:!0})},p=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of l(t))!c.call(n,s)&&s!==e&&a(n,s,{get:()=>t[s],enumerable:!(i=f(t,s))||i.enumerable});return n};var v=n=>p(a({},"__esModule",{value:!0}),n);var w={};m(w,{default:()=>b,get:()=>d,load:()=>o,read:()=>u,set:()=>r,write:()=>g});module.exports=v(w);var d=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");globalThis.httpstate(t).on("change",e=>n.innerHTML=e.data)}},u=async n=>d(n),r=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,g=async(n,t)=>r(n,t),h=n=>{let t={data:void 0,et:{},uuid:n,ws:new WebSocket("wss://httpstate.com/"+n),addEventListener:(e,i)=>t.on(e,i),destroy:()=>{clearInterval(t.ws.interval),t.ws?.close(1e3),delete t.data,delete t.et,delete t.uuid,delete t.ws},emit:(e,i)=>{if(t.et?.[e])for(let s of t.et[e])i===void 0?s.call(t):s.call(t,i);return t},get:async()=>{if(t.uuid){let e=await d(t.uuid);return e!==t.data&&setTimeout(()=>t.emit("change",t.data),0),t.data=e,t.data}},off:(e,i)=>(t.et?.[e]&&(t.et[e]=t.et[e].filter(s=>s!==i),t.et[e].length||delete t.et[e]),t),on:(e,i)=>(t.et&&(t.et[e]||(t.et[e]=[]),t.et[e].push(i)),t),read:async()=>{if(t.uuid)return u(t.uuid)},removeEventListener:(e,i)=>t.off(e,i),set:async e=>{if(t.uuid)return r(t.uuid,e)},write:async e=>{if(t.uuid)return g(t.uuid,e)}};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 i=await e.data.text();i&&i.length>30&&i.substring(0,32)===t.uuid&&i.substring(45,46)==="1"&&(t.data=i.substring(46),t.emit("change",t.data))}),t.ws?.addEventListener("open",()=>{t.emit("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},b=h;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});
1
+ "use strict";var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var l=(n,t)=>{for(var e in t)a(n,e,{get:t[e],enumerable:!0})},c=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of g(t))!f.call(n,i)&&i!==e&&a(n,i,{get:()=>t[i],enumerable:!(s=u(t,i))||s.enumerable});return n};var m=n=>c(a({},"__esModule",{value:!0}),n);var w={};l(w,{default:()=>b,get:()=>d,load:()=>o,read:()=>p,set:()=>r,write:()=>v});module.exports=m(w);var d=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");globalThis.httpstate(t).on("change",e=>n.innerHTML=e.data)}},p=async n=>d(n),r=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,v=async(n,t)=>r(n,t),h=n=>{let t={data:void 0,et:{},uuid:n,ws:new WebSocket("wss://httpstate.com/"+n),addEventListener:(e,s)=>t.on(e,s),destroy:()=>{clearInterval(t.ws.interval),t.ws?.close(1e3),delete t.data,delete t.et,delete t.uuid,delete t.ws},emit:(e,s)=>{if(t.et?.[e])for(let i of t.et[e])s===void 0?i.call(t):i.call(t,s);return t},get:async()=>{if(t.uuid){let e=await d(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&&(t.et[e]||(t.et[e]=[]),t.et[e].push(s)),t),read:async()=>t.get(),removeEventListener:(e,s)=>t.off(e,s),set:async e=>{if(t.uuid)return r(t.uuid,e)},write:async e=>t.set(e)};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>32&&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.emit("open")}),t.ws.interval=setInterval(()=>{t.ws?.readyState===WebSocket.OPEN?t.ws?.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(t.get,0),t},b=h;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 (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\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 data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uuid?:undefined|string;\n ws?:undefined|WebSocket;\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n destroy():void;\n emit(type:string, data?:undefined|string):HttpState;\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<undefined|number>;\n write(data:string):Promise<undefined|number>;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\n ws:new WebSocket('wss://httpstate.com/' + uuid),\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n destroy:() => {\n clearInterval((_.ws as any).interval);\n _.ws?.close(1000);\n\n delete _.data;\n delete _.et;\n delete _.uuid;\n delete _.ws;\n },\n emit:(type:string, data?:undefined|string) => {\n if(_.et?.[type])\n for(const callback of _.et[type])\n if(data === undefined)\n callback.call(_);\n else\n callback.call(_, data);\n\n return _;\n },\n get:async ():Promise<undefined|string> => {\n if(_.uuid) {\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 },\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) {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n }\n\n return _;\n },\n read:async ():Promise<undefined|string> => {\n if(_.uuid)\n return read(_.uuid);\n },\n removeEventListener:(type:string, callback:(data?:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return set(_.uuid, data);\n },\n write:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return write(_.uuid, data);\n }\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', () => {\n _.emit('open');\n\n _.ws?.send(JSON.stringify({ open:_.uuid }));\n });\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","data","httpstate","_","type","callback","_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 (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\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 data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uuid?:undefined|string;\n ws?:undefined|WebSocket;\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n destroy():void;\n emit(type:string, data?:undefined|string):HttpState;\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<undefined|number>;\n write(data:string):Promise<undefined|number>;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\n ws:new WebSocket('wss://httpstate.com/' + uuid),\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n destroy:() => {\n clearInterval((_.ws as any).interval);\n _.ws?.close(1000);\n\n delete _.data;\n delete _.et;\n delete _.uuid;\n delete _.ws;\n },\n emit:(type:string, data?:undefined|string) => {\n if(_.et?.[type])\n for(const callback of _.et[type])\n if(data === undefined)\n callback.call(_);\n else\n callback.call(_, data);\n\n return _;\n },\n get:async ():Promise<undefined|string> => {\n if(_.uuid) {\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 },\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) {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n }\n\n return _;\n },\n read:async ():Promise<undefined|string> => _.get(),\n removeEventListener:(type:string, callback:(data?:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return set(_.uuid, data);\n },\n write:async (data:string):Promise<undefined|number> => _.set(data)\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 > 32\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', () => {\n _.ws?.send(JSON.stringify({ open:_.uuid }));\n\n _.emit('open');\n });\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","data","httpstate","_","type","callback","_callback"]}
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- var a=async i=>{let t=await fetch("https://httpstate.com/"+i);if(t.status===200)return await t.text()},r=async()=>{for(let i of document.querySelectorAll("[httpstate]")){let t=i.getAttribute("httpstate");globalThis.httpstate(t).on("change",e=>i.innerHTML=e.data)}},o=async i=>a(i),d=async(i,t)=>(await fetch("https://httpstate.com/"+i,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,u=async(i,t)=>d(i,t),g=i=>{let t={data:void 0,et:{},uuid:i,ws:new WebSocket("wss://httpstate.com/"+i),addEventListener:(e,n)=>t.on(e,n),destroy:()=>{clearInterval(t.ws.interval),t.ws?.close(1e3),delete t.data,delete t.et,delete t.uuid,delete t.ws},emit:(e,n)=>{if(t.et?.[e])for(let s of t.et[e])n===void 0?s.call(t):s.call(t,n);return t},get:async()=>{if(t.uuid){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(s=>s!==n),t.et[e].length||delete t.et[e]),t),on:(e,n)=>(t.et&&(t.et[e]||(t.et[e]=[]),t.et[e].push(n)),t),read:async()=>{if(t.uuid)return o(t.uuid)},removeEventListener:(e,n)=>t.off(e,n),set:async e=>{if(t.uuid)return d(t.uuid,e)},write:async e=>{if(t.uuid)return u(t.uuid,e)}};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.emit("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},f=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 r()},{once:!0});export{f as default,a as get,r as load,o as read,d as set,u as write};
1
+ var a=async s=>{let t=await fetch("https://httpstate.com/"+s);if(t.status===200)return await t.text()},r=async()=>{for(let s of document.querySelectorAll("[httpstate]")){let t=s.getAttribute("httpstate");globalThis.httpstate(t).on("change",e=>s.innerHTML=e.data)}},u=async s=>a(s),d=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)=>d(s,t),o=s=>{let t={data:void 0,et:{},uuid:s,ws:new WebSocket("wss://httpstate.com/"+s),addEventListener:(e,n)=>t.on(e,n),destroy:()=>{clearInterval(t.ws.interval),t.ws?.close(1e3),delete t.data,delete t.et,delete t.uuid,delete t.ws},emit:(e,n)=>{if(t.et?.[e])for(let i of t.et[e])n===void 0?i.call(t):i.call(t,n);return t},get:async()=>{if(t.uuid){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&&(t.et[e]||(t.et[e]=[]),t.et[e].push(n)),t),read:async()=>t.get(),removeEventListener:(e,n)=>t.off(e,n),set:async e=>{if(t.uuid)return d(t.uuid,e)},write:async e=>t.set(e)};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>32&&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.emit("open")}),t.ws.interval=setInterval(()=>{t.ws?.readyState===WebSocket.OPEN?t.ws?.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(t.get,0),t},f=o;typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("load",async()=>{globalThis.httpstate&&(globalThis.httpstate=Object.assign(globalThis.httpstate.default,globalThis.httpstate)),await r()},{once:!0});export{f as default,a as get,r as load,u as read,d 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 (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\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 data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uuid?:undefined|string;\n ws?:undefined|WebSocket;\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n destroy():void;\n emit(type:string, data?:undefined|string):HttpState;\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<undefined|number>;\n write(data:string):Promise<undefined|number>;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\n ws:new WebSocket('wss://httpstate.com/' + uuid),\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n destroy:() => {\n clearInterval((_.ws as any).interval);\n _.ws?.close(1000);\n\n delete _.data;\n delete _.et;\n delete _.uuid;\n delete _.ws;\n },\n emit:(type:string, data?:undefined|string) => {\n if(_.et?.[type])\n for(const callback of _.et[type])\n if(data === undefined)\n callback.call(_);\n else\n callback.call(_, data);\n\n return _;\n },\n get:async ():Promise<undefined|string> => {\n if(_.uuid) {\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 },\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) {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n }\n\n return _;\n },\n read:async ():Promise<undefined|string> => {\n if(_.uuid)\n return read(_.uuid);\n },\n removeEventListener:(type:string, callback:(data?:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return set(_.uuid, data);\n },\n write:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return write(_.uuid, data);\n }\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', () => {\n _.emit('open');\n\n _.ws?.send(JSON.stringify({ open:_.uuid }));\n });\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","read","set","data","write","httpstate","_","type","callback","_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 (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\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 data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uuid?:undefined|string;\n ws?:undefined|WebSocket;\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n destroy():void;\n emit(type:string, data?:undefined|string):HttpState;\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<undefined|number>;\n write(data:string):Promise<undefined|number>;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\n ws:new WebSocket('wss://httpstate.com/' + uuid),\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n destroy:() => {\n clearInterval((_.ws as any).interval);\n _.ws?.close(1000);\n\n delete _.data;\n delete _.et;\n delete _.uuid;\n delete _.ws;\n },\n emit:(type:string, data?:undefined|string) => {\n if(_.et?.[type])\n for(const callback of _.et[type])\n if(data === undefined)\n callback.call(_);\n else\n callback.call(_, data);\n\n return _;\n },\n get:async ():Promise<undefined|string> => {\n if(_.uuid) {\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 },\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) {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n }\n\n return _;\n },\n read:async ():Promise<undefined|string> => _.get(),\n removeEventListener:(type:string, callback:(data?:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return set(_.uuid, data);\n },\n write:async (data:string):Promise<undefined|number> => _.set(data)\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 > 32\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', () => {\n _.ws?.send(JSON.stringify({ open:_.uuid }));\n\n _.emit('open');\n });\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","read","set","data","write","httpstate","_","type","callback","_callback","index_default"]}
@@ -1,2 +1,2 @@
1
- "use strict";var httpstate=(()=>{var a=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(n,t)=>{for(var e in t)a(n,e,{get:t[e],enumerable:!0})},p=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of l(t))!c.call(n,s)&&s!==e&&a(n,s,{get:()=>t[s],enumerable:!(i=f(t,s))||i.enumerable});return n};var v=n=>p(a({},"__esModule",{value:!0}),n);var w={};m(w,{default:()=>b,get:()=>d,load:()=>o,read:()=>u,set:()=>r,write:()=>g});var d=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");globalThis.httpstate(t).on("change",e=>n.innerHTML=e.data)}},u=async n=>d(n),r=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,g=async(n,t)=>r(n,t),h=n=>{let t={data:void 0,et:{},uuid:n,ws:new WebSocket("wss://httpstate.com/"+n),addEventListener:(e,i)=>t.on(e,i),destroy:()=>{clearInterval(t.ws.interval),t.ws?.close(1e3),delete t.data,delete t.et,delete t.uuid,delete t.ws},emit:(e,i)=>{if(t.et?.[e])for(let s of t.et[e])i===void 0?s.call(t):s.call(t,i);return t},get:async()=>{if(t.uuid){let e=await d(t.uuid);return e!==t.data&&setTimeout(()=>t.emit("change",t.data),0),t.data=e,t.data}},off:(e,i)=>(t.et?.[e]&&(t.et[e]=t.et[e].filter(s=>s!==i),t.et[e].length||delete t.et[e]),t),on:(e,i)=>(t.et&&(t.et[e]||(t.et[e]=[]),t.et[e].push(i)),t),read:async()=>{if(t.uuid)return u(t.uuid)},removeEventListener:(e,i)=>t.off(e,i),set:async e=>{if(t.uuid)return r(t.uuid,e)},write:async e=>{if(t.uuid)return g(t.uuid,e)}};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 i=await e.data.text();i&&i.length>30&&i.substring(0,32)===t.uuid&&i.substring(45,46)==="1"&&(t.data=i.substring(46),t.emit("change",t.data))}),t.ws?.addEventListener("open",()=>{t.emit("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},b=h;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 v(w);})();
1
+ "use strict";var httpstate=(()=>{var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var l=(n,t)=>{for(var e in t)a(n,e,{get:t[e],enumerable:!0})},c=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of g(t))!f.call(n,i)&&i!==e&&a(n,i,{get:()=>t[i],enumerable:!(s=u(t,i))||s.enumerable});return n};var m=n=>c(a({},"__esModule",{value:!0}),n);var w={};l(w,{default:()=>b,get:()=>d,load:()=>o,read:()=>p,set:()=>r,write:()=>v});var d=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");globalThis.httpstate(t).on("change",e=>n.innerHTML=e.data)}},p=async n=>d(n),r=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,v=async(n,t)=>r(n,t),h=n=>{let t={data:void 0,et:{},uuid:n,ws:new WebSocket("wss://httpstate.com/"+n),addEventListener:(e,s)=>t.on(e,s),destroy:()=>{clearInterval(t.ws.interval),t.ws?.close(1e3),delete t.data,delete t.et,delete t.uuid,delete t.ws},emit:(e,s)=>{if(t.et?.[e])for(let i of t.et[e])s===void 0?i.call(t):i.call(t,s);return t},get:async()=>{if(t.uuid){let e=await d(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&&(t.et[e]||(t.et[e]=[]),t.et[e].push(s)),t),read:async()=>t.get(),removeEventListener:(e,s)=>t.off(e,s),set:async e=>{if(t.uuid)return r(t.uuid,e)},write:async e=>t.set(e)};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>32&&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.emit("open")}),t.ws.interval=setInterval(()=>{t.ws?.readyState===WebSocket.OPEN?t.ws?.send("0"):clearInterval(t.ws.interval)},3e4),setTimeout(t.get,0),t},b=h;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 m(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 (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\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 data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uuid?:undefined|string;\n ws?:undefined|WebSocket;\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n destroy():void;\n emit(type:string, data?:undefined|string):HttpState;\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<undefined|number>;\n write(data:string):Promise<undefined|number>;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\n ws:new WebSocket('wss://httpstate.com/' + uuid),\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n destroy:() => {\n clearInterval((_.ws as any).interval);\n _.ws?.close(1000);\n\n delete _.data;\n delete _.et;\n delete _.uuid;\n delete _.ws;\n },\n emit:(type:string, data?:undefined|string) => {\n if(_.et?.[type])\n for(const callback of _.et[type])\n if(data === undefined)\n callback.call(_);\n else\n callback.call(_, data);\n\n return _;\n },\n get:async ():Promise<undefined|string> => {\n if(_.uuid) {\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 },\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) {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n }\n\n return _;\n },\n read:async ():Promise<undefined|string> => {\n if(_.uuid)\n return read(_.uuid);\n },\n removeEventListener:(type:string, callback:(data?:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return set(_.uuid, data);\n },\n write:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return write(_.uuid, data);\n }\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', () => {\n _.emit('open');\n\n _.ws?.send(JSON.stringify({ open:_.uuid }));\n });\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","data","httpstate","_","type","callback","_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 (globalThis as any).httpstate(uuid)\n .on('change', (e:Event&{ data:string }) => node.innerHTML = e.data);\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 data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uuid?:undefined|string;\n ws?:undefined|WebSocket;\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n destroy():void;\n emit(type:string, data?:undefined|string):HttpState;\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<undefined|number>;\n write(data:string):Promise<undefined|number>;\n};\n\nconst httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\n ws:new WebSocket('wss://httpstate.com/' + uuid),\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n destroy:() => {\n clearInterval((_.ws as any).interval);\n _.ws?.close(1000);\n\n delete _.data;\n delete _.et;\n delete _.uuid;\n delete _.ws;\n },\n emit:(type:string, data?:undefined|string) => {\n if(_.et?.[type])\n for(const callback of _.et[type])\n if(data === undefined)\n callback.call(_);\n else\n callback.call(_, data);\n\n return _;\n },\n get:async ():Promise<undefined|string> => {\n if(_.uuid) {\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 },\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) {\n if(!_.et[type])\n _.et[type] = [];\n\n _.et[type].push(callback);\n }\n\n return _;\n },\n read:async ():Promise<undefined|string> => _.get(),\n removeEventListener:(type:string, callback:(data?:undefined|string) => void) => _.off(type, callback),\n set:async (data:string):Promise<undefined|number> => {\n if(_.uuid)\n return set(_.uuid, data);\n },\n write:async (data:string):Promise<undefined|number> => _.set(data)\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 > 32\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', () => {\n _.ws?.send(JSON.stringify({ open:_.uuid }));\n\n _.emit('open');\n });\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","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.33"
28
+ "version": "0.0.35"
29
29
  }