@graffiti-garden/implementation-local 0.6.3 → 1.0.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/README.md +0 -1
- package/dist/browser/ajv-IY2ZY7VT.js +9 -0
- package/dist/browser/ajv-IY2ZY7VT.js.map +7 -0
- package/dist/browser/{chunk-KNUPPOQC.js → chunk-GE6AZATH.js} +2 -2
- package/dist/browser/{chunk-KNUPPOQC.js.map → chunk-GE6AZATH.js.map} +1 -1
- package/dist/browser/{index-browser.es-G37SKL53.js → index-browser.es-UXYPGJ2M.js} +2 -2
- package/dist/browser/{index-browser.es-G37SKL53.js.map → index-browser.es-UXYPGJ2M.js.map} +1 -1
- package/dist/browser/index.js +11 -2
- package/dist/browser/index.js.map +4 -4
- package/dist/cjs/identity.js +112 -0
- package/dist/cjs/identity.js.map +7 -0
- package/dist/cjs/index.js +43 -22
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/media.js +111 -0
- package/dist/cjs/media.js.map +7 -0
- package/dist/cjs/objects.js +307 -0
- package/dist/cjs/objects.js.map +7 -0
- package/dist/cjs/tests.spec.js +1 -2
- package/dist/cjs/tests.spec.js.map +2 -2
- package/dist/cjs/utilities.js +68 -43
- package/dist/cjs/utilities.js.map +2 -2
- package/dist/esm/identity.js +92 -0
- package/dist/esm/identity.js.map +7 -0
- package/dist/esm/index.js +43 -24
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/media.js +91 -0
- package/dist/esm/media.js.map +7 -0
- package/dist/esm/objects.js +285 -0
- package/dist/esm/objects.js.map +7 -0
- package/dist/esm/tests.spec.js +2 -4
- package/dist/esm/tests.spec.js.map +2 -2
- package/dist/esm/utilities.js +69 -48
- package/dist/esm/utilities.js.map +2 -2
- package/dist/{session-manager.d.ts → identity.d.ts} +7 -5
- package/dist/identity.d.ts.map +1 -0
- package/dist/index.d.ts +15 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/media.d.ts +9 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/objects.d.ts +63 -0
- package/dist/objects.d.ts.map +1 -0
- package/dist/utilities.d.ts +19 -8
- package/dist/utilities.d.ts.map +1 -1
- package/package.json +31 -19
- package/src/identity.ts +131 -0
- package/src/index.ts +44 -29
- package/src/media.ts +106 -0
- package/src/objects.ts +431 -0
- package/src/tests.spec.ts +2 -4
- package/src/utilities.ts +67 -87
- package/dist/browser/ajv-6AI3HK2A.js +0 -9
- package/dist/browser/ajv-6AI3HK2A.js.map +0 -7
- package/dist/browser/fast-json-patch-ZE7SZEYK.js +0 -19
- package/dist/browser/fast-json-patch-ZE7SZEYK.js.map +0 -7
- package/dist/cjs/database.js +0 -621
- package/dist/cjs/database.js.map +0 -7
- package/dist/cjs/session-manager.js +0 -107
- package/dist/cjs/session-manager.js.map +0 -7
- package/dist/database.d.ts +0 -105
- package/dist/database.d.ts.map +0 -1
- package/dist/esm/database.js +0 -603
- package/dist/esm/database.js.map +0 -7
- package/dist/esm/session-manager.js +0 -87
- package/dist/esm/session-manager.js.map +0 -7
- package/dist/session-manager.d.ts.map +0 -1
- package/src/database.ts +0 -911
- package/src/session-manager.ts +0 -123
package/src/session-manager.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
Graffiti,
|
|
3
|
-
GraffitiLoginEvent,
|
|
4
|
-
GraffitiLogoutEvent,
|
|
5
|
-
GraffitiSessionInitializedEvent,
|
|
6
|
-
} from "@graffiti-garden/api";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* A class that implements the login methods
|
|
10
|
-
* of the [Graffiti API]() for use in the browser.
|
|
11
|
-
* It is completely insecure and should only be used
|
|
12
|
-
* for testing and demonstrations.
|
|
13
|
-
*
|
|
14
|
-
* It uses `localStorage` to store login state and
|
|
15
|
-
* window prompts rather than an oauth flow for log in.
|
|
16
|
-
* It can be used in node.js but will not persist
|
|
17
|
-
* login state and a proposed username must be provided.
|
|
18
|
-
*/
|
|
19
|
-
export class GraffitiLocalSessionManager {
|
|
20
|
-
sessionEvents: Graffiti["sessionEvents"] = new EventTarget();
|
|
21
|
-
|
|
22
|
-
constructor() {
|
|
23
|
-
// Look for any existing sessions
|
|
24
|
-
const sessionRestorer = async () => {
|
|
25
|
-
// Allow listeners to be added first
|
|
26
|
-
await Promise.resolve();
|
|
27
|
-
|
|
28
|
-
// Restore previous sessions
|
|
29
|
-
for (const actor of this.getLoggedInActors()) {
|
|
30
|
-
const event: GraffitiLoginEvent = new CustomEvent("login", {
|
|
31
|
-
detail: { session: { actor } },
|
|
32
|
-
});
|
|
33
|
-
this.sessionEvents.dispatchEvent(event);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const event: GraffitiSessionInitializedEvent = new CustomEvent(
|
|
37
|
-
"initialized",
|
|
38
|
-
{ detail: {} },
|
|
39
|
-
);
|
|
40
|
-
this.sessionEvents.dispatchEvent(event);
|
|
41
|
-
};
|
|
42
|
-
sessionRestorer();
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
loggedInActors: string[] = [];
|
|
46
|
-
|
|
47
|
-
protected getLoggedInActors(): string[] {
|
|
48
|
-
if (typeof window !== "undefined") {
|
|
49
|
-
const actorsString = window.localStorage.getItem("graffiti-actor");
|
|
50
|
-
return actorsString
|
|
51
|
-
? actorsString.split(",").map(decodeURIComponent)
|
|
52
|
-
: [];
|
|
53
|
-
} else {
|
|
54
|
-
return this.loggedInActors;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
protected setLoggedInActors(actors: string[]) {
|
|
59
|
-
if (typeof window !== "undefined") {
|
|
60
|
-
window.localStorage.setItem(
|
|
61
|
-
"graffiti-actor",
|
|
62
|
-
actors.map(encodeURIComponent).join(","),
|
|
63
|
-
);
|
|
64
|
-
} else {
|
|
65
|
-
this.loggedInActors = actors;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
login: Graffiti["login"] = async (proposal) => {
|
|
70
|
-
let actor = proposal?.actor;
|
|
71
|
-
if (!actor && typeof window !== "undefined") {
|
|
72
|
-
const response = window.prompt(
|
|
73
|
-
`This is an insecure implementation of the Graffiti API \
|
|
74
|
-
for *demo purposes only*. Do not store any sensitive information \
|
|
75
|
-
here.\
|
|
76
|
-
\n\n\
|
|
77
|
-
Simply choose a username to log in.`,
|
|
78
|
-
);
|
|
79
|
-
if (response) actor = response;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
let detail: GraffitiLoginEvent["detail"];
|
|
83
|
-
if (!actor) {
|
|
84
|
-
detail = {
|
|
85
|
-
error: new Error("No actor ID provided to login"),
|
|
86
|
-
};
|
|
87
|
-
} else {
|
|
88
|
-
const existingActors = this.getLoggedInActors();
|
|
89
|
-
if (!existingActors.includes(actor)) {
|
|
90
|
-
this.setLoggedInActors([...existingActors, actor]);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
detail = {
|
|
94
|
-
session: { actor },
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const event: GraffitiLoginEvent = new CustomEvent("login", { detail });
|
|
99
|
-
this.sessionEvents.dispatchEvent(event);
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
logout: Graffiti["logout"] = async (session) => {
|
|
103
|
-
const existingActors = this.getLoggedInActors();
|
|
104
|
-
const exists = existingActors.includes(session.actor);
|
|
105
|
-
if (exists) {
|
|
106
|
-
this.setLoggedInActors(
|
|
107
|
-
existingActors.filter((actor) => actor !== session.actor),
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const detail: GraffitiLogoutEvent["detail"] = exists
|
|
112
|
-
? {
|
|
113
|
-
actor: session.actor,
|
|
114
|
-
}
|
|
115
|
-
: {
|
|
116
|
-
actor: session.actor,
|
|
117
|
-
error: new Error("Not logged in with that actor"),
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
const event: GraffitiLogoutEvent = new CustomEvent("logout", { detail });
|
|
121
|
-
this.sessionEvents.dispatchEvent(event);
|
|
122
|
-
};
|
|
123
|
-
}
|