@omujs/omu 0.9.40 → 0.9.42
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/CHANGELOG.md +16 -0
- package/dist/dts/api/asset/extension.d.ts +1 -1
- package/dist/dts/api/dashboard/extension.d.ts +13 -31
- package/dist/dts/api/http/index.d.ts +2 -1
- package/dist/dts/api/registry/registry.d.ts +1 -1
- package/dist/dts/api/server/extension.d.ts +7 -1
- package/dist/dts/api/session/extension.d.ts +6 -5
- package/dist/dts/identifier.d.ts +1 -0
- package/dist/dts/index.d.ts +2 -1
- package/dist/dts/network/network.d.ts +2 -2
- package/dist/dts/omu.d.ts +3 -3
- package/dist/dts/result.d.ts +41 -0
- package/dist/dts/token.d.ts +4 -5
- package/dist/dts/version.d.ts +1 -1
- package/dist/esm/api/asset/extension.js +10 -7
- package/dist/esm/api/asset/index.js +10 -7
- package/dist/esm/api/dashboard/extension.js +140 -76
- package/dist/esm/api/dashboard/index.js +140 -75
- package/dist/esm/api/endpoint/endpoint.js +5 -2
- package/dist/esm/api/endpoint/extension.js +5 -2
- package/dist/esm/api/endpoint/index.js +5 -2
- package/dist/esm/api/endpoint/packets.js +5 -2
- package/dist/esm/api/extension.js +5 -2
- package/dist/esm/api/http/extension.js +5 -2
- package/dist/esm/api/http/index.js +6 -2
- package/dist/esm/api/i18n/extension.js +10 -7
- package/dist/esm/api/i18n/index.js +10 -7
- package/dist/esm/api/index.js +5 -2
- package/dist/esm/api/logger/extension.js +5 -2
- package/dist/esm/api/logger/index.js +5 -2
- package/dist/esm/api/logger/packets.js +5 -2
- package/dist/esm/api/permission/extension.js +5 -2
- package/dist/esm/api/permission/index.js +5 -2
- package/dist/esm/api/permission/permission.js +5 -2
- package/dist/esm/api/plugin/extension.js +5 -2
- package/dist/esm/api/plugin/index.js +5 -2
- package/dist/esm/api/registry/extension.js +10 -7
- package/dist/esm/api/registry/index.js +10 -7
- package/dist/esm/api/registry/packets.js +5 -2
- package/dist/esm/api/registry/registry.js +5 -2
- package/dist/esm/api/server/extension.js +25 -9
- package/dist/esm/api/server/index.js +25 -9
- package/dist/esm/api/session/extension.js +28 -17
- package/dist/esm/api/session/index.js +28 -17
- package/dist/esm/api/signal/extension.js +7 -4
- package/dist/esm/api/signal/index.js +5 -2
- package/dist/esm/api/signal/packets.js +5 -2
- package/dist/esm/api/signal/signal.js +5 -2
- package/dist/esm/api/table/extension.js +7 -4
- package/dist/esm/api/table/index.js +7 -4
- package/dist/esm/api/table/packets.js +5 -2
- package/dist/esm/api/table/table.js +5 -2
- package/dist/esm/app.js +5 -2
- package/dist/esm/errors.js +5 -2
- package/dist/esm/identifier.js +5 -2
- package/dist/esm/index.js +3441 -3333
- package/dist/esm/network/connection.js +5 -2
- package/dist/esm/network/encryption.js +5 -2
- package/dist/esm/network/index.js +6 -3
- package/dist/esm/network/network.js +6 -3
- package/dist/esm/network/packet/index.js +5 -2
- package/dist/esm/network/packet/packet-types.js +5 -2
- package/dist/esm/omu.js +176 -106
- package/dist/esm/result.js +68 -0
- package/dist/esm/token.js +7 -10
- package/dist/esm/version.js +3 -3
- package/package.json +1 -1
- package/src/api/asset/extension.ts +6 -6
- package/src/api/dashboard/extension.ts +105 -94
- package/src/api/http/index.ts +2 -1
- package/src/api/registry/extension.ts +6 -6
- package/src/api/registry/registry.ts +1 -1
- package/src/api/server/extension.ts +20 -1
- package/src/api/session/extension.ts +21 -12
- package/src/api/signal/extension.ts +2 -2
- package/src/api/table/extension.ts +2 -2
- package/src/identifier.ts +4 -0
- package/src/index.ts +2 -1
- package/src/network/network.ts +2 -2
- package/src/omu.ts +4 -4
- package/src/result.ts +78 -0
- package/src/token.ts +5 -9
- package/src/version.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/result.ts
|
|
3
|
+
async function tryCatch(promise) {
|
|
4
|
+
try {
|
|
5
|
+
const data = await promise;
|
|
6
|
+
return { data, error: null };
|
|
7
|
+
} catch (error) {
|
|
8
|
+
return { data: null, error };
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function success(data) {
|
|
12
|
+
return { data, error: null };
|
|
13
|
+
}
|
|
14
|
+
function failure(error) {
|
|
15
|
+
return { data: null, error };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
class PromiseResult {
|
|
19
|
+
promise;
|
|
20
|
+
constructor(promise) {
|
|
21
|
+
this.promise = promise;
|
|
22
|
+
}
|
|
23
|
+
static create() {
|
|
24
|
+
let resolve = () => {};
|
|
25
|
+
let reject = () => {};
|
|
26
|
+
const promise = new Promise((res, rej) => {
|
|
27
|
+
resolve = res;
|
|
28
|
+
reject = rej;
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
promise: new PromiseResult(promise),
|
|
32
|
+
resolve,
|
|
33
|
+
reject
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
then(onfulfilled, onrejected) {
|
|
37
|
+
return this.promise.then(onfulfilled, onrejected);
|
|
38
|
+
}
|
|
39
|
+
catch(onrejected) {
|
|
40
|
+
return this.promise.catch(onrejected);
|
|
41
|
+
}
|
|
42
|
+
finally(onfinally) {
|
|
43
|
+
return this.promise.finally(onfinally);
|
|
44
|
+
}
|
|
45
|
+
[Symbol.toStringTag] = "ResultPromise";
|
|
46
|
+
async toResult() {
|
|
47
|
+
try {
|
|
48
|
+
return {
|
|
49
|
+
data: await this.promise,
|
|
50
|
+
error: null
|
|
51
|
+
};
|
|
52
|
+
} catch (err) {
|
|
53
|
+
return {
|
|
54
|
+
data: null,
|
|
55
|
+
error: err
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
tryCatch,
|
|
62
|
+
success,
|
|
63
|
+
failure,
|
|
64
|
+
PromiseResult
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
//# debugId=5468463432485D3964756E2164756E21
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3Jlc3VsdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJleHBvcnQgdHlwZSBTdWNjZXNzPFQ+ID0ge1xuICAgIGRhdGE6IFQ7XG4gICAgZXJyb3I6IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGYWlsdXJlPEU+ID0ge1xuICAgIGRhdGE6IG51bGw7XG4gICAgZXJyb3I6IEU7XG59O1xuXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCwgRSA9IEVycm9yPiA9IFN1Y2Nlc3M8VD4gfCBGYWlsdXJlPEU+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJ5Q2F0Y2g8VCwgRSA9IEVycm9yPihcbiAgICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuKTogUHJvbWlzZTxSZXN1bHQ8VCwgRT4+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogZXJyb3IgYXMgRSB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3M8VD4oZGF0YTogVCk6IFJlc3VsdDxUPiB7XG4gICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmU8RT4oZXJyb3I6IEUpOiBSZXN1bHQ8bnVsbCwgRT4ge1xuICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9taXNlUmVzdWx0PFQsIEUgPSBFcnJvcj4gaW1wbGVtZW50cyBQcm9taXNlPFQ+IHtcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByb21pc2U6IFByb21pc2U8VD4sXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8VCwgRSA9IEVycm9yPigpOiB7IHByb21pc2U6IFByb21pc2VSZXN1bHQ8VCwgRT47IHJlc29sdmU6ICh2YWx1ZTogVCkgPT4gdm9pZDsgcmVqZWN0OiAoZXJyb3I6IEUpID0+IHZvaWQgfSB7XG4gICAgICAgIGxldCByZXNvbHZlOiAodmFsdWU6IFQpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICAgICAgbGV0IHJlamVjdDogKGVycm9yOiBFKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICByZWplY3QgPSByZWo7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvbWlzZTogbmV3IFByb21pc2VSZXN1bHQ8VCwgRT4ocHJvbWlzZSksXG4gICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRoZW48VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwgfCB1bmRlZmluZWQsIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogRSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlLnRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIGNhdGNoPFRSZXN1bHQgPSBuZXZlcj4ob25yZWplY3RlZD86ICgocmVhc29uOiBFKSA9PiBUUmVzdWx0IHwgUHJvbWlzZUxpa2U8VFJlc3VsdD4pIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IFRSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZS5jYXRjaChvbnJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZS5maW5hbGx5KG9uZmluYWxseSk7XG4gICAgfVxuXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZyA9ICdSZXN1bHRQcm9taXNlJztcblxuICAgIGFzeW5jIHRvUmVzdWx0KCk6IFByb21pc2U8UmVzdWx0PFQsIEU+PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6IGF3YWl0IHRoaXMucHJvbWlzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgYXMgRSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOztBQVlBLGVBQXNCLFFBQXNCLENBQ3hDLFNBQ3FCO0FBQUEsRUFDckIsSUFBSTtBQUFBLElBQ0EsTUFBTSxPQUFPLE1BQU07QUFBQSxJQUNuQixPQUFPLEVBQUUsTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUM3QixPQUFPLE9BQU87QUFBQSxJQUNaLE9BQU8sRUFBRSxNQUFNLE1BQU0sTUFBa0I7QUFBQTtBQUFBO0FBSXhDLFNBQVMsT0FBVSxDQUFDLE1BQW9CO0FBQUEsRUFDM0MsT0FBTyxFQUFFLE1BQU0sT0FBTyxLQUFLO0FBQUE7QUFHeEIsU0FBUyxPQUFVLENBQUMsT0FBMkI7QUFBQSxFQUNsRCxPQUFPLEVBQUUsTUFBTSxNQUFNLE1BQU07QUFBQTtBQUFBO0FBR3hCLE1BQU0sY0FBa0Q7QUFBQSxFQUV0QztBQUFBLEVBRGIsV0FBVyxDQUNFLFNBQ25CO0FBQUEsSUFEbUI7QUFBQTtBQUFBLFNBR1AsTUFBb0IsR0FBOEY7QUFBQSxJQUM1SCxJQUFJLFVBQThCLE1BQU07QUFBQSxJQUN4QyxJQUFJLFNBQTZCLE1BQU07QUFBQSxJQUN2QyxNQUFNLFVBQVUsSUFBSSxRQUFXLENBQUMsS0FBSyxRQUFRO0FBQUEsTUFDekMsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLEtBQ1o7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNILFNBQVMsSUFBSSxjQUFvQixPQUFPO0FBQUEsTUFDeEM7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBO0FBQUEsRUFHSixJQUFvQyxDQUFDLGFBQW1GLFlBQWlIO0FBQUEsSUFDck8sT0FBTyxLQUFLLFFBQVEsS0FBSyxhQUFhLFVBQVU7QUFBQTtBQUFBLEVBR3BELEtBQXNCLENBQUMsWUFBdUc7QUFBQSxJQUMxSCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVU7QUFBQTtBQUFBLEVBR3hDLE9BQU8sQ0FBQyxXQUF5RDtBQUFBLElBQzdELE9BQU8sS0FBSyxRQUFRLFFBQVEsU0FBUztBQUFBO0FBQUEsR0FHeEMsT0FBTyxlQUF1QjtBQUFBLE9BRXpCLFNBQVEsR0FBMEI7QUFBQSxJQUNwQyxJQUFJO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDSCxNQUFNLE1BQU0sS0FBSztBQUFBLFFBQ2pCLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFDRixPQUFPLEtBQUs7QUFBQSxNQUNWLE9BQU87QUFBQSxRQUNILE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxNQUNYO0FBQUE7QUFBQTtBQUdaOyIsCiAgImRlYnVnSWQiOiAiNTQ2ODQ2MzQzMjQ4NUQzOTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
package/dist/esm/token.js
CHANGED
|
@@ -9,12 +9,9 @@ function tryCatch(func) {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// src/token.ts
|
|
12
|
-
class
|
|
13
|
-
static
|
|
14
|
-
|
|
15
|
-
return JSON.stringify([address.host, address.port, address.hash ?? "", app.id.key()]);
|
|
16
|
-
}
|
|
17
|
-
async get(address, app) {
|
|
12
|
+
class BrowserSession {
|
|
13
|
+
static PARAM_NAME = "_omu_session";
|
|
14
|
+
async get(address) {
|
|
18
15
|
const foundToken = this.parseParamSession(address);
|
|
19
16
|
if (foundToken)
|
|
20
17
|
return foundToken;
|
|
@@ -22,7 +19,7 @@ class BrowserTokenProvider {
|
|
|
22
19
|
}
|
|
23
20
|
parseParamSession(address) {
|
|
24
21
|
const searchParams = new URLSearchParams(location.search);
|
|
25
|
-
const param = searchParams.get(
|
|
22
|
+
const param = searchParams.get(BrowserSession.PARAM_NAME);
|
|
26
23
|
if (!param)
|
|
27
24
|
return;
|
|
28
25
|
const { ok, data: session } = tryCatch(() => JSON.parse(param));
|
|
@@ -38,8 +35,8 @@ class BrowserTokenProvider {
|
|
|
38
35
|
}
|
|
39
36
|
}
|
|
40
37
|
export {
|
|
41
|
-
|
|
38
|
+
BrowserSession
|
|
42
39
|
};
|
|
43
40
|
|
|
44
|
-
//# debugId=
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2hlbHBlci50cyIsICIuLi8uLi9zcmMvdG9rZW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidHlwZSBPazxUPiA9IHtcbiAgICBvazogdHJ1ZTtcbiAgICBkYXRhOiBUO1xufTtcbnR5cGUgRXJyPEU+ID0ge1xuICAgIG9rOiBmYWxzZTtcbiAgICBkYXRhOiBFO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyeUNhdGNoPFQsIEUgPSBFcnJvcj4oZnVuYzogKCkgPT4gVCk6IE9rPFQ+IHwgRXJyPEU+
|
|
41
|
+
//# debugId=5F429A2ECACDD4F464756E2164756E21
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2hlbHBlci50cyIsICIuLi8uLi9zcmMvdG9rZW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidHlwZSBPazxUPiA9IHtcbiAgICBvazogdHJ1ZTtcbiAgICBkYXRhOiBUO1xufTtcbnR5cGUgRXJyPEU+ID0ge1xuICAgIG9rOiBmYWxzZTtcbiAgICBkYXRhOiBFO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyeUNhdGNoPFQsIEUgPSBFcnJvcj4oZnVuYzogKCkgPT4gVCk6IE9rPFQ+IHwgRXJyPEU+IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgZGF0YTogZnVuYygpIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGRhdGE6IGUgYXMgRSB9O1xuICAgIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICcuL2FwcC5qcyc7XG5pbXBvcnQgeyB0cnlDYXRjaCB9IGZyb20gJy4vaGVscGVyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9Ub2tlblByb3ZpZGVyIHtcbiAgICBnZXQoc2VydmVyQWRkcmVzczogQWRkcmVzcywgYXBwOiBBcHApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbmV4cG9ydCB0eXBlIFNlc3Npb25QYXJhbSA9IHtcbiAgICBhZGRyZXNzOiBBZGRyZXNzO1xuICAgIHRva2VuOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgQnJvd3NlclNlc3Npb24gaW1wbGVtZW50cyBTZXNzaW9Ub2tlblByb3ZpZGVyIHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBUkFNX05BTUUgPSAnX29tdV9zZXNzaW9uJztcblxuICAgIHB1YmxpYyBhc3luYyBnZXQoYWRkcmVzczogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGZvdW5kVG9rZW4gPSB0aGlzLnBhcnNlUGFyYW1TZXNzaW9uKGFkZHJlc3MpO1xuICAgICAgICBpZiAoZm91bmRUb2tlbikgcmV0dXJuIGZvdW5kVG9rZW47XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlUGFyYW1TZXNzaW9uKGFkZHJlc3M6IEFkZHJlc3MpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gc2VhcmNoUGFyYW1zLmdldChCcm93c2VyU2Vzc2lvbi5QQVJBTV9OQU1FKTtcbiAgICAgICAgaWYgKCFwYXJhbSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IG9rLCBkYXRhOiBzZXNzaW9uIH0gPSB0cnlDYXRjaDxTZXNzaW9uUGFyYW0+KCgpID0+IEpTT04ucGFyc2UocGFyYW0pKTtcbiAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gcGFyc2Ugc2Vzc2lvbiBmcm9tIFVSTCBwYXJhbWV0ZXI6ICR7c2Vzc2lvbn1gKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlc3Npb24uYWRkcmVzcy5oYXNoICE9PSBhZGRyZXNzLmhhc2gpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgU2Vzc2lvbiBhZGRyZXNzIGhhc2ggZG9lcyBub3QgbWF0Y2g6IGV4cGVjdGVkICR7YWRkcmVzcy5oYXNofSwgZ290ICR7c2Vzc2lvbi5hZGRyZXNzLmhhc2h9YCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXNzaW9uLnRva2VuO1xuICAgIH1cbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7O0FBU08sU0FBUyxRQUFzQixDQUFDLE1BQStCO0FBQUEsRUFDbEUsSUFBSTtBQUFBLElBQ0EsT0FBTyxFQUFFLElBQUksTUFBTSxNQUFNLEtBQUssRUFBRTtBQUFBLElBQ2xDLE9BQU8sR0FBRztBQUFBLElBQ1IsT0FBTyxFQUFFLElBQUksT0FBTyxNQUFNLEVBQU87QUFBQTtBQUFBOzs7QUNDbEMsTUFBTSxlQUE4QztBQUFBLFNBQ2hDLGFBQWE7QUFBQSxPQUV2QixJQUFHLENBQUMsU0FBK0M7QUFBQSxJQUM1RCxNQUFNLGFBQWEsS0FBSyxrQkFBa0IsT0FBTztBQUFBLElBQ2pELElBQUk7QUFBQSxNQUFZLE9BQU87QUFBQSxJQUN2QjtBQUFBO0FBQUEsRUFHSSxpQkFBaUIsQ0FBQyxTQUFzQztBQUFBLElBQzVELE1BQU0sZUFBZSxJQUFJLGdCQUFnQixTQUFTLE1BQU07QUFBQSxJQUN4RCxNQUFNLFFBQVEsYUFBYSxJQUFJLGVBQWUsVUFBVTtBQUFBLElBQ3hELElBQUksQ0FBQztBQUFBLE1BQU87QUFBQSxJQUNaLFFBQVEsSUFBSSxNQUFNLFlBQVksU0FBdUIsTUFBTSxLQUFLLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDNUUsSUFBSSxDQUFDLElBQUk7QUFBQSxNQUNMLFFBQVEsS0FBSywrQ0FBK0MsU0FBUztBQUFBLE1BQ3JFO0FBQUEsSUFDSjtBQUFBLElBQ0EsSUFBSSxRQUFRLFFBQVEsU0FBUyxRQUFRLE1BQU07QUFBQSxNQUN2QyxRQUFRLEtBQUssaURBQWlELFFBQVEsYUFBYSxRQUFRLFFBQVEsTUFBTTtBQUFBLE1BQ3pHO0FBQUEsSUFDSjtBQUFBLElBQ0EsT0FBTyxRQUFRO0FBQUE7QUFFdkI7IiwKICAiZGVidWdJZCI6ICI1RjQyOUEyRUNBQ0RENEY0NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
package/dist/esm/version.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
// src/version.ts
|
|
3
|
-
var VERSION = "0.9.
|
|
3
|
+
var VERSION = "0.9.42";
|
|
4
4
|
var VERSION_MINOR = "0.9.0";
|
|
5
5
|
export {
|
|
6
6
|
VERSION_MINOR,
|
|
7
7
|
VERSION
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
//# debugId=
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# debugId=03BC92E1B0A4505964756E2164756E21
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3ZlcnNpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnMC45LjQyJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OX01JTk9SID0gJzAuOS4wJztcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7O0FBQU8sSUFBTSxVQUFVO0FBQ2hCLElBQU0sZ0JBQWdCOyIsCiAgImRlYnVnSWQiOiAiMDNCQzkyRTFCMEE0NTA1OTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
package/package.json
CHANGED
|
@@ -10,14 +10,14 @@ export const ASSET_EXTENSION_TYPE: ExtensionType<AssetExtension> = new Extension
|
|
|
10
10
|
);
|
|
11
11
|
|
|
12
12
|
export type Asset = {
|
|
13
|
-
|
|
13
|
+
id: Identifier;
|
|
14
14
|
buffer: Uint8Array;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
const FILE_SERIALIZER = new Serializer<Asset, Uint8Array>(
|
|
18
18
|
(file) => {
|
|
19
19
|
const writer = new ByteWriter();
|
|
20
|
-
writer.writeString(file.
|
|
20
|
+
writer.writeString(file.id.key());
|
|
21
21
|
writer.writeUint8Array(file.buffer);
|
|
22
22
|
return writer.finish();
|
|
23
23
|
},
|
|
@@ -26,7 +26,7 @@ const FILE_SERIALIZER = new Serializer<Asset, Uint8Array>(
|
|
|
26
26
|
const identifier = Identifier.fromKey(reader.readString());
|
|
27
27
|
const buffer = reader.readUint8Array();
|
|
28
28
|
reader.finish();
|
|
29
|
-
return { identifier, buffer };
|
|
29
|
+
return { id: identifier, buffer };
|
|
30
30
|
},
|
|
31
31
|
);
|
|
32
32
|
const FILE_ARRAY_SERIALIZER = new Serializer<Asset[], Uint8Array>(
|
|
@@ -34,7 +34,7 @@ const FILE_ARRAY_SERIALIZER = new Serializer<Asset[], Uint8Array>(
|
|
|
34
34
|
const writer = new ByteWriter();
|
|
35
35
|
writer.writeULEB128(files.length);
|
|
36
36
|
for (const file of files) {
|
|
37
|
-
writer.writeString(file.
|
|
37
|
+
writer.writeString(file.id.key());
|
|
38
38
|
writer.writeUint8Array(file.buffer);
|
|
39
39
|
}
|
|
40
40
|
return writer.finish();
|
|
@@ -46,7 +46,7 @@ const FILE_ARRAY_SERIALIZER = new Serializer<Asset[], Uint8Array>(
|
|
|
46
46
|
for (let i = 0; i < length; i++) {
|
|
47
47
|
const identifier = Identifier.fromKey(reader.readString());
|
|
48
48
|
const buffer = reader.readUint8Array();
|
|
49
|
-
files.push({ identifier, buffer });
|
|
49
|
+
files.push({ id: identifier, buffer });
|
|
50
50
|
}
|
|
51
51
|
reader.finish();
|
|
52
52
|
return files;
|
|
@@ -125,7 +125,7 @@ export class AssetExtension {
|
|
|
125
125
|
|
|
126
126
|
public async upload(identifier: IntoId, buffer: Uint8Array): Promise<Identifier> {
|
|
127
127
|
const assetIdentifier = await this.omu.endpoints.call(ASSET_UPLOAD_ENDPOINT, {
|
|
128
|
-
|
|
128
|
+
id: Identifier.from(identifier),
|
|
129
129
|
buffer,
|
|
130
130
|
});
|
|
131
131
|
return assetIdentifier;
|
|
@@ -2,6 +2,7 @@ import { App, AppJson } from '../../app.js';
|
|
|
2
2
|
import { Identifier, IdentifierMap } from '../../identifier';
|
|
3
3
|
import { PacketType } from '../../network/packet/packet.js';
|
|
4
4
|
import { Omu } from '../../omu.js';
|
|
5
|
+
import { PromiseResult } from '../../result.js';
|
|
5
6
|
import { Serializer } from '../../serialize';
|
|
6
7
|
import { EndpointType } from '../endpoint/endpoint.js';
|
|
7
8
|
import { ExtensionType } from '../extension.js';
|
|
@@ -94,11 +95,11 @@ export type Cookie = {
|
|
|
94
95
|
|
|
95
96
|
export type WebviewRequest = {
|
|
96
97
|
url: string;
|
|
97
|
-
script
|
|
98
|
+
script?: string;
|
|
98
99
|
};
|
|
99
100
|
|
|
100
101
|
export type WebviewPacket = {
|
|
101
|
-
id:
|
|
102
|
+
id: string;
|
|
102
103
|
};
|
|
103
104
|
|
|
104
105
|
export type UserResponse<T = undefined> = {
|
|
@@ -109,25 +110,10 @@ export type UserResponse<T = undefined> = {
|
|
|
109
110
|
} | {
|
|
110
111
|
type: 'cancelled';
|
|
111
112
|
};
|
|
112
|
-
export class UserResult<T> {
|
|
113
|
-
constructor(
|
|
114
|
-
public result: {
|
|
115
|
-
type: 'ok';
|
|
116
|
-
value: T;
|
|
117
|
-
} | {
|
|
118
|
-
type: 'blocked';
|
|
119
|
-
} | {
|
|
120
|
-
type: 'cancelled';
|
|
121
|
-
},
|
|
122
|
-
) {}
|
|
123
|
-
|
|
124
|
-
public unwrap(): T {
|
|
125
|
-
if (this.result.type === 'ok') return this.result.value;
|
|
126
|
-
throw new Error(`Tried to unwrap a ${this.result.type} result`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
113
|
|
|
130
|
-
export type
|
|
114
|
+
export type UserError = Exclude<UserResponse, { type: 'ok' }>;
|
|
115
|
+
|
|
116
|
+
export type WebviewResponse = UserResponse<WebviewPacket>;
|
|
131
117
|
|
|
132
118
|
export const DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('webview');
|
|
133
119
|
|
|
@@ -146,17 +132,11 @@ const DASHBOARD_COOKIES_GET = EndpointType.createJson<GetCookiesRequest, UserRes
|
|
|
146
132
|
|
|
147
133
|
const DASHBOARD_WEBVIEW_REQUEST = EndpointType.createJson<WebviewRequest, WebviewResponse>(DASHBOARD_EXTENSION_TYPE, {
|
|
148
134
|
name: 'webview_request',
|
|
149
|
-
responseSerializer: Serializer.noop<WebviewResponse>()
|
|
150
|
-
.field('id', Identifier),
|
|
151
135
|
permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,
|
|
152
136
|
});
|
|
153
137
|
|
|
154
138
|
const DASHBOARD_WEBVIEW_CLOSE = EndpointType.createJson<WebviewPacket, WebviewResponse>(DASHBOARD_EXTENSION_TYPE, {
|
|
155
139
|
name: 'webview_close',
|
|
156
|
-
requestSerializer: Serializer.noop<WebviewPacket>()
|
|
157
|
-
.field('id', Identifier),
|
|
158
|
-
responseSerializer: Serializer.noop<WebviewResponse>()
|
|
159
|
-
.field('id', Identifier),
|
|
160
140
|
permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,
|
|
161
141
|
});
|
|
162
142
|
|
|
@@ -186,9 +166,9 @@ export type WebviewEventPacket = {
|
|
|
186
166
|
export type WebviewHandle = {
|
|
187
167
|
readonly id: Identifier;
|
|
188
168
|
readonly url: string;
|
|
189
|
-
getCookies():
|
|
190
|
-
close(): void;
|
|
169
|
+
getCookies(): PromiseResult<Cookie[], UserError>;
|
|
191
170
|
on<T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, { type: T }>) => void): void;
|
|
171
|
+
close(): Promise<void>;
|
|
192
172
|
join(): Promise<void>;
|
|
193
173
|
};
|
|
194
174
|
|
|
@@ -464,10 +444,10 @@ export class DashboardExtension {
|
|
|
464
444
|
this.dashboard = dashboard;
|
|
465
445
|
this.omu.endpoints.bind(DASHBOARD_COOKIES_GET, async (request, params): Promise<UserResponse<Cookie[]>> => {
|
|
466
446
|
const { url } = request;
|
|
467
|
-
const {
|
|
447
|
+
const { host } = new URL(url);
|
|
468
448
|
const id = params.caller.key();
|
|
469
449
|
const allowedHost: AllowedHost = await this.allowedHosts.get(id) ?? { id, hosts: [] };
|
|
470
|
-
const allowed = allowedHost.hosts.includes(
|
|
450
|
+
const allowed = allowedHost.hosts.includes(host);
|
|
471
451
|
if (!allowed) {
|
|
472
452
|
return {
|
|
473
453
|
type: 'cancelled',
|
|
@@ -494,6 +474,24 @@ export class DashboardExtension {
|
|
|
494
474
|
return result;
|
|
495
475
|
});
|
|
496
476
|
this.omu.endpoints.bind(DASHBOARD_WEBVIEW_REQUEST, async (request, params): Promise<WebviewResponse> => {
|
|
477
|
+
const url = new URL(request.url);
|
|
478
|
+
const { host } = url;
|
|
479
|
+
{
|
|
480
|
+
const id = params.caller.key();
|
|
481
|
+
const hostEntry: AllowedHost = await this.allowedHosts.get(id) ?? { id, hosts: [] };
|
|
482
|
+
const allowed = hostEntry.hosts.includes(host);
|
|
483
|
+
if (!allowed) {
|
|
484
|
+
const result = await dashboard.hostRequested({
|
|
485
|
+
host,
|
|
486
|
+
}, params);
|
|
487
|
+
if (result.type === 'ok') {
|
|
488
|
+
hostEntry.hosts.push();
|
|
489
|
+
await this.allowedHosts.update(hostEntry);
|
|
490
|
+
} else {
|
|
491
|
+
return { type: 'cancelled' };
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
497
495
|
const emit = async (event: WebviewEvent) => {
|
|
498
496
|
this.omu.send(DASHBOARD_WEBVIEW_EVENT_PACKET, {
|
|
499
497
|
id,
|
|
@@ -504,8 +502,9 @@ export class DashboardExtension {
|
|
|
504
502
|
const id = await dashboard.createWebview(request, params, emit);
|
|
505
503
|
return {
|
|
506
504
|
type: 'ok',
|
|
507
|
-
|
|
508
|
-
|
|
505
|
+
value: {
|
|
506
|
+
id: id.key(),
|
|
507
|
+
},
|
|
509
508
|
};
|
|
510
509
|
});
|
|
511
510
|
this.omu.endpoints.bind(DASHBOARD_WEBVIEW_CLOSE, async (request, params): Promise<WebviewResponse> => {
|
|
@@ -513,14 +512,14 @@ export class DashboardExtension {
|
|
|
513
512
|
if (!id) {
|
|
514
513
|
return {
|
|
515
514
|
type: 'cancelled',
|
|
516
|
-
id: request.id,
|
|
517
515
|
};
|
|
518
516
|
}
|
|
519
517
|
await dashboard.closeWebview(request, params);
|
|
520
518
|
return {
|
|
521
519
|
type: 'ok',
|
|
522
|
-
|
|
523
|
-
|
|
520
|
+
value: {
|
|
521
|
+
id: id.key(),
|
|
522
|
+
},
|
|
524
523
|
};
|
|
525
524
|
});
|
|
526
525
|
this.omu.endpoints.bind(DASHBOARD_SPEECH_RECOGNITION_START, async (request, params): Promise<UserResponse<undefined>> => {
|
|
@@ -538,70 +537,74 @@ export class DashboardExtension {
|
|
|
538
537
|
});
|
|
539
538
|
}
|
|
540
539
|
|
|
541
|
-
public
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
options,
|
|
545
|
-
);
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
public async requestWebview(options: WebviewRequest): Promise<UserResult<WebviewHandle>> {
|
|
549
|
-
const result = await this.omu.endpoints.call(
|
|
540
|
+
public requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError> {
|
|
541
|
+
const { promise, resolve, reject } = PromiseResult.create<WebviewHandle, UserError>();
|
|
542
|
+
this.omu.endpoints.call(
|
|
550
543
|
DASHBOARD_WEBVIEW_REQUEST,
|
|
551
544
|
options,
|
|
552
|
-
)
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
)
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
545
|
+
).then((result) => {
|
|
546
|
+
if (result.type !== 'ok') {
|
|
547
|
+
reject(result);
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
const { value } = result;
|
|
551
|
+
const id = Identifier.fromKey(value.id);
|
|
552
|
+
const eventListeners: WebviewEventListeners = {};
|
|
553
|
+
const handle: WebviewHandle = {
|
|
554
|
+
id,
|
|
555
|
+
url: options.url,
|
|
556
|
+
close: async () => {
|
|
557
|
+
await this.omu.endpoints.call(
|
|
558
|
+
DASHBOARD_WEBVIEW_CLOSE,
|
|
559
|
+
{ id: id.key() },
|
|
560
|
+
);
|
|
561
|
+
},
|
|
562
|
+
getCookies: () => this.getCookies({
|
|
567
563
|
url: options.url,
|
|
568
|
-
})
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
return new UserResult({
|
|
595
|
-
type: 'ok',
|
|
596
|
-
value: handle,
|
|
564
|
+
}),
|
|
565
|
+
on: function <T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, { type: T }>) => void): void {
|
|
566
|
+
if (!eventListeners[key]) {
|
|
567
|
+
eventListeners[key] = [];
|
|
568
|
+
}
|
|
569
|
+
const listeners = eventListeners[key]!;
|
|
570
|
+
listeners.push(callback);
|
|
571
|
+
},
|
|
572
|
+
join: async () => {
|
|
573
|
+
await new Promise<void>((resolve) => {
|
|
574
|
+
handle.on('closed', () => resolve());
|
|
575
|
+
});
|
|
576
|
+
},
|
|
577
|
+
};
|
|
578
|
+
this.webviewHandles.set(id, {
|
|
579
|
+
handle,
|
|
580
|
+
emit: function <T extends WebviewEvent['type']>(event: Extract<WebviewEvent, { type: T }>): void {
|
|
581
|
+
const listeners = eventListeners[event.type];
|
|
582
|
+
if (!listeners) return;
|
|
583
|
+
for (const listener of listeners) {
|
|
584
|
+
listener(event);
|
|
585
|
+
}
|
|
586
|
+
},
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
resolve(handle);
|
|
597
590
|
});
|
|
591
|
+
return promise;
|
|
598
592
|
}
|
|
599
593
|
|
|
600
|
-
public
|
|
601
|
-
|
|
594
|
+
public getCookies(options: GetCookiesRequest): PromiseResult<Cookie[], UserError> {
|
|
595
|
+
const { promise, resolve, reject } = PromiseResult.create<Cookie[], UserError>();
|
|
596
|
+
this.omu.endpoints.call(
|
|
602
597
|
DASHBOARD_COOKIES_GET,
|
|
603
598
|
options,
|
|
604
|
-
))
|
|
599
|
+
).then((response) => {
|
|
600
|
+
if (response.type === 'ok') {
|
|
601
|
+
resolve(response.value);
|
|
602
|
+
return;
|
|
603
|
+
} else {
|
|
604
|
+
reject(response);
|
|
605
|
+
}
|
|
606
|
+
});
|
|
607
|
+
return promise;
|
|
605
608
|
}
|
|
606
609
|
|
|
607
610
|
public async openApp(app: App): Promise<void> {
|
|
@@ -616,7 +619,7 @@ export class DashboardExtension {
|
|
|
616
619
|
return await this.omu.endpoints.call(DASHBOARD_PROMPT_CLEAR_BLOCKED, null);
|
|
617
620
|
}
|
|
618
621
|
|
|
619
|
-
public async
|
|
622
|
+
public async requestDragDrop(): Promise<DragDropHandler> {
|
|
620
623
|
await this.omu.endpoints.call(DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT, {});
|
|
621
624
|
const listeners = this.dragDropListeners;
|
|
622
625
|
const client = this.omu;
|
|
@@ -634,7 +637,15 @@ export class DashboardExtension {
|
|
|
634
637
|
this.omu.send(DASHBOARD_DRAG_DROP_STATE_PACKET, packet);
|
|
635
638
|
}
|
|
636
639
|
|
|
637
|
-
public
|
|
638
|
-
|
|
640
|
+
public requestSpeechRecognition(): PromiseResult<Registry<TranscriptStatus>, UserError> {
|
|
641
|
+
const { promise, resolve, reject } = PromiseResult.create<Registry<TranscriptStatus>, UserError>();
|
|
642
|
+
this.omu.endpoints.call(DASHBOARD_SPEECH_RECOGNITION_START, { type: 'start' }).then((result) => {
|
|
643
|
+
if (result.type === 'ok') {
|
|
644
|
+
resolve(this.speechRecognition);
|
|
645
|
+
} else {
|
|
646
|
+
reject(result);
|
|
647
|
+
}
|
|
648
|
+
});
|
|
649
|
+
return promise;
|
|
639
650
|
}
|
|
640
651
|
}
|
package/src/api/http/index.ts
CHANGED
|
@@ -41,7 +41,7 @@ export class RegistryExtension implements Extension {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
public json<T, D extends JsonType = JsonType>(name: string, options: { default: T; serializer?: Serializer<T, D> }): Registry<T> {
|
|
44
|
-
const identifier = this.omu.app.id.join(name);
|
|
44
|
+
const identifier = this.omu.app.id.base.join(name);
|
|
45
45
|
if (this.registries.has(identifier)) {
|
|
46
46
|
throw new Error(`Registry with name '${name}' already exists`);
|
|
47
47
|
}
|
|
@@ -54,7 +54,7 @@ export class RegistryExtension implements Extension {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
public serialized<T>(name: string, options: { default: T; serializer: Serializer<T, Uint8Array> }): Registry<T> {
|
|
57
|
-
const identifier = this.omu.app.id.join(name);
|
|
57
|
+
const identifier = this.omu.app.id.base.join(name);
|
|
58
58
|
if (this.registries.has(identifier)) {
|
|
59
59
|
throw new Error(`Registry with name '${name}' already exists`);
|
|
60
60
|
}
|
|
@@ -121,12 +121,12 @@ class RegistryImpl<T> implements Registry<T> {
|
|
|
121
121
|
return value;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
public async modify(fn: (value: T) => PromiseLike<
|
|
124
|
+
public async modify(fn: (value: T) => PromiseLike<void> | void): Promise<T> {
|
|
125
125
|
const value = await this.lock.use(async () => {
|
|
126
126
|
const value = await this.#get();
|
|
127
|
-
|
|
128
|
-
await this.#set(
|
|
129
|
-
return
|
|
127
|
+
await fn(value);
|
|
128
|
+
await this.#set(value);
|
|
129
|
+
return value;
|
|
130
130
|
});
|
|
131
131
|
this.eventEmitter.emit(value);
|
|
132
132
|
return value;
|
|
@@ -68,7 +68,7 @@ export interface Registry<T> {
|
|
|
68
68
|
get(): Promise<T>;
|
|
69
69
|
set(value: T): Promise<void>;
|
|
70
70
|
update(fn: (value: T) => PromiseLike<T> | T): Promise<T>;
|
|
71
|
-
modify(fn: (value: T) => PromiseLike<
|
|
71
|
+
modify(fn: (value: T) => PromiseLike<void> | void): Promise<T>;
|
|
72
72
|
listen(fn: (value: T) => void): Unlisten;
|
|
73
73
|
|
|
74
74
|
compatSvelte(): Writable<T>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { App, AppJson } from '../../app.js';
|
|
2
|
-
import { Identifier, IdentifierMap } from '../../identifier';
|
|
2
|
+
import { Identifier, IdentifierMap, IntoId } from '../../identifier';
|
|
3
3
|
import { LocalizedText } from '../../localization/localization.js';
|
|
4
4
|
import { Omu } from '../../omu.js';
|
|
5
5
|
import { EndpointType } from '../endpoint/endpoint.js';
|
|
@@ -116,6 +116,14 @@ export class AppIndexRegistry {
|
|
|
116
116
|
public meta: AppIndexRegistryMeta | undefined,
|
|
117
117
|
) { }
|
|
118
118
|
|
|
119
|
+
public static build(options: { id: IntoId; meta: AppIndexRegistryMeta; apps: App[] }): AppIndexRegistry {
|
|
120
|
+
return new AppIndexRegistry(
|
|
121
|
+
Identifier.from(options.id),
|
|
122
|
+
new IdentifierMap(options.apps.map((app) => [app.id, app])),
|
|
123
|
+
options.meta,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
119
127
|
public static fromJSON(json: AppIndexRegistryJSON): AppIndexRegistry {
|
|
120
128
|
const id = Identifier.fromKey(json['id']);
|
|
121
129
|
const apps = new IdentifierMap<App>();
|
|
@@ -133,4 +141,15 @@ export class AppIndexRegistry {
|
|
|
133
141
|
json.meta,
|
|
134
142
|
);
|
|
135
143
|
}
|
|
144
|
+
|
|
145
|
+
public toJSON(): AppIndexRegistryJSON {
|
|
146
|
+
return {
|
|
147
|
+
id: this.id.key(),
|
|
148
|
+
meta: this.meta,
|
|
149
|
+
apps: Object.fromEntries([...this.apps.entries()].map(([id, app]) => [
|
|
150
|
+
id.key(),
|
|
151
|
+
App.serialize(app),
|
|
152
|
+
])),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
136
155
|
}
|
|
@@ -3,6 +3,7 @@ import { Identifier, IdentifierMap, IdentifierSet, IntoId } from '../../identifi
|
|
|
3
3
|
import { PacketType } from '../../network/packet';
|
|
4
4
|
import { Omu } from '../../omu';
|
|
5
5
|
import { Serializer } from '../../serialize';
|
|
6
|
+
import { SessionParam } from '../../token';
|
|
6
7
|
import { EndpointType } from '../endpoint';
|
|
7
8
|
import { Extension, ExtensionType } from '../extension';
|
|
8
9
|
import { SessionObserver } from '../server/extension';
|
|
@@ -105,20 +106,21 @@ export class SessionExtension implements Extension {
|
|
|
105
106
|
return await this.sessions.has(Identifier.from(id).key());
|
|
106
107
|
}
|
|
107
108
|
|
|
108
|
-
public observe(appId: IntoId, {
|
|
109
|
-
onConnect
|
|
110
|
-
onDisconnect
|
|
111
|
-
}: {
|
|
112
|
-
onConnect(app: App): void;
|
|
113
|
-
onDisconnect(app: App): void;
|
|
109
|
+
public observe(appId: IntoId, options?: {
|
|
110
|
+
onConnect?(app: App): void;
|
|
111
|
+
onDisconnect?(app: App): void;
|
|
114
112
|
}): SessionObserver {
|
|
115
113
|
const id = Identifier.from(appId);
|
|
116
114
|
if (this.omu.running) {
|
|
117
115
|
this.omu.send(SESSION_OBSERVE_PACKET_TYPE, [id]);
|
|
118
116
|
}
|
|
119
117
|
const observer = this.sessionObservers.get(id) ?? new SessionObserver([], []);
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
if (options?.onConnect) {
|
|
119
|
+
observer.onConnect(options.onConnect);
|
|
120
|
+
}
|
|
121
|
+
if (options?.onDisconnect) {
|
|
122
|
+
observer.onDisconnect(options.onDisconnect);
|
|
123
|
+
}
|
|
122
124
|
this.sessionObservers.set(id, observer);
|
|
123
125
|
return observer;
|
|
124
126
|
}
|
|
@@ -186,11 +188,18 @@ export class SessionExtension implements Extension {
|
|
|
186
188
|
|
|
187
189
|
public async generateToken(options: {
|
|
188
190
|
app: App;
|
|
189
|
-
permissions
|
|
190
|
-
}): Promise<
|
|
191
|
-
|
|
191
|
+
permissions?: IntoId[];
|
|
192
|
+
}): Promise<SessionParam> {
|
|
193
|
+
const result = await this.omu.endpoints.call(GENERATE_TOKEN_ENDPOINT_TYPE, {
|
|
192
194
|
app: App.serialize(options.app),
|
|
193
|
-
permissions: options.permissions
|
|
195
|
+
permissions: options.permissions?.map(id => Identifier.from(id).key()),
|
|
194
196
|
});
|
|
197
|
+
if (result.type === 'error') {
|
|
198
|
+
throw new Error(result.message);
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
token: result.token,
|
|
202
|
+
address: this.omu.address,
|
|
203
|
+
};
|
|
195
204
|
}
|
|
196
205
|
}
|