@gta5urban/rage-rpc 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rage-rpc.esm.mjs +1 -0
- package/dist/rage-rpc.js +1 -0
- package/dist/rage-rpc.umd.js +1 -0
- package/dist/src/helpers.d.ts +9 -0
- package/dist/src/index.d.ts +145 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e;!function(e){e.Blip="b",e.Checkpoint="cp",e.Colshape="c",e.Label="l",e.Marker="m",e.Object="o",e.Pickup="p",e.Player="pl",e.Vehicle="v"}(e||(e={}));let r=!1;function setDebugMode(e){r=e}function getEnvironment(){if(mp.joaat)return"server";if(mp.game&&mp.game.joaat)return"client";if(mp.trigger)return"cef";throw new Error("Unknown RAGE environment")}function log(e,t="info"){if(!r)return;const n=getEnvironment(),o=mp.console;(o?mp.console:console)[o?{info:"logInfo",error:"logError",warn:"logWarn"}[t]:"info"===t?"log":t](`RPC (${n}): ${e}`)}function isObjectMpType(r,t){const n="client"===getEnvironment();if(r&&"object"==typeof r&&void 0!==r.id){const validate=(e,t,o)=>n?r.type===e&&t.at(r.id)===r:r instanceof o;switch(t){case e.Blip:return validate("blip",mp.blips,mp.Blip);case e.Checkpoint:return validate("checkpoint",mp.checkpoints,mp.Checkpoint);case e.Colshape:return validate("colshape",mp.colshapes,mp.Colshape);case e.Label:return validate("textlabel",mp.labels,mp.TextLabel);case e.Marker:return validate("marker",mp.markers,mp.Marker);case e.Object:return validate("object",mp.objects,mp.Object);case e.Pickup:return validate("pickup",mp.pickups,mp.Pickup);case e.Player:return validate("player",mp.players,mp.Player);case e.Vehicle:return validate("vehicle",mp.vehicles,mp.Vehicle)}}return!1}function generateId(){const e=46656*Math.random()|0,r=46656*Math.random()|0;return`000${e.toString(36)}`.slice(-3)+`000${r.toString(36)}`.slice(-3)}function stringifyData(r){const t=getEnvironment();return JSON.stringify(r,(r,n)=>{if("client"===t||"server"===t&&n&&"object"==typeof n){let r;if(isObjectMpType(n,e.Blip)?r=e.Blip:isObjectMpType(n,e.Checkpoint)?r=e.Checkpoint:isObjectMpType(n,e.Colshape)?r=e.Colshape:isObjectMpType(n,e.Marker)?r=e.Marker:isObjectMpType(n,e.Object)?r=e.Object:isObjectMpType(n,e.Pickup)?r=e.Pickup:isObjectMpType(n,e.Player)?r=e.Player:isObjectMpType(n,e.Vehicle)&&(r=e.Vehicle),r)return{__t:r,i:"number"==typeof n.remoteId?n.remoteId:n.id}}return n})}function promiseTimeout(e,r){return"number"==typeof r?Promise.race([new Promise((e,t)=>{setTimeout(()=>t("TIMEOUT"),r)}),e]):e}function isBrowserValid(e){try{e.url}catch(e){return!1}return!0}const t="PROCEDURE_NOT_FOUND",n="__rpc:id",o="__rpc:process",s="__rpc:processPartial",i="__rpc:browserRegister",c="__rpc:browserUnregister",a="__rpc:triggerEvent",l="__rpc:triggerEventBrowsers",p=getEnvironment(),m="cef"===p?window:global;if(m[s]||(m.__rpcPartialData={},m[s]=(e,r,t,n,s)=>{"server"!==p&&(s=n,n=t,t=r,r=e),m.__rpcPartialData[r]||(m.__rpcPartialData[r]=new Array(n)),m.__rpcPartialData[r][t]=s,m.__rpcPartialData[r].includes(void 0)||("server"===p?m[o](e,m.__rpcPartialData[r].join("")):m[o](m.__rpcPartialData[r].join("")),delete m.__rpcPartialData[r])}),!m[o]){if(m.__rpcListeners={},m.__rpcPending={},m.__rpcEvListeners={},m[o]=(r,t)=>{"server"!==p&&(t=r);const n=function parseData(r){const t=getEnvironment();return JSON.parse(r,(r,n)=>{if(("client"===t||"server"===t)&&n&&"object"==typeof n&&"string"==typeof n.__t&&"number"==typeof n.i&&2===Object.keys(n).length){const r=n.i;let o;switch(n.__t){case e.Blip:o=mp.blips;break;case e.Checkpoint:o=mp.checkpoints;break;case e.Colshape:o=mp.colshapes;break;case e.Label:o=mp.labels;break;case e.Marker:o=mp.markers;break;case e.Object:o=mp.objects;break;case e.Pickup:o=mp.pickups;break;case e.Player:o=mp.players;break;case e.Vehicle:o=mp.vehicles}if(o)return o["client"===t?"atRemoteId":"at"](r)}return n})}(t);if(n.req){const e={id:n.id,environment:n.fenv||n.env};"server"===p&&(e.player=r);const t={ret:1,id:n.id,env:p};let s;switch(p){case"server":s=r=>sendEventData(r,e.player);break;case"client":if("server"===n.env)s=e=>sendEventData(e);else if("cef"===n.env){const r=n.b&&m.__rpcBrowsers[n.b];e.browser=r,s=e=>r&&isBrowserValid(r)&&passEventToBrowser(r,e,!0)}break;default:s=e=>mp.trigger(o,stringifyData(e))}if(s){const r=callProcedure(n.name,n.args,e);n.noRet||r.then(e=>s({...t,res:e})).catch(e=>s({...t,err:e||null}))}}else if(n.ret){const e=m.__rpcPending[n.id];if("server"===p&&e.player!==r)return;e&&(e.resolve(n.hasOwnProperty("err")?Promise.reject(n.err):Promise.resolve(n.res)),delete m.__rpcPending[n.id])}},"cef"===p)void 0===m[n]&&(m[n]=new Promise(e=>{window.name?e(window.name):m[`${n}:resolve`]=e}));else if(mp.events.add(o,m[o]),mp.events.add(s,m[s]),"client"===p){register("__rpc:callServer",([e,r,t],n)=>_callServer(e,r,{fenv:n.environment,noRet:t})),register("__rpc:callBrowsers",([e,r,t],n)=>_callBrowsers(null,e,r,{fenv:n.environment,noRet:t})),m.__rpcBrowsers={};const initBrowser=e=>{const r=generateId();Object.keys(m.__rpcBrowsers).forEach(r=>{const t=m.__rpcBrowsers[r];t&&isBrowserValid(t)&&t!==e||delete m.__rpcBrowsers[r]}),m.__rpcBrowsers[r]=e,e.execute(`\n window.name = '${r}';\n if(typeof window['${n}'] === 'undefined'){\n window['${n}'] = Promise.resolve(window.name);\n }else{\n window['${n}:resolve'](window.name);\n }\n `)};mp.browsers.forEach(initBrowser),mp.events.add("browserCreated",initBrowser),m.__rpcBrowserProcedures={},mp.events.add(i,e=>{const[r,t]=JSON.parse(e);m.__rpcBrowserProcedures[t]=r}),mp.events.add(c,e=>{const[r,t]=JSON.parse(e);m.__rpcBrowserProcedures[t]===r&&delete m.__rpcBrowserProcedures[t]}),register(l,([e,r],t)=>{Object.keys(m.__rpcBrowsers).forEach(n=>{const o=m.__rpcBrowsers[n];o&&isBrowserValid(o)?_callBrowser(o,a,[e,r],{fenv:t.environment,noRet:1}):delete m.__rpcBrowsers[n]})})}register(a,([e,r],t)=>callEvent(e,r,t))}function passEventToBrowser(e,r,n){const s=stringifyData(r);e.execute(`var process = window["${o}"]; if(process){ process(${JSON.stringify(s)}); }else{ ${n?"":`mp.trigger("${o}", '{"ret":1,"id":"${r.id}","err":"${t}","env":"cef"}');`} }`)}function callProcedure(e,r,n){const o=m.__rpcListeners[e];return o?Promise.resolve(o(r,n)):Promise.reject(`${t} (${e})`)}function sendEventData(e,r){const t={client:(e,...r)=>mp.events.callRemote(e,...r),server:(e,...t)=>r.call(e,[...t])},n=e.env,i=stringifyData(e);if(i.length>3e4){const r=function chunkSubstr(e,r){const t=[];for(let n=0;n<=e.length-1;n+=r)t.push(e.substr(n,Math.min(r,e.length-n)));return t}(i,3e4);r.forEach((o,i)=>{t[n](s,e.id,i,r.length,o)})}else t[n](o,i)}function register(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`register expects 2 arguments: "name" and "cb" - ("${e}")`);return log(`Registered procedure "${e}"`),"cef"===p&&m[n].then(r=>mp.trigger(i,JSON.stringify([r,e]))),m.__rpcListeners[e]=r,()=>unregister(e)}function unregister(e){if("string"!=typeof e)throw new Error(`unregister expects 1 argument: "name" - ("${e}")`);log(`Unregistered procedure "${e}"`),"cef"===p&&m[n].then(r=>mp.trigger(c,JSON.stringify([r,e]))),m.__rpcListeners[e]=void 0}function call(e,r,t={}){return"string"!=typeof e?Promise.reject(`call expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${e}")`):promiseTimeout(callProcedure(e,r,{environment:p}),t.timeout)}function _callServer(e,r,t={}){switch(p){case"server":return call(e,r);case"client":{const n=generateId();return new Promise(o=>{t.noRet||(m.__rpcPending[n]={resolve:o});sendEventData({req:1,id:n,name:e,env:p,args:r,...t})})}case"cef":return callClient("__rpc:callServer",[e,r,Number(t.noRet)])}}function callServer(e,r,t={}){if("string"!=typeof e)return Promise.reject(`callServer expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${e}")`);const n={};return t.noRet&&(n.noRet=1),promiseTimeout(_callServer(e,r,n),t.timeout)}function _callClient(e,r,t,s={}){switch(p){case"client":return call(r,t);case"server":{const n=generateId();return new Promise(o=>{s.noRet||(m.__rpcPending[n]={resolve:o,player:e});sendEventData({req:1,id:n,name:r,env:p,args:t,...s},e)})}case"cef":{const e=generateId();return m[n].then(n=>new Promise(i=>{s.noRet||(m.__rpcPending[e]={resolve:i});const c={b:n,req:1,id:e,name:r,env:p,args:t,...s};mp.trigger(o,stringifyData(c))}))}}}function callClient(e,r,t,n={}){switch(p){case"client":if(n=t||{},t=r,r=e,e=null,"string"!=typeof r)return Promise.reject(`callClient from the client expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)return Promise.reject(`callClient from the server expects 2 to 4 arguments: "player", "name", optional "args", and optional "options" - ("${r}")`);break;case"cef":if(n=t||{},t=r,r=e,e=null,"string"!=typeof r)return Promise.reject(`callClient from the browser expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`)}const o={};return n.noRet&&(o.noRet=1),promiseTimeout(_callClient(e,r,t,o),n.timeout)}function _callBrowser(e,r,t,n={}){return new Promise(o=>{const s=generateId();n.noRet||(m.__rpcPending[s]={resolve:o}),passEventToBrowser(e,{req:1,id:s,name:r,env:p,args:t,...n},!1)})}function _callBrowsers(e,r,n,o={}){switch(p){case"client":{const e=m.__rpcBrowserProcedures[r];if(!e)return Promise.reject(`${t} (${r})`);const s=m.__rpcBrowsers[e];return s&&isBrowserValid(s)?_callBrowser(s,r,n,o):Promise.reject(`${t} (${r})`)}case"server":return _callClient(e,"__rpc:callBrowsers",[r,n,Number(o.noRet)],o);case"cef":return _callClient(null,"__rpc:callBrowsers",[r,n,Number(o.noRet)],o)}}function callBrowsers(e,r,t,n={}){let o;const s={};switch(p){case"client":case"cef":if(n=t||{},t=r,"string"!=typeof(r=e))return Promise.reject(`callBrowsers from the client or browser expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`);n.noRet&&(s.noRet=1),o=_callBrowsers(null,r,t,s);break;case"server":if("string"!=typeof r||"object"!=typeof e)return Promise.reject(`callBrowsers from the server expects 2 to 4 arguments: "player", "name", optional "args", and optional "options" - ("${r}")`);n.noRet&&(s.noRet=1),o=_callBrowsers(e,r,t,s)}if(o)return promiseTimeout(o,n.timeout)}function callBrowser(e,r,t,n={}){if("client"!==p)return Promise.reject(`callBrowser can only be used in the client environment - ("${r}")`);if(!isBrowserValid(e)||"string"!=typeof r)return Promise.reject(`callBrowser expects 2 to 4 arguments: "browser", "name", optional "args", and optional "options" - ("${r}")`);const o={};return n.noRet&&(o.noRet=1),promiseTimeout(_callBrowser(e,r,t,o),n.timeout)}function callEvent(e,r,t){const n=m.__rpcEvListeners[e];n&&n.forEach(e=>e(r,t))}function on(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`on expects 2 arguments: "name" and "cb" - ("${e}")`);log(`Registered procedure listener "${e}"`);const t=m.__rpcEvListeners[e]||new Set;return t.add(r),m.__rpcEvListeners[e]=t,()=>off(e,r)}function off(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`off expects 2 arguments: "name" and "cb" - ("${e}")`);const t=m.__rpcEvListeners[e];t&&(log(`Unregistered procedure listener "${e}"`),t.delete(r))}function trigger(e,r){if("string"!=typeof e)throw new Error(`trigger expects 1 or 2 arguments: "name", and optional "args" - ("${e}")`);callEvent(e,r,{environment:p})}function triggerClient(e,r,t){switch(p){case"client":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerClient from the client expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)throw new Error(`triggerClient from the server expects 2 or 3 arguments: "player", "name", and optional "args" - ("${r}")`);break;case"cef":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerClient from the browser expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`)}_callClient(e,a,[r,t],{noRet:1})}function triggerServer(e,r){if("string"!=typeof e)throw new Error(`triggerServer expects 1 or 2 arguments: "name", and optional "args" - ("${e}")`);_callServer(a,[e,r],{noRet:1})}function triggerBrowsers(e,r,t){switch(p){case"client":case"cef":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerBrowsers from the client or browser expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)throw new Error(`triggerBrowsers from the server expects 2 or 3 arguments: "player", "name", and optional "args" - ("${r}")`)}_callClient(e,l,[r,t],{noRet:1})}function triggerBrowser(e,r,t){if("client"!==p)throw new Error(`callBrowser can only be used in the client environment - ("${r}")`);if(!isBrowserValid(e)||"string"!=typeof r)throw new Error(`callBrowser expects 2 or 3 arguments: "browser", "name", and optional "args" - ("${r}")`);_callBrowser(e,a,[r,t],{noRet:1})}const g="0.3.2";export{call,callBrowser,callBrowsers,callClient,callServer,off,on,register,setDebugMode,trigger,triggerBrowser,triggerBrowsers,triggerClient,triggerServer,unregister,g as version};
|
package/dist/rage-rpc.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e){e.Blip="b",e.Checkpoint="cp",e.Colshape="c",e.Label="l",e.Marker="m",e.Object="o",e.Pickup="p",e.Player="pl",e.Vehicle="v"}(e||(e={}));let r=!1;function getEnvironment(){if(mp.joaat)return"server";if(mp.game&&mp.game.joaat)return"client";if(mp.trigger)return"cef";throw new Error("Unknown RAGE environment")}function log(e,t="info"){if(!r)return;const n=getEnvironment(),o=mp.console;(o?mp.console:console)[o?{info:"logInfo",error:"logError",warn:"logWarn"}[t]:"info"===t?"log":t](`RPC (${n}): ${e}`)}function isObjectMpType(r,t){const n="client"===getEnvironment();if(r&&"object"==typeof r&&void 0!==r.id){const validate=(e,t,o)=>n?r.type===e&&t.at(r.id)===r:r instanceof o;switch(t){case e.Blip:return validate("blip",mp.blips,mp.Blip);case e.Checkpoint:return validate("checkpoint",mp.checkpoints,mp.Checkpoint);case e.Colshape:return validate("colshape",mp.colshapes,mp.Colshape);case e.Label:return validate("textlabel",mp.labels,mp.TextLabel);case e.Marker:return validate("marker",mp.markers,mp.Marker);case e.Object:return validate("object",mp.objects,mp.Object);case e.Pickup:return validate("pickup",mp.pickups,mp.Pickup);case e.Player:return validate("player",mp.players,mp.Player);case e.Vehicle:return validate("vehicle",mp.vehicles,mp.Vehicle)}}return!1}function generateId(){const e=46656*Math.random()|0,r=46656*Math.random()|0;return`000${e.toString(36)}`.slice(-3)+`000${r.toString(36)}`.slice(-3)}function stringifyData(r){const t=getEnvironment();return JSON.stringify(r,(r,n)=>{if("client"===t||"server"===t&&n&&"object"==typeof n){let r;if(isObjectMpType(n,e.Blip)?r=e.Blip:isObjectMpType(n,e.Checkpoint)?r=e.Checkpoint:isObjectMpType(n,e.Colshape)?r=e.Colshape:isObjectMpType(n,e.Marker)?r=e.Marker:isObjectMpType(n,e.Object)?r=e.Object:isObjectMpType(n,e.Pickup)?r=e.Pickup:isObjectMpType(n,e.Player)?r=e.Player:isObjectMpType(n,e.Vehicle)&&(r=e.Vehicle),r)return{__t:r,i:"number"==typeof n.remoteId?n.remoteId:n.id}}return n})}function promiseTimeout(e,r){return"number"==typeof r?Promise.race([new Promise((e,t)=>{setTimeout(()=>t("TIMEOUT"),r)}),e]):e}function isBrowserValid(e){try{e.url}catch(e){return!1}return!0}const t="PROCEDURE_NOT_FOUND",n="__rpc:id",o="__rpc:process",s="__rpc:processPartial",i="__rpc:browserRegister",c="__rpc:browserUnregister",a="__rpc:triggerEvent",l="__rpc:triggerEventBrowsers",p=getEnvironment(),g="cef"===p?window:global;if(g[s]||(g.__rpcPartialData={},g[s]=(e,r,t,n,s)=>{"server"!==p&&(s=n,n=t,t=r,r=e),g.__rpcPartialData[r]||(g.__rpcPartialData[r]=new Array(n)),g.__rpcPartialData[r][t]=s,g.__rpcPartialData[r].includes(void 0)||("server"===p?g[o](e,g.__rpcPartialData[r].join("")):g[o](g.__rpcPartialData[r].join("")),delete g.__rpcPartialData[r])}),!g[o]){if(g.__rpcListeners={},g.__rpcPending={},g.__rpcEvListeners={},g[o]=(r,t)=>{"server"!==p&&(t=r);const n=function parseData(r){const t=getEnvironment();return JSON.parse(r,(r,n)=>{if(("client"===t||"server"===t)&&n&&"object"==typeof n&&"string"==typeof n.__t&&"number"==typeof n.i&&2===Object.keys(n).length){const r=n.i;let o;switch(n.__t){case e.Blip:o=mp.blips;break;case e.Checkpoint:o=mp.checkpoints;break;case e.Colshape:o=mp.colshapes;break;case e.Label:o=mp.labels;break;case e.Marker:o=mp.markers;break;case e.Object:o=mp.objects;break;case e.Pickup:o=mp.pickups;break;case e.Player:o=mp.players;break;case e.Vehicle:o=mp.vehicles}if(o)return o["client"===t?"atRemoteId":"at"](r)}return n})}(t);if(n.req){const e={id:n.id,environment:n.fenv||n.env};"server"===p&&(e.player=r);const t={ret:1,id:n.id,env:p};let s;switch(p){case"server":s=r=>sendEventData(r,e.player);break;case"client":if("server"===n.env)s=e=>sendEventData(e);else if("cef"===n.env){const r=n.b&&g.__rpcBrowsers[n.b];e.browser=r,s=e=>r&&isBrowserValid(r)&&passEventToBrowser(r,e,!0)}break;default:s=e=>mp.trigger(o,stringifyData(e))}if(s){const r=callProcedure(n.name,n.args,e);n.noRet||r.then(e=>s({...t,res:e})).catch(e=>s({...t,err:e||null}))}}else if(n.ret){const e=g.__rpcPending[n.id];if("server"===p&&e.player!==r)return;e&&(e.resolve(n.hasOwnProperty("err")?Promise.reject(n.err):Promise.resolve(n.res)),delete g.__rpcPending[n.id])}},"cef"===p)void 0===g[n]&&(g[n]=new Promise(e=>{window.name?e(window.name):g[`${n}:resolve`]=e}));else if(mp.events.add(o,g[o]),mp.events.add(s,g[s]),"client"===p){register("__rpc:callServer",([e,r,t],n)=>_callServer(e,r,{fenv:n.environment,noRet:t})),register("__rpc:callBrowsers",([e,r,t],n)=>_callBrowsers(null,e,r,{fenv:n.environment,noRet:t})),g.__rpcBrowsers={};const initBrowser=e=>{const r=generateId();Object.keys(g.__rpcBrowsers).forEach(r=>{const t=g.__rpcBrowsers[r];t&&isBrowserValid(t)&&t!==e||delete g.__rpcBrowsers[r]}),g.__rpcBrowsers[r]=e,e.execute(`\n window.name = '${r}';\n if(typeof window['${n}'] === 'undefined'){\n window['${n}'] = Promise.resolve(window.name);\n }else{\n window['${n}:resolve'](window.name);\n }\n `)};mp.browsers.forEach(initBrowser),mp.events.add("browserCreated",initBrowser),g.__rpcBrowserProcedures={},mp.events.add(i,e=>{const[r,t]=JSON.parse(e);g.__rpcBrowserProcedures[t]=r}),mp.events.add(c,e=>{const[r,t]=JSON.parse(e);g.__rpcBrowserProcedures[t]===r&&delete g.__rpcBrowserProcedures[t]}),register(l,([e,r],t)=>{Object.keys(g.__rpcBrowsers).forEach(n=>{const o=g.__rpcBrowsers[n];o&&isBrowserValid(o)?_callBrowser(o,a,[e,r],{fenv:t.environment,noRet:1}):delete g.__rpcBrowsers[n]})})}register(a,([e,r],t)=>callEvent(e,r,t))}function passEventToBrowser(e,r,n){const s=stringifyData(r);e.execute(`var process = window["${o}"]; if(process){ process(${JSON.stringify(s)}); }else{ ${n?"":`mp.trigger("${o}", '{"ret":1,"id":"${r.id}","err":"${t}","env":"cef"}');`} }`)}function callProcedure(e,r,n){const o=g.__rpcListeners[e];return o?Promise.resolve(o(r,n)):Promise.reject(`${t} (${e})`)}function sendEventData(e,r){const t={client:(e,...r)=>mp.events.callRemote(e,...r),server:(e,...t)=>r.call(e,[...t])},n=e.env,i=stringifyData(e);if(i.length>3e4){const r=function chunkSubstr(e,r){const t=[];for(let n=0;n<=e.length-1;n+=r)t.push(e.substr(n,Math.min(r,e.length-n)));return t}(i,3e4);r.forEach((o,i)=>{t[n](s,e.id,i,r.length,o)})}else t[n](o,i)}function register(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`register expects 2 arguments: "name" and "cb" - ("${e}")`);return log(`Registered procedure "${e}"`),"cef"===p&&g[n].then(r=>mp.trigger(i,JSON.stringify([r,e]))),g.__rpcListeners[e]=r,()=>unregister(e)}function unregister(e){if("string"!=typeof e)throw new Error(`unregister expects 1 argument: "name" - ("${e}")`);log(`Unregistered procedure "${e}"`),"cef"===p&&g[n].then(r=>mp.trigger(c,JSON.stringify([r,e]))),g.__rpcListeners[e]=void 0}function call(e,r,t={}){return"string"!=typeof e?Promise.reject(`call expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${e}")`):promiseTimeout(callProcedure(e,r,{environment:p}),t.timeout)}function _callServer(e,r,t={}){switch(p){case"server":return call(e,r);case"client":{const n=generateId();return new Promise(o=>{t.noRet||(g.__rpcPending[n]={resolve:o});sendEventData({req:1,id:n,name:e,env:p,args:r,...t})})}case"cef":return callClient("__rpc:callServer",[e,r,Number(t.noRet)])}}function _callClient(e,r,t,s={}){switch(p){case"client":return call(r,t);case"server":{const n=generateId();return new Promise(o=>{s.noRet||(g.__rpcPending[n]={resolve:o,player:e});sendEventData({req:1,id:n,name:r,env:p,args:t,...s},e)})}case"cef":{const e=generateId();return g[n].then(n=>new Promise(i=>{s.noRet||(g.__rpcPending[e]={resolve:i});const c={b:n,req:1,id:e,name:r,env:p,args:t,...s};mp.trigger(o,stringifyData(c))}))}}}function callClient(e,r,t,n={}){switch(p){case"client":if(n=t||{},t=r,r=e,e=null,"string"!=typeof r)return Promise.reject(`callClient from the client expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)return Promise.reject(`callClient from the server expects 2 to 4 arguments: "player", "name", optional "args", and optional "options" - ("${r}")`);break;case"cef":if(n=t||{},t=r,r=e,e=null,"string"!=typeof r)return Promise.reject(`callClient from the browser expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`)}const o={};return n.noRet&&(o.noRet=1),promiseTimeout(_callClient(e,r,t,o),n.timeout)}function _callBrowser(e,r,t,n={}){return new Promise(o=>{const s=generateId();n.noRet||(g.__rpcPending[s]={resolve:o}),passEventToBrowser(e,{req:1,id:s,name:r,env:p,args:t,...n},!1)})}function _callBrowsers(e,r,n,o={}){switch(p){case"client":{const e=g.__rpcBrowserProcedures[r];if(!e)return Promise.reject(`${t} (${r})`);const s=g.__rpcBrowsers[e];return s&&isBrowserValid(s)?_callBrowser(s,r,n,o):Promise.reject(`${t} (${r})`)}case"server":return _callClient(e,"__rpc:callBrowsers",[r,n,Number(o.noRet)],o);case"cef":return _callClient(null,"__rpc:callBrowsers",[r,n,Number(o.noRet)],o)}}function callEvent(e,r,t){const n=g.__rpcEvListeners[e];n&&n.forEach(e=>e(r,t))}function off(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`off expects 2 arguments: "name" and "cb" - ("${e}")`);const t=g.__rpcEvListeners[e];t&&(log(`Unregistered procedure listener "${e}"`),t.delete(r))}exports.call=call,exports.callBrowser=function callBrowser(e,r,t,n={}){if("client"!==p)return Promise.reject(`callBrowser can only be used in the client environment - ("${r}")`);if(!isBrowserValid(e)||"string"!=typeof r)return Promise.reject(`callBrowser expects 2 to 4 arguments: "browser", "name", optional "args", and optional "options" - ("${r}")`);const o={};return n.noRet&&(o.noRet=1),promiseTimeout(_callBrowser(e,r,t,o),n.timeout)},exports.callBrowsers=function callBrowsers(e,r,t,n={}){let o;const s={};switch(p){case"client":case"cef":if(n=t||{},t=r,"string"!=typeof(r=e))return Promise.reject(`callBrowsers from the client or browser expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`);n.noRet&&(s.noRet=1),o=_callBrowsers(null,r,t,s);break;case"server":if("string"!=typeof r||"object"!=typeof e)return Promise.reject(`callBrowsers from the server expects 2 to 4 arguments: "player", "name", optional "args", and optional "options" - ("${r}")`);n.noRet&&(s.noRet=1),o=_callBrowsers(e,r,t,s)}if(o)return promiseTimeout(o,n.timeout)},exports.callClient=callClient,exports.callServer=function callServer(e,r,t={}){if("string"!=typeof e)return Promise.reject(`callServer expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${e}")`);const n={};return t.noRet&&(n.noRet=1),promiseTimeout(_callServer(e,r,n),t.timeout)},exports.off=off,exports.on=function on(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`on expects 2 arguments: "name" and "cb" - ("${e}")`);log(`Registered procedure listener "${e}"`);const t=g.__rpcEvListeners[e]||new Set;return t.add(r),g.__rpcEvListeners[e]=t,()=>off(e,r)},exports.register=register,exports.setDebugMode=function setDebugMode(e){r=e},exports.trigger=function trigger(e,r){if("string"!=typeof e)throw new Error(`trigger expects 1 or 2 arguments: "name", and optional "args" - ("${e}")`);callEvent(e,r,{environment:p})},exports.triggerBrowser=function triggerBrowser(e,r,t){if("client"!==p)throw new Error(`callBrowser can only be used in the client environment - ("${r}")`);if(!isBrowserValid(e)||"string"!=typeof r)throw new Error(`callBrowser expects 2 or 3 arguments: "browser", "name", and optional "args" - ("${r}")`);_callBrowser(e,a,[r,t],{noRet:1})},exports.triggerBrowsers=function triggerBrowsers(e,r,t){switch(p){case"client":case"cef":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerBrowsers from the client or browser expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)throw new Error(`triggerBrowsers from the server expects 2 or 3 arguments: "player", "name", and optional "args" - ("${r}")`)}_callClient(e,l,[r,t],{noRet:1})},exports.triggerClient=function triggerClient(e,r,t){switch(p){case"client":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerClient from the client expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)throw new Error(`triggerClient from the server expects 2 or 3 arguments: "player", "name", and optional "args" - ("${r}")`);break;case"cef":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerClient from the browser expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`)}_callClient(e,a,[r,t],{noRet:1})},exports.triggerServer=function triggerServer(e,r){if("string"!=typeof e)throw new Error(`triggerServer expects 1 or 2 arguments: "name", and optional "args" - ("${e}")`);_callServer(a,[e,r],{noRet:1})},exports.unregister=unregister,exports.version="0.3.2";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).rpc={})}(this,function(e){"use strict";var r;!function(e){e.Blip="b",e.Checkpoint="cp",e.Colshape="c",e.Label="l",e.Marker="m",e.Object="o",e.Pickup="p",e.Player="pl",e.Vehicle="v"}(r||(r={}));let t=!1;function getEnvironment(){if(mp.joaat)return"server";if(mp.game&&mp.game.joaat)return"client";if(mp.trigger)return"cef";throw new Error("Unknown RAGE environment")}function log(e,r="info"){if(!t)return;const n=getEnvironment(),o=mp.console;(o?mp.console:console)[o?{info:"logInfo",error:"logError",warn:"logWarn"}[r]:"info"===r?"log":r](`RPC (${n}): ${e}`)}function isObjectMpType(e,t){const n="client"===getEnvironment();if(e&&"object"==typeof e&&void 0!==e.id){const validate=(r,t,o)=>n?e.type===r&&t.at(e.id)===e:e instanceof o;switch(t){case r.Blip:return validate("blip",mp.blips,mp.Blip);case r.Checkpoint:return validate("checkpoint",mp.checkpoints,mp.Checkpoint);case r.Colshape:return validate("colshape",mp.colshapes,mp.Colshape);case r.Label:return validate("textlabel",mp.labels,mp.TextLabel);case r.Marker:return validate("marker",mp.markers,mp.Marker);case r.Object:return validate("object",mp.objects,mp.Object);case r.Pickup:return validate("pickup",mp.pickups,mp.Pickup);case r.Player:return validate("player",mp.players,mp.Player);case r.Vehicle:return validate("vehicle",mp.vehicles,mp.Vehicle)}}return!1}function generateId(){const e=46656*Math.random()|0,r=46656*Math.random()|0;return`000${e.toString(36)}`.slice(-3)+`000${r.toString(36)}`.slice(-3)}function stringifyData(e){const t=getEnvironment();return JSON.stringify(e,(e,n)=>{if("client"===t||"server"===t&&n&&"object"==typeof n){let e;if(isObjectMpType(n,r.Blip)?e=r.Blip:isObjectMpType(n,r.Checkpoint)?e=r.Checkpoint:isObjectMpType(n,r.Colshape)?e=r.Colshape:isObjectMpType(n,r.Marker)?e=r.Marker:isObjectMpType(n,r.Object)?e=r.Object:isObjectMpType(n,r.Pickup)?e=r.Pickup:isObjectMpType(n,r.Player)?e=r.Player:isObjectMpType(n,r.Vehicle)&&(e=r.Vehicle),e)return{__t:e,i:"number"==typeof n.remoteId?n.remoteId:n.id}}return n})}function promiseTimeout(e,r){return"number"==typeof r?Promise.race([new Promise((e,t)=>{setTimeout(()=>t("TIMEOUT"),r)}),e]):e}function isBrowserValid(e){try{e.url}catch(e){return!1}return!0}const n="PROCEDURE_NOT_FOUND",o="__rpc:id",s="__rpc:process",i="__rpc:processPartial",c="__rpc:browserRegister",a="__rpc:browserUnregister",l="__rpc:triggerEvent",p="__rpc:triggerEventBrowsers",f=getEnvironment(),u="cef"===f?window:global;if(u[i]||(u.__rpcPartialData={},u[i]=(e,r,t,n,o)=>{"server"!==f&&(o=n,n=t,t=r,r=e),u.__rpcPartialData[r]||(u.__rpcPartialData[r]=new Array(n)),u.__rpcPartialData[r][t]=o,u.__rpcPartialData[r].includes(void 0)||("server"===f?u[s](e,u.__rpcPartialData[r].join("")):u[s](u.__rpcPartialData[r].join("")),delete u.__rpcPartialData[r])}),!u[s]){if(u.__rpcListeners={},u.__rpcPending={},u.__rpcEvListeners={},u[s]=(e,t)=>{"server"!==f&&(t=e);const n=function parseData(e){const t=getEnvironment();return JSON.parse(e,(e,n)=>{if(("client"===t||"server"===t)&&n&&"object"==typeof n&&"string"==typeof n.__t&&"number"==typeof n.i&&2===Object.keys(n).length){const e=n.i;let o;switch(n.__t){case r.Blip:o=mp.blips;break;case r.Checkpoint:o=mp.checkpoints;break;case r.Colshape:o=mp.colshapes;break;case r.Label:o=mp.labels;break;case r.Marker:o=mp.markers;break;case r.Object:o=mp.objects;break;case r.Pickup:o=mp.pickups;break;case r.Player:o=mp.players;break;case r.Vehicle:o=mp.vehicles}if(o)return o["client"===t?"atRemoteId":"at"](e)}return n})}(t);if(n.req){const r={id:n.id,environment:n.fenv||n.env};"server"===f&&(r.player=e);const t={ret:1,id:n.id,env:f};let o;switch(f){case"server":o=e=>sendEventData(e,r.player);break;case"client":if("server"===n.env)o=e=>sendEventData(e);else if("cef"===n.env){const e=n.b&&u.__rpcBrowsers[n.b];r.browser=e,o=r=>e&&isBrowserValid(e)&&passEventToBrowser(e,r,!0)}break;default:o=e=>mp.trigger(s,stringifyData(e))}if(o){const e=callProcedure(n.name,n.args,r);n.noRet||e.then(e=>o({...t,res:e})).catch(e=>o({...t,err:e||null}))}}else if(n.ret){const r=u.__rpcPending[n.id];if("server"===f&&r.player!==e)return;r&&(r.resolve(n.hasOwnProperty("err")?Promise.reject(n.err):Promise.resolve(n.res)),delete u.__rpcPending[n.id])}},"cef"===f)void 0===u[o]&&(u[o]=new Promise(e=>{window.name?e(window.name):u[`${o}:resolve`]=e}));else if(mp.events.add(s,u[s]),mp.events.add(i,u[i]),"client"===f){register("__rpc:callServer",([e,r,t],n)=>_callServer(e,r,{fenv:n.environment,noRet:t})),register("__rpc:callBrowsers",([e,r,t],n)=>_callBrowsers(null,e,r,{fenv:n.environment,noRet:t})),u.__rpcBrowsers={};const initBrowser=e=>{const r=generateId();Object.keys(u.__rpcBrowsers).forEach(r=>{const t=u.__rpcBrowsers[r];t&&isBrowserValid(t)&&t!==e||delete u.__rpcBrowsers[r]}),u.__rpcBrowsers[r]=e,e.execute(`\n window.name = '${r}';\n if(typeof window['${o}'] === 'undefined'){\n window['${o}'] = Promise.resolve(window.name);\n }else{\n window['${o}:resolve'](window.name);\n }\n `)};mp.browsers.forEach(initBrowser),mp.events.add("browserCreated",initBrowser),u.__rpcBrowserProcedures={},mp.events.add(c,e=>{const[r,t]=JSON.parse(e);u.__rpcBrowserProcedures[t]=r}),mp.events.add(a,e=>{const[r,t]=JSON.parse(e);u.__rpcBrowserProcedures[t]===r&&delete u.__rpcBrowserProcedures[t]}),register(p,([e,r],t)=>{Object.keys(u.__rpcBrowsers).forEach(n=>{const o=u.__rpcBrowsers[n];o&&isBrowserValid(o)?_callBrowser(o,l,[e,r],{fenv:t.environment,noRet:1}):delete u.__rpcBrowsers[n]})})}register(l,([e,r],t)=>callEvent(e,r,t))}function passEventToBrowser(e,r,t){const o=stringifyData(r);e.execute(`var process = window["${s}"]; if(process){ process(${JSON.stringify(o)}); }else{ ${t?"":`mp.trigger("${s}", '{"ret":1,"id":"${r.id}","err":"${n}","env":"cef"}');`} }`)}function callProcedure(e,r,t){const o=u.__rpcListeners[e];return o?Promise.resolve(o(r,t)):Promise.reject(`${n} (${e})`)}function sendEventData(e,r){const t={client:(e,...r)=>mp.events.callRemote(e,...r),server:(e,...t)=>r.call(e,[...t])},n=e.env,o=stringifyData(e);if(o.length>3e4){const r=function chunkSubstr(e,r){const t=[];for(let n=0;n<=e.length-1;n+=r)t.push(e.substr(n,Math.min(r,e.length-n)));return t}(o,3e4);r.forEach((o,s)=>{t[n](i,e.id,s,r.length,o)})}else t[n](s,o)}function register(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`register expects 2 arguments: "name" and "cb" - ("${e}")`);return log(`Registered procedure "${e}"`),"cef"===f&&u[o].then(r=>mp.trigger(c,JSON.stringify([r,e]))),u.__rpcListeners[e]=r,()=>unregister(e)}function unregister(e){if("string"!=typeof e)throw new Error(`unregister expects 1 argument: "name" - ("${e}")`);log(`Unregistered procedure "${e}"`),"cef"===f&&u[o].then(r=>mp.trigger(a,JSON.stringify([r,e]))),u.__rpcListeners[e]=void 0}function call(e,r,t={}){return"string"!=typeof e?Promise.reject(`call expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${e}")`):promiseTimeout(callProcedure(e,r,{environment:f}),t.timeout)}function _callServer(e,r,t={}){switch(f){case"server":return call(e,r);case"client":{const n=generateId();return new Promise(o=>{t.noRet||(u.__rpcPending[n]={resolve:o});sendEventData({req:1,id:n,name:e,env:f,args:r,...t})})}case"cef":return callClient("__rpc:callServer",[e,r,Number(t.noRet)])}}function _callClient(e,r,t,n={}){switch(f){case"client":return call(r,t);case"server":{const o=generateId();return new Promise(s=>{n.noRet||(u.__rpcPending[o]={resolve:s,player:e});sendEventData({req:1,id:o,name:r,env:f,args:t,...n},e)})}case"cef":{const e=generateId();return u[o].then(o=>new Promise(i=>{n.noRet||(u.__rpcPending[e]={resolve:i});const c={b:o,req:1,id:e,name:r,env:f,args:t,...n};mp.trigger(s,stringifyData(c))}))}}}function callClient(e,r,t,n={}){switch(f){case"client":if(n=t||{},t=r,r=e,e=null,"string"!=typeof r)return Promise.reject(`callClient from the client expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)return Promise.reject(`callClient from the server expects 2 to 4 arguments: "player", "name", optional "args", and optional "options" - ("${r}")`);break;case"cef":if(n=t||{},t=r,r=e,e=null,"string"!=typeof r)return Promise.reject(`callClient from the browser expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`)}const o={};return n.noRet&&(o.noRet=1),promiseTimeout(_callClient(e,r,t,o),n.timeout)}function _callBrowser(e,r,t,n={}){return new Promise(o=>{const s=generateId();n.noRet||(u.__rpcPending[s]={resolve:o}),passEventToBrowser(e,{req:1,id:s,name:r,env:f,args:t,...n},!1)})}function _callBrowsers(e,r,t,o={}){switch(f){case"client":{const e=u.__rpcBrowserProcedures[r];if(!e)return Promise.reject(`${n} (${r})`);const s=u.__rpcBrowsers[e];return s&&isBrowserValid(s)?_callBrowser(s,r,t,o):Promise.reject(`${n} (${r})`)}case"server":return _callClient(e,"__rpc:callBrowsers",[r,t,Number(o.noRet)],o);case"cef":return _callClient(null,"__rpc:callBrowsers",[r,t,Number(o.noRet)],o)}}function callEvent(e,r,t){const n=u.__rpcEvListeners[e];n&&n.forEach(e=>e(r,t))}function off(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`off expects 2 arguments: "name" and "cb" - ("${e}")`);const t=u.__rpcEvListeners[e];t&&(log(`Unregistered procedure listener "${e}"`),t.delete(r))}e.call=call,e.callBrowser=function callBrowser(e,r,t,n={}){if("client"!==f)return Promise.reject(`callBrowser can only be used in the client environment - ("${r}")`);if(!isBrowserValid(e)||"string"!=typeof r)return Promise.reject(`callBrowser expects 2 to 4 arguments: "browser", "name", optional "args", and optional "options" - ("${r}")`);const o={};return n.noRet&&(o.noRet=1),promiseTimeout(_callBrowser(e,r,t,o),n.timeout)},e.callBrowsers=function callBrowsers(e,r,t,n={}){let o;const s={};switch(f){case"client":case"cef":if(n=t||{},t=r,"string"!=typeof(r=e))return Promise.reject(`callBrowsers from the client or browser expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${r}")`);n.noRet&&(s.noRet=1),o=_callBrowsers(null,r,t,s);break;case"server":if("string"!=typeof r||"object"!=typeof e)return Promise.reject(`callBrowsers from the server expects 2 to 4 arguments: "player", "name", optional "args", and optional "options" - ("${r}")`);n.noRet&&(s.noRet=1),o=_callBrowsers(e,r,t,s)}if(o)return promiseTimeout(o,n.timeout)},e.callClient=callClient,e.callServer=function callServer(e,r,t={}){if("string"!=typeof e)return Promise.reject(`callServer expects 1 to 3 arguments: "name", optional "args", and optional "options" - ("${e}")`);const n={};return t.noRet&&(n.noRet=1),promiseTimeout(_callServer(e,r,n),t.timeout)},e.off=off,e.on=function on(e,r){if("string"!=typeof e||!r||"function"!=typeof r)throw new Error(`on expects 2 arguments: "name" and "cb" - ("${e}")`);log(`Registered procedure listener "${e}"`);const t=u.__rpcEvListeners[e]||new Set;return t.add(r),u.__rpcEvListeners[e]=t,()=>off(e,r)},e.register=register,e.setDebugMode=function setDebugMode(e){t=e},e.trigger=function trigger(e,r){if("string"!=typeof e)throw new Error(`trigger expects 1 or 2 arguments: "name", and optional "args" - ("${e}")`);callEvent(e,r,{environment:f})},e.triggerBrowser=function triggerBrowser(e,r,t){if("client"!==f)throw new Error(`callBrowser can only be used in the client environment - ("${r}")`);if(!isBrowserValid(e)||"string"!=typeof r)throw new Error(`callBrowser expects 2 or 3 arguments: "browser", "name", and optional "args" - ("${r}")`);_callBrowser(e,l,[r,t],{noRet:1})},e.triggerBrowsers=function triggerBrowsers(e,r,t){switch(f){case"client":case"cef":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerBrowsers from the client or browser expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)throw new Error(`triggerBrowsers from the server expects 2 or 3 arguments: "player", "name", and optional "args" - ("${r}")`)}_callClient(e,p,[r,t],{noRet:1})},e.triggerClient=function triggerClient(e,r,t){switch(f){case"client":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerClient from the client expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`);break;case"server":if("string"!=typeof r||"object"!=typeof e)throw new Error(`triggerClient from the server expects 2 or 3 arguments: "player", "name", and optional "args" - ("${r}")`);break;case"cef":if(t=r,r=e,e=null,"string"!=typeof r)throw new Error(`triggerClient from the browser expects 1 or 2 arguments: "name", and optional "args" - ("${r}")`)}_callClient(e,l,[r,t],{noRet:1})},e.triggerServer=function triggerServer(e,r){if("string"!=typeof e)throw new Error(`triggerServer expects 1 or 2 arguments: "name", and optional "args" - ("${e}")`);_callServer(l,[e,r],{noRet:1})},e.unregister=unregister,e.version="0.3.2",Object.defineProperty(e,"__esModule",{value:!0})});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function setDebugMode(state: boolean): void;
|
|
2
|
+
export declare function getEnvironment(): "server" | "client" | "cef";
|
|
3
|
+
export declare function log(data: string, type?: 'info' | 'error' | 'warn'): void;
|
|
4
|
+
export declare function generateId(): string;
|
|
5
|
+
export declare function stringifyData(data: any): string;
|
|
6
|
+
export declare function parseData(data: string): any;
|
|
7
|
+
export declare function promiseTimeout(promise: Promise<any>, timeout?: number): Promise<any>;
|
|
8
|
+
export declare function isBrowserValid(browser: Browser): boolean;
|
|
9
|
+
export declare function chunkSubstr(string: string, size: number): string[];
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { setDebugMode } from './helpers';
|
|
2
|
+
export type ProcedureListener = (args: any, info: ProcedureListenerInfo) => any;
|
|
3
|
+
export interface ProcedureListenerInfo<T = any, K = any> {
|
|
4
|
+
environment: string;
|
|
5
|
+
id?: string;
|
|
6
|
+
player?: T;
|
|
7
|
+
browser?: K;
|
|
8
|
+
}
|
|
9
|
+
export interface CallOptions {
|
|
10
|
+
timeout?: number;
|
|
11
|
+
noRet?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Register a procedure.
|
|
15
|
+
* @param {string} name - The name of the procedure.
|
|
16
|
+
* @param {ProcedureListener} cb - The procedure's callback. The return value will be sent back to the caller.
|
|
17
|
+
* @returns The function, which unregister the event.
|
|
18
|
+
*/
|
|
19
|
+
export declare function register(name: string, cb: ProcedureListener): () => void;
|
|
20
|
+
/**
|
|
21
|
+
* Unregister a procedure.
|
|
22
|
+
* @param {string} name - The name of the procedure.
|
|
23
|
+
*/
|
|
24
|
+
export declare function unregister(name: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Calls a local procedure. Only procedures registered in the same context will be resolved.
|
|
27
|
+
*
|
|
28
|
+
* Can be called from any environment.
|
|
29
|
+
*
|
|
30
|
+
* @param name - The name of the locally registered procedure.
|
|
31
|
+
* @param args - Any parameters for the procedure.
|
|
32
|
+
* @param options - Any options.
|
|
33
|
+
* @returns The result from the procedure.
|
|
34
|
+
*/
|
|
35
|
+
export declare function call<T = any>(name: string, args?: any, options?: CallOptions): Promise<T>;
|
|
36
|
+
/**
|
|
37
|
+
* Calls a remote procedure registered on the server.
|
|
38
|
+
*
|
|
39
|
+
* Can be called from any environment.
|
|
40
|
+
*
|
|
41
|
+
* @param name - The name of the registered procedure.
|
|
42
|
+
* @param args - Any parameters for the procedure.
|
|
43
|
+
* @param options - Any options.
|
|
44
|
+
* @returns The result from the procedure.
|
|
45
|
+
*/
|
|
46
|
+
export declare function callServer<T = any>(name: string, args?: any, options?: CallOptions): Promise<T>;
|
|
47
|
+
/**
|
|
48
|
+
* Calls a remote procedure registered on the client.
|
|
49
|
+
*
|
|
50
|
+
* Can be called from any environment.
|
|
51
|
+
*
|
|
52
|
+
* @param player - The player to call the procedure on.
|
|
53
|
+
* @param name - The name of the registered procedure.
|
|
54
|
+
* @param args - Any parameters for the procedure.
|
|
55
|
+
* @param options - Any options.
|
|
56
|
+
* @returns The result from the procedure.
|
|
57
|
+
*/
|
|
58
|
+
export declare function callClient<T = any>(player: Player | string, name?: string | any, args?: any, options?: CallOptions): Promise<T>;
|
|
59
|
+
/**
|
|
60
|
+
* Calls a remote procedure registered in any browser context.
|
|
61
|
+
*
|
|
62
|
+
* Can be called from any environment.
|
|
63
|
+
*
|
|
64
|
+
* @param player - The player to call the procedure on.
|
|
65
|
+
* @param name - The name of the registered procedure.
|
|
66
|
+
* @param args - Any parameters for the procedure.
|
|
67
|
+
* @param options - Any options.
|
|
68
|
+
* @returns The result from the procedure.
|
|
69
|
+
*/
|
|
70
|
+
export declare function callBrowsers<T = any>(player: Player | string, name?: string | any, args?: any, options?: CallOptions): Promise<T> | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Calls a remote procedure registered in a specific browser instance.
|
|
73
|
+
*
|
|
74
|
+
* Client-side environment only.
|
|
75
|
+
*
|
|
76
|
+
* @param browser - The browser instance.
|
|
77
|
+
* @param name - The name of the registered procedure.
|
|
78
|
+
* @param args - Any parameters for the procedure.
|
|
79
|
+
* @param options - Any options.
|
|
80
|
+
* @returns The result from the procedure.
|
|
81
|
+
*/
|
|
82
|
+
export declare function callBrowser<T = any>(browser: Browser, name: string, args?: any, options?: CallOptions): Promise<T>;
|
|
83
|
+
/**
|
|
84
|
+
* Register an event handler.
|
|
85
|
+
* @param {string} name - The name of the event.
|
|
86
|
+
* @param {ProcedureListener} cb - The callback for the event.
|
|
87
|
+
* @returns The function, which off the event.
|
|
88
|
+
*/
|
|
89
|
+
export declare function on(name: string, cb: ProcedureListener): () => void;
|
|
90
|
+
/**
|
|
91
|
+
* Unregister an event handler.
|
|
92
|
+
* @param {string} name - The name of the event.
|
|
93
|
+
* @param {ProcedureListener} cb - The callback for the event.
|
|
94
|
+
*/
|
|
95
|
+
export declare function off(name: string, cb: ProcedureListener): void;
|
|
96
|
+
/**
|
|
97
|
+
* Triggers a local event. Only events registered in the same context will be triggered.
|
|
98
|
+
*
|
|
99
|
+
* Can be called from any environment.
|
|
100
|
+
*
|
|
101
|
+
* @param name - The name of the locally registered event.
|
|
102
|
+
* @param args - Any parameters for the event.
|
|
103
|
+
*/
|
|
104
|
+
export declare function trigger(name: string, args?: any): void;
|
|
105
|
+
/**
|
|
106
|
+
* Triggers an event registered on the client.
|
|
107
|
+
*
|
|
108
|
+
* Can be called from any environment.
|
|
109
|
+
*
|
|
110
|
+
* @param player - The player to call the procedure on.
|
|
111
|
+
* @param name - The name of the event.
|
|
112
|
+
* @param args - Any parameters for the event.
|
|
113
|
+
*/
|
|
114
|
+
export declare function triggerClient(player: Player | string, name?: string | any, args?: any): void;
|
|
115
|
+
/**
|
|
116
|
+
* Triggers an event registered on the server.
|
|
117
|
+
*
|
|
118
|
+
* Can be called from any environment.
|
|
119
|
+
*
|
|
120
|
+
* @param name - The name of the event.
|
|
121
|
+
* @param args - Any parameters for the event.
|
|
122
|
+
*/
|
|
123
|
+
export declare function triggerServer(name: string, args?: any): void;
|
|
124
|
+
/**
|
|
125
|
+
* Triggers an event registered in any browser context.
|
|
126
|
+
*
|
|
127
|
+
* Can be called from any environment.
|
|
128
|
+
*
|
|
129
|
+
* @param player - The player to call the procedure on.
|
|
130
|
+
* @param name - The name of the event.
|
|
131
|
+
* @param args - Any parameters for the event.
|
|
132
|
+
*/
|
|
133
|
+
export declare function triggerBrowsers(player: Player | string, name?: string | any, args?: any): void;
|
|
134
|
+
/**
|
|
135
|
+
* Triggers an event registered in a specific browser instance.
|
|
136
|
+
*
|
|
137
|
+
* Client-side environment only.
|
|
138
|
+
*
|
|
139
|
+
* @param browser - The browser instance.
|
|
140
|
+
* @param name - The name of the event.
|
|
141
|
+
* @param args - Any parameters for the event.
|
|
142
|
+
*/
|
|
143
|
+
export declare function triggerBrowser(browser: Browser, name: string, args?: any): void;
|
|
144
|
+
export { setDebugMode };
|
|
145
|
+
export declare const version: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gta5urban/rage-rpc",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"main": "dist/rage-rpc.js",
|
|
17
17
|
"module": "dist/rage-rpc.esm.mjs",
|
|
18
|
-
"types": "
|
|
18
|
+
"types": "dist/src/index.d.ts",
|
|
19
19
|
"files": [
|
|
20
20
|
"dist/*",
|
|
21
21
|
"types/*"
|