Safe Latent Callbacks
This script enables you to make “latent” callbacks, using the Native Trigger(Client/Server)LatentEvent to transfer huge data from server → client and opposite. I also focused on some security features like owner-verfication, no-source-spoofing or duplicate/replay protection via ticket TTL + a few more. You can use it for Data Transfer or simply for your normal callbacks.
API
Register
RegisterCallback(eventName, handler)
-
eventName(string) -
handler(args)→...
• args.source is injected (trusted): player id on server, -1 on client.
UnregisterCallback(eventName)
Validated register
RegisterSecureCallback(eventName, validator, handler)
-
validator(args)→trueorfalse, "reason"(rejects beforehandler) -
handler(args)→...
Call (either side)
TriggerCallback(eventName, args?, timeoutSec?, asyncCallback?, method?)
-
args(table) – your data (do not setsource) -
timeoutSec(number) – defaults to lib config (e.g., 30s) -
asyncCallback(fn) – if given, called asasyncCallback(result..., err) -
method(“normal” | “latent”) – use"latent"for big payloads
Returns (sync): result... or nil, "error"
Server → specific client
TriggerCallbackFor(playerId, eventName, args?, timeoutSec?, asyncCallback?, method?)
- Same behavior as
TriggerCallback, but targets oneplayerId(server-only).
Latent shorthand
TriggerLatentCallback(eventName, args?, timeoutSec?, asyncCallback?)
- Equivalent to
TriggerCallback(..., "latent").
More at my GitHub…
| Code is accessible | Yes |
| Subscription-based | No |
| Lines (approximately) | ~570 |
| Requirements & dependencies | NONE |
| Support | Yes |