@powerhousedao/reactor-browser 1.10.1 → 1.11.0
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/dist/package.json +47 -0
- package/dist/src/context/index.d.ts +1 -1
- package/dist/src/context/index.d.ts.map +1 -1
- package/dist/src/context/index.js +1 -0
- package/dist/src/context/read-mode.d.ts +3 -3
- package/dist/src/context/read-mode.d.ts.map +1 -1
- package/dist/src/context/read-mode.js +198 -0
- package/dist/src/crypto/browser.d.ts +1 -1
- package/dist/src/crypto/browser.d.ts.map +1 -1
- package/dist/src/crypto/browser.js +49 -0
- package/dist/src/crypto/index.js +121 -0
- package/dist/src/document-model.d.ts +3 -3
- package/dist/src/document-model.d.ts.map +1 -1
- package/dist/src/document-model.js +5 -0
- package/dist/src/hooks/index.d.ts +9 -5
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +9 -0
- package/dist/src/hooks/useAddDebouncedOperations.d.ts +3 -3
- package/dist/src/hooks/useAddDebouncedOperations.d.ts.map +1 -1
- package/dist/src/hooks/useAddDebouncedOperations.js +55 -0
- package/dist/src/hooks/useConnectCrypto.d.ts +1 -1
- package/dist/src/hooks/useConnectCrypto.d.ts.map +1 -1
- package/dist/src/hooks/useConnectCrypto.js +40 -0
- package/dist/src/hooks/useDocument.d.ts +3 -3
- package/dist/src/hooks/useDocument.d.ts.map +1 -1
- package/dist/src/hooks/useDocument.js +37 -0
- package/dist/src/hooks/useDocumentDispatch.d.ts +6 -10
- package/dist/src/hooks/useDocumentDispatch.d.ts.map +1 -1
- package/dist/src/hooks/useDocumentDispatch.js +41 -0
- package/dist/src/hooks/useDocumentDrives.d.ts +4 -3
- package/dist/src/hooks/useDocumentDrives.d.ts.map +1 -1
- package/dist/src/hooks/useDocumentDrives.js +84 -0
- package/dist/src/hooks/useDocumentEditor.d.ts +13 -13
- package/dist/src/hooks/useDocumentEditor.d.ts.map +1 -1
- package/dist/src/hooks/useDocumentEditor.js +30 -0
- package/dist/src/hooks/useDriveActions.d.ts +82 -0
- package/dist/src/hooks/useDriveActions.d.ts.map +1 -0
- package/dist/src/hooks/useDriveActions.js +125 -0
- package/dist/src/hooks/useDriveActionsWithUiNodes.d.ts +17 -0
- package/dist/src/hooks/useDriveActionsWithUiNodes.d.ts.map +1 -0
- package/dist/src/hooks/useDriveActionsWithUiNodes.js +71 -0
- package/dist/src/hooks/useDriveContext.d.ts +66 -0
- package/dist/src/hooks/useDriveContext.d.ts.map +1 -0
- package/dist/src/hooks/useDriveContext.js +25 -0
- package/dist/src/hooks/useUiNodesContext.d.ts +25 -0
- package/dist/src/hooks/useUiNodesContext.d.ts.map +1 -0
- package/dist/src/hooks/useUiNodesContext.js +167 -0
- package/dist/src/hooks/useUserPermissions.js +6 -0
- package/dist/src/index.d.ts +5 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/reactor.d.ts +3 -3
- package/dist/src/reactor.d.ts.map +1 -1
- package/dist/src/reactor.js +54 -0
- package/dist/src/renown/constants.js +39 -0
- package/dist/src/renown/types.d.ts +3 -3
- package/dist/src/renown/types.d.ts.map +1 -1
- package/dist/src/renown/types.js +1 -0
- package/dist/src/storage/index.d.ts +1 -1
- package/dist/src/storage/index.d.ts.map +1 -1
- package/dist/src/storage/index.js +1 -0
- package/dist/src/storage/types.js +1 -0
- package/dist/src/uiNodes/constants.d.ts +17 -0
- package/dist/src/uiNodes/constants.d.ts.map +1 -0
- package/dist/src/uiNodes/constants.js +23 -0
- package/dist/src/uiNodes/types.d.ts +61 -0
- package/dist/src/uiNodes/types.d.ts.map +1 -0
- package/dist/src/uiNodes/types.js +1 -0
- package/dist/src/utils/index.d.ts +3 -3
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +8 -0
- package/dist/src/utils/signature.d.ts +3 -3
- package/dist/src/utils/signature.d.ts.map +1 -1
- package/dist/src/utils/signature.js +39 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +15 -22
- package/dist/_virtual/__vite-browser-external.js +0 -5
- package/dist/_virtual/__vite-browser-external.js.map +0 -1
- package/dist/context/read-mode.js +0 -159
- package/dist/context/read-mode.js.map +0 -1
- package/dist/crypto/browser.js +0 -50
- package/dist/crypto/browser.js.map +0 -1
- package/dist/crypto/index.js +0 -109
- package/dist/crypto/index.js.map +0 -1
- package/dist/document-model.js +0 -11
- package/dist/document-model.js.map +0 -1
- package/dist/hooks/useAddDebouncedOperations.js +0 -54
- package/dist/hooks/useAddDebouncedOperations.js.map +0 -1
- package/dist/hooks/useConnectCrypto.js +0 -34
- package/dist/hooks/useConnectCrypto.js.map +0 -1
- package/dist/hooks/useDocument.js +0 -20
- package/dist/hooks/useDocument.js.map +0 -1
- package/dist/hooks/useDocumentDispatch.js +0 -30
- package/dist/hooks/useDocumentDispatch.js.map +0 -1
- package/dist/hooks/useDocumentDrives.js +0 -86
- package/dist/hooks/useDocumentDrives.js.map +0 -1
- package/dist/hooks/useDocumentEditor.js +0 -46
- package/dist/hooks/useDocumentEditor.js.map +0 -1
- package/dist/hooks/useUserPermissions.js +0 -10
- package/dist/hooks/useUserPermissions.js.map +0 -1
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
- package/dist/reactor.js +0 -59
- package/dist/reactor.js.map +0 -1
- package/dist/utils/index.js +0 -16
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/signature.js +0 -35
- package/dist/utils/signature.js.map +0 -1
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
var O = Object.defineProperty;
|
|
2
|
-
var w = (t, e, r) => e in t ? O(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
|
|
3
|
-
var h = (t, e, r) => w(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
|
-
import { jsx as M } from "react/jsx-runtime";
|
|
5
|
-
import { ReadDriveNotFoundError as b } from "document-drive";
|
|
6
|
-
import { createContext as A, useState as R, useEffect as g, useMemo as m, useContext as E } from "react";
|
|
7
|
-
import { drivesToHash as y } from "../utils/index.js";
|
|
8
|
-
import { useUserPermissions as S } from "../hooks/useUserPermissions.js";
|
|
9
|
-
import "document-model/document";
|
|
10
|
-
import "../hooks/useConnectCrypto.js";
|
|
11
|
-
import "../hooks/useDocumentDrives.js";
|
|
12
|
-
var j = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, d = (t, e, r, o) => {
|
|
13
|
-
for (var s = _(e, r), c = t.length - 1, v; c >= 0; c--)
|
|
14
|
-
(v = t[c]) && (s = v(e, r, s) || s);
|
|
15
|
-
return s && j(e, r, s), s;
|
|
16
|
-
};
|
|
17
|
-
const D = {
|
|
18
|
-
error: console.error
|
|
19
|
-
};
|
|
20
|
-
function a(t, e, r) {
|
|
21
|
-
const o = r.value;
|
|
22
|
-
r.value = function(...s) {
|
|
23
|
-
if (!this.server)
|
|
24
|
-
throw new Error("Read mode document drive not initialized.");
|
|
25
|
-
return o.apply(this, s);
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function U(t) {
|
|
29
|
-
const e = Object.getPrototypeOf(t);
|
|
30
|
-
Object.getOwnPropertyNames(e).forEach((o) => {
|
|
31
|
-
const s = Object.getOwnPropertyDescriptor(e, o);
|
|
32
|
-
s && typeof s.value == "function" && o !== "constructor" && (t[o] = t[o].bind(t));
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
class n {
|
|
36
|
-
constructor(e) {
|
|
37
|
-
h(this, "server");
|
|
38
|
-
U(this), this.server = e;
|
|
39
|
-
}
|
|
40
|
-
getServer() {
|
|
41
|
-
return this.server;
|
|
42
|
-
}
|
|
43
|
-
setDocumentDrive(e) {
|
|
44
|
-
this.server = e;
|
|
45
|
-
}
|
|
46
|
-
migrateReadDrive(e, r) {
|
|
47
|
-
return this.server.migrateReadDrive(e, r);
|
|
48
|
-
}
|
|
49
|
-
addReadDrive(e, r) {
|
|
50
|
-
return this.server.addReadDrive(e, r);
|
|
51
|
-
}
|
|
52
|
-
getReadDrives() {
|
|
53
|
-
return this.server.getReadDrives();
|
|
54
|
-
}
|
|
55
|
-
getReadDriveBySlug(e) {
|
|
56
|
-
return this.server.getReadDriveBySlug(e);
|
|
57
|
-
}
|
|
58
|
-
getReadDrive(e) {
|
|
59
|
-
return this.server.getReadDrive(e);
|
|
60
|
-
}
|
|
61
|
-
getReadDriveContext(e) {
|
|
62
|
-
return this.server.getReadDriveContext(e);
|
|
63
|
-
}
|
|
64
|
-
fetchDrive(e) {
|
|
65
|
-
return this.server.fetchDrive(e);
|
|
66
|
-
}
|
|
67
|
-
fetchDocument(e, r, o) {
|
|
68
|
-
return this.server.fetchDocument(e, r, o);
|
|
69
|
-
}
|
|
70
|
-
deleteReadDrive(e) {
|
|
71
|
-
return this.server.deleteReadDrive(e);
|
|
72
|
-
}
|
|
73
|
-
onReadDrivesUpdate(e) {
|
|
74
|
-
return this.server.onReadDrivesUpdate(e);
|
|
75
|
-
}
|
|
76
|
-
/* eslint-enable @typescript-eslint/no-non-null-assertion */
|
|
77
|
-
}
|
|
78
|
-
d([
|
|
79
|
-
a
|
|
80
|
-
], n.prototype, "migrateReadDrive");
|
|
81
|
-
d([
|
|
82
|
-
a
|
|
83
|
-
], n.prototype, "addReadDrive");
|
|
84
|
-
d([
|
|
85
|
-
a
|
|
86
|
-
], n.prototype, "getReadDrives");
|
|
87
|
-
d([
|
|
88
|
-
a
|
|
89
|
-
], n.prototype, "getReadDriveBySlug");
|
|
90
|
-
d([
|
|
91
|
-
a
|
|
92
|
-
], n.prototype, "getReadDrive");
|
|
93
|
-
d([
|
|
94
|
-
a
|
|
95
|
-
], n.prototype, "getReadDriveContext");
|
|
96
|
-
d([
|
|
97
|
-
a
|
|
98
|
-
], n.prototype, "fetchDrive");
|
|
99
|
-
d([
|
|
100
|
-
a
|
|
101
|
-
], n.prototype, "fetchDocument");
|
|
102
|
-
d([
|
|
103
|
-
a
|
|
104
|
-
], n.prototype, "deleteReadDrive");
|
|
105
|
-
d([
|
|
106
|
-
a
|
|
107
|
-
], n.prototype, "onReadDrivesUpdate");
|
|
108
|
-
const p = new n(), P = A({
|
|
109
|
-
...p,
|
|
110
|
-
readDrives: []
|
|
111
|
-
});
|
|
112
|
-
async function I(t) {
|
|
113
|
-
const e = await t.getReadDrives();
|
|
114
|
-
return (await Promise.all(
|
|
115
|
-
e.map((o) => t.getReadDrive(o))
|
|
116
|
-
)).filter(
|
|
117
|
-
(o) => !(o instanceof b)
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
const k = (t) => {
|
|
121
|
-
const { reactorPromise: e, ...r } = t, [o, s] = R([]), c = S(), [v, x] = R(!1);
|
|
122
|
-
g(() => {
|
|
123
|
-
e.then((u) => {
|
|
124
|
-
p.setDocumentDrive(u), x(!0);
|
|
125
|
-
}).catch(D.error);
|
|
126
|
-
}, [e]);
|
|
127
|
-
const f = c === void 0 ? void 0 : !(c.isAllowedToCreateDocuments || c.isAllowedToEditDocuments);
|
|
128
|
-
m(() => {
|
|
129
|
-
if (!v || f === void 0)
|
|
130
|
-
return;
|
|
131
|
-
const u = f ? "READ" : "WRITE", i = p.getServer();
|
|
132
|
-
i && typeof i.setAllDefaultDrivesAccessLevel == "function" && i.setAllDefaultDrivesAccessLevel(u).catch(D.error);
|
|
133
|
-
}, [f, v]), g(() => {
|
|
134
|
-
if (!v)
|
|
135
|
-
return;
|
|
136
|
-
I(p).then((i) => s(i)).catch(D.error);
|
|
137
|
-
const u = p.onReadDrivesUpdate((i) => {
|
|
138
|
-
s(
|
|
139
|
-
(l) => l.length !== i.length || y(l) !== y(i) ? i : l
|
|
140
|
-
);
|
|
141
|
-
}).catch(D.error);
|
|
142
|
-
return () => {
|
|
143
|
-
u.then((i) => {
|
|
144
|
-
typeof i == "function" && i();
|
|
145
|
-
}).catch(D.error);
|
|
146
|
-
};
|
|
147
|
-
}, [v]);
|
|
148
|
-
const C = m(() => ({
|
|
149
|
-
...p,
|
|
150
|
-
readDrives: o
|
|
151
|
-
}), [o]);
|
|
152
|
-
return /* @__PURE__ */ M(P.Provider, { ...r, value: C });
|
|
153
|
-
}, q = () => E(P);
|
|
154
|
-
export {
|
|
155
|
-
P as ReadModeContext,
|
|
156
|
-
k as ReadModeContextProvider,
|
|
157
|
-
q as useReadModeContext
|
|
158
|
-
};
|
|
159
|
-
//# sourceMappingURL=read-mode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-mode.js","sources":["../../src/context/read-mode.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable @typescript-eslint/use-unknown-in-catch-callback-variable */\n/* eslint-disable @typescript-eslint/no-unnecessary-type-parameters */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport {\n BaseDocumentDriveServer,\n IDocumentDriveServer,\n InferDocumentLocalState,\n InferDocumentOperation,\n InferDocumentState,\n IReadModeDriveServer,\n ReadDocumentNotFoundError,\n ReadDrive,\n ReadDriveContext,\n ReadDriveNotFoundError,\n ReadDrivesListener,\n ReadDrivesListenerUnsubscribe,\n ReadDriveSlugNotFoundError,\n RemoteDriveOptions,\n} from \"document-drive\";\nimport { Document, DocumentModel } from \"document-model/document\";\nimport {\n createContext,\n FC,\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { drivesToHash } from \"../utils\";\nimport { useUserPermissions } from \"../hooks\";\n\nconst logger = {\n error: console.error,\n};\n\n// TODO: add export of this class from document-drive/src/server/error\nclass DocumentModelNotFoundError extends Error {\n constructor(\n public id: string,\n cause?: unknown,\n ) {\n super(`Document model \"${id}\" not found`, { cause });\n }\n}\n\nexport interface IReadModeContext extends IReadModeDriveServer {\n readDrives: ReadDrive[];\n setDocumentDrive(documentDrive: IReadModeDriveServer): void;\n}\n\n// decorator method to ensure server is defined before calling it\nfunction checkServer<\n T extends IReadModeContext & { server: IReadModeDriveServer | undefined },\n U extends any[],\n R,\n>(\n target: any,\n propertyKey: string,\n descriptor: TypedPropertyDescriptor<(this: T, ...args: U) => any>,\n): void {\n const originalMethod = descriptor.value!;\n\n descriptor.value = function (this: T, ...args: U): any {\n if (!this.server) {\n throw new Error(\"Read mode document drive not initialized.\");\n }\n return originalMethod.apply(this, args) as T;\n };\n}\n\nfunction bindClassMethods(instance: any) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const prototype = Object.getPrototypeOf(instance);\n const propertyNames = Object.getOwnPropertyNames(prototype);\n\n propertyNames.forEach((name) => {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, name);\n if (\n descriptor &&\n typeof descriptor.value === \"function\" &&\n name !== \"constructor\"\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n instance[name] = instance[name].bind(instance);\n }\n });\n}\n\nclass ReadModeContextImpl implements Omit<IReadModeContext, \"readDrives\"> {\n private server?: IReadModeDriveServer;\n\n constructor(documentDrive?: IReadModeDriveServer) {\n bindClassMethods(this);\n this.server = documentDrive;\n }\n\n getServer(): IReadModeDriveServer | undefined {\n return this.server;\n }\n\n setDocumentDrive(documentDrive: IReadModeDriveServer) {\n this.server = documentDrive;\n }\n\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n @checkServer\n migrateReadDrive(id: string, options: RemoteDriveOptions) {\n return this.server!.migrateReadDrive(id, options);\n }\n\n @checkServer\n addReadDrive(url: string, options?: RemoteDriveOptions) {\n return this.server!.addReadDrive(url, options);\n }\n\n @checkServer\n getReadDrives(): Promise<string[]> {\n return this.server!.getReadDrives();\n }\n\n @checkServer\n getReadDriveBySlug(\n slug: string,\n ): Promise<ReadDrive | ReadDriveSlugNotFoundError> {\n return this.server!.getReadDriveBySlug(slug);\n }\n\n @checkServer\n getReadDrive(id: string): Promise<ReadDrive | ReadDriveNotFoundError> {\n return this.server!.getReadDrive(id);\n }\n\n @checkServer\n getReadDriveContext(\n id: string,\n ): Promise<ReadDriveContext | ReadDriveNotFoundError> {\n return this.server!.getReadDriveContext(id);\n }\n\n @checkServer\n fetchDrive(id: string): Promise<ReadDrive | ReadDriveNotFoundError> {\n return this.server!.fetchDrive(id);\n }\n\n @checkServer\n fetchDocument<D extends Document>(\n driveId: string,\n documentId: string,\n documentType: DocumentModel<\n InferDocumentState<D>,\n InferDocumentOperation<D>,\n InferDocumentLocalState<D>\n >[\"documentModel\"][\"id\"],\n ): Promise<\n | Document<\n InferDocumentState<D>,\n InferDocumentOperation<D>,\n InferDocumentLocalState<D>\n >\n | DocumentModelNotFoundError\n | ReadDriveNotFoundError\n | ReadDocumentNotFoundError\n > {\n return this.server!.fetchDocument<D>(driveId, documentId, documentType);\n }\n\n @checkServer\n deleteReadDrive(id: string): Promise<ReadDriveNotFoundError | undefined> {\n return this.server!.deleteReadDrive(id);\n }\n\n @checkServer\n onReadDrivesUpdate(\n listener: ReadDrivesListener,\n ): Promise<ReadDrivesListenerUnsubscribe> {\n return this.server!.onReadDrivesUpdate(listener);\n }\n\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n}\n\nconst ReadModeInstance = new ReadModeContextImpl();\n\nexport const ReadModeContext = createContext<IReadModeContext>({\n ...(ReadModeInstance as Omit<IReadModeContext, \"readDrives\">),\n readDrives: [],\n});\n\nexport interface ReadModeContextProviderProps {\n children: ReactNode;\n reactorPromise: Promise<BaseDocumentDriveServer & IReadModeDriveServer>;\n}\n\nasync function getReadDrives(\n instance: ReadModeContextImpl,\n): Promise<ReadDrive[]> {\n const driveIds = await instance.getReadDrives();\n const drives = await Promise.all(\n driveIds.map((id) => instance.getReadDrive(id)),\n );\n return drives.filter(\n (drive) => !(drive instanceof ReadDriveNotFoundError),\n ) as ReadDrive[];\n}\n\nexport const ReadModeContextProvider: FC<ReadModeContextProviderProps> = (\n props,\n) => {\n const { reactorPromise, ...restProps } = props;\n\n const [readDrives, setReadDrives] = useState<ReadDrive[]>([]);\n const userPermissions = useUserPermissions();\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n reactorPromise\n .then((reactor) => {\n ReadModeInstance.setDocumentDrive(reactor);\n setReady(true);\n })\n .catch(logger.error);\n }, [reactorPromise]);\n\n // updates drive access level when user permissions change\n const readMode =\n userPermissions === undefined\n ? undefined\n : !(\n userPermissions.isAllowedToCreateDocuments ||\n userPermissions.isAllowedToEditDocuments\n );\n useMemo(() => {\n // wait for user initial load\n if (!ready || readMode === undefined) {\n return;\n }\n\n const accessLevel = readMode ? \"READ\" : \"WRITE\";\n const server = ReadModeInstance.getServer();\n\n if (\n server &&\n typeof (server as IDocumentDriveServer).setAllDefaultDrivesAccessLevel ===\n \"function\"\n ) {\n (server as IDocumentDriveServer)\n .setAllDefaultDrivesAccessLevel(accessLevel)\n .catch(logger.error);\n }\n }, [readMode, ready]);\n\n useEffect(() => {\n if (!ready) {\n return;\n }\n\n getReadDrives(ReadModeInstance)\n .then((drives) => setReadDrives(drives))\n .catch(logger.error);\n\n const unsubscribe = ReadModeInstance.onReadDrivesUpdate((newDrives) => {\n setReadDrives((readDrives) =>\n readDrives.length !== newDrives.length ||\n drivesToHash(readDrives) !== drivesToHash(newDrives)\n ? newDrives\n : readDrives,\n );\n }).catch(logger.error);\n return () => {\n unsubscribe\n .then((unsub) => {\n if (typeof unsub === \"function\") {\n unsub();\n }\n })\n .catch(logger.error);\n };\n }, [ready]);\n\n const context = useMemo(() => {\n return {\n ...(ReadModeInstance as Omit<IReadModeContext, \"readDrives\">),\n readDrives,\n };\n }, [readDrives]);\n\n return <ReadModeContext.Provider {...restProps} value={context} />;\n};\nexport const useReadModeContext = () => useContext(ReadModeContext);\n"],"names":["logger","checkServer","target","propertyKey","descriptor","originalMethod","args","bindClassMethods","instance","prototype","name","ReadModeContextImpl","documentDrive","__publicField","id","options","url","slug","driveId","documentId","documentType","listener","__decorateClass","ReadModeInstance","ReadModeContext","createContext","getReadDrives","driveIds","drive","ReadDriveNotFoundError","ReadModeContextProvider","props","reactorPromise","restProps","readDrives","setReadDrives","useState","userPermissions","useUserPermissions","ready","setReady","useEffect","reactor","readMode","useMemo","accessLevel","server","drives","unsubscribe","newDrives","drivesToHash","unsub","context","useReadModeContext","useContext"],"mappings":"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"}
|
package/dist/crypto/browser.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
var E = (s) => {
|
|
2
|
-
throw TypeError(s);
|
|
3
|
-
};
|
|
4
|
-
var b = (s, e, t) => e.has(s) || E("Cannot " + t);
|
|
5
|
-
var o = (s, e, t) => (b(s, e, "read from private field"), t ? t.call(s) : e.get(s)), a = (s, e, t) => e.has(s) ? E("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(s) : e.set(s, t), h = (s, e, t, r) => (b(s, e, "write to private field"), r ? r.call(s, t) : e.set(s, t), t), p = (s, e, t) => (b(s, e, "access private method"), t);
|
|
6
|
-
var l, c, y, i, u, w;
|
|
7
|
-
const n = class n {
|
|
8
|
-
constructor() {
|
|
9
|
-
a(this, u);
|
|
10
|
-
a(this, i);
|
|
11
|
-
h(this, i, new Promise((e, t) => {
|
|
12
|
-
const r = indexedDB.open(o(n, l), 1);
|
|
13
|
-
r.onupgradeneeded = () => {
|
|
14
|
-
r.result.createObjectStore(o(n, c));
|
|
15
|
-
}, r.onsuccess = () => e(r.result), r.onerror = () => t(r.error);
|
|
16
|
-
}));
|
|
17
|
-
}
|
|
18
|
-
async saveKeyPair(e) {
|
|
19
|
-
const r = (await p(this, u, w).call(this)).put(e, o(n, y));
|
|
20
|
-
return new Promise((d, P) => {
|
|
21
|
-
r.onsuccess = () => {
|
|
22
|
-
d();
|
|
23
|
-
}, r.onerror = () => {
|
|
24
|
-
P(new Error("Failed to save key pair"));
|
|
25
|
-
};
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
async loadKeyPair() {
|
|
29
|
-
const t = (await p(this, u, w).call(this, "readonly")).getAll();
|
|
30
|
-
return new Promise((r, d) => {
|
|
31
|
-
t.onsuccess = () => {
|
|
32
|
-
const P = t.result.length ? t.result[0] : void 0;
|
|
33
|
-
r(P);
|
|
34
|
-
}, t.onerror = () => {
|
|
35
|
-
d(new Error("Failed to load key pair"));
|
|
36
|
-
};
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
l = new WeakMap(), c = new WeakMap(), y = new WeakMap(), i = new WeakMap(), u = new WeakSet(), w = async function(e = "readwrite") {
|
|
41
|
-
return (await o(this, i)).transaction(
|
|
42
|
-
o(n, c),
|
|
43
|
-
e
|
|
44
|
-
).objectStore(o(n, c));
|
|
45
|
-
}, a(n, l, "browserKeyDB"), a(n, c, "keyPairs"), a(n, y, "keyPair");
|
|
46
|
-
let k = n;
|
|
47
|
-
export {
|
|
48
|
-
k as BrowserKeyStorage
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sources":["../../src/crypto/browser.ts"],"sourcesContent":["import { JsonWebKeyPairStorage, JwkKeyPair } from \"./\";\n\nexport class BrowserKeyStorage implements JsonWebKeyPairStorage {\n static #DB_NAME = \"browserKeyDB\";\n static #STORE_NAME = \"keyPairs\";\n static #KEY = \"keyPair\";\n\n #db: Promise<IDBDatabase>;\n constructor() {\n this.#db = new Promise((resolve, reject) => {\n const req = indexedDB.open(BrowserKeyStorage.#DB_NAME, 1);\n req.onupgradeneeded = () => {\n req.result.createObjectStore(BrowserKeyStorage.#STORE_NAME);\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error as Error);\n });\n }\n\n async #useStore(mode: IDBTransactionMode = \"readwrite\") {\n const database = await this.#db;\n const transaction = database.transaction(\n BrowserKeyStorage.#STORE_NAME,\n mode,\n );\n const store = transaction.objectStore(BrowserKeyStorage.#STORE_NAME);\n return store;\n }\n\n async saveKeyPair(keyPair: JwkKeyPair) {\n const store = await this.#useStore();\n const request = store.put(keyPair, BrowserKeyStorage.#KEY);\n return new Promise<void>((resolve, reject) => {\n request.onsuccess = () => {\n resolve();\n };\n request.onerror = () => {\n reject(new Error(\"Failed to save key pair\"));\n };\n });\n }\n\n async loadKeyPair(): Promise<JwkKeyPair | undefined> {\n const store = await this.#useStore(\"readonly\");\n const request = store.getAll();\n\n return new Promise<JwkKeyPair | undefined>((resolve, reject) => {\n request.onsuccess = () => {\n const keyPair = request.result.length\n ? (request.result[0] as JwkKeyPair)\n : undefined;\n resolve(keyPair);\n };\n request.onerror = () => {\n reject(new Error(\"Failed to load key pair\"));\n };\n });\n }\n}\n"],"names":["_DB_NAME","_STORE_NAME","_KEY","_db","_BrowserKeyStorage_instances","useStore_fn","_BrowserKeyStorage","__privateAdd","__privateSet","resolve","reject","req","__privateGet","keyPair","request","__privateMethod","mode","BrowserKeyStorage"],"mappings":";;;;;AAEO,IAAAA,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC;AAAA,MAAMC,IAAN,MAAMA,EAAmD;AAAA,EAM9D,cAAc;AANT,IAAAC,EAAA,MAAAH;AAKL,IAAAG,EAAA,MAAAJ;AAEE,IAAAK,EAAA,MAAKL,GAAM,IAAI,QAAQ,CAACM,GAASC,MAAW;AAC1C,YAAMC,IAAM,UAAU,KAAKC,EAAAN,GAAkBN,IAAU,CAAC;AACxD,MAAAW,EAAI,kBAAkB,MAAM;AACtB,QAAAA,EAAA,OAAO,kBAAkBC,EAAAN,GAAkBL,EAAW;AAAA,MAC5D,GACAU,EAAI,YAAY,MAAMF,EAAQE,EAAI,MAAM,GACxCA,EAAI,UAAU,MAAMD,EAAOC,EAAI,KAAc;AAAA,IAAA,CAC9C;AAAA,EAAA;AAAA,EAaH,MAAM,YAAYE,GAAqB;AAErC,UAAMC,KADQ,MAAMC,EAAA,MAAKX,GAAAC,GAAL,YACE,IAAIQ,GAASD,EAAAN,GAAkBJ,EAAI;AACzD,WAAO,IAAI,QAAc,CAACO,GAASC,MAAW;AAC5C,MAAAI,EAAQ,YAAY,MAAM;AAChB,QAAAL,EAAA;AAAA,MACV,GACAK,EAAQ,UAAU,MAAM;AACf,QAAAJ,EAAA,IAAI,MAAM,yBAAyB,CAAC;AAAA,MAC7C;AAAA,IAAA,CACD;AAAA,EAAA;AAAA,EAGH,MAAM,cAA+C;AAE7C,UAAAI,KADQ,MAAMC,EAAA,MAAKX,GAAAC,GAAL,WAAe,aACb,OAAO;AAE7B,WAAO,IAAI,QAAgC,CAACI,GAASC,MAAW;AAC9D,MAAAI,EAAQ,YAAY,MAAM;AACxB,cAAMD,IAAUC,EAAQ,OAAO,SAC1BA,EAAQ,OAAO,CAAC,IACjB;AACJ,QAAAL,EAAQI,CAAO;AAAA,MACjB,GACAC,EAAQ,UAAU,MAAM;AACf,QAAAJ,EAAA,IAAI,MAAM,yBAAyB,CAAC;AAAA,MAC7C;AAAA,IAAA,CACD;AAAA,EAAA;AAEL;AAvDSV,IAAA,eACAC,IAAA,eACAC,IAAA,eAEPC,IAAA,eALKC,IAAA,eAiBCC,IAAU,eAAAW,IAA2B,aAAa;AAO/C,UANU,MAAMJ,EAAA,MAAKT,IACC;AAAA,IAC3BS,EAAAN,GAAkBL;AAAA,IAClBe;AAAA,EACF,EAC0B,YAAYJ,EAAAN,GAAkBL,EAAW;AAC5D,GAvBTM,EADWD,GACJN,GAAW,iBAClBO,EAFWD,GAEJL,GAAc,aACrBM,EAHWD,GAGJJ,GAAO;AAHT,IAAMe,IAANX;"}
|
package/dist/crypto/index.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
var E = Object.defineProperty;
|
|
2
|
-
var v = (e) => {
|
|
3
|
-
throw TypeError(e);
|
|
4
|
-
};
|
|
5
|
-
var S = (e, t, i) => t in e ? E(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i;
|
|
6
|
-
var d = (e, t, i) => S(e, typeof t != "symbol" ? t + "" : t, i), K = (e, t, i) => t.has(e) || v("Cannot " + i);
|
|
7
|
-
var a = (e, t, i) => (K(e, t, "read from private field"), i ? i.call(e) : t.get(e)), w = (e, t, i) => t.has(e) ? v("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, i), l = (e, t, i, y) => (K(e, t, "write to private field"), y ? y.call(e, i) : t.set(e, i), i), n = (e, t, i) => (K(e, t, "access private method"), i);
|
|
8
|
-
import { rawKeyInHexfromUncompressed as j, compressedKeyInHexfromRaw as H, encodeDIDfromHexString as I } from "did-key-creator";
|
|
9
|
-
function N(e) {
|
|
10
|
-
return Array.prototype.map.call(new Uint8Array(e), (t) => ("00" + t.toString(16)).slice(-2)).join("");
|
|
11
|
-
}
|
|
12
|
-
var o, s, p, u, r, k, C, x, m, b, A, g, f;
|
|
13
|
-
const c = class c {
|
|
14
|
-
constructor(t) {
|
|
15
|
-
w(this, r);
|
|
16
|
-
w(this, o);
|
|
17
|
-
w(this, s);
|
|
18
|
-
w(this, p);
|
|
19
|
-
w(this, u);
|
|
20
|
-
// eslint-disable-next-line no-unused-private-class-members
|
|
21
|
-
w(this, g, async (...t) => (await a(this, o)).sign(...t));
|
|
22
|
-
// eslint-disable-next-line no-unused-private-class-members
|
|
23
|
-
w(this, f, async (...t) => (await a(this, o)).verify(...t));
|
|
24
|
-
l(this, p, t), l(this, o, n(this, r, k).call(this)), l(this, u, n(this, r, C).call(this));
|
|
25
|
-
}
|
|
26
|
-
did() {
|
|
27
|
-
return a(this, u);
|
|
28
|
-
}
|
|
29
|
-
async regenerateDid() {
|
|
30
|
-
l(this, s, await n(this, r, m).call(this)), await a(this, p).saveKeyPair(await n(this, r, b).call(this));
|
|
31
|
-
}
|
|
32
|
-
async sign(t) {
|
|
33
|
-
var i;
|
|
34
|
-
if ((i = a(this, s)) != null && i.privateKey) {
|
|
35
|
-
const h = await (await a(this, o)).sign(
|
|
36
|
-
c.signAlgorithm,
|
|
37
|
-
a(this, s).privateKey,
|
|
38
|
-
t.buffer
|
|
39
|
-
);
|
|
40
|
-
return new Uint8Array(h);
|
|
41
|
-
} else
|
|
42
|
-
throw new Error("No private key available");
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
o = new WeakMap(), s = new WeakMap(), p = new WeakMap(), u = new WeakMap(), r = new WeakSet(), k = function() {
|
|
46
|
-
return new Promise((t, i) => {
|
|
47
|
-
var y;
|
|
48
|
-
typeof window > "u" ? import("../_virtual/__vite-browser-external.js").then((h) => {
|
|
49
|
-
t(h.webcrypto.subtle);
|
|
50
|
-
}).catch(i) : ((y = window.crypto) != null && y.subtle || i(new Error("Crypto module not available")), t(window.crypto.subtle));
|
|
51
|
-
});
|
|
52
|
-
}, C = async function() {
|
|
53
|
-
const t = await a(this, p).loadKeyPair();
|
|
54
|
-
t ? (l(this, s, await n(this, r, A).call(this, t)), console.log("Found key pair")) : (l(this, s, await n(this, r, m).call(this)), console.log("Created key pair"), await a(this, p).saveKeyPair(await n(this, r, b).call(this)));
|
|
55
|
-
const i = await n(this, r, x).call(this);
|
|
56
|
-
return console.log("Connect DID:", i), i;
|
|
57
|
-
}, x = async function() {
|
|
58
|
-
if (!a(this, s))
|
|
59
|
-
throw new Error("No key pair available");
|
|
60
|
-
const i = await (await a(this, o)).exportKey(
|
|
61
|
-
"raw",
|
|
62
|
-
a(this, s).publicKey
|
|
63
|
-
), y = "p256-pub", h = j(N(i)), D = H(h);
|
|
64
|
-
return I(y, D);
|
|
65
|
-
}, m = async function() {
|
|
66
|
-
return await (await a(this, o)).generateKey(
|
|
67
|
-
c.algorithm,
|
|
68
|
-
!0,
|
|
69
|
-
["sign", "verify"]
|
|
70
|
-
);
|
|
71
|
-
}, b = async function() {
|
|
72
|
-
if (!a(this, s))
|
|
73
|
-
throw new Error("No key pair available");
|
|
74
|
-
const t = await a(this, o);
|
|
75
|
-
return {
|
|
76
|
-
publicKey: await t.exportKey("jwk", a(this, s).publicKey),
|
|
77
|
-
privateKey: await t.exportKey("jwk", a(this, s).privateKey)
|
|
78
|
-
};
|
|
79
|
-
}, A = async function(t) {
|
|
80
|
-
const i = await a(this, o);
|
|
81
|
-
return {
|
|
82
|
-
publicKey: await i.importKey(
|
|
83
|
-
"jwk",
|
|
84
|
-
t.publicKey,
|
|
85
|
-
c.algorithm,
|
|
86
|
-
!0,
|
|
87
|
-
["verify"]
|
|
88
|
-
),
|
|
89
|
-
privateKey: await i.importKey(
|
|
90
|
-
"jwk",
|
|
91
|
-
t.privateKey,
|
|
92
|
-
c.algorithm,
|
|
93
|
-
!0,
|
|
94
|
-
["sign"]
|
|
95
|
-
)
|
|
96
|
-
};
|
|
97
|
-
}, g = new WeakMap(), f = new WeakMap(), d(c, "algorithm", {
|
|
98
|
-
name: "ECDSA",
|
|
99
|
-
namedCurve: "P-256"
|
|
100
|
-
}), d(c, "signAlgorithm", {
|
|
101
|
-
name: "ECDSA",
|
|
102
|
-
namedCurve: "P-256",
|
|
103
|
-
hash: "SHA-256"
|
|
104
|
-
});
|
|
105
|
-
let P = c;
|
|
106
|
-
export {
|
|
107
|
-
P as ConnectCrypto
|
|
108
|
-
};
|
|
109
|
-
//# sourceMappingURL=index.js.map
|
package/dist/crypto/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/crypto/index.ts"],"sourcesContent":["import {\n compressedKeyInHexfromRaw,\n encodeDIDfromHexString,\n rawKeyInHexfromUncompressed,\n} from \"did-key-creator\";\n\nexport type JwkKeyPair = {\n publicKey: JsonWebKey;\n privateKey: JsonWebKey;\n};\n\nexport interface JsonWebKeyPairStorage {\n loadKeyPair(): Promise<JwkKeyPair | undefined>;\n saveKeyPair(keyPair: JwkKeyPair): Promise<void>;\n}\n\nfunction ab2hex(ab: ArrayBuffer) {\n return Array.prototype.map\n .call(new Uint8Array(ab), (x: number) => (\"00\" + x.toString(16)).slice(-2))\n .join(\"\");\n}\n\nexport interface IConnectCrypto {\n did: () => Promise<DID>;\n regenerateDid(): Promise<void>;\n sign: (data: Uint8Array) => Promise<Uint8Array>;\n}\n\nexport type DID = `did:key:${string}`;\n\nexport class ConnectCrypto implements IConnectCrypto {\n #subtleCrypto: Promise<SubtleCrypto>;\n #keyPair: CryptoKeyPair | undefined;\n #keyPairStorage: JsonWebKeyPairStorage;\n\n #did: Promise<DID>;\n\n static algorithm: EcKeyAlgorithm = {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n };\n\n static signAlgorithm = {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n hash: \"SHA-256\",\n };\n\n constructor(keyPairStorage: JsonWebKeyPairStorage) {\n this.#keyPairStorage = keyPairStorage;\n\n // Initializes the subtleCrypto module according to the host environment\n this.#subtleCrypto = this.#initCrypto();\n\n this.#did = this.#initialize();\n }\n\n #initCrypto() {\n return new Promise<SubtleCrypto>((resolve, reject) => {\n if (typeof window === \"undefined\") {\n import(\"node:crypto\")\n .then((module) => {\n resolve(module.webcrypto.subtle as SubtleCrypto);\n })\n .catch(reject);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!window.crypto?.subtle) {\n reject(new Error(\"Crypto module not available\"));\n }\n resolve(window.crypto.subtle);\n }\n });\n }\n\n // loads the key pair from storage or generates a new one if none is stored\n async #initialize() {\n const loadedKeyPair = await this.#keyPairStorage.loadKeyPair();\n if (loadedKeyPair) {\n this.#keyPair = await this.#importKeyPair(loadedKeyPair);\n console.log(\"Found key pair\");\n } else {\n this.#keyPair = await this.#generateECDSAKeyPair();\n console.log(\"Created key pair\");\n await this.#keyPairStorage.saveKeyPair(await this.#exportKeyPair());\n }\n const did = await this.#parseDid();\n console.log(\"Connect DID:\", did);\n return did;\n }\n\n did() {\n return this.#did;\n }\n\n async regenerateDid() {\n this.#keyPair = await this.#generateECDSAKeyPair();\n await this.#keyPairStorage.saveKeyPair(await this.#exportKeyPair());\n }\n\n async #parseDid(): Promise<DID> {\n if (!this.#keyPair) {\n throw new Error(\"No key pair available\");\n }\n\n const subtleCrypto = await this.#subtleCrypto;\n const publicKeyRaw = await subtleCrypto.exportKey(\n \"raw\",\n this.#keyPair.publicKey,\n );\n\n const multicodecName = \"p256-pub\";\n const rawKey = rawKeyInHexfromUncompressed(ab2hex(publicKeyRaw));\n const compressedKey = compressedKeyInHexfromRaw(rawKey);\n const did = encodeDIDfromHexString(multicodecName, compressedKey);\n return did as DID;\n }\n\n async #generateECDSAKeyPair() {\n const subtleCrypto = await this.#subtleCrypto;\n const keyPair = await subtleCrypto.generateKey(\n ConnectCrypto.algorithm,\n true,\n [\"sign\", \"verify\"],\n );\n return keyPair;\n }\n\n async #exportKeyPair(): Promise<JwkKeyPair> {\n if (!this.#keyPair) {\n throw new Error(\"No key pair available\");\n }\n const subtleCrypto = await this.#subtleCrypto;\n const jwkKeyPair = {\n publicKey: await subtleCrypto.exportKey(\"jwk\", this.#keyPair.publicKey),\n privateKey: await subtleCrypto.exportKey(\"jwk\", this.#keyPair.privateKey),\n };\n return jwkKeyPair;\n }\n\n async #importKeyPair(jwkKeyPair: JwkKeyPair): Promise<CryptoKeyPair> {\n const subtleCrypto = await this.#subtleCrypto;\n return {\n publicKey: await subtleCrypto.importKey(\n \"jwk\",\n jwkKeyPair.publicKey,\n ConnectCrypto.algorithm,\n true,\n [\"verify\"],\n ),\n privateKey: await subtleCrypto.importKey(\n \"jwk\",\n jwkKeyPair.privateKey,\n ConnectCrypto.algorithm,\n true,\n [\"sign\"],\n ),\n };\n }\n\n // eslint-disable-next-line no-unused-private-class-members\n #sign = async (\n ...args: Parameters<SubtleCrypto[\"sign\"]>\n ): Promise<ArrayBuffer> => {\n return (await this.#subtleCrypto).sign(...args);\n };\n\n // eslint-disable-next-line no-unused-private-class-members\n #verify = async (\n ...args: Parameters<SubtleCrypto[\"verify\"]>\n ): Promise<boolean> => {\n return (await this.#subtleCrypto).verify(...args);\n };\n\n async sign(data: Uint8Array): Promise<Uint8Array> {\n if (this.#keyPair?.privateKey) {\n const subtleCrypto = await this.#subtleCrypto;\n\n const arrayBuffer = await subtleCrypto.sign(\n ConnectCrypto.signAlgorithm,\n this.#keyPair.privateKey,\n data.buffer as ArrayBuffer,\n );\n\n return new Uint8Array(arrayBuffer);\n } else {\n throw new Error(\"No private key available\");\n }\n }\n}\n"],"names":["ab2hex","ab","x","_ConnectCrypto","keyPairStorage","__privateAdd","_ConnectCrypto_instances","_subtleCrypto","_keyPair","_keyPairStorage","_did","_sign","args","__privateGet","_verify","__privateSet","__privateMethod","initCrypto_fn","initialize_fn","generateECDSAKeyPair_fn","exportKeyPair_fn","data","_a","arrayBuffer","resolve","reject","module","loadedKeyPair","importKeyPair_fn","did","parseDid_fn","publicKeyRaw","multicodecName","rawKey","rawKeyInHexfromUncompressed","compressedKey","compressedKeyInHexfromRaw","encodeDIDfromHexString","subtleCrypto","jwkKeyPair","__publicField","ConnectCrypto"],"mappings":"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"}
|
package/dist/document-model.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as o from "document-model-libs/document-models";
|
|
2
|
-
import { module as e } from "document-model/document-model";
|
|
3
|
-
const t = {
|
|
4
|
-
DocumentModel: e,
|
|
5
|
-
...o
|
|
6
|
-
}, s = Object.values(t);
|
|
7
|
-
export {
|
|
8
|
-
s as baseDocumentModels,
|
|
9
|
-
t as baseDocumentModelsMap
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=document-model.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"document-model.js","sources":["../src/document-model.ts"],"sourcesContent":["import * as DocumentModels from \"document-model-libs/document-models\";\nimport { DocumentModel } from \"document-model/document\";\nimport { module as DocumentModelLib } from \"document-model/document-model\";\n\nexport const baseDocumentModelsMap: Record<string, DocumentModel> = {\n DocumentModel: DocumentModelLib as DocumentModel,\n ...(DocumentModels as Record<string, DocumentModel>),\n};\n\nexport const baseDocumentModels = Object.values(baseDocumentModelsMap);\n"],"names":["baseDocumentModelsMap","DocumentModelLib","DocumentModels","baseDocumentModels"],"mappings":";;AAIO,MAAMA,IAAuD;AAAA,EAClE,eAAeC;AAAAA,EACf,GAAIC;AACN,GAEaC,IAAqB,OAAO,OAAOH,CAAqB;"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { useCallback as f, useMemo as w } from "react";
|
|
2
|
-
import { useUserPermissions as l } from "./useUserPermissions.js";
|
|
3
|
-
import { useDocumentDrives as p } from "./useDocumentDrives.js";
|
|
4
|
-
function D(o, d = 50) {
|
|
5
|
-
let i;
|
|
6
|
-
const t = [];
|
|
7
|
-
return (n) => {
|
|
8
|
-
i && clearTimeout(i);
|
|
9
|
-
const s = t.findIndex(
|
|
10
|
-
(e) => e.scope === n.scope && e.index === n.index
|
|
11
|
-
);
|
|
12
|
-
if (s > -1) {
|
|
13
|
-
const e = t[s];
|
|
14
|
-
e.type === n.type && JSON.stringify(n.input) === JSON.stringify(e.input) || console.warn(
|
|
15
|
-
"Two conflicting operations were dispatched:",
|
|
16
|
-
e,
|
|
17
|
-
n
|
|
18
|
-
), t[s] = n;
|
|
19
|
-
} else
|
|
20
|
-
t.push(n);
|
|
21
|
-
return new Promise((e, c) => {
|
|
22
|
-
i = setTimeout(() => {
|
|
23
|
-
o(t).then(e).catch(c);
|
|
24
|
-
}, d);
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function g(o, d) {
|
|
29
|
-
const { driveId: i, documentId: t } = d, [n] = p(o), { isAllowedToEditDocuments: s } = l(), e = f(
|
|
30
|
-
async (r, u, m) => {
|
|
31
|
-
if (!s)
|
|
32
|
-
throw new Error("User is not allowed to edit documents");
|
|
33
|
-
if (!o)
|
|
34
|
-
throw new Error("Reactor is not loaded");
|
|
35
|
-
if (!n.find(
|
|
36
|
-
(a) => a.state.global.id === r
|
|
37
|
-
))
|
|
38
|
-
throw new Error(`Drive with id ${r} not found`);
|
|
39
|
-
return (await o.queueOperations(
|
|
40
|
-
r,
|
|
41
|
-
u,
|
|
42
|
-
m
|
|
43
|
-
)).document;
|
|
44
|
-
},
|
|
45
|
-
[n, s, o]
|
|
46
|
-
);
|
|
47
|
-
return w(() => D(
|
|
48
|
-
(r) => e(i, t, r)
|
|
49
|
-
), [e, i, t]);
|
|
50
|
-
}
|
|
51
|
-
export {
|
|
52
|
-
g as useAddDebouncedOperations
|
|
53
|
-
};
|
|
54
|
-
//# sourceMappingURL=useAddDebouncedOperations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAddDebouncedOperations.js","sources":["../../src/hooks/useAddDebouncedOperations.ts"],"sourcesContent":["import { useMemo, useCallback } from \"react\";\nimport { Document, Operation } from \"document-model/document\";\n\nimport { useUserPermissions } from \"./useUserPermissions\";\nimport { useDocumentDrives } from \"./useDocumentDrives\";\nimport { IDocumentDriveServer } from \"document-drive\";\n\nfunction debounceOperations(\n callback: (operations: Operation[]) => Promise<Document | undefined>,\n timeout = 50,\n) {\n let timer: number;\n const operations: Operation[] = [];\n return (operation: Operation) => {\n if (timer) {\n clearTimeout(timer);\n }\n const index = operations.findIndex(\n (op) => op.scope === operation.scope && op.index === operation.index,\n );\n if (index > -1) {\n const oldOperation = operations[index];\n if (\n !(\n oldOperation.type === operation.type &&\n JSON.stringify(operation.input) === JSON.stringify(oldOperation.input)\n )\n ) {\n console.warn(\n \"Two conflicting operations were dispatched:\",\n oldOperation,\n operation,\n );\n }\n operations[index] = operation;\n } else {\n operations.push(operation);\n }\n return new Promise<Document | undefined>((resolve, reject) => {\n timer = setTimeout(() => {\n callback(operations).then(resolve).catch(reject);\n }, timeout) as unknown as number;\n });\n };\n}\n\nexport type UseAddDebouncedOperationsProps = {\n driveId: string;\n documentId: string;\n};\n\nexport function useAddDebouncedOperations(\n reactor: IDocumentDriveServer | undefined,\n props: UseAddDebouncedOperationsProps,\n) {\n const { driveId, documentId } = props;\n const [documentDrives] = useDocumentDrives(reactor);\n\n const { isAllowedToEditDocuments } = useUserPermissions() || {\n isAllowedToCreateDocuments: false,\n isAllowedToEditDocuments: false,\n };\n\n const addOperations = useCallback(\n async (driveId: string, id: string, operations: Operation[]) => {\n if (!isAllowedToEditDocuments) {\n throw new Error(\"User is not allowed to edit documents\");\n }\n\n if (!reactor) {\n throw new Error(\"Reactor is not loaded\");\n }\n\n const drive = documentDrives.find(\n (drive) => drive.state.global.id === driveId,\n );\n if (!drive) {\n throw new Error(`Drive with id ${driveId} not found`);\n }\n\n const newDocument = await reactor.queueOperations(\n driveId,\n id,\n operations,\n );\n return newDocument.document;\n },\n [documentDrives, isAllowedToEditDocuments, reactor],\n );\n\n const addDebouncedOperations = useMemo(() => {\n return debounceOperations((operations) =>\n addOperations(driveId, documentId, operations),\n );\n }, [addOperations, driveId, documentId]);\n\n return addDebouncedOperations;\n}\n"],"names":["debounceOperations","callback","timeout","timer","operations","operation","index","op","oldOperation","resolve","reject","useAddDebouncedOperations","reactor","props","driveId","documentId","documentDrives","useDocumentDrives","isAllowedToEditDocuments","useUserPermissions","addOperations","useCallback","id","drive","useMemo"],"mappings":";;;AAOA,SAASA,EACPC,GACAC,IAAU,IACV;AACI,MAAAC;AACJ,QAAMC,IAA0B,CAAC;AACjC,SAAO,CAACC,MAAyB;AAC/B,IAAIF,KACF,aAAaA,CAAK;AAEpB,UAAMG,IAAQF,EAAW;AAAA,MACvB,CAACG,MAAOA,EAAG,UAAUF,EAAU,SAASE,EAAG,UAAUF,EAAU;AAAA,IACjE;AACA,QAAIC,IAAQ,IAAI;AACR,YAAAE,IAAeJ,EAAWE,CAAK;AACrC,MAEIE,EAAa,SAASH,EAAU,QAChC,KAAK,UAAUA,EAAU,KAAK,MAAM,KAAK,UAAUG,EAAa,KAAK,KAG/D,QAAA;AAAA,QACN;AAAA,QACAA;AAAA,QACAH;AAAA,MACF,GAEFD,EAAWE,CAAK,IAAID;AAAA,IAAA;AAEpB,MAAAD,EAAW,KAAKC,CAAS;AAE3B,WAAO,IAAI,QAA8B,CAACI,GAASC,MAAW;AAC5D,MAAAP,IAAQ,WAAW,MAAM;AACvB,QAAAF,EAASG,CAAU,EAAE,KAAKK,CAAO,EAAE,MAAMC,CAAM;AAAA,SAC9CR,CAAO;AAAA,IAAA,CACX;AAAA,EACH;AACF;AAOgB,SAAAS,EACdC,GACAC,GACA;AACM,QAAA,EAAE,SAAAC,GAAS,YAAAC,EAAA,IAAeF,GAC1B,CAACG,CAAc,IAAIC,EAAkBL,CAAO,GAE5C,EAAE,0BAAAM,EAA6B,IAAAC,EAGrC,GAEMC,IAAgBC;AAAA,IACpB,OAAOP,GAAiBQ,GAAYlB,MAA4B;AAC9D,UAAI,CAACc;AACG,cAAA,IAAI,MAAM,uCAAuC;AAGzD,UAAI,CAACN;AACG,cAAA,IAAI,MAAM,uBAAuB;AAMzC,UAAI,CAHUI,EAAe;AAAA,QAC3B,CAACO,MAAUA,EAAM,MAAM,OAAO,OAAOT;AAAAA,MACvC;AAEE,cAAM,IAAI,MAAM,iBAAiBA,CAAO,YAAY;AAQtD,cALoB,MAAMF,EAAQ;AAAA,QAChCE;AAAAA,QACAQ;AAAA,QACAlB;AAAA,MACF,GACmB;AAAA,IACrB;AAAA,IACA,CAACY,GAAgBE,GAA0BN,CAAO;AAAA,EACpD;AAQO,SANwBY,EAAQ,MAC9BxB;AAAA,IAAmB,CAACI,MACzBgB,EAAcN,GAASC,GAAYX,CAAU;AAAA,EAC/C,GACC,CAACgB,GAAeN,GAASC,CAAU,CAAC;AAGzC;"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { atom as e, useAtom as c } from "jotai";
|
|
2
|
-
import { useMemo as i, useEffect as s } from "react";
|
|
3
|
-
import { ConnectCrypto as a } from "../crypto/index.js";
|
|
4
|
-
import { BrowserKeyStorage as d } from "../crypto/browser.js";
|
|
5
|
-
const n = (async () => {
|
|
6
|
-
const t = new a(new d());
|
|
7
|
-
return await t.did(), t;
|
|
8
|
-
})();
|
|
9
|
-
function w() {
|
|
10
|
-
return i(
|
|
11
|
-
() => ({
|
|
12
|
-
async regenerateDid() {
|
|
13
|
-
return (await n).regenerateDid();
|
|
14
|
-
},
|
|
15
|
-
async did() {
|
|
16
|
-
return (await n).did();
|
|
17
|
-
},
|
|
18
|
-
sign: async (t) => await (await n).sign(t)
|
|
19
|
-
}),
|
|
20
|
-
[]
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
const p = e(void 0);
|
|
24
|
-
function C() {
|
|
25
|
-
const [t, o] = c(p);
|
|
26
|
-
return s(() => {
|
|
27
|
-
t || n.then((r) => r.did()).then((r) => o(r)).catch(console.error);
|
|
28
|
-
}), t;
|
|
29
|
-
}
|
|
30
|
-
export {
|
|
31
|
-
w as useConnectCrypto,
|
|
32
|
-
C as useConnectDid
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=useConnectCrypto.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectCrypto.js","sources":["../../src/hooks/useConnectCrypto.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { atom, useAtom } from \"jotai\";\nimport { useEffect, useMemo } from \"react\";\n\nimport { DID, IConnectCrypto, ConnectCrypto } from \"../crypto\";\nimport { BrowserKeyStorage } from \"../crypto/browser\";\n\nconst connectCrypto = (async () => {\n const connectCrypto = new ConnectCrypto(new BrowserKeyStorage());\n await connectCrypto.did();\n return connectCrypto;\n})();\n\nexport function useConnectCrypto(): IConnectCrypto {\n return useMemo(\n () => ({\n async regenerateDid() {\n const crypto = await connectCrypto;\n return crypto.regenerateDid();\n },\n async did() {\n const crypto = await connectCrypto;\n return crypto.did();\n },\n sign: async (data: Uint8Array) => {\n const crypto = await connectCrypto;\n return await crypto.sign(data);\n },\n }),\n [],\n );\n}\n\nconst didAtom = atom<DID | undefined>(undefined);\n\nexport function useConnectDid(): DID | undefined {\n const [did, setDid] = useAtom(didAtom);\n\n useEffect(() => {\n if (did) {\n return;\n }\n connectCrypto\n .then((c) => c.did())\n .then((did) => setDid(did))\n .catch(console.error);\n });\n\n return did;\n}\n"],"names":["connectCrypto","ConnectCrypto","BrowserKeyStorage","useConnectCrypto","useMemo","data","didAtom","atom","useConnectDid","did","setDid","useAtom","useEffect","c"],"mappings":";;;;AAOA,MAAMA,KAAiB,YAAY;AACjC,QAAMA,IAAgB,IAAIC,EAAc,IAAIC,GAAmB;AAC/D,eAAMF,EAAc,IAAI,GACjBA;AACT,GAAG;AAEI,SAASG,IAAmC;AAC1C,SAAAC;AAAA,IACL,OAAO;AAAA,MACL,MAAM,gBAAgB;AAEpB,gBADe,MAAMJ,GACP,cAAc;AAAA,MAC9B;AAAA,MACA,MAAM,MAAM;AAEV,gBADe,MAAMA,GACP,IAAI;AAAA,MACpB;AAAA,MACA,MAAM,OAAOK,MAEJ,OADQ,MAAML,GACD,KAAKK,CAAI;AAAA,IAC/B;AAAA,IAEF,CAAA;AAAA,EACF;AACF;AAEA,MAAMC,IAAUC,EAAsB,MAAS;AAExC,SAASC,IAAiC;AAC/C,QAAM,CAACC,GAAKC,CAAM,IAAIC,EAAQL,CAAO;AAErC,SAAAM,EAAU,MAAM;AACd,IAAIH,KAGJT,EACG,KAAK,CAACa,MAAMA,EAAE,IAAK,CAAA,EACnB,KAAK,CAACJ,MAAQC,EAAOD,CAAG,CAAC,EACzB,MAAM,QAAQ,KAAK;AAAA,EAAA,CACvB,GAEMA;AACT;"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { useState as f, useCallback as h, useEffect as s } from "react";
|
|
2
|
-
function p(e, i = {}) {
|
|
3
|
-
const { documentId: t, documentType: o, driveId: n } = i, [m, r] = f(), u = h(
|
|
4
|
-
(c) => {
|
|
5
|
-
if (!e)
|
|
6
|
-
throw new Error("Reactor is not loaded");
|
|
7
|
-
return e.on("strandUpdate", c);
|
|
8
|
-
},
|
|
9
|
-
[e]
|
|
10
|
-
);
|
|
11
|
-
return s(() => {
|
|
12
|
-
e && (!n || !t || !o || e.getDocument(n, t).then(r).catch(console.error));
|
|
13
|
-
}, [n, t, o, e]), s(() => !e || !n || !t || !o ? void 0 : u((d) => {
|
|
14
|
-
d.driveId === n && d.documentId === t && e.getDocument(n, t).then(r).catch(console.error);
|
|
15
|
-
}), [u, n, t, o]), m;
|
|
16
|
-
}
|
|
17
|
-
export {
|
|
18
|
-
p as useDocument
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=useDocument.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDocument.js","sources":["../../src/hooks/useDocument.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { Document } from \"document-model/document\";\nimport { IDocumentDriveServer, StrandUpdate } from \"document-drive/server\";\n\nexport type DocumentMeta = {\n driveId?: string;\n documentId?: string;\n documentType?: string;\n};\n\nexport function useDocument(\n reactor: IDocumentDriveServer | undefined,\n documentMeta: DocumentMeta = {},\n) {\n const { documentId, documentType, driveId } = documentMeta;\n\n const [document, setDocument] = useState<Document | undefined>();\n\n const onStrandUpdate = useCallback(\n (cb: (update: StrandUpdate) => void) => {\n if (!reactor) {\n throw new Error(\"Reactor is not loaded\");\n }\n return reactor.on(\"strandUpdate\", cb);\n },\n [reactor],\n );\n\n useEffect(() => {\n if (!reactor) return;\n if (!driveId || !documentId || !documentType) return;\n\n reactor\n .getDocument(driveId, documentId)\n .then(setDocument)\n .catch(console.error);\n }, [driveId, documentId, documentType, reactor]);\n\n useEffect(() => {\n if (!reactor) return;\n if (!driveId || !documentId || !documentType) return;\n\n const removeListener = onStrandUpdate((strand) => {\n if (strand.driveId === driveId && strand.documentId === documentId) {\n reactor\n .getDocument(driveId, documentId)\n .then(setDocument)\n .catch(console.error);\n }\n });\n\n return removeListener;\n }, [onStrandUpdate, driveId, documentId, documentType]);\n\n return document;\n}\n"],"names":["useDocument","reactor","documentMeta","documentId","documentType","driveId","document","setDocument","useState","onStrandUpdate","useCallback","cb","useEffect","strand"],"mappings":";AAUO,SAASA,EACdC,GACAC,IAA6B,IAC7B;AACA,QAAM,EAAE,YAAAC,GAAY,cAAAC,GAAc,SAAAC,EAAY,IAAAH,GAExC,CAACI,GAAUC,CAAW,IAAIC,EAA+B,GAEzDC,IAAiBC;AAAA,IACrB,CAACC,MAAuC;AACtC,UAAI,CAACV;AACG,cAAA,IAAI,MAAM,uBAAuB;AAElC,aAAAA,EAAQ,GAAG,gBAAgBU,CAAE;AAAA,IACtC;AAAA,IACA,CAACV,CAAO;AAAA,EACV;AAEA,SAAAW,EAAU,MAAM;AACd,IAAKX,MACD,CAACI,KAAW,CAACF,KAAc,CAACC,KAG7BH,EAAA,YAAYI,GAASF,CAAU,EAC/B,KAAKI,CAAW,EAChB,MAAM,QAAQ,KAAK;AAAA,KACrB,CAACF,GAASF,GAAYC,GAAcH,CAAO,CAAC,GAE/CW,EAAU,MACJ,CAACX,KACD,CAACI,KAAW,CAACF,KAAc,CAACC,IAAc,SAEvBK,EAAe,CAACI,MAAW;AAChD,IAAIA,EAAO,YAAYR,KAAWQ,EAAO,eAAeV,KAEnDF,EAAA,YAAYI,GAASF,CAAU,EAC/B,KAAKI,CAAW,EAChB,MAAM,QAAQ,KAAK;AAAA,EACxB,CACD,GAGA,CAACE,GAAgBJ,GAASF,GAAYC,CAAY,CAAC,GAE/CE;AACT;"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { useState as S, useEffect as x } from "react";
|
|
2
|
-
function c(u, o, g = console.error) {
|
|
3
|
-
const [m, f] = S(o), [D, h] = S(), i = (s) => {
|
|
4
|
-
h(s), g(s);
|
|
5
|
-
};
|
|
6
|
-
return x(() => {
|
|
7
|
-
f(o);
|
|
8
|
-
}, [o]), [m, (s, r, e) => {
|
|
9
|
-
h(void 0), f((n) => {
|
|
10
|
-
if (!u || !n) return n;
|
|
11
|
-
try {
|
|
12
|
-
const t = u(n, s), v = s.scope ?? "global", d = t.operations[v], p = d[d.length - 1];
|
|
13
|
-
if (p.error) {
|
|
14
|
-
const w = new Error(p.error);
|
|
15
|
-
i(w), e == null || e(w);
|
|
16
|
-
}
|
|
17
|
-
return r == null || r(p, {
|
|
18
|
-
prevState: { ...n },
|
|
19
|
-
newState: { ...t }
|
|
20
|
-
}), t;
|
|
21
|
-
} catch (t) {
|
|
22
|
-
return i(t), e == null || e(t), n;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
}, D];
|
|
26
|
-
}
|
|
27
|
-
export {
|
|
28
|
-
c as useDocumentDispatch
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=useDocumentDispatch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDocumentDispatch.js","sources":["../../src/hooks/useDocumentDispatch.ts"],"sourcesContent":["import type {\n Action,\n ActionErrorCallback,\n BaseAction,\n Document,\n Operation,\n Reducer,\n} from \"document-model/document\";\nimport { useEffect, useState } from \"react\";\n\nexport type DocumentDispatchCallback<State, A extends Action, LocalState> = (\n operation: Operation,\n state: {\n prevState: Document<State, A, LocalState>;\n newState: Document<State, A, LocalState>;\n },\n) => void;\n\nexport type DocumentDispatch<State, A extends Action, LocalState> = (\n action: A | BaseAction,\n callback?: DocumentDispatchCallback<State, A, LocalState>,\n onErrorCallback?: ActionErrorCallback,\n) => void;\n\ntype OnErrorHandler = (error: unknown) => void;\n\nexport function useDocumentDispatch<State, A extends Action, LocalState>(\n documentReducer: Reducer<State, A, LocalState> | undefined,\n initialState: Document<State, A, LocalState> | undefined,\n onError: OnErrorHandler = console.error,\n): readonly [\n Document<State, A, LocalState> | undefined,\n DocumentDispatch<State, A, LocalState>,\n unknown,\n] {\n const [state, setState] = useState(initialState);\n const [error, setError] = useState<unknown>();\n\n const onErrorHandler: OnErrorHandler = (error) => {\n setError(error);\n onError(error);\n };\n\n useEffect(() => {\n setState(initialState);\n }, [initialState]);\n\n const dispatch: DocumentDispatch<State, A, LocalState> = (\n action,\n callback,\n onErrorCallback?: ActionErrorCallback,\n ) => {\n setError(undefined);\n setState((_state) => {\n if (!documentReducer || !_state) return _state;\n\n try {\n const newState = documentReducer(_state, action);\n const scope = action.scope ?? \"global\";\n const operations = newState.operations[scope];\n const operation = operations[operations.length - 1];\n\n if (operation.error) {\n const error = new Error(operation.error);\n\n onErrorHandler(error);\n onErrorCallback?.(error);\n }\n\n callback?.(operation, {\n prevState: { ..._state },\n newState: { ...newState },\n });\n\n return newState;\n } catch (error) {\n onErrorHandler(error);\n onErrorCallback?.(error);\n return _state;\n }\n });\n };\n\n return [state, dispatch, error] as const;\n}\n"],"names":["useDocumentDispatch","documentReducer","initialState","onError","state","setState","useState","error","setError","onErrorHandler","useEffect","action","callback","onErrorCallback","_state","newState","scope","operations","operation"],"mappings":";AA0BO,SAASA,EACdC,GACAC,GACAC,IAA0B,QAAQ,OAKlC;AACA,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAASJ,CAAY,GACzC,CAACK,GAAOC,CAAQ,IAAIF,EAAkB,GAEtCG,IAAiC,CAACF,MAAU;AAChD,IAAAC,EAASD,CAAK,GACdJ,EAAQI,CAAK;AAAA,EACf;AAEA,SAAAG,EAAU,MAAM;AACd,IAAAL,EAASH,CAAY;AAAA,EAAA,GACpB,CAACA,CAAY,CAAC,GAsCV,CAACE,GApCiD,CACvDO,GACAC,GACAC,MACG;AACH,IAAAL,EAAS,MAAS,GAClBH,EAAS,CAACS,MAAW;AACnB,UAAI,CAACb,KAAmB,CAACa,EAAe,QAAAA;AAEpC,UAAA;AACI,cAAAC,IAAWd,EAAgBa,GAAQH,CAAM,GACzCK,IAAQL,EAAO,SAAS,UACxBM,IAAaF,EAAS,WAAWC,CAAK,GACtCE,IAAYD,EAAWA,EAAW,SAAS,CAAC;AAElD,YAAIC,EAAU,OAAO;AACnB,gBAAMX,IAAQ,IAAI,MAAMW,EAAU,KAAK;AAEvC,UAAAT,EAAeF,CAAK,GACpBM,KAAA,QAAAA,EAAkBN;AAAAA,QAAK;AAGzB,eAAAK,KAAA,QAAAA,EAAWM,GAAW;AAAA,UACpB,WAAW,EAAE,GAAGJ,EAAO;AAAA,UACvB,UAAU,EAAE,GAAGC,EAAS;AAAA,QAAA,IAGnBA;AAAA,eACAR,GAAO;AACd,eAAAE,EAAeF,CAAK,GACpBM,KAAA,QAAAA,EAAkBN,IACXO;AAAA,MAAA;AAAA,IACT,CACD;AAAA,EACH,GAEyBP,CAAK;AAChC;"}
|