@expcluster/permission-groups 7.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 (91) hide show
  1. package/LICENSE.md +21 -0
  2. package/controller.ts +434 -0
  3. package/dist/browser/messages.d.ts +527 -0
  4. package/dist/browser/messages.d.ts.map +1 -0
  5. package/dist/browser/messages.js +561 -0
  6. package/dist/browser/messages.js.map +1 -0
  7. package/dist/browser/package.json +49 -0
  8. package/dist/browser/tsconfig.browser.tsbuildinfo +1 -0
  9. package/dist/browser/web/components/AssignmentForm.d.ts +7 -0
  10. package/dist/browser/web/components/AssignmentForm.d.ts.map +1 -0
  11. package/dist/browser/web/components/AssignmentForm.js +29 -0
  12. package/dist/browser/web/components/AssignmentForm.js.map +1 -0
  13. package/dist/browser/web/components/AssignmentsTable.d.ts +2 -0
  14. package/dist/browser/web/components/AssignmentsTable.d.ts.map +1 -0
  15. package/dist/browser/web/components/AssignmentsTable.js +61 -0
  16. package/dist/browser/web/components/AssignmentsTable.js.map +1 -0
  17. package/dist/browser/web/components/DeleteConfirm.d.ts +6 -0
  18. package/dist/browser/web/components/DeleteConfirm.d.ts.map +1 -0
  19. package/dist/browser/web/components/DeleteConfirm.js +7 -0
  20. package/dist/browser/web/components/DeleteConfirm.js.map +1 -0
  21. package/dist/browser/web/components/GroupForm.d.ts +5 -0
  22. package/dist/browser/web/components/GroupForm.d.ts.map +1 -0
  23. package/dist/browser/web/components/GroupForm.js +22 -0
  24. package/dist/browser/web/components/GroupForm.js.map +1 -0
  25. package/dist/browser/web/components/GroupViewPage.d.ts +2 -0
  26. package/dist/browser/web/components/GroupViewPage.d.ts.map +1 -0
  27. package/dist/browser/web/components/GroupViewPage.js +161 -0
  28. package/dist/browser/web/components/GroupViewPage.js.map +1 -0
  29. package/dist/browser/web/components/GroupsTable.d.ts +2 -0
  30. package/dist/browser/web/components/GroupsTable.d.ts.map +1 -0
  31. package/dist/browser/web/components/GroupsTable.js +29 -0
  32. package/dist/browser/web/components/GroupsTable.js.map +1 -0
  33. package/dist/browser/web/components/RoleMappingForm.d.ts +7 -0
  34. package/dist/browser/web/components/RoleMappingForm.d.ts.map +1 -0
  35. package/dist/browser/web/components/RoleMappingForm.js +32 -0
  36. package/dist/browser/web/components/RoleMappingForm.js.map +1 -0
  37. package/dist/browser/web/components/RoleMappingsTable.d.ts +2 -0
  38. package/dist/browser/web/components/RoleMappingsTable.d.ts.map +1 -0
  39. package/dist/browser/web/components/RoleMappingsTable.js +64 -0
  40. package/dist/browser/web/components/RoleMappingsTable.js.map +1 -0
  41. package/dist/browser/web/index.d.ts +13 -0
  42. package/dist/browser/web/index.d.ts.map +1 -0
  43. package/dist/browser/web/index.js +60 -0
  44. package/dist/browser/web/index.js.map +1 -0
  45. package/dist/node/controller.d.ts +37 -0
  46. package/dist/node/controller.d.ts.map +1 -0
  47. package/dist/node/controller.js +372 -0
  48. package/dist/node/controller.js.map +1 -0
  49. package/dist/node/index.d.ts +10 -0
  50. package/dist/node/index.d.ts.map +1 -0
  51. package/dist/node/index.js +196 -0
  52. package/dist/node/index.js.map +1 -0
  53. package/dist/node/instance.d.ts +40 -0
  54. package/dist/node/instance.d.ts.map +1 -0
  55. package/dist/node/instance.js +155 -0
  56. package/dist/node/instance.js.map +1 -0
  57. package/dist/node/messages.d.ts +527 -0
  58. package/dist/node/messages.d.ts.map +1 -0
  59. package/dist/node/messages.js +620 -0
  60. package/dist/node/messages.js.map +1 -0
  61. package/dist/node/tsconfig.node.tsbuildinfo +1 -0
  62. package/dist/web/manifest.json +10 -0
  63. package/dist/web/static/exp_groups.afefd90b210f7c8e0df2.js +543 -0
  64. package/dist/web/static/index_ts.f7d30aa0c13ff0be393a.js +22 -0
  65. package/dist/web/static/main.c2178975889c1c720e80.js +653 -0
  66. package/dist/web/static/messages_ts.65a81c17fb37953c5d68.js +22 -0
  67. package/dist/web/static/package_json.aab0d3f37da0567c250c.js +22 -0
  68. package/dist/web/static/vendors-node_modules_pnpm_ant-design_icons_6_2_3_rea_94b50600dfe79448cabf92d130d83059_node_mo-c79f54.cf768c64b40c811ce6c9.js +273 -0
  69. package/dist/web/static/vendors-node_modules_pnpm_sinclair_typebox_0_30_4_node_modules_sinclair_typebox_typebox_js.7fa46fac84f2e9324e54.js +22 -0
  70. package/dist/web/static/web_index_tsx-webpack_sharing_consume_default_react.b4766180f4d467b7b24f.js +102 -0
  71. package/index.ts +183 -0
  72. package/instance.ts +171 -0
  73. package/messages.ts +692 -0
  74. package/module/control.lua +438 -0
  75. package/module/globals.lua +11 -0
  76. package/module/module.json +12 -0
  77. package/module/module_exports.lua +3 -0
  78. package/package.json +47 -0
  79. package/tsconfig.browser.json +4 -0
  80. package/tsconfig.json +7 -0
  81. package/tsconfig.node.json +5 -0
  82. package/web/components/AssignmentForm.tsx +74 -0
  83. package/web/components/AssignmentsTable.tsx +111 -0
  84. package/web/components/DeleteConfirm.tsx +16 -0
  85. package/web/components/GroupForm.tsx +45 -0
  86. package/web/components/GroupViewPage.tsx +287 -0
  87. package/web/components/GroupsTable.tsx +49 -0
  88. package/web/components/RoleMappingForm.tsx +106 -0
  89. package/web/components/RoleMappingsTable.tsx +107 -0
  90. package/web/index.tsx +108 -0
  91. package/webpack.config.js +34 -0
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.plugin = void 0;
37
+ const lib = __importStar(require("@clusterio/lib"));
38
+ const messages = __importStar(require("./messages"));
39
+ // Group permissions
40
+ lib.definePermission({
41
+ name: "exp_groups.group.get",
42
+ title: "Get Groups",
43
+ description: "Retrieve a specific Factorio permission group by ID.",
44
+ grantByDefault: true,
45
+ });
46
+ lib.definePermission({
47
+ name: "exp_groups.group.list",
48
+ title: "List Groups",
49
+ description: "List all Factorio permission groups.",
50
+ grantByDefault: true,
51
+ });
52
+ lib.definePermission({
53
+ name: "exp_groups.group.subscribe",
54
+ title: "Subscribe to Group Updates",
55
+ description: "Receive updates when Factorio permission groups change.",
56
+ grantByDefault: true,
57
+ });
58
+ lib.definePermission({
59
+ name: "exp_groups.group.create",
60
+ title: "Create Groups",
61
+ description: "Create new Factorio permission groups.",
62
+ grantByDefault: false,
63
+ });
64
+ lib.definePermission({
65
+ name: "exp_groups.group.update",
66
+ title: "Update Groups",
67
+ description: "Modify existing Factorio permission groups.",
68
+ grantByDefault: false,
69
+ });
70
+ lib.definePermission({
71
+ name: "exp_groups.group.delete",
72
+ title: "Delete Groups",
73
+ description: "Delete Factorio permission groups.",
74
+ grantByDefault: false,
75
+ });
76
+ // Assignment permissions
77
+ lib.definePermission({
78
+ name: "exp_groups.assignment.get",
79
+ title: "Get Assignments",
80
+ description: "Retrieve a specific manual group assignment for a player.",
81
+ grantByDefault: true,
82
+ });
83
+ lib.definePermission({
84
+ name: "exp_groups.assignment.list",
85
+ title: "List Assignments",
86
+ description: "List all manual group assignments.",
87
+ grantByDefault: true,
88
+ });
89
+ lib.definePermission({
90
+ name: "exp_groups.assignment.subscribe",
91
+ title: "Subscribe to Assignment Updates",
92
+ description: "Receive updates when manual group assignments change.",
93
+ grantByDefault: true,
94
+ });
95
+ lib.definePermission({
96
+ name: "exp_groups.assignment.create",
97
+ title: "Create Assignments",
98
+ description: "Manually assign players to groups, overriding role mappings.",
99
+ grantByDefault: false,
100
+ });
101
+ lib.definePermission({
102
+ name: "exp_groups.assignment.update",
103
+ title: "Update Assignments",
104
+ description: "Modify existing manual group assignments.",
105
+ grantByDefault: false,
106
+ });
107
+ lib.definePermission({
108
+ name: "exp_groups.assignment.delete",
109
+ title: "Delete Assignments",
110
+ description: "Remove manual group assignments.",
111
+ grantByDefault: false,
112
+ });
113
+ // Role mapping permissions
114
+ lib.definePermission({
115
+ name: "exp_groups.role_mapping.get",
116
+ title: "Get Role Mappings",
117
+ description: "Retrieve a specific role mapping rule.",
118
+ grantByDefault: true,
119
+ });
120
+ lib.definePermission({
121
+ name: "exp_groups.role_mapping.list",
122
+ title: "List Role Mappings",
123
+ description: "List all role mapping rules.",
124
+ grantByDefault: true,
125
+ });
126
+ lib.definePermission({
127
+ name: "exp_groups.role_mapping.subscribe",
128
+ title: "Subscribe to Role Mapping Updates",
129
+ description: "Receive updates when role mapping rules change.",
130
+ grantByDefault: true,
131
+ });
132
+ lib.definePermission({
133
+ name: "exp_groups.role_mapping.create",
134
+ title: "Create Role Mappings",
135
+ description: "Create rules that map user roles to Factorio permission groups.",
136
+ grantByDefault: false,
137
+ });
138
+ lib.definePermission({
139
+ name: "exp_groups.role_mapping.update",
140
+ title: "Update Role Mappings",
141
+ description: "Modify existing role mapping rules.",
142
+ grantByDefault: false,
143
+ });
144
+ lib.definePermission({
145
+ name: "exp_groups.role_mapping.delete",
146
+ title: "Delete Role Mappings",
147
+ description: "Delete role mapping rules.",
148
+ grantByDefault: false,
149
+ });
150
+ exports.plugin = {
151
+ name: "exp_groups",
152
+ title: "ExpGaming - Permission Groups",
153
+ description: "Clusterio plugin providing syncing of permission groups",
154
+ features: [
155
+ "SavePatching",
156
+ "ScriptCommands",
157
+ ],
158
+ messages: [
159
+ messages.GroupUpdatedEvent,
160
+ messages.ManualAssignmentUpdatedEvent,
161
+ messages.ResolvedAssignmentUpdatedEvent,
162
+ messages.RoleMappingUpdatedEvent,
163
+ messages.GroupCreateRequest,
164
+ messages.GroupUpdateRequest,
165
+ messages.GroupDeleteRequest,
166
+ messages.GroupGetRequest,
167
+ messages.GroupListRequest,
168
+ messages.AssignmentCreateRequest,
169
+ messages.AssignmentUpdateRequest,
170
+ messages.AssignmentDeleteRequest,
171
+ messages.AssignmentGetRequest,
172
+ messages.AssignmentListRequest,
173
+ messages.RoleMappingCreateRequest,
174
+ messages.RoleMappingUpdateRequest,
175
+ messages.RoleMappingDeleteRequest,
176
+ messages.RoleMappingGetRequest,
177
+ messages.RoleMappingListRequest,
178
+ ],
179
+ instanceEntrypoint: "./dist/node/instance",
180
+ instanceConfigFields: {
181
+ "exp_groups.sync_mode": {
182
+ description: "Synchronize permission groups with the controller",
183
+ type: "string",
184
+ enum: ["disabled", "enabled", "bidirectional"],
185
+ initialValue: "bidirectional",
186
+ },
187
+ },
188
+ controllerEntrypoint: "./dist/node/controller",
189
+ controllerConfigFields: {},
190
+ webEntrypoint: "./web",
191
+ routes: [
192
+ "/permission_groups",
193
+ "/permission_groups/:id/view",
194
+ ]
195
+ };
196
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { BaseInstancePlugin } from "@clusterio/host";
2
+ import * as lib from "@clusterio/lib";
3
+ import * as messages from "./messages";
4
+ export type IpcGroupUpdated = {
5
+ group_name: string;
6
+ group_id: number | undefined;
7
+ permissions: {
8
+ is_blacklist: boolean;
9
+ permissions: string[] | undefined;
10
+ };
11
+ };
12
+ export type IpcGroupDeleted = {
13
+ group_name: string;
14
+ group_id: number | undefined;
15
+ };
16
+ export type IpcPlayerAssignments = {
17
+ assignments: Record<string, number>;
18
+ };
19
+ export declare class InstancePlugin extends BaseInstancePlugin {
20
+ skipSendingPermissions: Set<string>;
21
+ skipSendingUpdate: Set<number>;
22
+ onlinePlayers: Set<string>;
23
+ init(): Promise<void>;
24
+ onInstanceConfigFieldChanged(field: string, curr: unknown, prev: unknown): Promise<void>;
25
+ onStart(): Promise<void>;
26
+ onPlayerEvent(event: lib.PlayerEvent): Promise<void>;
27
+ handleGroupUpdatedEvent(event: messages.GroupUpdatedEvent): Promise<void>;
28
+ handleResolvedAssignmentUpdatedEvent(event: messages.ManualAssignmentUpdatedEvent): Promise<void>;
29
+ handleGroupUpdatedIPC(event: IpcGroupUpdated): Promise<void>;
30
+ handleGroupDeletedIPC(event: IpcGroupDeleted): Promise<void>;
31
+ handlePlayerAssignmentsIPC(event: IpcPlayerAssignments): Promise<void>;
32
+ subscribePlayerAssignment(playerName: string): Promise<void>;
33
+ unsubscribePlayerAssignment(playerName: string): Promise<void>;
34
+ luaSendInitialGroups(groups: messages.GroupRecord[]): Promise<void>;
35
+ luaSendGroupUpdate(group: messages.GroupRecord): Promise<void>;
36
+ luaSendAssignmentUpdate(assignment: messages.AssignmentRecord): Promise<void>;
37
+ luaSetEmitEvents(emitEvents: boolean): Promise<void>;
38
+ luaSend(receiver: string, json: any): Promise<void>;
39
+ }
40
+ //# sourceMappingURL=instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,qBAAa,cAAe,SAAQ,kBAAkB;IAGlD,sBAAsB,cAAqB;IAE3C,iBAAiB,cAAqB;IAEtC,aAAa,cAAqB;IAE5B,IAAI;IAQJ,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;IAQxE,OAAO;IAUP,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW;IAapC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB;IAMzD,oCAAoC,CAAC,KAAK,EAAE,QAAQ,CAAC,4BAA4B;IAQjF,qBAAqB,CAAC,KAAK,EAAE,eAAe;IAmB5C,qBAAqB,CAAC,KAAK,EAAE,eAAe;IAQ5C,0BAA0B,CAAC,KAAK,EAAE,oBAAoB;IAUtD,yBAAyB,CAAC,UAAU,EAAE,MAAM;IAM5C,2BAA2B,CAAC,UAAU,EAAE,MAAM;IAM9C,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE;IAOnD,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW;IAmB9C,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAC,gBAAgB;IAO7D,gBAAgB,CAAC,UAAU,EAAE,OAAO;IAIpC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;CAG5C"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.InstancePlugin = void 0;
37
+ const host_1 = require("@clusterio/host");
38
+ const lib = __importStar(require("@clusterio/lib"));
39
+ const messages = __importStar(require("./messages"));
40
+ class InstancePlugin extends host_1.BaseInstancePlugin {
41
+ // Once only, don't send permissions for these groups
42
+ // This is used for groups created on this instance that only need the controller generated id
43
+ skipSendingPermissions = new Set();
44
+ // This is used for groups updated / deleted on this instance to stop cycles
45
+ skipSendingUpdate = new Set();
46
+ // Track known online players so that we only apply assignment updates for them
47
+ onlinePlayers = new Set();
48
+ async init() {
49
+ this.instance.handle(messages.GroupUpdatedEvent, this.handleGroupUpdatedEvent.bind(this));
50
+ this.instance.handle(messages.ResolvedAssignmentUpdatedEvent, this.handleResolvedAssignmentUpdatedEvent.bind(this));
51
+ this.instance.server.handle(`exp_group:group_updated`, this.handleGroupUpdatedIPC.bind(this));
52
+ this.instance.server.handle(`exp_group:group_deleted`, this.handleGroupDeletedIPC.bind(this));
53
+ this.instance.server.handle(`exp_group:player_assignments`, this.handlePlayerAssignmentsIPC.bind(this));
54
+ }
55
+ async onInstanceConfigFieldChanged(field, curr, prev) {
56
+ switch (field) {
57
+ case "exp_groups.sync_mode":
58
+ await this.luaSetEmitEvents(curr == "bidirectional");
59
+ break;
60
+ }
61
+ }
62
+ async onStart() {
63
+ // We use Date.now() because we need to manually initialise the groups on the lua side
64
+ await this.instance.sendTo("controller", new lib.SubscriptionRequest(`exp_groups:${messages.GroupUpdatedEvent.name}`, "subscribe", Date.now()));
65
+ const groups = await this.instance.sendTo("controller", new messages.GroupListRequest());
66
+ await this.luaSendInitialGroups(groups);
67
+ await this.luaSetEmitEvents(this.instance.config.get("exp_groups.sync_mode") == "bidirectional");
68
+ }
69
+ async onPlayerEvent(event) {
70
+ switch (event.type) {
71
+ case "join":
72
+ this.onlinePlayers.add(event.name);
73
+ await this.subscribePlayerAssignment(event.name);
74
+ break;
75
+ case "leave":
76
+ this.onlinePlayers.delete(event.name);
77
+ await this.unsubscribePlayerAssignment(event.name);
78
+ break;
79
+ }
80
+ }
81
+ async handleGroupUpdatedEvent(event) {
82
+ for (const group of event.updates) {
83
+ await this.luaSendGroupUpdate(group);
84
+ }
85
+ }
86
+ async handleResolvedAssignmentUpdatedEvent(event) {
87
+ for (const assignment of event.updates) {
88
+ if (this.onlinePlayers.has(assignment.name)) {
89
+ await this.luaSendAssignmentUpdate(assignment);
90
+ }
91
+ }
92
+ }
93
+ async handleGroupUpdatedIPC(event) {
94
+ const permissions = new messages.GroupPermissions(event.permissions.is_blacklist, event.permissions.permissions ?? []);
95
+ if (event.group_id === undefined) {
96
+ this.skipSendingPermissions.add(event.group_name);
97
+ await this.instance.sendTo("controller", new messages.GroupCreateRequest(event.group_name, permissions));
98
+ }
99
+ else {
100
+ this.skipSendingUpdate.add(event.group_id);
101
+ await this.instance.sendTo("controller", new messages.GroupUpdateRequest(new messages.GroupRecord(event.group_id, event.group_name, permissions)));
102
+ }
103
+ }
104
+ async handleGroupDeletedIPC(event) {
105
+ if (event.group_id === undefined) {
106
+ return;
107
+ }
108
+ this.skipSendingUpdate.add(event.group_id);
109
+ await this.instance.sendTo("controller", new messages.GroupDeleteRequest(event.group_id));
110
+ }
111
+ async handlePlayerAssignmentsIPC(event) {
112
+ await Promise.all(Object.entries(event.assignments).map(([playerName, groupId]) => this.instance.sendTo("controller", new messages.AssignmentUpdateRequest(new messages.AssignmentRecord(playerName, groupId)))));
113
+ }
114
+ async subscribePlayerAssignment(playerName) {
115
+ await this.instance.sendTo("controller", new lib.SubscriptionRequest(`exp_groups:${messages.ResolvedAssignmentUpdatedEvent.name}`, "subscribe", 0, lib.SubscriptionFilters.fromShorthand(playerName)));
116
+ }
117
+ async unsubscribePlayerAssignment(playerName) {
118
+ await this.instance.sendTo("controller", new lib.SubscriptionRequest(`exp_groups:${messages.ResolvedAssignmentUpdatedEvent.name}`, "unsubscribe", 0, lib.SubscriptionFilters.fromShorthand(playerName)));
119
+ }
120
+ async luaSendInitialGroups(groups) {
121
+ if (this.instance.config.get("exp_groups.sync_mode") === "disabled") {
122
+ return;
123
+ }
124
+ await this.luaSend("initialise_groups", groups);
125
+ }
126
+ async luaSendGroupUpdate(group) {
127
+ if (this.instance.config.get("exp_groups.sync_mode") === "disabled") {
128
+ return;
129
+ }
130
+ if (this.skipSendingUpdate.has(group.id)) {
131
+ this.skipSendingUpdate.delete(group.id);
132
+ return;
133
+ }
134
+ const json = group.toJSON();
135
+ if (this.skipSendingPermissions.has(group.name)) {
136
+ this.skipSendingPermissions.delete(group.name);
137
+ delete json.permissions;
138
+ }
139
+ await this.luaSend("receive_group_update", json);
140
+ }
141
+ async luaSendAssignmentUpdate(assignment) {
142
+ if (this.instance.config.get("exp_groups.sync_mode") === "disabled") {
143
+ return;
144
+ }
145
+ await this.luaSend("receive_assignment_update", assignment);
146
+ }
147
+ async luaSetEmitEvents(emitEvents) {
148
+ await this.luaSend("set_emit_events", emitEvents);
149
+ }
150
+ async luaSend(receiver, json) {
151
+ await this.instance.sendRcon(`/sc exp_groups.${receiver}(helpers.json_to_table[=[${JSON.stringify(json)}]=])`, true);
152
+ }
153
+ }
154
+ exports.InstancePlugin = InstancePlugin;
155
+ //# sourceMappingURL=instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../instance.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAAqD;AACrD,oDAAsC;AACtC,qDAAuC;AAiBvC,MAAa,cAAe,SAAQ,yBAAkB;IAClD,qDAAqD;IACrD,8FAA8F;IAC9F,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,4EAA4E;IAC5E,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,+EAA+E;IAC/E,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,CAAC,IAAI;QACN,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,EAAE,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7F,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7F,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,8BAA8B,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3G,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,KAAa,EAAE,IAAa,EAAE,IAAa;QAC1E,QAAO,KAAK,EAAE,CAAC;YACX,KAAK,sBAAsB;gBACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,eAAe,CAAC,CAAA;gBACpD,MAAM;QACd,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACT,sFAAsF;QACtF,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,mBAAmB,CAChE,cAAc,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAC3E,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAA;QACxF,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,eAAe,CAAC,CAAA;IACpG,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAsB;QACtC,QAAO,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM;YACV,KAAK,OAAO;gBACR,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM;QACd,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,KAAiC;QAC3D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oCAAoC,CAAC,KAA4C;QACnF,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAAsB;QAC9C,MAAM,WAAW,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAC7C,KAAK,CAAC,WAAW,CAAC,YAAY,EAC9B,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,CACtC,CAAA;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EACnC,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CACjE,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,QAAQ,CAAC,kBAAkB,CACpE,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAC1E,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAAsB;QAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,KAA2B;QACxD,MAAM,OAAO,CAAC,GAAG,CACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAC5D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAC7B,IAAI,QAAQ,CAAC,uBAAuB,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAC3F,CACJ,CACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,UAAkB;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,mBAAmB,CAChE,cAAc,QAAQ,CAAC,8BAA8B,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,CAAC,CAClI,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,UAAkB;QAChD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,mBAAmB,CAChE,cAAc,QAAQ,CAAC,8BAA8B,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,CAAC,CACpI,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,MAA8B;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,UAAU,EAAE,CAAC;YAClE,OAAO;QACX,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAA2B;QAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,UAAU,EAAE,CAAC;YAClE,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAQ,IAAY,CAAC,WAAW,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,UAAqC;QAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,UAAU,EAAE,CAAC;YAClE,OAAO;QACX,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAmB;QACtC,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,IAAS;QACrC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,QAAQ,4BAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACxH,CAAC;CACJ;AAvJD,wCAuJC"}