oidc-spa 8.2.1 → 8.2.3

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 (94) 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/createOidc.d.ts +49 -16
  5. package/core/createOidc.js +97 -122
  6. package/core/createOidc.js.map +1 -1
  7. package/core/desiredPostLoginRedirectUrl.d.ts +4 -0
  8. package/core/desiredPostLoginRedirectUrl.js +12 -0
  9. package/core/desiredPostLoginRedirectUrl.js.map +1 -0
  10. package/core/diagnostic.d.ts +1 -1
  11. package/core/diagnostic.js +3 -3
  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 -0
  17. package/core/loginOrGoToAuthServer.js +3 -0
  18. package/core/loginOrGoToAuthServer.js.map +1 -1
  19. package/core/persistedAuthState.d.ts +1 -0
  20. package/core/persistedAuthState.js +14 -4
  21. package/core/persistedAuthState.js.map +1 -1
  22. package/esm/angular.d.ts +27 -4
  23. package/esm/angular.js +28 -6
  24. package/esm/angular.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/createOidc.d.ts +49 -16
  29. package/esm/core/createOidc.js +98 -123
  30. package/esm/core/createOidc.js.map +1 -1
  31. package/esm/core/desiredPostLoginRedirectUrl.d.ts +4 -0
  32. package/esm/core/desiredPostLoginRedirectUrl.js +8 -0
  33. package/esm/core/desiredPostLoginRedirectUrl.js.map +1 -0
  34. package/esm/core/diagnostic.d.ts +1 -1
  35. package/esm/core/diagnostic.js +3 -3
  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 -0
  41. package/esm/core/loginOrGoToAuthServer.js +3 -0
  42. package/esm/core/loginOrGoToAuthServer.js.map +1 -1
  43. package/esm/core/persistedAuthState.d.ts +1 -0
  44. package/esm/core/persistedAuthState.js +14 -4
  45. package/esm/core/persistedAuthState.js.map +1 -1
  46. package/esm/keycloak/keycloak-js/Keycloak.d.ts +40 -0
  47. package/esm/keycloak/keycloak-js/Keycloak.js +2 -1
  48. package/esm/keycloak/keycloak-js/Keycloak.js.map +1 -1
  49. package/esm/react/react.js +24 -2
  50. package/esm/react/react.js.map +1 -1
  51. package/esm/react-spa/createOidcSpaApi.js +26 -4
  52. package/esm/react-spa/createOidcSpaApi.js.map +1 -1
  53. package/esm/react-spa/types.d.ts +26 -3
  54. package/esm/tanstack-start/react/createOidcSpaApi.js +25 -3
  55. package/esm/tanstack-start/react/createOidcSpaApi.js.map +1 -1
  56. package/esm/tanstack-start/react/types.d.ts +26 -3
  57. package/esm/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +4 -4
  58. package/esm/tools/lazySessionStorage.js +83 -0
  59. package/esm/tools/lazySessionStorage.js.map +1 -0
  60. package/keycloak/keycloak-js/Keycloak.d.ts +40 -0
  61. package/keycloak/keycloak-js/Keycloak.js +2 -1
  62. package/keycloak/keycloak-js/Keycloak.js.map +1 -1
  63. package/package.json +5 -1
  64. package/react/react.js +24 -2
  65. package/react/react.js.map +1 -1
  66. package/react-spa/createOidcSpaApi.js +26 -4
  67. package/react-spa/createOidcSpaApi.js.map +1 -1
  68. package/react-spa/types.d.ts +26 -3
  69. package/src/angular.ts +72 -18
  70. package/src/core/AuthResponse.ts +0 -36
  71. package/src/core/createOidc.ts +160 -173
  72. package/src/core/desiredPostLoginRedirectUrl.ts +9 -0
  73. package/src/core/diagnostic.ts +4 -4
  74. package/src/core/instancesThatCantUseIframes.ts +24 -0
  75. package/src/core/loginOrGoToAuthServer.ts +5 -0
  76. package/src/core/persistedAuthState.ts +27 -5
  77. package/src/keycloak/keycloak-js/Keycloak.ts +43 -1
  78. package/src/react/react.tsx +32 -3
  79. package/src/react-spa/createOidcSpaApi.tsx +34 -5
  80. package/src/react-spa/types.tsx +26 -3
  81. package/src/tanstack-start/react/createOidcSpaApi.tsx +33 -4
  82. package/src/tanstack-start/react/types.tsx +26 -3
  83. package/src/tools/lazySessionStorage.ts +123 -0
  84. package/src/vite-plugin/manageOptimizedDeps.ts +4 -1
  85. package/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +4 -4
  86. package/tools/lazySessionStorage.js +86 -0
  87. package/tools/lazySessionStorage.js.map +1 -0
  88. package/vite-plugin/manageOptimizedDeps.js +3 -1
  89. package/vite-plugin/manageOptimizedDeps.js.map +1 -1
  90. package/esm/tools/EphemeralSessionStorage.js +0 -143
  91. package/esm/tools/EphemeralSessionStorage.js.map +0 -1
  92. package/src/tools/EphemeralSessionStorage.ts +0 -225
  93. package/tools/EphemeralSessionStorage.js +0 -146
  94. package/tools/EphemeralSessionStorage.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"manageOptimizedDeps.js","sourceRoot":"","sources":["../src/vite-plugin/manageOptimizedDeps.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,kDAwDC;AA9DD,4FAAqF;AACrF,4CAA8B;AAC9B,+BAAwC;AAExC,kDAA+C;AAE/C,SAAgB,mBAAmB,CAAC,MAGnC;;IACG,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE3C,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAChC,EAAE,CAAC,YAAY,CAAC,IAAA,WAAQ,EAAC,IAAA,2DAA0B,GAAE,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACzB,CAAC;IAEpE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,QAAQ,WAAW,EAAE,CAAC;QAClB,KAAK,gBAAgB;YACjB,CAAC;gBACG,OAAC,CAAC,UAAU,CAAC,YAAY,KAAvB,UAAU,CAAC,YAAY,GAAK,EAAE,EAAC,EAAC,OAAO,QAAP,OAAO,GAAK,EAAE,EAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM;QACV,KAAK,wBAAwB;YACzB,CAAC;gBACG,MAAM,mBAAmB,GAAG;oBACxB,oBAAoB;oBACpB,qBAAqB;oBACrB,mBAAmB;iBACtB,CAAC;gBAEF,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE,CAAC;oBAC3C,IAAA,eAAM,EAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAED,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE;oBACzB,IAAI,CAAC;wBACD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;oBACxC,CAAC;oBAAC,MAAM,CAAC;wBACL,OAAO,KAAK,CAAC;oBACjB,CAAC;oBAED,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC,EAAE,CAAC;gBAEL,IAAI,cAAc,EAAE,CAAC;oBACjB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;gBAED,OAAC,CAAC,UAAU,CAAC,YAAY,KAAvB,UAAU,CAAC,YAAY,GAAK,EAAE,EAAC,EAAC,OAAO,QAAP,OAAO,GAAK,EAAE,EAAC,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACnF,CAAC;YACD,MAAM;IACd,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"manageOptimizedDeps.js","sourceRoot":"","sources":["../src/vite-plugin/manageOptimizedDeps.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,kDA2DC;AAjED,4FAAqF;AACrF,4CAA8B;AAC9B,+BAAwC;AAExC,kDAA+C;AAE/C,SAAgB,mBAAmB,CAAC,MAGnC;;IACG,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE3C,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAChC,EAAE,CAAC,YAAY,CAAC,IAAA,WAAQ,EAAC,IAAA,2DAA0B,GAAE,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACzB,CAAC;IAEpE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,QAAQ,WAAW,EAAE,CAAC;QAClB,KAAK,gBAAgB;YACjB,CAAC;gBACG,OAAC,CAAC,UAAU,CAAC,YAAY,KAAvB,UAAU,CAAC,YAAY,GAAK,EAAE,EAAC,EAAC,OAAO,QAAP,OAAO,GAAK,EAAE,EAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM;QACV,KAAK,wBAAwB;YACzB,CAAC;gBACG,MAAM,mBAAmB,GAAG;oBACxB,oBAAoB;oBACpB,qBAAqB;oBACrB,mBAAmB;oBACnB,eAAe;iBAClB,CAAC;gBAEF,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE,CAAC;oBAC3C,IAAA,eAAM,EAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAED,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE;oBACzB,IAAI,CAAC;wBACD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;oBACxC,CAAC;oBAAC,MAAM,CAAC;wBACL,OAAO,KAAK,CAAC;oBACjB,CAAC;oBAED,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC,EAAE,CAAC;gBAEL,IAAI,cAAc,EAAE,CAAC;oBACjB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;gBAED,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAErC,OAAC,CAAC,UAAU,CAAC,YAAY,KAAvB,UAAU,CAAC,YAAY,GAAK,EAAE,EAAC,EAAC,OAAO,QAAP,OAAO,GAAK,EAAE,EAAC,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACnF,CAAC;YACD,MAAM;IACd,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
@@ -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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"}