@httpstate/typescript 0.0.46 → 0.0.47
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.d.cts +7 -7
- package/dist/index.d.ts +7 -7
- 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 o=Object.defineProperty;var
|
|
1
|
+
"use strict";var o=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var b=(n,t)=>{for(var e in t)o(n,e,{get:t[e],enumerable:!0})},P=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of h(t))!y.call(n,s)&&s!==e&&o(n,s,{get:()=>t[s],enumerable:!(i=p(t,s))||i.enumerable});return n};var v=n=>P(o({},"__esModule",{value:!0}),n);var S={};b(S,{default:()=>w,get:()=>a,httpstate:()=>u,load:()=>r,post:()=>f,put:()=>m,read:()=>c,set:()=>d,write:()=>l});module.exports=v(S);var g=()=>Date.now().toString(36)+Math.random().toString(36).slice(2,10);console.log("UID",g);var a=async n=>{let t=await fetch("https://httpstate.com/"+n);if(t.status===200)return await t.text()},r=async()=>{for(let n of new Set(Array.from(document.querySelectorAll("[httpstate]")).map(t=>t.getAttribute("httpstate")).filter(t=>!!t)))r._||(r._={}),r._[n]||(r._[n]=u(n).on("change",t=>{for(let e of document.querySelectorAll('[httpstate="'+n+'"]'))e.innerHTML=String(t)}))},f=async(n,t)=>d(n,t),m=async(n,t)=>d(n,t),c=async n=>a(n),d=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,l=async(n,t)=>d(n,t),u=n=>{let t={data:void 0,et:{},uid:g(),uuid:n,ws:{},addEventListener:(e,i)=>t.on(e,i),delete:()=>{delete t.data,delete t.et,delete t.uuid},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 a(t.uuid);return e!==t.data&&setTimeout(()=>t.emit("change",t.data),0),t.data=e,t.data}},off:(e,i)=>(t.et?.[e]&&(i&&(t.et[e]=t.et[e].filter(s=>s!==i)),(!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),post:async e=>t.set(e),put:async e=>t.set(e),read:async()=>t.get(),removeEventListener:(e,i)=>t.off(e,i),set:async e=>{if(t.uuid)return d(t.uuid,e)},write:async e=>t.set(e)};return setTimeout(t.get,0),t},w=Object.assign(u,{get:a,load:r,read:c,post:f,put:m,set:d,write:l});typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("DOMContentLoaded",async()=>{globalThis.httpstate&&(globalThis.httpstate=globalThis.httpstate.default),await r()},{once:!0});0&&(module.exports={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 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 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\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 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 ws:{\n _?:undefined|WebSocket,\n delete:() => void,\n new:() => void,\n pingInterval?:undefined|number\n };\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\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 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 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 };\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 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","index_default","get","httpstate","load","post","read","set","write","__toCommonJS","UUIDV4","s","uuid","response","v","data","node","_","type","callback","_callback","e","timeout"]}
|
|
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\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;\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 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\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","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","_","UID","type","callback","_callback","index_default"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
declare const get: (uuid: string) => Promise<undefined | string>;
|
|
2
2
|
declare const load: () => Promise<void>;
|
|
3
3
|
declare const post: (uuid: string, data: string) => Promise<number>;
|
|
4
|
+
declare const put: (uuid: string, data: string) => Promise<number>;
|
|
4
5
|
declare const read: (uuid: string) => Promise<undefined | string>;
|
|
5
6
|
declare const set: (uuid: string, data: string) => Promise<number>;
|
|
6
7
|
declare const write: (uuid: string, data: string) => Promise<number>;
|
|
@@ -9,7 +10,9 @@ type HttpState = {
|
|
|
9
10
|
et?: undefined | {
|
|
10
11
|
[type: string]: ((data?: undefined | string) => void)[];
|
|
11
12
|
};
|
|
13
|
+
uid: string;
|
|
12
14
|
uuid?: undefined | string;
|
|
15
|
+
ws: any;
|
|
13
16
|
addEventListener(type: string, callback: (data?: undefined | string) => void): void;
|
|
14
17
|
delete(): void;
|
|
15
18
|
emit(type: string, data?: undefined | string): HttpState;
|
|
@@ -17,24 +20,21 @@ type HttpState = {
|
|
|
17
20
|
off(type: string, callback?: (data?: undefined | string) => void): HttpState;
|
|
18
21
|
on(type: string, callback: (data?: undefined | string) => void): HttpState;
|
|
19
22
|
post(data: string): Promise<undefined | number>;
|
|
23
|
+
put(data: string): Promise<undefined | number>;
|
|
20
24
|
read(): Promise<undefined | string>;
|
|
21
25
|
removeEventListener(type: string, callback: (data?: undefined | string) => void): void;
|
|
22
26
|
set(data: string): Promise<undefined | number>;
|
|
23
27
|
write(data: string): Promise<undefined | number>;
|
|
24
|
-
ws: {
|
|
25
|
-
_?: undefined | WebSocket;
|
|
26
|
-
delete: () => void;
|
|
27
|
-
new: () => void;
|
|
28
|
-
pingInterval?: undefined | number;
|
|
29
|
-
};
|
|
30
28
|
};
|
|
31
29
|
declare const httpstate: (uuid: string) => HttpState;
|
|
32
30
|
declare const _default: ((uuid: string) => HttpState) & {
|
|
33
31
|
get: (uuid: string) => Promise<undefined | string>;
|
|
34
32
|
load: () => Promise<void>;
|
|
35
33
|
read: (uuid: string) => Promise<undefined | string>;
|
|
34
|
+
post: (uuid: string, data: string) => Promise<number>;
|
|
35
|
+
put: (uuid: string, data: string) => Promise<number>;
|
|
36
36
|
set: (uuid: string, data: string) => Promise<number>;
|
|
37
37
|
write: (uuid: string, data: string) => Promise<number>;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
export { type HttpState, _default as default, get, httpstate, load, post, read, set, write };
|
|
40
|
+
export { type HttpState, _default as default, get, httpstate, load, post, put, read, set, write };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
declare const get: (uuid: string) => Promise<undefined | string>;
|
|
2
2
|
declare const load: () => Promise<void>;
|
|
3
3
|
declare const post: (uuid: string, data: string) => Promise<number>;
|
|
4
|
+
declare const put: (uuid: string, data: string) => Promise<number>;
|
|
4
5
|
declare const read: (uuid: string) => Promise<undefined | string>;
|
|
5
6
|
declare const set: (uuid: string, data: string) => Promise<number>;
|
|
6
7
|
declare const write: (uuid: string, data: string) => Promise<number>;
|
|
@@ -9,7 +10,9 @@ type HttpState = {
|
|
|
9
10
|
et?: undefined | {
|
|
10
11
|
[type: string]: ((data?: undefined | string) => void)[];
|
|
11
12
|
};
|
|
13
|
+
uid: string;
|
|
12
14
|
uuid?: undefined | string;
|
|
15
|
+
ws: any;
|
|
13
16
|
addEventListener(type: string, callback: (data?: undefined | string) => void): void;
|
|
14
17
|
delete(): void;
|
|
15
18
|
emit(type: string, data?: undefined | string): HttpState;
|
|
@@ -17,24 +20,21 @@ type HttpState = {
|
|
|
17
20
|
off(type: string, callback?: (data?: undefined | string) => void): HttpState;
|
|
18
21
|
on(type: string, callback: (data?: undefined | string) => void): HttpState;
|
|
19
22
|
post(data: string): Promise<undefined | number>;
|
|
23
|
+
put(data: string): Promise<undefined | number>;
|
|
20
24
|
read(): Promise<undefined | string>;
|
|
21
25
|
removeEventListener(type: string, callback: (data?: undefined | string) => void): void;
|
|
22
26
|
set(data: string): Promise<undefined | number>;
|
|
23
27
|
write(data: string): Promise<undefined | number>;
|
|
24
|
-
ws: {
|
|
25
|
-
_?: undefined | WebSocket;
|
|
26
|
-
delete: () => void;
|
|
27
|
-
new: () => void;
|
|
28
|
-
pingInterval?: undefined | number;
|
|
29
|
-
};
|
|
30
28
|
};
|
|
31
29
|
declare const httpstate: (uuid: string) => HttpState;
|
|
32
30
|
declare const _default: ((uuid: string) => HttpState) & {
|
|
33
31
|
get: (uuid: string) => Promise<undefined | string>;
|
|
34
32
|
load: () => Promise<void>;
|
|
35
33
|
read: (uuid: string) => Promise<undefined | string>;
|
|
34
|
+
post: (uuid: string, data: string) => Promise<number>;
|
|
35
|
+
put: (uuid: string, data: string) => Promise<number>;
|
|
36
36
|
set: (uuid: string, data: string) => Promise<number>;
|
|
37
37
|
write: (uuid: string, data: string) => Promise<number>;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
export { type HttpState, _default as default, get, httpstate, load, post, read, set, write };
|
|
40
|
+
export { type HttpState, _default as default, get, httpstate, load, post, put, read, set, write };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var o=()=>Date.now().toString(36)+Math.random().toString(36).slice(2,10);console.log("UID",o);var a=async n=>{let t=await fetch("https://httpstate.com/"+n);if(t.status===200)return await t.text()},s=async()=>{for(let n of new Set(Array.from(document.querySelectorAll("[httpstate]")).map(t=>t.getAttribute("httpstate")).filter(t=>!!t)))s._||(s._={}),s._[n]||(s._[n]=u(n).on("change",t=>{for(let e of document.querySelectorAll('[httpstate="'+n+'"]'))e.innerHTML=String(t)}))},g=async(n,t)=>r(n,t),f=async(n,t)=>r(n,t),m=async n=>a(n),r=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,c=async(n,t)=>r(n,t),u=n=>{let t={data:void 0,et:{},uid:o(),uuid:n,ws:{},addEventListener:(e,i)=>t.on(e,i),delete:()=>{delete t.data,delete t.et,delete t.uuid},emit:(e,i)=>{if(t.et?.[e])for(let d of t.et[e])i===void 0?d.call(t):d.call(t,i);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,i)=>(t.et?.[e]&&(i&&(t.et[e]=t.et[e].filter(d=>d!==i)),(!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),post:async e=>t.set(e),put:async e=>t.set(e),read:async()=>t.get(),removeEventListener:(e,i)=>t.off(e,i),set:async e=>{if(t.uuid)return r(t.uuid,e)},write:async e=>t.set(e)};return setTimeout(t.get,0),t},l=Object.assign(u,{get:a,load:s,read:m,post:g,put:f,set:r,write:c});typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("DOMContentLoaded",async()=>{globalThis.httpstate&&(globalThis.httpstate=globalThis.httpstate.default),await s()},{once:!0});export{l as default,a as get,u as httpstate,s as load,g as post,f as put,m as read,r as set,c 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 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 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\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 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 ws:{\n _?:undefined|WebSocket,\n delete:() => void,\n new:() => void,\n pingInterval?:undefined|number\n };\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\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 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 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 };\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 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":["UUIDV4","s","get","uuid","response","load","v","httpstate","data","node","post","set","read","write","_","type","callback","_callback","e","timeout","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 => \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\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;\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 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\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","_","UID","type","callback","_callback","index_default"]}
|
package/dist/index.global.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var httpstate=(()=>{var o=Object.defineProperty;var
|
|
1
|
+
"use strict";var httpstate=(()=>{var o=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var b=(n,t)=>{for(var e in t)o(n,e,{get:t[e],enumerable:!0})},P=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of h(t))!y.call(n,s)&&s!==e&&o(n,s,{get:()=>t[s],enumerable:!(i=p(t,s))||i.enumerable});return n};var v=n=>P(o({},"__esModule",{value:!0}),n);var S={};b(S,{default:()=>w,get:()=>a,httpstate:()=>u,load:()=>r,post:()=>f,put:()=>m,read:()=>c,set:()=>d,write:()=>l});var g=()=>Date.now().toString(36)+Math.random().toString(36).slice(2,10);console.log("UID",g);var a=async n=>{let t=await fetch("https://httpstate.com/"+n);if(t.status===200)return await t.text()},r=async()=>{for(let n of new Set(Array.from(document.querySelectorAll("[httpstate]")).map(t=>t.getAttribute("httpstate")).filter(t=>!!t)))r._||(r._={}),r._[n]||(r._[n]=u(n).on("change",t=>{for(let e of document.querySelectorAll('[httpstate="'+n+'"]'))e.innerHTML=String(t)}))},f=async(n,t)=>d(n,t),m=async(n,t)=>d(n,t),c=async n=>a(n),d=async(n,t)=>(await fetch("https://httpstate.com/"+n,{body:t,headers:{"Content-Type":"text/plain;charset=UTF-8"},method:"POST"})).status,l=async(n,t)=>d(n,t),u=n=>{let t={data:void 0,et:{},uid:g(),uuid:n,ws:{},addEventListener:(e,i)=>t.on(e,i),delete:()=>{delete t.data,delete t.et,delete t.uuid},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 a(t.uuid);return e!==t.data&&setTimeout(()=>t.emit("change",t.data),0),t.data=e,t.data}},off:(e,i)=>(t.et?.[e]&&(i&&(t.et[e]=t.et[e].filter(s=>s!==i)),(!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),post:async e=>t.set(e),put:async e=>t.set(e),read:async()=>t.get(),removeEventListener:(e,i)=>t.off(e,i),set:async e=>{if(t.uuid)return d(t.uuid,e)},write:async e=>t.set(e)};return setTimeout(t.get,0),t},w=Object.assign(u,{get:a,load:r,read:c,post:f,put:m,set:d,write:l});typeof document<"u"&&typeof window<"u"&&globalThis===window&&globalThis.addEventListener("DOMContentLoaded",async()=>{globalThis.httpstate&&(globalThis.httpstate=globalThis.httpstate.default),await r()},{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 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 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\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 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 ws:{\n _?:undefined|WebSocket,\n delete:() => void,\n new:() => void,\n pingInterval?:undefined|number\n };\n};\n\nexport const httpstate:(uuid:string) => HttpState = (uuid:string):HttpState => {\n const _:HttpState = {\n data:undefined,\n et:{},\n uuid,\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 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 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 };\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 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","index_default","get","httpstate","load","post","read","set","write","UUIDV4","s","uuid","response","v","data","node","_","type","callback","_callback","e","timeout"]}
|
|
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\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;\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 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\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","index_default","get","httpstate","load","post","put","read","set","write","UID","get","uuid","response","load","v","httpstate","data","node","post","set","put","read","write","_","UID","type","callback","_callback","index_default"]}
|
package/package.json
CHANGED