@graffiti-garden/implementation-local 0.6.4 → 1.0.1

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.
Files changed (67) hide show
  1. package/README.md +0 -1
  2. package/dist/browser/ajv-IY2ZY7VT.js +9 -0
  3. package/dist/browser/ajv-IY2ZY7VT.js.map +7 -0
  4. package/dist/browser/{chunk-KNUPPOQC.js → chunk-GE6AZATH.js} +2 -2
  5. package/dist/browser/{chunk-KNUPPOQC.js.map → chunk-GE6AZATH.js.map} +1 -1
  6. package/dist/browser/{index-browser.es-G37SKL53.js → index-browser.es-UXYPGJ2M.js} +2 -2
  7. package/dist/browser/{index-browser.es-G37SKL53.js.map → index-browser.es-UXYPGJ2M.js.map} +1 -1
  8. package/dist/browser/index.js +11 -2
  9. package/dist/browser/index.js.map +4 -4
  10. package/dist/cjs/identity.js +112 -0
  11. package/dist/cjs/identity.js.map +7 -0
  12. package/dist/cjs/index.js +43 -22
  13. package/dist/cjs/index.js.map +2 -2
  14. package/dist/cjs/media.js +111 -0
  15. package/dist/cjs/media.js.map +7 -0
  16. package/dist/cjs/objects.js +307 -0
  17. package/dist/cjs/objects.js.map +7 -0
  18. package/dist/cjs/tests.spec.js +1 -2
  19. package/dist/cjs/tests.spec.js.map +2 -2
  20. package/dist/cjs/utilities.js +68 -43
  21. package/dist/cjs/utilities.js.map +2 -2
  22. package/dist/esm/identity.js +92 -0
  23. package/dist/esm/identity.js.map +7 -0
  24. package/dist/esm/index.js +43 -24
  25. package/dist/esm/index.js.map +2 -2
  26. package/dist/esm/media.js +91 -0
  27. package/dist/esm/media.js.map +7 -0
  28. package/dist/esm/objects.js +285 -0
  29. package/dist/esm/objects.js.map +7 -0
  30. package/dist/esm/tests.spec.js +2 -4
  31. package/dist/esm/tests.spec.js.map +2 -2
  32. package/dist/esm/utilities.js +69 -48
  33. package/dist/esm/utilities.js.map +2 -2
  34. package/dist/{session-manager.d.ts → identity.d.ts} +7 -5
  35. package/dist/identity.d.ts.map +1 -0
  36. package/dist/index.d.ts +15 -13
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/media.d.ts +9 -0
  39. package/dist/media.d.ts.map +1 -0
  40. package/dist/objects.d.ts +63 -0
  41. package/dist/objects.d.ts.map +1 -0
  42. package/dist/utilities.d.ts +19 -8
  43. package/dist/utilities.d.ts.map +1 -1
  44. package/package.json +31 -19
  45. package/src/identity.ts +131 -0
  46. package/src/index.ts +44 -29
  47. package/src/media.ts +106 -0
  48. package/src/objects.ts +432 -0
  49. package/src/tests.spec.ts +2 -4
  50. package/src/utilities.ts +67 -87
  51. package/dist/browser/ajv-6AI3HK2A.js +0 -9
  52. package/dist/browser/ajv-6AI3HK2A.js.map +0 -7
  53. package/dist/browser/fast-json-patch-ZE7SZEYK.js +0 -19
  54. package/dist/browser/fast-json-patch-ZE7SZEYK.js.map +0 -7
  55. package/dist/cjs/database.js +0 -626
  56. package/dist/cjs/database.js.map +0 -7
  57. package/dist/cjs/session-manager.js +0 -107
  58. package/dist/cjs/session-manager.js.map +0 -7
  59. package/dist/database.d.ts +0 -106
  60. package/dist/database.d.ts.map +0 -1
  61. package/dist/esm/database.js +0 -608
  62. package/dist/esm/database.js.map +0 -7
  63. package/dist/esm/session-manager.js +0 -87
  64. package/dist/esm/session-manager.js.map +0 -7
  65. package/dist/session-manager.d.ts.map +0 -1
  66. package/src/database.ts +0 -921
  67. package/src/session-manager.ts +0 -123
@@ -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
- }