@kumori/aurora-backend-handler 1.1.84 → 1.1.85
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/helpers/token-helper.ts +20 -0
- package/package.json +1 -1
- package/websocket-manager.ts +11 -2
package/helpers/token-helper.ts
CHANGED
|
@@ -5,6 +5,7 @@ interface HandleTokenEventParams {
|
|
|
5
5
|
eventData: any;
|
|
6
6
|
tokenMap: Map<string, Token>;
|
|
7
7
|
userData: UserData;
|
|
8
|
+
deletedTokenIds: Set<string>;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
interface HandleTokenEventResult {
|
|
@@ -24,10 +25,26 @@ export const handleTokenEvent = ({
|
|
|
24
25
|
eventData,
|
|
25
26
|
tokenMap,
|
|
26
27
|
userData,
|
|
28
|
+
deletedTokenIds,
|
|
27
29
|
}: HandleTokenEventParams): HandleTokenEventResult => {
|
|
28
30
|
const tokenParentKind = eventData.id.parent?.kind;
|
|
29
31
|
const tokenId = eventData.id.name;
|
|
30
32
|
|
|
33
|
+
if (tokenParentKind === "user" && deletedTokenIds.has(tokenId)) {
|
|
34
|
+
// A tombstoned token (already explicitly deleted by the user) must
|
|
35
|
+
// never be resurrected by a stale/out-of-order "token" event -
|
|
36
|
+
// e.g. one reflecting backend state that hasn't caught up with the
|
|
37
|
+
// deletion yet.
|
|
38
|
+
return {
|
|
39
|
+
isUserToken: false,
|
|
40
|
+
isClusterToken: false,
|
|
41
|
+
userToken: null,
|
|
42
|
+
clusterToken: null,
|
|
43
|
+
updatedUserTokens: userData.tokens,
|
|
44
|
+
tokenId,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
31
48
|
if (tokenParentKind === "user") {
|
|
32
49
|
const tokenInMap = tokenMap.get(tokenId);
|
|
33
50
|
|
|
@@ -112,6 +129,7 @@ interface HandleTokenDeletionParams {
|
|
|
112
129
|
tokenId: string;
|
|
113
130
|
tokenMap: Map<string, Token>;
|
|
114
131
|
userData: UserData;
|
|
132
|
+
deletedTokenIds: Set<string>;
|
|
115
133
|
}
|
|
116
134
|
|
|
117
135
|
interface HandleTokenDeletionResult {
|
|
@@ -124,7 +142,9 @@ export const handleTokenDeletion = ({
|
|
|
124
142
|
tokenId,
|
|
125
143
|
tokenMap,
|
|
126
144
|
userData,
|
|
145
|
+
deletedTokenIds,
|
|
127
146
|
}: HandleTokenDeletionParams): HandleTokenDeletionResult => {
|
|
147
|
+
deletedTokenIds.add(tokenId);
|
|
128
148
|
const tokenIndex = userData.tokens.findIndex((t) => t.name === tokenId);
|
|
129
149
|
if (tokenIndex === -1) {
|
|
130
150
|
return {
|
package/package.json
CHANGED
package/websocket-manager.ts
CHANGED
|
@@ -174,6 +174,7 @@ let accountsMap = new Map<string, Account>();
|
|
|
174
174
|
let revisionsMap = new Map<string, Revision>();
|
|
175
175
|
let roleMap = new Map<string, Role[]>();
|
|
176
176
|
let tokenMap = new Map<string, Token>();
|
|
177
|
+
let deletedTokenIds = new Set<string>();
|
|
177
178
|
let platformInfo: Platform | null = null;
|
|
178
179
|
let isPlatformInfoLoading = false;
|
|
179
180
|
let isPlatformInfoLoaded = false;
|
|
@@ -639,7 +640,11 @@ const rebuildHierarchy = () => {
|
|
|
639
640
|
notificationsEnabled: preservedUserData.notificationsEnabled,
|
|
640
641
|
organizations: Array.from(organizationsMap.values()),
|
|
641
642
|
clusterTokens: Array.from(clusterTokensMap.values()),
|
|
642
|
-
tokens:
|
|
643
|
+
tokens: (
|
|
644
|
+
tokenMap.size > 0
|
|
645
|
+
? (preservedUserData.tokens || []).filter(t => tokenMap.has(t.name))
|
|
646
|
+
: (preservedUserData.tokens || [])
|
|
647
|
+
).filter(t => !deletedTokenIds.has(t.name)),
|
|
643
648
|
tenants: Array.from(tenantsMap.values()),
|
|
644
649
|
axebowPlan: preservedUserData.axebowPlan,
|
|
645
650
|
companyName: preservedUserData.companyName,
|
|
@@ -1129,6 +1134,7 @@ const handleEvent = async (message: WSMessage) => {
|
|
|
1129
1134
|
eventData,
|
|
1130
1135
|
tokenMap,
|
|
1131
1136
|
userData,
|
|
1137
|
+
deletedTokenIds,
|
|
1132
1138
|
});
|
|
1133
1139
|
|
|
1134
1140
|
if (tokenResult.isUserToken) {
|
|
@@ -1518,6 +1524,7 @@ const handleOperationSuccess = (operation: PendingOperation, response: any) => {
|
|
|
1518
1524
|
tokenId: deletedTokenId,
|
|
1519
1525
|
tokenMap,
|
|
1520
1526
|
userData,
|
|
1527
|
+
deletedTokenIds,
|
|
1521
1528
|
});
|
|
1522
1529
|
if (tokenDeletionResult.removed) {
|
|
1523
1530
|
userData.tokens = tokenDeletionResult.updatedUserTokens;
|
|
@@ -1916,6 +1923,7 @@ const handleDeleteEvent = async (message: WSMessage) => {
|
|
|
1916
1923
|
tokenId: keyParts.token,
|
|
1917
1924
|
tokenMap,
|
|
1918
1925
|
userData,
|
|
1926
|
+
deletedTokenIds,
|
|
1919
1927
|
});
|
|
1920
1928
|
if (tokenDeletionResult.removed) {
|
|
1921
1929
|
userData.tokens = tokenDeletionResult.updatedUserTokens;
|
|
@@ -2056,7 +2064,8 @@ export const updateUserComplete = (updatedUserData: UserData): User => {
|
|
|
2056
2064
|
);
|
|
2057
2065
|
const mergedTokens = [...(updatedUserData.tokens || []), ...localOnlyTokens]
|
|
2058
2066
|
.filter((t, index, arr) => arr.findIndex(x => x.name === t.name) === index)
|
|
2059
|
-
.filter(t => tokenMap.size === 0 || tokenMap.has(t.name))
|
|
2067
|
+
.filter(t => tokenMap.size === 0 || tokenMap.has(t.name))
|
|
2068
|
+
.filter(t => !deletedTokenIds.has(t.name));
|
|
2060
2069
|
|
|
2061
2070
|
userData = {
|
|
2062
2071
|
id: updatedUserData.id || userData.id,
|