@httpstate/typescript 0.0.48 → 0.0.50
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 +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.global.js +1 -1
- package/dist/index.global.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var g=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var h=(n,t)=>{for(var e in t)g(n,e,{get:t[e],enumerable:!0})},y=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of w(t))!b.call(n,r)&&r!==e&&g(n,r,{get:()=>t[r],enumerable:!(s=p(t,r))||s.enumerable});return n};var v=n=>y(g({},"__esModule",{value:!0}),n);var S={};h(S,{HttpStateWebSocket:()=>i,default:()=>_,get:()=>d,httpstate:()=>u,load:()=>o,post:()=>f,put:()=>c,read:()=>l,set:()=>a,write:()=>m});module.exports=v(S);var P=()=>Date.now().toString(36)+Math.random().toString(36).slice(2);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 new Set(Array.from(document.querySelectorAll("[httpstate]")).map(t=>t.getAttribute("httpstate")).filter(t=>!!t)))o._||(o._={}),o._[n]||(o._[n]=u(n).on("change",t=>{for(let e of document.querySelectorAll('[httpstate="'+n+'"]'))e.innerHTML=String(t)}))},f=async(n,t)=>a(n,t),c=async(n,t)=>a(n,t),l=async n=>d(n),a=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,m=async(n,t)=>a(n,t),i={_:void 0,addEventListener:(n,t,e,s)=>{i._?.[n]&&(i._[n][t]||(i._[n][t]={}),i._[n][t][e]||(i._[n][t][e]=[]),i._[n][t][e].push(s))},delete:n=>{console.log("HttpStateWebSocket","delete",n)},dispatchEvent:(n,t,e)=>{if(console.log("HttpStateWebSocket","dispatchEvent",n,t,e),i._?.[n]){for(let s of Object.keys(i._[n]))if(console.log("iterate",s),i._[n][s]?.[t])for(let r of i._[n][s][t])r(e)}},new:(n,t)=>(console.log("HttpStateWebSocket","new",n,t),i._||(i._={}),i._[n]||(i._[n]={}),i.ws||(i.ws=new WebSocket("wss://httpstate.com"),i.ws.addEventListener("close",e=>{console.log("ws.close",e)}),i.ws.addEventListener("error",e=>{console.log("ws.error",e)}),i.ws.addEventListener("open",()=>{console.log("ws.open");for(let e of Object.keys(i._))i.ws.send(JSON.stringify({open:e}))},{once:!0}),i.ws.addEventListener("message",async e=>{let s=String(await e.data.text());if(console.log("ws.message",s),s&&s.length>32&&s.substring(45,46)==="1"){let r=s.substring(0,32);console.log("uuid",r),i.dispatchEvent(r,"message",s.substring(46))}})),i),ws:void 0},u=n=>{let t={data:void 0,et:{},uid:P(),uuid:n,ws:{_:void 0,delete:()=>{},new:()=>{console.log("new ws",t.uid),t.ws._=i.new(t.uuid,t.uid),t.ws._.addEventListener(t.uuid,t.uid,"message",async e=>{console.log("_.ws._.message",e),t.data=e,t.emit("change",t.data)})}},addEventListener:(e,s)=>t.on(e,s),delete:()=>{delete t.data,delete t.et,delete t.uuid},emit:(e,s)=>{if(t.et?.[e])for(let r of t.et[e])s===void 0?r.call(t):r.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]&&(s&&(t.et[e]=t.et[e].filter(r=>r!==s)),(!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),post:async e=>t.set(e),put:async e=>t.set(e),read:async()=>t.get(),removeEventListener:(e,s)=>t.off(e,s),set:async e=>{if(t.uuid)return a(t.uuid,e)},write:async e=>t.set(e)};return t.ws.new(),setTimeout(t.get,0),t},_=Object.assign(u,{get:d,load:o,read:l,post:f,put:c,set:a,write:m});typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("DOMContentLoaded",async()=>{globalThis.httpstate&&(globalThis.httpstate=globalThis.httpstate.default),await o()},{once:!0});0&&(module.exports={HttpStateWebSocket,get,httpstate,load,post,put,read,set,write});
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -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\nconst UID:() => string = ():string => \n Date.now().toString(36)\n + Math.random().toString(36).slice(2, 10);\n\nconsole.log('UID', UID());\n\nconst UUIDV4:{ short(s:string):undefined|string; } = { short:(s:string):undefined|string => {\n s = s.toLowerCase();\n\n if(s.length === 36)\n s = s.replace(/-/g, '');\n\n if(\n s.length === 32\n && /^[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}$/.test(s)\n )\n return s;\n} };\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 uuid of new Set(Array.from(document.querySelectorAll<HTMLElement>('[httpstate]')).map(v => v.getAttribute('httpstate')).filter((v):v is string => Boolean(v)))) {\n if(!(load as any)._)\n (load as any)._ = {};\n\n if(!(load as any)._[uuid])\n (load as any)._[uuid] = httpstate(uuid).on('change', (data:undefined|string) => {\n for(const node of document.querySelectorAll<HTMLElement>('[httpstate=\"' + uuid + '\"]'))\n node.innerHTML = String(data);\n });\n }\n};\n\nexport const post:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\nexport const put:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\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\n// HTTP State\nexport type HttpState = {\n data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uid:string;\n uuid?:undefined|string;\n // ws:{\n // _?:undefined|WebSocket,\n // delete:() => void,\n // new:() => void,\n // pingInterval?:undefined|number\n // };\n ws:any; //X\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n delete():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 post(data:string):Promise<undefined|number>;\n put(data:string):Promise<undefined|number>;\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\nexport const HttpStateWebSocket:any = { //X - type\n _:undefined,\n addEventListener:(uid:string, type:string, callback:any) => { //X\n //T - once:true\n\n // ...\n },\n delete:(uid:string) => {\n console.log('HttpStateWebSocket', 'delete', uid);\n },\n new:(uid:string, uuid:string) => {\n console.log('HttpStateWebSocket', 'new', uid, uuid);\n\n if(!HttpStateWebSocket._)\n HttpStateWebSocket._ = {};\n \n if(!HttpStateWebSocket._[uuid]) {\n HttpStateWebSocket._[uuid] = {};\n }\n\n if(!HttpStateWebSocket.ws) {\n HttpStateWebSocket.ws = new WebSocket('wss://httpstate.com');\n\n HttpStateWebSocket.ws.addEventListener('close', (e:any) => { //X\n console.log('ws.close', e);\n });\n HttpStateWebSocket.ws.addEventListener('error', (e:any) => { //X\n console.log('ws.error', e);\n });\n HttpStateWebSocket.ws.addEventListener('open', () => {\n console.log('ws.open');\n\n for(const uuid of Object.keys(HttpStateWebSocket._))\n HttpStateWebSocket.ws.send(JSON.stringify({ open:uuid }));\n }, { once:true });\n HttpStateWebSocket.ws.addEventListener('message', async (e:any) => { //X\n const data:string = String(await e.data.text());\n\n console.log('ws.message', data);\n });\n }\n },\n ws:undefined\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uid:UID(),\n uuid,\n // ws:{\n // _:undefined,\n // delete:():void => {\n // if(_.ws._) {\n // clearInterval(_.ws.pingInterval);\n // _.ws._.close(1000);\n\n // delete _.ws._;\n // }\n // },\n // pingInterval:undefined,\n // new:():void => {\n // console.log(new Date().toISOString(), uuid, 'ws.new');\n // _.ws.delete();\n\n // _.ws._ = new WebSocket('wss://httpstate.com/' + uuid);\n\n // _.ws._.addEventListener('close', e => {\n // console.log(new Date().toISOString(), uuid, 'ws.close', e);\n\n // let timeout = (_.ws.new as any).timeout||0;\n // (_.ws.new as any).timeout = Math.min(Math.max(1024, timeout*2), 1024*60); // ~1 SECOND TO ~1 MINUTE\n\n // console.log(new Date().toISOString(), uuid, 'ws.new.timeout', (_.ws.new as any).timeout);\n // setTimeout(_.ws.new, (_.ws.new as any).timeout);\n // }, { once:true });\n // _.ws._.addEventListener('error', e => console.error(new Date().toISOString(), uuid, 'ws.error', e));\n // _.ws._.addEventListener('open', () => {\n // if(_.ws._) {\n // _.ws._.addEventListener('message', () => delete (_.ws.new as any).timeout, { once:true });\n // _.ws._.addEventListener('message', async e => {\n // const data:string = String(await e.data.text());\n\n // if(\n // _.uuid\n // && data\n // && data.length > 32\n // && data.substring(0, 32) === UUIDV4.short(_.uuid)\n // && data.substring(45, 46) === '1'\n // ) {\n // _.data = data.substring(46);\n\n // _.emit('change', _.data);\n // }\n // });\n\n // _.ws._.send(JSON.stringify({ open:_.uuid }));\n\n // _.emit('open');\n\n // _.ws.pingInterval = setInterval(() => {\n // if(\n // _.ws._\n // && _.ws._.readyState === WebSocket.OPEN\n // )\n // _.ws._.send('0');\n // else\n // clearInterval(_.ws.pingInterval);\n // }, 1000*30); // 30 SECONDS\n // }\n // }, { once:true });\n // }\n // },\n ws:{\n delete:():void => {\n\n },\n new:():void => {\n console.log('new ws', _.uid);\n\n _.ws._ = HttpStateWebSocket.new(_.uid, _.uuid);\n\n _.ws._.addEventListener('message', async (e:any) => { //X\n console.log('ws.message', e);\n });\n }\n },\n\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n delete:() => {\n delete _.data;\n delete _.et;\n delete _.uuid;\n\n // _.ws.delete();\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:undefined|string = 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 if(callback)\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!callback || !_.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 post:async (data:string):Promise<undefined|number> => _.set(data),\n put:async (data:string):Promise<undefined|number> => _.set(data),\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.new();\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default Object.assign(httpstate, {\n get,\n load,\n read,\n post,\n put,\n set,\n write\n});\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('DOMContentLoaded', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = (globalThis as any).httpstate.default;\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","HttpStateWebSocket","index_default","get","httpstate","load","post","put","read","set","write","__toCommonJS","UID","get","uuid","response","load","v","httpstate","data","node","post","set","put","read","write","HttpStateWebSocket","uid","type","callback","e","_","UID","_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\nconst UID:() => string = ():string => Date.now().toString(36) + Math.random().toString(36).slice(2);\n\nconst UUIDV4:{ short(s:string):undefined|string; } = { short:(s:string):undefined|string => {\n s = s.toLowerCase();\n\n if(s.length === 36)\n s = s.replace(/-/g, '');\n\n if(\n s.length === 32\n && /^[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}$/.test(s)\n )\n return s;\n} };\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 uuid of new Set(Array.from(document.querySelectorAll<HTMLElement>('[httpstate]')).map(v => v.getAttribute('httpstate')).filter((v):v is string => Boolean(v)))) {\n if(!(load as any)._)\n (load as any)._ = {};\n\n if(!(load as any)._[uuid])\n (load as any)._[uuid] = httpstate(uuid).on('change', (data:undefined|string) => {\n for(const node of document.querySelectorAll<HTMLElement>('[httpstate=\"' + uuid + '\"]'))\n node.innerHTML = String(data);\n });\n }\n};\n\nexport const post:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\nexport const put:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\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\n// HTTP State\nexport type HttpState = {\n data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uid:string;\n uuid?:undefined|string;\n // ws:{\n // _?:undefined|WebSocket,\n // delete:() => void,\n // new:() => void,\n // pingInterval?:undefined|number\n // };\n ws:any; //X\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n delete():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 post(data:string):Promise<undefined|number>;\n put(data:string):Promise<undefined|number>;\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\nexport const HttpStateWebSocket:any = { //X - type\n _:undefined,\n addEventListener:(uuid:string, uid:string, type:string, callback:any) => { //X\n //T - once:true\n\n // ...\n if(HttpStateWebSocket._?.[uuid]) {\n if(!HttpStateWebSocket._[uuid][uid])\n HttpStateWebSocket._[uuid][uid] = {};\n\n if(!HttpStateWebSocket._[uuid][uid][type])\n HttpStateWebSocket._[uuid][uid][type] = [];\n\n HttpStateWebSocket._[uuid][uid][type].push(callback);\n }\n },\n delete:(uid:string) => {\n console.log('HttpStateWebSocket', 'delete', uid);\n },\n dispatchEvent:(uuid:string, type:string, data:string) => {\n console.log('HttpStateWebSocket', 'dispatchEvent', uuid, type, data);\n\n if(HttpStateWebSocket._?.[uuid]) {\n for(const uid of Object.keys(HttpStateWebSocket._[uuid])) {\n console.log('iterate', uid);\n\n if(HttpStateWebSocket._[uuid][uid]?.[type])\n for(const callback of HttpStateWebSocket._[uuid][uid][type])\n callback(data);\n }\n }\n },\n new:(uuid:string, uid:string) => {\n console.log('HttpStateWebSocket', 'new', uuid, uid);\n\n if(!HttpStateWebSocket._)\n HttpStateWebSocket._ = {};\n \n if(!HttpStateWebSocket._[uuid])\n HttpStateWebSocket._[uuid] = {};\n\n if(!HttpStateWebSocket.ws) {\n HttpStateWebSocket.ws = new WebSocket('wss://httpstate.com');\n\n HttpStateWebSocket.ws.addEventListener('close', (e:any) => { //X\n console.log('ws.close', e);\n });\n HttpStateWebSocket.ws.addEventListener('error', (e:any) => { //X\n console.log('ws.error', e);\n });\n HttpStateWebSocket.ws.addEventListener('open', () => {\n console.log('ws.open');\n\n for(const uuid of Object.keys(HttpStateWebSocket._))\n HttpStateWebSocket.ws.send(JSON.stringify({ open:uuid }));\n }, { once:true });\n HttpStateWebSocket.ws.addEventListener('message', async (e:any) => { //X\n const data:string = String(await e.data.text());\n\n console.log('ws.message', data);\n\n if(\n data\n && data.length > 32\n && data.substring(45, 46) === '1'\n ) {\n const uuid:string = data.substring(0, 32);\n\n console.log('uuid', uuid);\n\n HttpStateWebSocket.dispatchEvent(uuid, 'message', data.substring(46));\n }\n });\n }\n\n return HttpStateWebSocket;\n },\n ws:undefined\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uid:UID(),\n uuid,\n // ws:{\n // _:undefined,\n // delete:():void => {\n // if(_.ws._) {\n // clearInterval(_.ws.pingInterval);\n // _.ws._.close(1000);\n\n // delete _.ws._;\n // }\n // },\n // pingInterval:undefined,\n // new:():void => {\n // console.log(new Date().toISOString(), uuid, 'ws.new');\n // _.ws.delete();\n\n // _.ws._ = new WebSocket('wss://httpstate.com/' + uuid);\n\n // _.ws._.addEventListener('close', e => {\n // console.log(new Date().toISOString(), uuid, 'ws.close', e);\n\n // let timeout = (_.ws.new as any).timeout||0;\n // (_.ws.new as any).timeout = Math.min(Math.max(1024, timeout*2), 1024*60); // ~1 SECOND TO ~1 MINUTE\n\n // console.log(new Date().toISOString(), uuid, 'ws.new.timeout', (_.ws.new as any).timeout);\n // setTimeout(_.ws.new, (_.ws.new as any).timeout);\n // }, { once:true });\n // _.ws._.addEventListener('error', e => console.error(new Date().toISOString(), uuid, 'ws.error', e));\n // _.ws._.addEventListener('open', () => {\n // if(_.ws._) {\n // _.ws._.addEventListener('message', () => delete (_.ws.new as any).timeout, { once:true });\n // _.ws._.addEventListener('message', async e => {\n // const data:string = String(await e.data.text());\n\n // if(\n // _.uuid\n // && data\n // && data.length > 32\n // && data.substring(0, 32) === UUIDV4.short(_.uuid)\n // && data.substring(45, 46) === '1'\n // ) {\n // _.data = data.substring(46);\n\n // _.emit('change', _.data);\n // }\n // });\n\n // _.ws._.send(JSON.stringify({ open:_.uuid }));\n\n // _.emit('open');\n\n // _.ws.pingInterval = setInterval(() => {\n // if(\n // _.ws._\n // && _.ws._.readyState === WebSocket.OPEN\n // )\n // _.ws._.send('0');\n // else\n // clearInterval(_.ws.pingInterval);\n // }, 1000*30); // 30 SECONDS\n // }\n // }, { once:true });\n // }\n // },\n ws:{\n _:undefined,\n delete:():void => {\n\n },\n new:():void => {\n console.log('new ws', _.uid);\n\n _.ws._ = HttpStateWebSocket.new(_.uuid, _.uid);\n\n _.ws._.addEventListener(_.uuid, _.uid, 'message', async (data:any) => { //X\n console.log('_.ws._.message', data);\n\n _.data = data;\n\n _.emit('change', _.data);\n });\n }\n },\n\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n delete:() => {\n delete _.data;\n delete _.et;\n delete _.uuid;\n\n // _.ws.delete();\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:undefined|string = 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 if(callback)\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!callback || !_.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 post:async (data:string):Promise<undefined|number> => _.set(data),\n put:async (data:string):Promise<undefined|number> => _.set(data),\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.new();\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default Object.assign(httpstate, {\n get,\n load,\n read,\n post,\n put,\n set,\n write\n});\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('DOMContentLoaded', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = (globalThis as any).httpstate.default;\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","HttpStateWebSocket","index_default","get","httpstate","load","post","put","read","set","write","__toCommonJS","UID","get","uuid","response","load","v","httpstate","data","node","post","set","put","read","write","HttpStateWebSocket","uid","type","callback","_","UID","_callback","index_default"]}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var u=()=>Date.now().toString(36)+Math.random().toString(36).slice(2
|
|
1
|
+
var u=()=>Date.now().toString(36)+Math.random().toString(36).slice(2);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 new Set(Array.from(document.querySelectorAll("[httpstate]")).map(t=>t.getAttribute("httpstate")).filter(t=>!!t)))o._||(o._={}),o._[n]||(o._[n]=g(n).on("change",t=>{for(let e of document.querySelectorAll('[httpstate="'+n+'"]'))e.innerHTML=String(t)}))},f=async(n,t)=>a(n,t),c=async(n,t)=>a(n,t),l=async n=>d(n),a=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,m=async(n,t)=>a(n,t),i={_:void 0,addEventListener:(n,t,e,s)=>{i._?.[n]&&(i._[n][t]||(i._[n][t]={}),i._[n][t][e]||(i._[n][t][e]=[]),i._[n][t][e].push(s))},delete:n=>{console.log("HttpStateWebSocket","delete",n)},dispatchEvent:(n,t,e)=>{if(console.log("HttpStateWebSocket","dispatchEvent",n,t,e),i._?.[n]){for(let s of Object.keys(i._[n]))if(console.log("iterate",s),i._[n][s]?.[t])for(let r of i._[n][s][t])r(e)}},new:(n,t)=>(console.log("HttpStateWebSocket","new",n,t),i._||(i._={}),i._[n]||(i._[n]={}),i.ws||(i.ws=new WebSocket("wss://httpstate.com"),i.ws.addEventListener("close",e=>{console.log("ws.close",e)}),i.ws.addEventListener("error",e=>{console.log("ws.error",e)}),i.ws.addEventListener("open",()=>{console.log("ws.open");for(let e of Object.keys(i._))i.ws.send(JSON.stringify({open:e}))},{once:!0}),i.ws.addEventListener("message",async e=>{let s=String(await e.data.text());if(console.log("ws.message",s),s&&s.length>32&&s.substring(45,46)==="1"){let r=s.substring(0,32);console.log("uuid",r),i.dispatchEvent(r,"message",s.substring(46))}})),i),ws:void 0},g=n=>{let t={data:void 0,et:{},uid:u(),uuid:n,ws:{_:void 0,delete:()=>{},new:()=>{console.log("new ws",t.uid),t.ws._=i.new(t.uuid,t.uid),t.ws._.addEventListener(t.uuid,t.uid,"message",async e=>{console.log("_.ws._.message",e),t.data=e,t.emit("change",t.data)})}},addEventListener:(e,s)=>t.on(e,s),delete:()=>{delete t.data,delete t.et,delete t.uuid},emit:(e,s)=>{if(t.et?.[e])for(let r of t.et[e])s===void 0?r.call(t):r.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]&&(s&&(t.et[e]=t.et[e].filter(r=>r!==s)),(!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),post:async e=>t.set(e),put:async e=>t.set(e),read:async()=>t.get(),removeEventListener:(e,s)=>t.off(e,s),set:async e=>{if(t.uuid)return a(t.uuid,e)},write:async e=>t.set(e)};return t.ws.new(),setTimeout(t.get,0),t},p=Object.assign(g,{get:d,load:o,read:l,post:f,put:c,set:a,write:m});typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("DOMContentLoaded",async()=>{globalThis.httpstate&&(globalThis.httpstate=globalThis.httpstate.default),await o()},{once:!0});export{i as HttpStateWebSocket,p as default,d as get,g as httpstate,o as load,f as post,c as put,l as read,a as set,m as write};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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\nconst UID:() => string = ():string => \n Date.now().toString(36)\n + Math.random().toString(36).slice(2, 10);\n\nconsole.log('UID', UID());\n\nconst UUIDV4:{ short(s:string):undefined|string; } = { short:(s:string):undefined|string => {\n s = s.toLowerCase();\n\n if(s.length === 36)\n s = s.replace(/-/g, '');\n\n if(\n s.length === 32\n && /^[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}$/.test(s)\n )\n return s;\n} };\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 uuid of new Set(Array.from(document.querySelectorAll<HTMLElement>('[httpstate]')).map(v => v.getAttribute('httpstate')).filter((v):v is string => Boolean(v)))) {\n if(!(load as any)._)\n (load as any)._ = {};\n\n if(!(load as any)._[uuid])\n (load as any)._[uuid] = httpstate(uuid).on('change', (data:undefined|string) => {\n for(const node of document.querySelectorAll<HTMLElement>('[httpstate=\"' + uuid + '\"]'))\n node.innerHTML = String(data);\n });\n }\n};\n\nexport const post:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\nexport const put:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\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\n// HTTP State\nexport type HttpState = {\n data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uid:string;\n uuid?:undefined|string;\n // ws:{\n // _?:undefined|WebSocket,\n // delete:() => void,\n // new:() => void,\n // pingInterval?:undefined|number\n // };\n ws:any; //X\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n delete():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 post(data:string):Promise<undefined|number>;\n put(data:string):Promise<undefined|number>;\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\nexport const HttpStateWebSocket:any = { //X - type\n _:undefined,\n addEventListener:(uid:string, type:string, callback:any) => { //X\n //T - once:true\n\n // ...\n },\n delete:(uid:string) => {\n console.log('HttpStateWebSocket', 'delete', uid);\n },\n new:(uid:string, uuid:string) => {\n console.log('HttpStateWebSocket', 'new', uid, uuid);\n\n if(!HttpStateWebSocket._)\n HttpStateWebSocket._ = {};\n \n if(!HttpStateWebSocket._[uuid]) {\n HttpStateWebSocket._[uuid] = {};\n }\n\n if(!HttpStateWebSocket.ws) {\n HttpStateWebSocket.ws = new WebSocket('wss://httpstate.com');\n\n HttpStateWebSocket.ws.addEventListener('close', (e:any) => { //X\n console.log('ws.close', e);\n });\n HttpStateWebSocket.ws.addEventListener('error', (e:any) => { //X\n console.log('ws.error', e);\n });\n HttpStateWebSocket.ws.addEventListener('open', () => {\n console.log('ws.open');\n\n for(const uuid of Object.keys(HttpStateWebSocket._))\n HttpStateWebSocket.ws.send(JSON.stringify({ open:uuid }));\n }, { once:true });\n HttpStateWebSocket.ws.addEventListener('message', async (e:any) => { //X\n const data:string = String(await e.data.text());\n\n console.log('ws.message', data);\n });\n }\n },\n ws:undefined\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uid:UID(),\n uuid,\n // ws:{\n // _:undefined,\n // delete:():void => {\n // if(_.ws._) {\n // clearInterval(_.ws.pingInterval);\n // _.ws._.close(1000);\n\n // delete _.ws._;\n // }\n // },\n // pingInterval:undefined,\n // new:():void => {\n // console.log(new Date().toISOString(), uuid, 'ws.new');\n // _.ws.delete();\n\n // _.ws._ = new WebSocket('wss://httpstate.com/' + uuid);\n\n // _.ws._.addEventListener('close', e => {\n // console.log(new Date().toISOString(), uuid, 'ws.close', e);\n\n // let timeout = (_.ws.new as any).timeout||0;\n // (_.ws.new as any).timeout = Math.min(Math.max(1024, timeout*2), 1024*60); // ~1 SECOND TO ~1 MINUTE\n\n // console.log(new Date().toISOString(), uuid, 'ws.new.timeout', (_.ws.new as any).timeout);\n // setTimeout(_.ws.new, (_.ws.new as any).timeout);\n // }, { once:true });\n // _.ws._.addEventListener('error', e => console.error(new Date().toISOString(), uuid, 'ws.error', e));\n // _.ws._.addEventListener('open', () => {\n // if(_.ws._) {\n // _.ws._.addEventListener('message', () => delete (_.ws.new as any).timeout, { once:true });\n // _.ws._.addEventListener('message', async e => {\n // const data:string = String(await e.data.text());\n\n // if(\n // _.uuid\n // && data\n // && data.length > 32\n // && data.substring(0, 32) === UUIDV4.short(_.uuid)\n // && data.substring(45, 46) === '1'\n // ) {\n // _.data = data.substring(46);\n\n // _.emit('change', _.data);\n // }\n // });\n\n // _.ws._.send(JSON.stringify({ open:_.uuid }));\n\n // _.emit('open');\n\n // _.ws.pingInterval = setInterval(() => {\n // if(\n // _.ws._\n // && _.ws._.readyState === WebSocket.OPEN\n // )\n // _.ws._.send('0');\n // else\n // clearInterval(_.ws.pingInterval);\n // }, 1000*30); // 30 SECONDS\n // }\n // }, { once:true });\n // }\n // },\n ws:{\n delete:():void => {\n\n },\n new:():void => {\n console.log('new ws', _.uid);\n\n _.ws._ = HttpStateWebSocket.new(_.uid, _.uuid);\n\n _.ws._.addEventListener('message', async (e:any) => { //X\n console.log('ws.message', e);\n });\n }\n },\n\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n delete:() => {\n delete _.data;\n delete _.et;\n delete _.uuid;\n\n // _.ws.delete();\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:undefined|string = 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 if(callback)\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!callback || !_.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 post:async (data:string):Promise<undefined|number> => _.set(data),\n put:async (data:string):Promise<undefined|number> => _.set(data),\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.new();\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default Object.assign(httpstate, {\n get,\n load,\n read,\n post,\n put,\n set,\n write\n});\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('DOMContentLoaded', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = (globalThis as any).httpstate.default;\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["UID","get","uuid","response","load","v","httpstate","data","node","post","set","put","read","write","HttpStateWebSocket","uid","type","callback","e","_","UID","_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\nconst UID:() => string = ():string => Date.now().toString(36) + Math.random().toString(36).slice(2);\n\nconst UUIDV4:{ short(s:string):undefined|string; } = { short:(s:string):undefined|string => {\n s = s.toLowerCase();\n\n if(s.length === 36)\n s = s.replace(/-/g, '');\n\n if(\n s.length === 32\n && /^[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}$/.test(s)\n )\n return s;\n} };\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 uuid of new Set(Array.from(document.querySelectorAll<HTMLElement>('[httpstate]')).map(v => v.getAttribute('httpstate')).filter((v):v is string => Boolean(v)))) {\n if(!(load as any)._)\n (load as any)._ = {};\n\n if(!(load as any)._[uuid])\n (load as any)._[uuid] = httpstate(uuid).on('change', (data:undefined|string) => {\n for(const node of document.querySelectorAll<HTMLElement>('[httpstate=\"' + uuid + '\"]'))\n node.innerHTML = String(data);\n });\n }\n};\n\nexport const post:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\nexport const put:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\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\n// HTTP State\nexport type HttpState = {\n data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uid:string;\n uuid?:undefined|string;\n // ws:{\n // _?:undefined|WebSocket,\n // delete:() => void,\n // new:() => void,\n // pingInterval?:undefined|number\n // };\n ws:any; //X\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n delete():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 post(data:string):Promise<undefined|number>;\n put(data:string):Promise<undefined|number>;\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\nexport const HttpStateWebSocket:any = { //X - type\n _:undefined,\n addEventListener:(uuid:string, uid:string, type:string, callback:any) => { //X\n //T - once:true\n\n // ...\n if(HttpStateWebSocket._?.[uuid]) {\n if(!HttpStateWebSocket._[uuid][uid])\n HttpStateWebSocket._[uuid][uid] = {};\n\n if(!HttpStateWebSocket._[uuid][uid][type])\n HttpStateWebSocket._[uuid][uid][type] = [];\n\n HttpStateWebSocket._[uuid][uid][type].push(callback);\n }\n },\n delete:(uid:string) => {\n console.log('HttpStateWebSocket', 'delete', uid);\n },\n dispatchEvent:(uuid:string, type:string, data:string) => {\n console.log('HttpStateWebSocket', 'dispatchEvent', uuid, type, data);\n\n if(HttpStateWebSocket._?.[uuid]) {\n for(const uid of Object.keys(HttpStateWebSocket._[uuid])) {\n console.log('iterate', uid);\n\n if(HttpStateWebSocket._[uuid][uid]?.[type])\n for(const callback of HttpStateWebSocket._[uuid][uid][type])\n callback(data);\n }\n }\n },\n new:(uuid:string, uid:string) => {\n console.log('HttpStateWebSocket', 'new', uuid, uid);\n\n if(!HttpStateWebSocket._)\n HttpStateWebSocket._ = {};\n \n if(!HttpStateWebSocket._[uuid])\n HttpStateWebSocket._[uuid] = {};\n\n if(!HttpStateWebSocket.ws) {\n HttpStateWebSocket.ws = new WebSocket('wss://httpstate.com');\n\n HttpStateWebSocket.ws.addEventListener('close', (e:any) => { //X\n console.log('ws.close', e);\n });\n HttpStateWebSocket.ws.addEventListener('error', (e:any) => { //X\n console.log('ws.error', e);\n });\n HttpStateWebSocket.ws.addEventListener('open', () => {\n console.log('ws.open');\n\n for(const uuid of Object.keys(HttpStateWebSocket._))\n HttpStateWebSocket.ws.send(JSON.stringify({ open:uuid }));\n }, { once:true });\n HttpStateWebSocket.ws.addEventListener('message', async (e:any) => { //X\n const data:string = String(await e.data.text());\n\n console.log('ws.message', data);\n\n if(\n data\n && data.length > 32\n && data.substring(45, 46) === '1'\n ) {\n const uuid:string = data.substring(0, 32);\n\n console.log('uuid', uuid);\n\n HttpStateWebSocket.dispatchEvent(uuid, 'message', data.substring(46));\n }\n });\n }\n\n return HttpStateWebSocket;\n },\n ws:undefined\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uid:UID(),\n uuid,\n // ws:{\n // _:undefined,\n // delete:():void => {\n // if(_.ws._) {\n // clearInterval(_.ws.pingInterval);\n // _.ws._.close(1000);\n\n // delete _.ws._;\n // }\n // },\n // pingInterval:undefined,\n // new:():void => {\n // console.log(new Date().toISOString(), uuid, 'ws.new');\n // _.ws.delete();\n\n // _.ws._ = new WebSocket('wss://httpstate.com/' + uuid);\n\n // _.ws._.addEventListener('close', e => {\n // console.log(new Date().toISOString(), uuid, 'ws.close', e);\n\n // let timeout = (_.ws.new as any).timeout||0;\n // (_.ws.new as any).timeout = Math.min(Math.max(1024, timeout*2), 1024*60); // ~1 SECOND TO ~1 MINUTE\n\n // console.log(new Date().toISOString(), uuid, 'ws.new.timeout', (_.ws.new as any).timeout);\n // setTimeout(_.ws.new, (_.ws.new as any).timeout);\n // }, { once:true });\n // _.ws._.addEventListener('error', e => console.error(new Date().toISOString(), uuid, 'ws.error', e));\n // _.ws._.addEventListener('open', () => {\n // if(_.ws._) {\n // _.ws._.addEventListener('message', () => delete (_.ws.new as any).timeout, { once:true });\n // _.ws._.addEventListener('message', async e => {\n // const data:string = String(await e.data.text());\n\n // if(\n // _.uuid\n // && data\n // && data.length > 32\n // && data.substring(0, 32) === UUIDV4.short(_.uuid)\n // && data.substring(45, 46) === '1'\n // ) {\n // _.data = data.substring(46);\n\n // _.emit('change', _.data);\n // }\n // });\n\n // _.ws._.send(JSON.stringify({ open:_.uuid }));\n\n // _.emit('open');\n\n // _.ws.pingInterval = setInterval(() => {\n // if(\n // _.ws._\n // && _.ws._.readyState === WebSocket.OPEN\n // )\n // _.ws._.send('0');\n // else\n // clearInterval(_.ws.pingInterval);\n // }, 1000*30); // 30 SECONDS\n // }\n // }, { once:true });\n // }\n // },\n ws:{\n _:undefined,\n delete:():void => {\n\n },\n new:():void => {\n console.log('new ws', _.uid);\n\n _.ws._ = HttpStateWebSocket.new(_.uuid, _.uid);\n\n _.ws._.addEventListener(_.uuid, _.uid, 'message', async (data:any) => { //X\n console.log('_.ws._.message', data);\n\n _.data = data;\n\n _.emit('change', _.data);\n });\n }\n },\n\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n delete:() => {\n delete _.data;\n delete _.et;\n delete _.uuid;\n\n // _.ws.delete();\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:undefined|string = 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 if(callback)\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!callback || !_.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 post:async (data:string):Promise<undefined|number> => _.set(data),\n put:async (data:string):Promise<undefined|number> => _.set(data),\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.new();\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default Object.assign(httpstate, {\n get,\n load,\n read,\n post,\n put,\n set,\n write\n});\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('DOMContentLoaded', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = (globalThis as any).httpstate.default;\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["UID","get","uuid","response","load","v","httpstate","data","node","post","set","put","read","write","HttpStateWebSocket","uid","type","callback","_","UID","_callback","index_default"]}
|
package/dist/index.global.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var httpstate=(()=>{var
|
|
1
|
+
"use strict";var httpstate=(()=>{var g=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var h=(n,t)=>{for(var e in t)g(n,e,{get:t[e],enumerable:!0})},y=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of w(t))!b.call(n,r)&&r!==e&&g(n,r,{get:()=>t[r],enumerable:!(s=p(t,r))||s.enumerable});return n};var v=n=>y(g({},"__esModule",{value:!0}),n);var S={};h(S,{HttpStateWebSocket:()=>i,default:()=>_,get:()=>d,httpstate:()=>u,load:()=>o,post:()=>f,put:()=>c,read:()=>l,set:()=>a,write:()=>m});var P=()=>Date.now().toString(36)+Math.random().toString(36).slice(2);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 new Set(Array.from(document.querySelectorAll("[httpstate]")).map(t=>t.getAttribute("httpstate")).filter(t=>!!t)))o._||(o._={}),o._[n]||(o._[n]=u(n).on("change",t=>{for(let e of document.querySelectorAll('[httpstate="'+n+'"]'))e.innerHTML=String(t)}))},f=async(n,t)=>a(n,t),c=async(n,t)=>a(n,t),l=async n=>d(n),a=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,m=async(n,t)=>a(n,t),i={_:void 0,addEventListener:(n,t,e,s)=>{i._?.[n]&&(i._[n][t]||(i._[n][t]={}),i._[n][t][e]||(i._[n][t][e]=[]),i._[n][t][e].push(s))},delete:n=>{console.log("HttpStateWebSocket","delete",n)},dispatchEvent:(n,t,e)=>{if(console.log("HttpStateWebSocket","dispatchEvent",n,t,e),i._?.[n]){for(let s of Object.keys(i._[n]))if(console.log("iterate",s),i._[n][s]?.[t])for(let r of i._[n][s][t])r(e)}},new:(n,t)=>(console.log("HttpStateWebSocket","new",n,t),i._||(i._={}),i._[n]||(i._[n]={}),i.ws||(i.ws=new WebSocket("wss://httpstate.com"),i.ws.addEventListener("close",e=>{console.log("ws.close",e)}),i.ws.addEventListener("error",e=>{console.log("ws.error",e)}),i.ws.addEventListener("open",()=>{console.log("ws.open");for(let e of Object.keys(i._))i.ws.send(JSON.stringify({open:e}))},{once:!0}),i.ws.addEventListener("message",async e=>{let s=String(await e.data.text());if(console.log("ws.message",s),s&&s.length>32&&s.substring(45,46)==="1"){let r=s.substring(0,32);console.log("uuid",r),i.dispatchEvent(r,"message",s.substring(46))}})),i),ws:void 0},u=n=>{let t={data:void 0,et:{},uid:P(),uuid:n,ws:{_:void 0,delete:()=>{},new:()=>{console.log("new ws",t.uid),t.ws._=i.new(t.uuid,t.uid),t.ws._.addEventListener(t.uuid,t.uid,"message",async e=>{console.log("_.ws._.message",e),t.data=e,t.emit("change",t.data)})}},addEventListener:(e,s)=>t.on(e,s),delete:()=>{delete t.data,delete t.et,delete t.uuid},emit:(e,s)=>{if(t.et?.[e])for(let r of t.et[e])s===void 0?r.call(t):r.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]&&(s&&(t.et[e]=t.et[e].filter(r=>r!==s)),(!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),post:async e=>t.set(e),put:async e=>t.set(e),read:async()=>t.get(),removeEventListener:(e,s)=>t.off(e,s),set:async e=>{if(t.uuid)return a(t.uuid,e)},write:async e=>t.set(e)};return t.ws.new(),setTimeout(t.get,0),t},_=Object.assign(u,{get:d,load:o,read:l,post:f,put:c,set:a,write:m});typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("DOMContentLoaded",async()=>{globalThis.httpstate&&(globalThis.httpstate=globalThis.httpstate.default),await o()},{once:!0});return v(S);})();
|
|
2
2
|
//# sourceMappingURL=index.global.js.map
|
package/dist/index.global.js.map
CHANGED
|
@@ -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\nconst UID:() => string = ():string => \n Date.now().toString(36)\n + Math.random().toString(36).slice(2, 10);\n\nconsole.log('UID', UID());\n\nconst UUIDV4:{ short(s:string):undefined|string; } = { short:(s:string):undefined|string => {\n s = s.toLowerCase();\n\n if(s.length === 36)\n s = s.replace(/-/g, '');\n\n if(\n s.length === 32\n && /^[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}$/.test(s)\n )\n return s;\n} };\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 uuid of new Set(Array.from(document.querySelectorAll<HTMLElement>('[httpstate]')).map(v => v.getAttribute('httpstate')).filter((v):v is string => Boolean(v)))) {\n if(!(load as any)._)\n (load as any)._ = {};\n\n if(!(load as any)._[uuid])\n (load as any)._[uuid] = httpstate(uuid).on('change', (data:undefined|string) => {\n for(const node of document.querySelectorAll<HTMLElement>('[httpstate=\"' + uuid + '\"]'))\n node.innerHTML = String(data);\n });\n }\n};\n\nexport const post:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\nexport const put:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\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\n// HTTP State\nexport type HttpState = {\n data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uid:string;\n uuid?:undefined|string;\n // ws:{\n // _?:undefined|WebSocket,\n // delete:() => void,\n // new:() => void,\n // pingInterval?:undefined|number\n // };\n ws:any; //X\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n delete():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 post(data:string):Promise<undefined|number>;\n put(data:string):Promise<undefined|number>;\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\nexport const HttpStateWebSocket:any = { //X - type\n _:undefined,\n addEventListener:(uid:string, type:string, callback:any) => { //X\n //T - once:true\n\n // ...\n },\n delete:(uid:string) => {\n console.log('HttpStateWebSocket', 'delete', uid);\n },\n new:(uid:string, uuid:string) => {\n console.log('HttpStateWebSocket', 'new', uid, uuid);\n\n if(!HttpStateWebSocket._)\n HttpStateWebSocket._ = {};\n \n if(!HttpStateWebSocket._[uuid]) {\n HttpStateWebSocket._[uuid] = {};\n }\n\n if(!HttpStateWebSocket.ws) {\n HttpStateWebSocket.ws = new WebSocket('wss://httpstate.com');\n\n HttpStateWebSocket.ws.addEventListener('close', (e:any) => { //X\n console.log('ws.close', e);\n });\n HttpStateWebSocket.ws.addEventListener('error', (e:any) => { //X\n console.log('ws.error', e);\n });\n HttpStateWebSocket.ws.addEventListener('open', () => {\n console.log('ws.open');\n\n for(const uuid of Object.keys(HttpStateWebSocket._))\n HttpStateWebSocket.ws.send(JSON.stringify({ open:uuid }));\n }, { once:true });\n HttpStateWebSocket.ws.addEventListener('message', async (e:any) => { //X\n const data:string = String(await e.data.text());\n\n console.log('ws.message', data);\n });\n }\n },\n ws:undefined\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uid:UID(),\n uuid,\n // ws:{\n // _:undefined,\n // delete:():void => {\n // if(_.ws._) {\n // clearInterval(_.ws.pingInterval);\n // _.ws._.close(1000);\n\n // delete _.ws._;\n // }\n // },\n // pingInterval:undefined,\n // new:():void => {\n // console.log(new Date().toISOString(), uuid, 'ws.new');\n // _.ws.delete();\n\n // _.ws._ = new WebSocket('wss://httpstate.com/' + uuid);\n\n // _.ws._.addEventListener('close', e => {\n // console.log(new Date().toISOString(), uuid, 'ws.close', e);\n\n // let timeout = (_.ws.new as any).timeout||0;\n // (_.ws.new as any).timeout = Math.min(Math.max(1024, timeout*2), 1024*60); // ~1 SECOND TO ~1 MINUTE\n\n // console.log(new Date().toISOString(), uuid, 'ws.new.timeout', (_.ws.new as any).timeout);\n // setTimeout(_.ws.new, (_.ws.new as any).timeout);\n // }, { once:true });\n // _.ws._.addEventListener('error', e => console.error(new Date().toISOString(), uuid, 'ws.error', e));\n // _.ws._.addEventListener('open', () => {\n // if(_.ws._) {\n // _.ws._.addEventListener('message', () => delete (_.ws.new as any).timeout, { once:true });\n // _.ws._.addEventListener('message', async e => {\n // const data:string = String(await e.data.text());\n\n // if(\n // _.uuid\n // && data\n // && data.length > 32\n // && data.substring(0, 32) === UUIDV4.short(_.uuid)\n // && data.substring(45, 46) === '1'\n // ) {\n // _.data = data.substring(46);\n\n // _.emit('change', _.data);\n // }\n // });\n\n // _.ws._.send(JSON.stringify({ open:_.uuid }));\n\n // _.emit('open');\n\n // _.ws.pingInterval = setInterval(() => {\n // if(\n // _.ws._\n // && _.ws._.readyState === WebSocket.OPEN\n // )\n // _.ws._.send('0');\n // else\n // clearInterval(_.ws.pingInterval);\n // }, 1000*30); // 30 SECONDS\n // }\n // }, { once:true });\n // }\n // },\n ws:{\n delete:():void => {\n\n },\n new:():void => {\n console.log('new ws', _.uid);\n\n _.ws._ = HttpStateWebSocket.new(_.uid, _.uuid);\n\n _.ws._.addEventListener('message', async (e:any) => { //X\n console.log('ws.message', e);\n });\n }\n },\n\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n delete:() => {\n delete _.data;\n delete _.et;\n delete _.uuid;\n\n // _.ws.delete();\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:undefined|string = 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 if(callback)\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!callback || !_.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 post:async (data:string):Promise<undefined|number> => _.set(data),\n put:async (data:string):Promise<undefined|number> => _.set(data),\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.new();\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default Object.assign(httpstate, {\n get,\n load,\n read,\n post,\n put,\n set,\n write\n});\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('DOMContentLoaded', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = (globalThis as any).httpstate.default;\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","HttpStateWebSocket","index_default","get","httpstate","load","post","put","read","set","write","UID","get","uuid","response","load","v","httpstate","data","node","post","set","put","read","write","HttpStateWebSocket","uid","type","callback","e","_","UID","_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\nconst UID:() => string = ():string => Date.now().toString(36) + Math.random().toString(36).slice(2);\n\nconst UUIDV4:{ short(s:string):undefined|string; } = { short:(s:string):undefined|string => {\n s = s.toLowerCase();\n\n if(s.length === 36)\n s = s.replace(/-/g, '');\n\n if(\n s.length === 32\n && /^[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}$/.test(s)\n )\n return s;\n} };\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 uuid of new Set(Array.from(document.querySelectorAll<HTMLElement>('[httpstate]')).map(v => v.getAttribute('httpstate')).filter((v):v is string => Boolean(v)))) {\n if(!(load as any)._)\n (load as any)._ = {};\n\n if(!(load as any)._[uuid])\n (load as any)._[uuid] = httpstate(uuid).on('change', (data:undefined|string) => {\n for(const node of document.querySelectorAll<HTMLElement>('[httpstate=\"' + uuid + '\"]'))\n node.innerHTML = String(data);\n });\n }\n};\n\nexport const post:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\n\nexport const put:(uuid:string, data:string) => Promise<number> = async (uuid:string, data:string):Promise<number> => set(uuid, data);\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\n// HTTP State\nexport type HttpState = {\n data?:undefined|string;\n et?:undefined|{ [type:string]:((data?:undefined|string) => void)[] };\n uid:string;\n uuid?:undefined|string;\n // ws:{\n // _?:undefined|WebSocket,\n // delete:() => void,\n // new:() => void,\n // pingInterval?:undefined|number\n // };\n ws:any; //X\n\n addEventListener(type:string, callback:(data?:undefined|string) => void):void;\n delete():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 post(data:string):Promise<undefined|number>;\n put(data:string):Promise<undefined|number>;\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\nexport const HttpStateWebSocket:any = { //X - type\n _:undefined,\n addEventListener:(uuid:string, uid:string, type:string, callback:any) => { //X\n //T - once:true\n\n // ...\n if(HttpStateWebSocket._?.[uuid]) {\n if(!HttpStateWebSocket._[uuid][uid])\n HttpStateWebSocket._[uuid][uid] = {};\n\n if(!HttpStateWebSocket._[uuid][uid][type])\n HttpStateWebSocket._[uuid][uid][type] = [];\n\n HttpStateWebSocket._[uuid][uid][type].push(callback);\n }\n },\n delete:(uid:string) => {\n console.log('HttpStateWebSocket', 'delete', uid);\n },\n dispatchEvent:(uuid:string, type:string, data:string) => {\n console.log('HttpStateWebSocket', 'dispatchEvent', uuid, type, data);\n\n if(HttpStateWebSocket._?.[uuid]) {\n for(const uid of Object.keys(HttpStateWebSocket._[uuid])) {\n console.log('iterate', uid);\n\n if(HttpStateWebSocket._[uuid][uid]?.[type])\n for(const callback of HttpStateWebSocket._[uuid][uid][type])\n callback(data);\n }\n }\n },\n new:(uuid:string, uid:string) => {\n console.log('HttpStateWebSocket', 'new', uuid, uid);\n\n if(!HttpStateWebSocket._)\n HttpStateWebSocket._ = {};\n \n if(!HttpStateWebSocket._[uuid])\n HttpStateWebSocket._[uuid] = {};\n\n if(!HttpStateWebSocket.ws) {\n HttpStateWebSocket.ws = new WebSocket('wss://httpstate.com');\n\n HttpStateWebSocket.ws.addEventListener('close', (e:any) => { //X\n console.log('ws.close', e);\n });\n HttpStateWebSocket.ws.addEventListener('error', (e:any) => { //X\n console.log('ws.error', e);\n });\n HttpStateWebSocket.ws.addEventListener('open', () => {\n console.log('ws.open');\n\n for(const uuid of Object.keys(HttpStateWebSocket._))\n HttpStateWebSocket.ws.send(JSON.stringify({ open:uuid }));\n }, { once:true });\n HttpStateWebSocket.ws.addEventListener('message', async (e:any) => { //X\n const data:string = String(await e.data.text());\n\n console.log('ws.message', data);\n\n if(\n data\n && data.length > 32\n && data.substring(45, 46) === '1'\n ) {\n const uuid:string = data.substring(0, 32);\n\n console.log('uuid', uuid);\n\n HttpStateWebSocket.dispatchEvent(uuid, 'message', data.substring(46));\n }\n });\n }\n\n return HttpStateWebSocket;\n },\n ws:undefined\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uid:UID(),\n uuid,\n // ws:{\n // _:undefined,\n // delete:():void => {\n // if(_.ws._) {\n // clearInterval(_.ws.pingInterval);\n // _.ws._.close(1000);\n\n // delete _.ws._;\n // }\n // },\n // pingInterval:undefined,\n // new:():void => {\n // console.log(new Date().toISOString(), uuid, 'ws.new');\n // _.ws.delete();\n\n // _.ws._ = new WebSocket('wss://httpstate.com/' + uuid);\n\n // _.ws._.addEventListener('close', e => {\n // console.log(new Date().toISOString(), uuid, 'ws.close', e);\n\n // let timeout = (_.ws.new as any).timeout||0;\n // (_.ws.new as any).timeout = Math.min(Math.max(1024, timeout*2), 1024*60); // ~1 SECOND TO ~1 MINUTE\n\n // console.log(new Date().toISOString(), uuid, 'ws.new.timeout', (_.ws.new as any).timeout);\n // setTimeout(_.ws.new, (_.ws.new as any).timeout);\n // }, { once:true });\n // _.ws._.addEventListener('error', e => console.error(new Date().toISOString(), uuid, 'ws.error', e));\n // _.ws._.addEventListener('open', () => {\n // if(_.ws._) {\n // _.ws._.addEventListener('message', () => delete (_.ws.new as any).timeout, { once:true });\n // _.ws._.addEventListener('message', async e => {\n // const data:string = String(await e.data.text());\n\n // if(\n // _.uuid\n // && data\n // && data.length > 32\n // && data.substring(0, 32) === UUIDV4.short(_.uuid)\n // && data.substring(45, 46) === '1'\n // ) {\n // _.data = data.substring(46);\n\n // _.emit('change', _.data);\n // }\n // });\n\n // _.ws._.send(JSON.stringify({ open:_.uuid }));\n\n // _.emit('open');\n\n // _.ws.pingInterval = setInterval(() => {\n // if(\n // _.ws._\n // && _.ws._.readyState === WebSocket.OPEN\n // )\n // _.ws._.send('0');\n // else\n // clearInterval(_.ws.pingInterval);\n // }, 1000*30); // 30 SECONDS\n // }\n // }, { once:true });\n // }\n // },\n ws:{\n _:undefined,\n delete:():void => {\n\n },\n new:():void => {\n console.log('new ws', _.uid);\n\n _.ws._ = HttpStateWebSocket.new(_.uuid, _.uid);\n\n _.ws._.addEventListener(_.uuid, _.uid, 'message', async (data:any) => { //X\n console.log('_.ws._.message', data);\n\n _.data = data;\n\n _.emit('change', _.data);\n });\n }\n },\n\n\n addEventListener:(type:string, callback:(data?:undefined|string) => void) => _.on(type, callback),\n delete:() => {\n delete _.data;\n delete _.et;\n delete _.uuid;\n\n // _.ws.delete();\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:undefined|string = 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 if(callback)\n _.et[type] = _.et[type].filter(_callback => _callback !== callback);\n\n if(!callback || !_.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 post:async (data:string):Promise<undefined|number> => _.set(data),\n put:async (data:string):Promise<undefined|number> => _.set(data),\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.new();\n\n setTimeout(_.get, 0);\n\n return _;\n};\n\nexport default Object.assign(httpstate, {\n get,\n load,\n read,\n post,\n put,\n set,\n write\n});\n\nif(\n typeof document !== 'undefined'\n && typeof window !== 'undefined'\n && globalThis === window\n)\n globalThis.addEventListener('DOMContentLoaded', async () => {\n if((globalThis as any).httpstate)\n (globalThis as any).httpstate = (globalThis as any).httpstate.default;\n\n await load();\n }, { once:true });\n"],"mappings":"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","names":["index_exports","__export","HttpStateWebSocket","index_default","get","httpstate","load","post","put","read","set","write","UID","get","uuid","response","load","v","httpstate","data","node","post","set","put","read","write","HttpStateWebSocket","uid","type","callback","_","UID","_callback","index_default"]}
|
package/package.json
CHANGED