@omujs/omu 0.9.41 → 0.9.43
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/session/extension.d.ts +5 -4
- package/dist/dts/index.d.ts +1 -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 +7 -7
- package/dist/esm/api/asset/index.js +7 -7
- package/dist/esm/api/dashboard/extension.js +145 -96
- package/dist/esm/api/dashboard/index.js +145 -95
- package/dist/esm/api/http/index.js +3 -2
- package/dist/esm/api/i18n/extension.js +5 -5
- package/dist/esm/api/i18n/index.js +5 -5
- package/dist/esm/api/registry/extension.js +5 -5
- package/dist/esm/api/registry/index.js +5 -5
- package/dist/esm/api/registry/registry.js +1 -1
- package/dist/esm/api/server/extension.js +5 -5
- package/dist/esm/api/server/index.js +5 -5
- package/dist/esm/api/session/extension.js +16 -12
- package/dist/esm/api/session/index.js +16 -12
- package/dist/esm/index.js +171 -120
- package/dist/esm/network/index.js +3 -3
- package/dist/esm/network/network.js +3 -3
- package/dist/esm/omu.js +170 -119
- 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 +116 -114
- package/src/api/http/index.ts +2 -1
- package/src/api/registry/extension.ts +4 -4
- package/src/api/registry/registry.ts +1 -1
- package/src/api/session/extension.ts +15 -10
- package/src/index.ts +1 -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.43";
|
|
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=FF0725BD19B7DDEC64756E2164756E21
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3ZlcnNpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnMC45LjQzJztcbmV4cG9ydCBjb25zdCBWRVJTSU9OX01JTk9SID0gJzAuOS4wJztcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7O0FBQU8sSUFBTSxVQUFVO0FBQ2hCLElBQU0sZ0JBQWdCOyIsCiAgImRlYnVnSWQiOiAiRkYwNzI1QkQxOUI3RERFQzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
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,8 +2,10 @@ 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';
|
|
8
|
+
import { InvokedParams } from '../endpoint/packets.js';
|
|
7
9
|
import { ExtensionType } from '../extension.js';
|
|
8
10
|
import { PermissionTypeJson } from '../permission/permission.js';
|
|
9
11
|
import { PackageInfo } from '../plugin/package-info.js';
|
|
@@ -94,11 +96,11 @@ export type Cookie = {
|
|
|
94
96
|
|
|
95
97
|
export type WebviewRequest = {
|
|
96
98
|
url: string;
|
|
97
|
-
script
|
|
99
|
+
script?: string;
|
|
98
100
|
};
|
|
99
101
|
|
|
100
102
|
export type WebviewPacket = {
|
|
101
|
-
id:
|
|
103
|
+
id: string;
|
|
102
104
|
};
|
|
103
105
|
|
|
104
106
|
export type UserResponse<T = undefined> = {
|
|
@@ -109,25 +111,10 @@ export type UserResponse<T = undefined> = {
|
|
|
109
111
|
} | {
|
|
110
112
|
type: 'cancelled';
|
|
111
113
|
};
|
|
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
114
|
|
|
130
|
-
export type
|
|
115
|
+
export type UserError = Exclude<UserResponse, { type: 'ok' }>;
|
|
116
|
+
|
|
117
|
+
export type WebviewResponse = UserResponse<WebviewPacket>;
|
|
131
118
|
|
|
132
119
|
export const DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('webview');
|
|
133
120
|
|
|
@@ -146,17 +133,11 @@ const DASHBOARD_COOKIES_GET = EndpointType.createJson<GetCookiesRequest, UserRes
|
|
|
146
133
|
|
|
147
134
|
const DASHBOARD_WEBVIEW_REQUEST = EndpointType.createJson<WebviewRequest, WebviewResponse>(DASHBOARD_EXTENSION_TYPE, {
|
|
148
135
|
name: 'webview_request',
|
|
149
|
-
responseSerializer: Serializer.noop<WebviewResponse>()
|
|
150
|
-
.field('id', Identifier),
|
|
151
136
|
permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,
|
|
152
137
|
});
|
|
153
138
|
|
|
154
139
|
const DASHBOARD_WEBVIEW_CLOSE = EndpointType.createJson<WebviewPacket, WebviewResponse>(DASHBOARD_EXTENSION_TYPE, {
|
|
155
140
|
name: 'webview_close',
|
|
156
|
-
requestSerializer: Serializer.noop<WebviewPacket>()
|
|
157
|
-
.field('id', Identifier),
|
|
158
|
-
responseSerializer: Serializer.noop<WebviewResponse>()
|
|
159
|
-
.field('id', Identifier),
|
|
160
141
|
permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,
|
|
161
142
|
});
|
|
162
143
|
|
|
@@ -186,9 +167,9 @@ export type WebviewEventPacket = {
|
|
|
186
167
|
export type WebviewHandle = {
|
|
187
168
|
readonly id: Identifier;
|
|
188
169
|
readonly url: string;
|
|
189
|
-
getCookies():
|
|
190
|
-
close(): void;
|
|
170
|
+
getCookies(): PromiseResult<Cookie[], UserError>;
|
|
191
171
|
on<T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, { type: T }>) => void): void;
|
|
172
|
+
close(): Promise<void>;
|
|
192
173
|
join(): Promise<void>;
|
|
193
174
|
};
|
|
194
175
|
|
|
@@ -462,38 +443,46 @@ export class DashboardExtension {
|
|
|
462
443
|
throw new Error('Dashboard already set');
|
|
463
444
|
}
|
|
464
445
|
this.dashboard = dashboard;
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
const { hostname } = new URL(url);
|
|
446
|
+
|
|
447
|
+
const requireHost = async (params: InvokedParams, host: string): Promise<UserResponse<undefined>> => {
|
|
468
448
|
const id = params.caller.key();
|
|
469
|
-
const
|
|
470
|
-
const allowed =
|
|
449
|
+
const hostEntry: AllowedHost = await this.allowedHosts.get(id) ?? { id: id, hosts: [] };
|
|
450
|
+
const allowed = hostEntry.hosts.includes(host);
|
|
471
451
|
if (!allowed) {
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
};
|
|
452
|
+
const result = await dashboard.hostRequested({
|
|
453
|
+
host,
|
|
454
|
+
}, params);
|
|
455
|
+
if (result.type === 'ok') {
|
|
456
|
+
hostEntry.hosts.push(host);
|
|
457
|
+
await this.allowedHosts.update(hostEntry);
|
|
458
|
+
} else {
|
|
459
|
+
return { type: 'cancelled' };
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
return { type: 'ok', value: undefined };
|
|
463
|
+
};
|
|
464
|
+
|
|
465
|
+
this.omu.endpoints.bind(DASHBOARD_COOKIES_GET, async (request, params): Promise<UserResponse<Cookie[]>> => {
|
|
466
|
+
const { url } = request;
|
|
467
|
+
const { host } = new URL(url);
|
|
468
|
+
const hostAccessResult = await requireHost(params, host);
|
|
469
|
+
if (hostAccessResult.type !== 'ok') {
|
|
470
|
+
return hostAccessResult;
|
|
475
471
|
}
|
|
476
472
|
return await dashboard.getCookies(request);
|
|
477
473
|
});
|
|
478
474
|
this.omu.endpoints.bind(DASHBOARD_HOST_REQUEST, async (request, params): Promise<UserResponse> => {
|
|
479
475
|
const { host } = request;
|
|
480
|
-
const
|
|
481
|
-
const hostEntry: AllowedHost = await this.allowedHosts.get(id) ?? { id, hosts: [] };
|
|
482
|
-
const allowed = hostEntry.hosts.includes(host);
|
|
483
|
-
if (allowed) {
|
|
484
|
-
return {
|
|
485
|
-
type: 'ok',
|
|
486
|
-
value: undefined,
|
|
487
|
-
};
|
|
488
|
-
}
|
|
489
|
-
const result = await dashboard.hostRequested(request, params);
|
|
490
|
-
if (result.type === 'ok') {
|
|
491
|
-
hostEntry.hosts.push(host);
|
|
492
|
-
await this.allowedHosts.update(hostEntry);
|
|
493
|
-
}
|
|
476
|
+
const result = await requireHost(params, host);
|
|
494
477
|
return result;
|
|
495
478
|
});
|
|
496
479
|
this.omu.endpoints.bind(DASHBOARD_WEBVIEW_REQUEST, async (request, params): Promise<WebviewResponse> => {
|
|
480
|
+
const url = new URL(request.url);
|
|
481
|
+
const { host } = url;
|
|
482
|
+
const hostAccessResult = await requireHost(params, host);
|
|
483
|
+
if (hostAccessResult.type !== 'ok') {
|
|
484
|
+
return hostAccessResult;
|
|
485
|
+
}
|
|
497
486
|
const emit = async (event: WebviewEvent) => {
|
|
498
487
|
this.omu.send(DASHBOARD_WEBVIEW_EVENT_PACKET, {
|
|
499
488
|
id,
|
|
@@ -504,8 +493,9 @@ export class DashboardExtension {
|
|
|
504
493
|
const id = await dashboard.createWebview(request, params, emit);
|
|
505
494
|
return {
|
|
506
495
|
type: 'ok',
|
|
507
|
-
|
|
508
|
-
|
|
496
|
+
value: {
|
|
497
|
+
id: id.key(),
|
|
498
|
+
},
|
|
509
499
|
};
|
|
510
500
|
});
|
|
511
501
|
this.omu.endpoints.bind(DASHBOARD_WEBVIEW_CLOSE, async (request, params): Promise<WebviewResponse> => {
|
|
@@ -513,14 +503,14 @@ export class DashboardExtension {
|
|
|
513
503
|
if (!id) {
|
|
514
504
|
return {
|
|
515
505
|
type: 'cancelled',
|
|
516
|
-
id: request.id,
|
|
517
506
|
};
|
|
518
507
|
}
|
|
519
508
|
await dashboard.closeWebview(request, params);
|
|
520
509
|
return {
|
|
521
510
|
type: 'ok',
|
|
522
|
-
|
|
523
|
-
|
|
511
|
+
value: {
|
|
512
|
+
id: id.key(),
|
|
513
|
+
},
|
|
524
514
|
};
|
|
525
515
|
});
|
|
526
516
|
this.omu.endpoints.bind(DASHBOARD_SPEECH_RECOGNITION_START, async (request, params): Promise<UserResponse<undefined>> => {
|
|
@@ -538,70 +528,74 @@ export class DashboardExtension {
|
|
|
538
528
|
});
|
|
539
529
|
}
|
|
540
530
|
|
|
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(
|
|
531
|
+
public requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError> {
|
|
532
|
+
const { promise, resolve, reject } = PromiseResult.create<WebviewHandle, UserError>();
|
|
533
|
+
this.omu.endpoints.call(
|
|
550
534
|
DASHBOARD_WEBVIEW_REQUEST,
|
|
551
535
|
options,
|
|
552
|
-
)
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
)
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
536
|
+
).then((result) => {
|
|
537
|
+
if (result.type !== 'ok') {
|
|
538
|
+
reject(result);
|
|
539
|
+
return;
|
|
540
|
+
}
|
|
541
|
+
const { value } = result;
|
|
542
|
+
const id = Identifier.fromKey(value.id);
|
|
543
|
+
const eventListeners: WebviewEventListeners = {};
|
|
544
|
+
const handle: WebviewHandle = {
|
|
545
|
+
id,
|
|
546
|
+
url: options.url,
|
|
547
|
+
close: async () => {
|
|
548
|
+
await this.omu.endpoints.call(
|
|
549
|
+
DASHBOARD_WEBVIEW_CLOSE,
|
|
550
|
+
{ id: id.key() },
|
|
551
|
+
);
|
|
552
|
+
},
|
|
553
|
+
getCookies: () => this.getCookies({
|
|
567
554
|
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,
|
|
555
|
+
}),
|
|
556
|
+
on: function <T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, { type: T }>) => void): void {
|
|
557
|
+
if (!eventListeners[key]) {
|
|
558
|
+
eventListeners[key] = [];
|
|
559
|
+
}
|
|
560
|
+
const listeners = eventListeners[key]!;
|
|
561
|
+
listeners.push(callback);
|
|
562
|
+
},
|
|
563
|
+
join: async () => {
|
|
564
|
+
await new Promise<void>((resolve) => {
|
|
565
|
+
handle.on('closed', () => resolve());
|
|
566
|
+
});
|
|
567
|
+
},
|
|
568
|
+
};
|
|
569
|
+
this.webviewHandles.set(id, {
|
|
570
|
+
handle,
|
|
571
|
+
emit: function <T extends WebviewEvent['type']>(event: Extract<WebviewEvent, { type: T }>): void {
|
|
572
|
+
const listeners = eventListeners[event.type];
|
|
573
|
+
if (!listeners) return;
|
|
574
|
+
for (const listener of listeners) {
|
|
575
|
+
listener(event);
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
resolve(handle);
|
|
597
581
|
});
|
|
582
|
+
return promise;
|
|
598
583
|
}
|
|
599
584
|
|
|
600
|
-
public
|
|
601
|
-
|
|
585
|
+
public getCookies(options: GetCookiesRequest): PromiseResult<Cookie[], UserError> {
|
|
586
|
+
const { promise, resolve, reject } = PromiseResult.create<Cookie[], UserError>();
|
|
587
|
+
this.omu.endpoints.call(
|
|
602
588
|
DASHBOARD_COOKIES_GET,
|
|
603
589
|
options,
|
|
604
|
-
))
|
|
590
|
+
).then((response) => {
|
|
591
|
+
if (response.type === 'ok') {
|
|
592
|
+
resolve(response.value);
|
|
593
|
+
return;
|
|
594
|
+
} else {
|
|
595
|
+
reject(response);
|
|
596
|
+
}
|
|
597
|
+
});
|
|
598
|
+
return promise;
|
|
605
599
|
}
|
|
606
600
|
|
|
607
601
|
public async openApp(app: App): Promise<void> {
|
|
@@ -616,7 +610,7 @@ export class DashboardExtension {
|
|
|
616
610
|
return await this.omu.endpoints.call(DASHBOARD_PROMPT_CLEAR_BLOCKED, null);
|
|
617
611
|
}
|
|
618
612
|
|
|
619
|
-
public async
|
|
613
|
+
public async requestDragDrop(): Promise<DragDropHandler> {
|
|
620
614
|
await this.omu.endpoints.call(DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT, {});
|
|
621
615
|
const listeners = this.dragDropListeners;
|
|
622
616
|
const client = this.omu;
|
|
@@ -634,7 +628,15 @@ export class DashboardExtension {
|
|
|
634
628
|
this.omu.send(DASHBOARD_DRAG_DROP_STATE_PACKET, packet);
|
|
635
629
|
}
|
|
636
630
|
|
|
637
|
-
public
|
|
638
|
-
|
|
631
|
+
public requestSpeechRecognition(): PromiseResult<Registry<TranscriptStatus>, UserError> {
|
|
632
|
+
const { promise, resolve, reject } = PromiseResult.create<Registry<TranscriptStatus>, UserError>();
|
|
633
|
+
this.omu.endpoints.call(DASHBOARD_SPEECH_RECOGNITION_START, { type: 'start' }).then((result) => {
|
|
634
|
+
if (result.type === 'ok') {
|
|
635
|
+
resolve(this.speechRecognition);
|
|
636
|
+
} else {
|
|
637
|
+
reject(result);
|
|
638
|
+
}
|
|
639
|
+
});
|
|
640
|
+
return promise;
|
|
639
641
|
}
|
|
640
642
|
}
|
package/src/api/http/index.ts
CHANGED
|
@@ -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>;
|
|
@@ -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
|
}
|
|
@@ -187,7 +189,7 @@ export class SessionExtension implements Extension {
|
|
|
187
189
|
public async generateToken(options: {
|
|
188
190
|
app: App;
|
|
189
191
|
permissions?: IntoId[];
|
|
190
|
-
}): Promise<
|
|
192
|
+
}): Promise<SessionParam> {
|
|
191
193
|
const result = await this.omu.endpoints.call(GENERATE_TOKEN_ENDPOINT_TYPE, {
|
|
192
194
|
app: App.serialize(options.app),
|
|
193
195
|
permissions: options.permissions?.map(id => Identifier.from(id).key()),
|
|
@@ -195,6 +197,9 @@ export class SessionExtension implements Extension {
|
|
|
195
197
|
if (result.type === 'error') {
|
|
196
198
|
throw new Error(result.message);
|
|
197
199
|
}
|
|
198
|
-
return
|
|
200
|
+
return {
|
|
201
|
+
token: result.token,
|
|
202
|
+
address: this.omu.address,
|
|
203
|
+
};
|
|
199
204
|
}
|
|
200
205
|
}
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,7 @@ export * as network from './network';
|
|
|
6
6
|
export { Omu } from './omu.js';
|
|
7
7
|
export { Serializer } from './serialize';
|
|
8
8
|
export type { Serializable } from './serialize';
|
|
9
|
-
export {
|
|
9
|
+
export { BrowserSession, type SessionParam, type SessioTokenProvider as TokenProvider } from './token';
|
|
10
10
|
import { ASSET_PERMISSION_ID } from './api/asset';
|
|
11
11
|
import {
|
|
12
12
|
DASHBOARD_APP_INSTALL_PERMISSION_ID,
|