edge/misc/client-sdk-testsuite/src/server/main.js

113 lines
2.5 KiB
JavaScript

// 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);
}