mslxdff 0.1.21 → 0.1.22
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/package.json +1 -1
- package/src/groups.js +16 -4
package/package.json
CHANGED
package/src/groups.js
CHANGED
|
@@ -27,6 +27,20 @@ export function createGroup(name, { file, key = name } = {}) {
|
|
|
27
27
|
return { name, key, created: true };
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
// Shared writer: register a member, de-duplicated by url (same ip:port
|
|
31
|
+
// re-registering under a different name updates the existing entry instead of
|
|
32
|
+
// creating a duplicate).
|
|
33
|
+
function writeMember(group, memberName, url, token) {
|
|
34
|
+
const members = group.members || (group.members = {});
|
|
35
|
+
const byUrl = Object.entries(members).find(([, m]) => m.url === url);
|
|
36
|
+
if (byUrl) {
|
|
37
|
+
members[byUrl[0]] = { url, token: token || "" };
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const id = memberName || url;
|
|
41
|
+
members[id] = { url, token: token || "" };
|
|
42
|
+
}
|
|
43
|
+
|
|
30
44
|
// Leader side: add a member after verifying the join key.
|
|
31
45
|
export function addGroupMember(name, { key, memberName, url, token, file } = {}) {
|
|
32
46
|
const groups = loadGroups(file ? { file } : {});
|
|
@@ -34,8 +48,7 @@ export function addGroupMember(name, { key, memberName, url, token, file } = {})
|
|
|
34
48
|
if (!group) throw new Error(`group "${name}" not found on this node`);
|
|
35
49
|
if (!verifyGroupKey(key, group.key)) throw new Error("invalid group key");
|
|
36
50
|
if (!url) throw new Error("member url is required");
|
|
37
|
-
|
|
38
|
-
group.members[id] = { url, token: token || "" };
|
|
51
|
+
writeMember(group, memberName, url, token);
|
|
39
52
|
saveGroups(groups, file ? { file } : {});
|
|
40
53
|
return group.members;
|
|
41
54
|
}
|
|
@@ -47,8 +60,7 @@ export function upsertMember(name, { memberName, url, token, file } = {}) {
|
|
|
47
60
|
const group = groups[name];
|
|
48
61
|
if (!group) return null;
|
|
49
62
|
if (!url) throw new Error("member url is required");
|
|
50
|
-
|
|
51
|
-
group.members[id] = { url, token: token || "" };
|
|
63
|
+
writeMember(group, memberName, url, token);
|
|
52
64
|
saveGroups(groups, file ? { file } : {});
|
|
53
65
|
return group.members;
|
|
54
66
|
}
|