// Called on server initialization function onInit() { console.log("server started"); // Register RPC exposed methods rpc.register("echo", echo); rpc.register("throwErrorFromClient", throwError); rpc.register("add", add); rpc.register("reset", reset); rpc.register("total", total); rpc.register("getUserInfo", getUserInfo); rpc.register("listApps"); rpc.register("getApp"); rpc.register("getAppUrl"); rpc.register("serverSideCall", serverSideCall) } // Called for each client message function onClientMessage(ctx, message) { console.log("onClientMessage", message); switch (message.test) { case "broadcast": net.broadcast(message); break; default: net.send(ctx, message); } } // Called for each blob upload request function onBlobUpload(ctx, blobId, blobInfo, metadata) { console.log("onBlobUpload", blobId, blobInfo, metadata); if (!blobInfo.contentType == "application/json") return { allow: false }; if (!blobInfo.filename == "blob") return { allow: false }; return { allow: true, bucket: "test-bucket" }; } // Called for each blob download request function onBlobDownload(ctx, bucket, blobId) { console.log("onBlobDownload", bucket, blobId); return { allow: true }; } // RPC methods function echo(ctx, params) { console.log("echoing", params); return params; } function throwError(ctx, params) { throw new Error("oh no !"); } var count = 0; function add(ctx, params) { console.log("add", params); count += params.value; return count; } function reset(ctx, params) { count = 0; } function total(ctx, params) { return count; } function getUserInfo(ctx, params) { var subject = auth.getClaim(ctx, auth.CLAIM_SUBJECT); var role = auth.getClaim(ctx, auth.CLAIM_ROLE); var preferredUsername = auth.getClaim(ctx, auth.CLAIM_PREFERRED_USERNAME); return { subject: subject, role: role, preferredUsername: preferredUsername, }; } function listApps(ctx) { return app.list(ctx); } function getApp(ctx, params) { var appId = params.appId; return app.get(ctx, appId); } function getAppUrl(ctx, params) { var appId = params.appId; var from = params.from; return app.getUrl(ctx, appId, from ? from : ''); } function onClientFetch(ctx, url, remoteAddr) { return { allow: url === 'http://example.com' }; } function serverSideCall(ctx, params) { console.log("Calling %s.%s(args...)", params.module, params.func) return globalThis[params.module][params.func].call(null, ctx, ...params.args); }