oidc-spa 8.2.0 → 8.2.2

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 (84) hide show
  1. package/core/AuthResponse.d.ts +0 -5
  2. package/core/AuthResponse.js +0 -25
  3. package/core/AuthResponse.js.map +1 -1
  4. package/core/OidcMetadata.d.ts +5 -0
  5. package/core/OidcMetadata.js +56 -0
  6. package/core/OidcMetadata.js.map +1 -1
  7. package/core/createOidc.d.ts +4 -3
  8. package/core/createOidc.js +229 -197
  9. package/core/createOidc.js.map +1 -1
  10. package/core/diagnostic.d.ts +0 -1
  11. package/core/diagnostic.js +18 -5
  12. package/core/diagnostic.js.map +1 -1
  13. package/core/instancesThatCantUseIframes.d.ts +2 -0
  14. package/core/instancesThatCantUseIframes.js +20 -0
  15. package/core/instancesThatCantUseIframes.js.map +1 -0
  16. package/core/loginOrGoToAuthServer.d.ts +1 -1
  17. package/core/loginOrGoToAuthServer.js +4 -16
  18. package/core/loginOrGoToAuthServer.js.map +1 -1
  19. package/core/loginSilent.d.ts +1 -2
  20. package/core/loginSilent.js +3 -21
  21. package/core/loginSilent.js.map +1 -1
  22. package/core/persistedAuthState.d.ts +1 -0
  23. package/core/persistedAuthState.js +14 -4
  24. package/core/persistedAuthState.js.map +1 -1
  25. package/esm/core/AuthResponse.d.ts +0 -5
  26. package/esm/core/AuthResponse.js +0 -23
  27. package/esm/core/AuthResponse.js.map +1 -1
  28. package/esm/core/OidcMetadata.d.ts +5 -0
  29. package/esm/core/OidcMetadata.js +54 -0
  30. package/esm/core/OidcMetadata.js.map +1 -1
  31. package/esm/core/createOidc.d.ts +4 -3
  32. package/esm/core/createOidc.js +230 -198
  33. package/esm/core/createOidc.js.map +1 -1
  34. package/esm/core/diagnostic.d.ts +0 -1
  35. package/esm/core/diagnostic.js +15 -1
  36. package/esm/core/diagnostic.js.map +1 -1
  37. package/esm/core/instancesThatCantUseIframes.d.ts +2 -0
  38. package/esm/core/instancesThatCantUseIframes.js +16 -0
  39. package/esm/core/instancesThatCantUseIframes.js.map +1 -0
  40. package/esm/core/loginOrGoToAuthServer.d.ts +1 -1
  41. package/esm/core/loginOrGoToAuthServer.js +4 -16
  42. package/esm/core/loginOrGoToAuthServer.js.map +1 -1
  43. package/esm/core/loginSilent.d.ts +1 -2
  44. package/esm/core/loginSilent.js +3 -21
  45. package/esm/core/loginSilent.js.map +1 -1
  46. package/esm/core/persistedAuthState.d.ts +1 -0
  47. package/esm/core/persistedAuthState.js +14 -4
  48. package/esm/core/persistedAuthState.js.map +1 -1
  49. package/esm/keycloak/keycloakIssuerUriParsed.js +8 -1
  50. package/esm/keycloak/keycloakIssuerUriParsed.js.map +1 -1
  51. package/esm/tools/isLikelyDevServer.d.ts +1 -0
  52. package/esm/tools/isLikelyDevServer.js +14 -0
  53. package/esm/tools/isLikelyDevServer.js.map +1 -0
  54. package/esm/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +2 -4
  55. package/esm/tools/lazySessionStorage.js +81 -0
  56. package/esm/tools/lazySessionStorage.js.map +1 -0
  57. package/keycloak/keycloakIssuerUriParsed.js +8 -1
  58. package/keycloak/keycloakIssuerUriParsed.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/core/AuthResponse.ts +0 -36
  61. package/src/core/OidcMetadata.ts +75 -0
  62. package/src/core/createOidc.ts +277 -264
  63. package/src/core/diagnostic.ts +21 -2
  64. package/src/core/instancesThatCantUseIframes.ts +24 -0
  65. package/src/core/loginOrGoToAuthServer.ts +5 -22
  66. package/src/core/loginSilent.ts +4 -27
  67. package/src/core/persistedAuthState.ts +27 -5
  68. package/src/keycloak/keycloakIssuerUriParsed.ts +10 -1
  69. package/src/tools/isLikelyDevServer.ts +17 -0
  70. package/src/tools/lazySessionStorage.ts +119 -0
  71. package/src/vite-plugin/manageOptimizedDeps.ts +2 -0
  72. package/tools/isLikelyDevServer.d.ts +1 -0
  73. package/tools/isLikelyDevServer.js +17 -0
  74. package/tools/isLikelyDevServer.js.map +1 -0
  75. package/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +2 -4
  76. package/tools/lazySessionStorage.js +84 -0
  77. package/tools/lazySessionStorage.js.map +1 -0
  78. package/vite-plugin/manageOptimizedDeps.js +1 -0
  79. package/vite-plugin/manageOptimizedDeps.js.map +1 -1
  80. package/esm/tools/EphemeralSessionStorage.js +0 -143
  81. package/esm/tools/EphemeralSessionStorage.js.map +0 -1
  82. package/src/tools/EphemeralSessionStorage.ts +0 -225
  83. package/tools/EphemeralSessionStorage.js +0 -146
  84. package/tools/EphemeralSessionStorage.js.map +0 -1
@@ -1,143 +0,0 @@
1
- import { assert } from "../tools/tsafe/assert";
2
- import { id } from "../tools/tsafe/id";
3
- import { typeGuard } from "../tools/tsafe/typeGuard";
4
- function parseSessionStorageItem(sessionStorageItemValue) {
5
- let json;
6
- try {
7
- json = JSON.parse(sessionStorageItemValue);
8
- }
9
- catch {
10
- return undefined;
11
- }
12
- if (!typeGuard(json, json instanceof Object &&
13
- "__brand" in json &&
14
- json.__brand === id("SessionStorageItem_Parsed-v1"))) {
15
- return undefined;
16
- }
17
- return json;
18
- }
19
- const SESSION_STORAGE_PREFIX = "ephemeral:";
20
- function createStoreInSessionStorageAndScheduleRemovalInMemoryItem(params) {
21
- const { key, value, remainingTtlMs } = params;
22
- const sessionStorageKey = `${SESSION_STORAGE_PREFIX}${key}`;
23
- const removeFromSessionStorage = () => {
24
- inMemoryItem.removeFromSessionStorage = undefined;
25
- clearTimeout(timer);
26
- sessionStorage.removeItem(sessionStorageKey);
27
- };
28
- const timer = setTimeout(() => removeFromSessionStorage(), remainingTtlMs);
29
- const inMemoryItem = {
30
- key,
31
- value,
32
- removeFromSessionStorage
33
- };
34
- sessionStorage.removeItem(sessionStorageKey);
35
- sessionStorage.setItem(sessionStorageKey, JSON.stringify(id({
36
- __brand: "SessionStorageItem_Parsed-v1",
37
- value,
38
- expiresAtTime: Date.now() + remainingTtlMs
39
- })));
40
- return inMemoryItem;
41
- }
42
- export function createEphemeralSessionStorage(params) {
43
- const { sessionStorageTtlMs } = params;
44
- const inMemoryItems = [];
45
- for (let i = 0; i < sessionStorage.length; i++) {
46
- const sessionStorageKey = sessionStorage.key(i);
47
- assert(sessionStorageKey !== null, "470498");
48
- if (!sessionStorageKey.startsWith(SESSION_STORAGE_PREFIX)) {
49
- continue;
50
- }
51
- const sessionStorageItem = sessionStorage.getItem(sessionStorageKey);
52
- assert(sessionStorageItem !== null, "846771");
53
- const sessionStorageItem_parsed = parseSessionStorageItem(sessionStorageItem);
54
- if (sessionStorageItem_parsed === undefined) {
55
- continue;
56
- }
57
- const remainingTtlMs = sessionStorageItem_parsed.expiresAtTime - Date.now();
58
- sessionStorage.removeItem(sessionStorageKey);
59
- if (remainingTtlMs <= 0) {
60
- continue;
61
- }
62
- inMemoryItems.push({
63
- key: sessionStorageKey.slice(SESSION_STORAGE_PREFIX.length),
64
- value: sessionStorageItem_parsed.value,
65
- removeFromSessionStorage: undefined
66
- });
67
- }
68
- let isPersistenceEnabled = false;
69
- const storage = {
70
- persistCurrentStateAndSubsequentChanges: () => {
71
- isPersistenceEnabled = true;
72
- for (let i = 0; i < storage.length; i++) {
73
- const key = storage.key(i);
74
- assert(key !== null, "803385");
75
- const value = storage.getItem(key);
76
- assert(value !== null, "777098");
77
- storage.setItem(key, value);
78
- }
79
- },
80
- get length() {
81
- return inMemoryItems.length;
82
- },
83
- key: index => {
84
- const inMemoryItem = inMemoryItems[index];
85
- if (inMemoryItem === undefined) {
86
- return null;
87
- }
88
- return inMemoryItem.key;
89
- },
90
- removeItem: key => {
91
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
92
- if (inMemoryItem === undefined) {
93
- return;
94
- }
95
- inMemoryItem.removeFromSessionStorage?.();
96
- const index = inMemoryItems.indexOf(inMemoryItem);
97
- inMemoryItems.splice(index, 1);
98
- },
99
- clear: () => {
100
- for (let i = 0; i < storage.length; i++) {
101
- const key = storage.key(i);
102
- assert(key !== null, "290875");
103
- storage.removeItem(key);
104
- }
105
- },
106
- getItem: key => {
107
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
108
- if (inMemoryItem === undefined) {
109
- return null;
110
- }
111
- return inMemoryItem.value;
112
- },
113
- setItem: (key, value) => {
114
- let existingInMemoryItemIndex = undefined;
115
- {
116
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
117
- if (inMemoryItem !== undefined) {
118
- inMemoryItem.removeFromSessionStorage?.();
119
- existingInMemoryItemIndex = inMemoryItems.indexOf(inMemoryItem);
120
- }
121
- }
122
- const inMemoryItem_new = isPersistenceEnabled
123
- ? createStoreInSessionStorageAndScheduleRemovalInMemoryItem({
124
- key,
125
- value,
126
- remainingTtlMs: sessionStorageTtlMs
127
- })
128
- : id({
129
- key,
130
- value,
131
- removeFromSessionStorage: undefined
132
- });
133
- if (existingInMemoryItemIndex !== undefined) {
134
- inMemoryItems[existingInMemoryItemIndex] = inMemoryItem_new;
135
- }
136
- else {
137
- inMemoryItems.push(inMemoryItem_new);
138
- }
139
- }
140
- };
141
- return storage;
142
- }
143
- //# sourceMappingURL=EphemeralSessionStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EphemeralSessionStorage.js","sourceRoot":"","sources":["../../src/tools/EphemeralSessionStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAQrD,SAAS,uBAAuB,CAC5B,uBAA+B;IAE/B,IAAI,IAAa,CAAC;IAElB,IAAI,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IACI,CAAC,SAAS,CACN,IAAI,EACJ,IAAI,YAAY,MAAM;QAClB,SAAS,IAAI,IAAI;QACjB,IAAI,CAAC,OAAO,KAAK,EAAE,CAAuC,8BAA8B,CAAC,CAChG,EACH,CAAC;QACC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAQD,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAE5C,SAAS,yDAAyD,CAAC,MAIlE;IACG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAE9C,MAAM,iBAAiB,GAAG,GAAG,sBAAsB,GAAG,GAAG,EAAE,CAAC;IAE5D,MAAM,wBAAwB,GAAG,GAAG,EAAE;QAClC,YAAY,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAClD,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,wBAAwB,EAAE,EAAE,cAAc,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAiB;QAC/B,GAAG;QACH,KAAK;QACL,wBAAwB;KAC3B,CAAC;IAEF,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAE7C,cAAc,CAAC,OAAO,CAClB,iBAAiB,EACjB,IAAI,CAAC,SAAS,CACV,EAAE,CAA4B;QAC1B,OAAO,EAAE,8BAA8B;QACvC,KAAK;QACL,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc;KAC7C,CAAC,CACL,CACJ,CAAC;IAEF,OAAO,YAAY,CAAC;AACxB,CAAC;AAeD,MAAM,UAAU,6BAA6B,CAAC,MAE7C;IACG,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;IAEvC,MAAM,aAAa,GAAmB,EAAE,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,iBAAiB,KAAK,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE7C,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACxD,SAAS;QACb,CAAC;QAED,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAErE,MAAM,CAAC,kBAAkB,KAAK,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE9C,MAAM,yBAAyB,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAE9E,IAAI,yBAAyB,KAAK,SAAS,EAAE,CAAC;YAC1C,SAAS;QACb,CAAC;QAED,MAAM,cAAc,GAAG,yBAAyB,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5E,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAE7C,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QAED,aAAa,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC;YAC3D,KAAK,EAAE,yBAAyB,CAAC,KAAK;YACtC,wBAAwB,EAAE,SAAS;SACtC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,oBAAoB,GAAG,KAAK,CAAC;IAEjC,MAAM,OAAO,GAA4B;QACrC,uCAAuC,EAAE,GAAG,EAAE;YAC1C,oBAAoB,GAAG,IAAI,CAAC;YAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAEnC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAEjC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;QACD,IAAI,MAAM;YACN,OAAO,aAAa,CAAC,MAAM,CAAC;QAChC,CAAC;QACD,GAAG,EAAE,KAAK,CAAC,EAAE;YACT,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,OAAO,YAAY,CAAC,GAAG,CAAC;QAC5B,CAAC;QACD,UAAU,EAAE,GAAG,CAAC,EAAE;YACd,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAElE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO;YACX,CAAC;YAED,YAAY,CAAC,wBAAwB,EAAE,EAAE,CAAC;YAE1C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAElD,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC/B,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,EAAE;YACX,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAClE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,YAAY,CAAC,KAAK,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACpB,IAAI,yBAAyB,GAAuB,SAAS,CAAC;YAE9D,CAAC;gBACG,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;gBAElE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC7B,YAAY,CAAC,wBAAwB,EAAE,EAAE,CAAC;oBAC1C,yBAAyB,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBACpE,CAAC;YACL,CAAC;YAED,MAAM,gBAAgB,GAAG,oBAAoB;gBACzC,CAAC,CAAC,yDAAyD,CAAC;oBACtD,GAAG;oBACH,KAAK;oBACL,cAAc,EAAE,mBAAmB;iBACtC,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAe;oBACb,GAAG;oBACH,KAAK;oBACL,wBAAwB,EAAE,SAAS;iBACtC,CAAC,CAAC;YAET,IAAI,yBAAyB,KAAK,SAAS,EAAE,CAAC;gBAC1C,aAAa,CAAC,yBAAyB,CAAC,GAAG,gBAAgB,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACJ,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;KACJ,CAAC;IAEF,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,225 +0,0 @@
1
- import { assert } from "../tools/tsafe/assert";
2
- import { id } from "../tools/tsafe/id";
3
- import { typeGuard } from "../tools/tsafe/typeGuard";
4
-
5
- type SessionStorageItem_Parsed = {
6
- __brand: "SessionStorageItem_Parsed-v1";
7
- value: string;
8
- expiresAtTime: number;
9
- };
10
-
11
- function parseSessionStorageItem(
12
- sessionStorageItemValue: string
13
- ): SessionStorageItem_Parsed | undefined {
14
- let json: unknown;
15
-
16
- try {
17
- json = JSON.parse(sessionStorageItemValue);
18
- } catch {
19
- return undefined;
20
- }
21
-
22
- if (
23
- !typeGuard<SessionStorageItem_Parsed>(
24
- json,
25
- json instanceof Object &&
26
- "__brand" in json &&
27
- json.__brand === id<SessionStorageItem_Parsed["__brand"]>("SessionStorageItem_Parsed-v1")
28
- )
29
- ) {
30
- return undefined;
31
- }
32
-
33
- return json;
34
- }
35
-
36
- type InMemoryItem = {
37
- key: string;
38
- value: string;
39
- removeFromSessionStorage: (() => void) | undefined;
40
- };
41
-
42
- const SESSION_STORAGE_PREFIX = "ephemeral:";
43
-
44
- function createStoreInSessionStorageAndScheduleRemovalInMemoryItem(params: {
45
- key: string;
46
- value: string;
47
- remainingTtlMs: number;
48
- }): InMemoryItem {
49
- const { key, value, remainingTtlMs } = params;
50
-
51
- const sessionStorageKey = `${SESSION_STORAGE_PREFIX}${key}`;
52
-
53
- const removeFromSessionStorage = () => {
54
- inMemoryItem.removeFromSessionStorage = undefined;
55
- clearTimeout(timer);
56
- sessionStorage.removeItem(sessionStorageKey);
57
- };
58
-
59
- const timer = setTimeout(() => removeFromSessionStorage(), remainingTtlMs);
60
-
61
- const inMemoryItem: InMemoryItem = {
62
- key,
63
- value,
64
- removeFromSessionStorage
65
- };
66
-
67
- sessionStorage.removeItem(sessionStorageKey);
68
-
69
- sessionStorage.setItem(
70
- sessionStorageKey,
71
- JSON.stringify(
72
- id<SessionStorageItem_Parsed>({
73
- __brand: "SessionStorageItem_Parsed-v1",
74
- value,
75
- expiresAtTime: Date.now() + remainingTtlMs
76
- })
77
- )
78
- );
79
-
80
- return inMemoryItem;
81
- }
82
-
83
- export type EphemeralSessionStorage = {
84
- // `Storage` methods, we don't use the type directly because it has [name: string]: any;
85
- readonly length: number;
86
- clear(): void;
87
- getItem(key: string): string | null;
88
- key(index: number): string | null;
89
- removeItem(key: string): void;
90
- setItem(key: string, value: string): void;
91
-
92
- // Custom method
93
- persistCurrentStateAndSubsequentChanges: () => void;
94
- };
95
-
96
- export function createEphemeralSessionStorage(params: {
97
- sessionStorageTtlMs: number;
98
- }): EphemeralSessionStorage {
99
- const { sessionStorageTtlMs } = params;
100
-
101
- const inMemoryItems: InMemoryItem[] = [];
102
-
103
- for (let i = 0; i < sessionStorage.length; i++) {
104
- const sessionStorageKey = sessionStorage.key(i);
105
- assert(sessionStorageKey !== null, "470498");
106
-
107
- if (!sessionStorageKey.startsWith(SESSION_STORAGE_PREFIX)) {
108
- continue;
109
- }
110
-
111
- const sessionStorageItem = sessionStorage.getItem(sessionStorageKey);
112
-
113
- assert(sessionStorageItem !== null, "846771");
114
-
115
- const sessionStorageItem_parsed = parseSessionStorageItem(sessionStorageItem);
116
-
117
- if (sessionStorageItem_parsed === undefined) {
118
- continue;
119
- }
120
-
121
- const remainingTtlMs = sessionStorageItem_parsed.expiresAtTime - Date.now();
122
-
123
- sessionStorage.removeItem(sessionStorageKey);
124
-
125
- if (remainingTtlMs <= 0) {
126
- continue;
127
- }
128
-
129
- inMemoryItems.push({
130
- key: sessionStorageKey.slice(SESSION_STORAGE_PREFIX.length),
131
- value: sessionStorageItem_parsed.value,
132
- removeFromSessionStorage: undefined
133
- });
134
- }
135
-
136
- let isPersistenceEnabled = false;
137
-
138
- const storage: EphemeralSessionStorage = {
139
- persistCurrentStateAndSubsequentChanges: () => {
140
- isPersistenceEnabled = true;
141
-
142
- for (let i = 0; i < storage.length; i++) {
143
- const key = storage.key(i);
144
- assert(key !== null, "803385");
145
-
146
- const value = storage.getItem(key);
147
-
148
- assert(value !== null, "777098");
149
-
150
- storage.setItem(key, value);
151
- }
152
- },
153
- get length() {
154
- return inMemoryItems.length;
155
- },
156
- key: index => {
157
- const inMemoryItem = inMemoryItems[index];
158
-
159
- if (inMemoryItem === undefined) {
160
- return null;
161
- }
162
-
163
- return inMemoryItem.key;
164
- },
165
- removeItem: key => {
166
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
167
-
168
- if (inMemoryItem === undefined) {
169
- return;
170
- }
171
-
172
- inMemoryItem.removeFromSessionStorage?.();
173
-
174
- const index = inMemoryItems.indexOf(inMemoryItem);
175
-
176
- inMemoryItems.splice(index, 1);
177
- },
178
- clear: () => {
179
- for (let i = 0; i < storage.length; i++) {
180
- const key = storage.key(i);
181
- assert(key !== null, "290875");
182
- storage.removeItem(key);
183
- }
184
- },
185
- getItem: key => {
186
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
187
- if (inMemoryItem === undefined) {
188
- return null;
189
- }
190
- return inMemoryItem.value;
191
- },
192
- setItem: (key, value) => {
193
- let existingInMemoryItemIndex: number | undefined = undefined;
194
-
195
- {
196
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
197
-
198
- if (inMemoryItem !== undefined) {
199
- inMemoryItem.removeFromSessionStorage?.();
200
- existingInMemoryItemIndex = inMemoryItems.indexOf(inMemoryItem);
201
- }
202
- }
203
-
204
- const inMemoryItem_new = isPersistenceEnabled
205
- ? createStoreInSessionStorageAndScheduleRemovalInMemoryItem({
206
- key,
207
- value,
208
- remainingTtlMs: sessionStorageTtlMs
209
- })
210
- : id<InMemoryItem>({
211
- key,
212
- value,
213
- removeFromSessionStorage: undefined
214
- });
215
-
216
- if (existingInMemoryItemIndex !== undefined) {
217
- inMemoryItems[existingInMemoryItemIndex] = inMemoryItem_new;
218
- } else {
219
- inMemoryItems.push(inMemoryItem_new);
220
- }
221
- }
222
- };
223
-
224
- return storage;
225
- }
@@ -1,146 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEphemeralSessionStorage = createEphemeralSessionStorage;
4
- const assert_1 = require("../tools/tsafe/assert");
5
- const id_1 = require("../tools/tsafe/id");
6
- const typeGuard_1 = require("../tools/tsafe/typeGuard");
7
- function parseSessionStorageItem(sessionStorageItemValue) {
8
- let json;
9
- try {
10
- json = JSON.parse(sessionStorageItemValue);
11
- }
12
- catch {
13
- return undefined;
14
- }
15
- if (!(0, typeGuard_1.typeGuard)(json, json instanceof Object &&
16
- "__brand" in json &&
17
- json.__brand === (0, id_1.id)("SessionStorageItem_Parsed-v1"))) {
18
- return undefined;
19
- }
20
- return json;
21
- }
22
- const SESSION_STORAGE_PREFIX = "ephemeral:";
23
- function createStoreInSessionStorageAndScheduleRemovalInMemoryItem(params) {
24
- const { key, value, remainingTtlMs } = params;
25
- const sessionStorageKey = `${SESSION_STORAGE_PREFIX}${key}`;
26
- const removeFromSessionStorage = () => {
27
- inMemoryItem.removeFromSessionStorage = undefined;
28
- clearTimeout(timer);
29
- sessionStorage.removeItem(sessionStorageKey);
30
- };
31
- const timer = setTimeout(() => removeFromSessionStorage(), remainingTtlMs);
32
- const inMemoryItem = {
33
- key,
34
- value,
35
- removeFromSessionStorage
36
- };
37
- sessionStorage.removeItem(sessionStorageKey);
38
- sessionStorage.setItem(sessionStorageKey, JSON.stringify((0, id_1.id)({
39
- __brand: "SessionStorageItem_Parsed-v1",
40
- value,
41
- expiresAtTime: Date.now() + remainingTtlMs
42
- })));
43
- return inMemoryItem;
44
- }
45
- function createEphemeralSessionStorage(params) {
46
- const { sessionStorageTtlMs } = params;
47
- const inMemoryItems = [];
48
- for (let i = 0; i < sessionStorage.length; i++) {
49
- const sessionStorageKey = sessionStorage.key(i);
50
- (0, assert_1.assert)(sessionStorageKey !== null, "470498");
51
- if (!sessionStorageKey.startsWith(SESSION_STORAGE_PREFIX)) {
52
- continue;
53
- }
54
- const sessionStorageItem = sessionStorage.getItem(sessionStorageKey);
55
- (0, assert_1.assert)(sessionStorageItem !== null, "846771");
56
- const sessionStorageItem_parsed = parseSessionStorageItem(sessionStorageItem);
57
- if (sessionStorageItem_parsed === undefined) {
58
- continue;
59
- }
60
- const remainingTtlMs = sessionStorageItem_parsed.expiresAtTime - Date.now();
61
- sessionStorage.removeItem(sessionStorageKey);
62
- if (remainingTtlMs <= 0) {
63
- continue;
64
- }
65
- inMemoryItems.push({
66
- key: sessionStorageKey.slice(SESSION_STORAGE_PREFIX.length),
67
- value: sessionStorageItem_parsed.value,
68
- removeFromSessionStorage: undefined
69
- });
70
- }
71
- let isPersistenceEnabled = false;
72
- const storage = {
73
- persistCurrentStateAndSubsequentChanges: () => {
74
- isPersistenceEnabled = true;
75
- for (let i = 0; i < storage.length; i++) {
76
- const key = storage.key(i);
77
- (0, assert_1.assert)(key !== null, "803385");
78
- const value = storage.getItem(key);
79
- (0, assert_1.assert)(value !== null, "777098");
80
- storage.setItem(key, value);
81
- }
82
- },
83
- get length() {
84
- return inMemoryItems.length;
85
- },
86
- key: index => {
87
- const inMemoryItem = inMemoryItems[index];
88
- if (inMemoryItem === undefined) {
89
- return null;
90
- }
91
- return inMemoryItem.key;
92
- },
93
- removeItem: key => {
94
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
95
- if (inMemoryItem === undefined) {
96
- return;
97
- }
98
- inMemoryItem.removeFromSessionStorage?.();
99
- const index = inMemoryItems.indexOf(inMemoryItem);
100
- inMemoryItems.splice(index, 1);
101
- },
102
- clear: () => {
103
- for (let i = 0; i < storage.length; i++) {
104
- const key = storage.key(i);
105
- (0, assert_1.assert)(key !== null, "290875");
106
- storage.removeItem(key);
107
- }
108
- },
109
- getItem: key => {
110
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
111
- if (inMemoryItem === undefined) {
112
- return null;
113
- }
114
- return inMemoryItem.value;
115
- },
116
- setItem: (key, value) => {
117
- let existingInMemoryItemIndex = undefined;
118
- {
119
- const inMemoryItem = inMemoryItems.find(item => item.key === key);
120
- if (inMemoryItem !== undefined) {
121
- inMemoryItem.removeFromSessionStorage?.();
122
- existingInMemoryItemIndex = inMemoryItems.indexOf(inMemoryItem);
123
- }
124
- }
125
- const inMemoryItem_new = isPersistenceEnabled
126
- ? createStoreInSessionStorageAndScheduleRemovalInMemoryItem({
127
- key,
128
- value,
129
- remainingTtlMs: sessionStorageTtlMs
130
- })
131
- : (0, id_1.id)({
132
- key,
133
- value,
134
- removeFromSessionStorage: undefined
135
- });
136
- if (existingInMemoryItemIndex !== undefined) {
137
- inMemoryItems[existingInMemoryItemIndex] = inMemoryItem_new;
138
- }
139
- else {
140
- inMemoryItems.push(inMemoryItem_new);
141
- }
142
- }
143
- };
144
- return storage;
145
- }
146
- //# sourceMappingURL=EphemeralSessionStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EphemeralSessionStorage.js","sourceRoot":"","sources":["../src/tools/EphemeralSessionStorage.ts"],"names":[],"mappings":"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"}