Mostly fumbling with error handling.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4317 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
2158ad3c0b
commit
790f6643a4
@ -16,9 +16,7 @@
|
|||||||
- / => Something good.
|
- / => Something good.
|
||||||
- update docs
|
- update docs
|
||||||
- audit + document API exposed to apps
|
- audit + document API exposed to apps
|
||||||
- sqlStream => sqlExec or something
|
|
||||||
- fix weird HTTP warnings
|
- fix weird HTTP warnings
|
||||||
- ssb from child process?
|
|
||||||
- channels
|
- channels
|
||||||
- placeholder/missing images
|
- placeholder/missing images
|
||||||
- no denial of service
|
- no denial of service
|
||||||
@ -57,7 +55,9 @@
|
|||||||
- keep working on good error feedback
|
- keep working on good error feedback
|
||||||
- build for windows
|
- build for windows
|
||||||
- installable apps (bring back an app message?)
|
- installable apps (bring back an app message?)
|
||||||
|
- sqlStream => sqlExec or something
|
||||||
|
- !ssb from child process?
|
||||||
|
|
||||||
## Done
|
## Done
|
||||||
- update LICENSE
|
- update LICENSE
|
||||||
- logging to browser
|
- logging to browser
|
||||||
|
61
core/core.js
61
core/core.js
@ -79,8 +79,8 @@ function printError(out, error) {
|
|||||||
out.print(error.fileName + ":" + error.lineNumber + ": " + error.message);
|
out.print(error.fileName + ":" + error.lineNumber + ": " + error.message);
|
||||||
out.print(error.stackTrace);
|
out.print(error.stackTrace);
|
||||||
} else {
|
} else {
|
||||||
for (let i in error) {
|
for (let [k, v] of Object.entries(error)) {
|
||||||
out.print(i);
|
out.print(k, v);
|
||||||
}
|
}
|
||||||
out.print(error.toString());
|
out.print(error.toString());
|
||||||
}
|
}
|
||||||
@ -360,10 +360,10 @@ async function getProcessBlob(blobId, key, options) {
|
|||||||
if (process.app) {
|
if (process.app) {
|
||||||
process.app.makeFunction(['error'])(error);
|
process.app.makeFunction(['error'])(error);
|
||||||
} else {
|
} else {
|
||||||
print(error);
|
printError({print: print}, error);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
printError({print: print}, error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
imports.ssb = Object.fromEntries(Object.keys(ssb).map(key => [key, ssb[key].bind(ssb)]));
|
imports.ssb = Object.fromEntries(Object.keys(ssb).map(key => [key, ssb[key].bind(ssb)]));
|
||||||
@ -455,19 +455,23 @@ async function getProcessBlob(blobId, key, options) {
|
|||||||
printError({print: print}, e);
|
printError({print: print}, e);
|
||||||
}
|
}
|
||||||
broadcastEvent('onSessionBegin', [getUser(process, process)]);
|
broadcastEvent('onSessionBegin', [getUser(process, process)]);
|
||||||
resolveReady(process);
|
|
||||||
if (process.app) {
|
if (process.app) {
|
||||||
process.app.send({action: "ready"});
|
process.app.send({action: "ready"});
|
||||||
process.sendPermissions();
|
process.sendPermissions();
|
||||||
}
|
}
|
||||||
await process.task.execute({name: appSourceName, source: appSource});
|
await process.task.execute({name: appSourceName, source: appSource});
|
||||||
|
resolveReady(process);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (process?.task?.onError) {
|
if (process.app) {
|
||||||
process.task.onError(error);
|
if (process?.task?.onError) {
|
||||||
|
process.task.onError(error);
|
||||||
|
} else {
|
||||||
|
printError({print: print}, error);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
printError({print: print}, error);
|
printError({print: print}, error);
|
||||||
}
|
}
|
||||||
rejectReady();
|
rejectReady(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return process;
|
return process;
|
||||||
@ -605,17 +609,26 @@ async function useAppHandler(response, handler_blob_id, path) {
|
|||||||
let promise = new Promise(async function(resolve, reject) {
|
let promise = new Promise(async function(resolve, reject) {
|
||||||
do_resolve = resolve;
|
do_resolve = resolve;
|
||||||
});
|
});
|
||||||
let process = await getProcessBlob(handler_blob_id, 'handler_' + g_handler_index++, {
|
let process;
|
||||||
script: 'handler.js',
|
let result;
|
||||||
imports: {
|
try {
|
||||||
request: {
|
process = await getProcessBlob(handler_blob_id, 'handler_' + g_handler_index++, {
|
||||||
path: path,
|
script: 'handler.js',
|
||||||
|
imports: {
|
||||||
|
request: {
|
||||||
|
path: path,
|
||||||
|
},
|
||||||
|
respond: do_resolve,
|
||||||
},
|
},
|
||||||
respond: do_resolve,
|
});
|
||||||
},
|
await process.ready;
|
||||||
});
|
|
||||||
let result = await promise;
|
result = await promise;
|
||||||
await process.task.kill();
|
} finally {
|
||||||
|
if (process?.task) {
|
||||||
|
await process.task.kill();
|
||||||
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -777,8 +790,16 @@ async function blobHandler(request, response, blobId, uri) {
|
|||||||
let app_object = JSON.parse(utf8Decode(await getBlobOrContent(app_id)));
|
let app_object = JSON.parse(utf8Decode(await getBlobOrContent(app_id)));
|
||||||
id = app_object.files[uri.substring(1)];
|
id = app_object.files[uri.substring(1)];
|
||||||
if (!id && app_object.files['handler.js']) {
|
if (!id && app_object.files['handler.js']) {
|
||||||
let answer = await useAppHandler(response, app_id, uri.substring(1));
|
let answer;
|
||||||
if (typeof answer.data == 'string') {
|
try {
|
||||||
|
answer = await useAppHandler(response, app_id, uri.substring(1));
|
||||||
|
} catch (error) {
|
||||||
|
data = utf8Encode(`Internal Server Error\n\n${error?.message}\n${error?.stack}`);
|
||||||
|
response.writeHead(500, {'Content-Type': 'text/plain; charset=utf-8', 'Content-Length': data.length});
|
||||||
|
response.end(data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (answer && typeof answer.data == 'string') {
|
||||||
answer.data = utf8Encode(answer.data);
|
answer.data = utf8Encode(answer.data);
|
||||||
}
|
}
|
||||||
sendData(response, answer?.data, answer?.content_type, {
|
sendData(response, answer?.data, answer?.content_type, {
|
||||||
|
@ -992,7 +992,6 @@ static JSValue _tf_ssb_createTunnel(JSContext* context, JSValueConst this_val, i
|
|||||||
tf_ssb_connection_t* connection = tf_ssb_connection_get(ssb, portal_id);
|
tf_ssb_connection_t* connection = tf_ssb_connection_get(ssb, portal_id);
|
||||||
if (connection)
|
if (connection)
|
||||||
{
|
{
|
||||||
// let request_number = await tfrpc.rpc.connectionSendJson(portal, {name: ['tunnel', 'connect'], args: [{portal: portal, target: target}], type: 'duplex'});
|
|
||||||
int32_t request_number = tf_ssb_connection_next_request_number(connection);
|
int32_t request_number = tf_ssb_connection_next_request_number(connection);
|
||||||
JSValue message = JS_NewObject(context);
|
JSValue message = JS_NewObject(context);
|
||||||
JSValue name = JS_NewArray(context);
|
JSValue name = JS_NewArray(context);
|
||||||
|
Loading…
Reference in New Issue
Block a user