@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.
- package/LICENSE.md +21 -0
- package/controller.ts +434 -0
- package/dist/browser/messages.d.ts +527 -0
- package/dist/browser/messages.d.ts.map +1 -0
- package/dist/browser/messages.js +561 -0
- package/dist/browser/messages.js.map +1 -0
- package/dist/browser/package.json +49 -0
- package/dist/browser/tsconfig.browser.tsbuildinfo +1 -0
- package/dist/browser/web/components/AssignmentForm.d.ts +7 -0
- package/dist/browser/web/components/AssignmentForm.d.ts.map +1 -0
- package/dist/browser/web/components/AssignmentForm.js +29 -0
- package/dist/browser/web/components/AssignmentForm.js.map +1 -0
- package/dist/browser/web/components/AssignmentsTable.d.ts +2 -0
- package/dist/browser/web/components/AssignmentsTable.d.ts.map +1 -0
- package/dist/browser/web/components/AssignmentsTable.js +61 -0
- package/dist/browser/web/components/AssignmentsTable.js.map +1 -0
- package/dist/browser/web/components/DeleteConfirm.d.ts +6 -0
- package/dist/browser/web/components/DeleteConfirm.d.ts.map +1 -0
- package/dist/browser/web/components/DeleteConfirm.js +7 -0
- package/dist/browser/web/components/DeleteConfirm.js.map +1 -0
- package/dist/browser/web/components/GroupForm.d.ts +5 -0
- package/dist/browser/web/components/GroupForm.d.ts.map +1 -0
- package/dist/browser/web/components/GroupForm.js +22 -0
- package/dist/browser/web/components/GroupForm.js.map +1 -0
- package/dist/browser/web/components/GroupViewPage.d.ts +2 -0
- package/dist/browser/web/components/GroupViewPage.d.ts.map +1 -0
- package/dist/browser/web/components/GroupViewPage.js +161 -0
- package/dist/browser/web/components/GroupViewPage.js.map +1 -0
- package/dist/browser/web/components/GroupsTable.d.ts +2 -0
- package/dist/browser/web/components/GroupsTable.d.ts.map +1 -0
- package/dist/browser/web/components/GroupsTable.js +29 -0
- package/dist/browser/web/components/GroupsTable.js.map +1 -0
- package/dist/browser/web/components/RoleMappingForm.d.ts +7 -0
- package/dist/browser/web/components/RoleMappingForm.d.ts.map +1 -0
- package/dist/browser/web/components/RoleMappingForm.js +32 -0
- package/dist/browser/web/components/RoleMappingForm.js.map +1 -0
- package/dist/browser/web/components/RoleMappingsTable.d.ts +2 -0
- package/dist/browser/web/components/RoleMappingsTable.d.ts.map +1 -0
- package/dist/browser/web/components/RoleMappingsTable.js +64 -0
- package/dist/browser/web/components/RoleMappingsTable.js.map +1 -0
- package/dist/browser/web/index.d.ts +13 -0
- package/dist/browser/web/index.d.ts.map +1 -0
- package/dist/browser/web/index.js +60 -0
- package/dist/browser/web/index.js.map +1 -0
- package/dist/node/controller.d.ts +37 -0
- package/dist/node/controller.d.ts.map +1 -0
- package/dist/node/controller.js +372 -0
- package/dist/node/controller.js.map +1 -0
- package/dist/node/index.d.ts +10 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +196 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/instance.d.ts +40 -0
- package/dist/node/instance.d.ts.map +1 -0
- package/dist/node/instance.js +155 -0
- package/dist/node/instance.js.map +1 -0
- package/dist/node/messages.d.ts +527 -0
- package/dist/node/messages.d.ts.map +1 -0
- package/dist/node/messages.js +620 -0
- package/dist/node/messages.js.map +1 -0
- package/dist/node/tsconfig.node.tsbuildinfo +1 -0
- package/dist/web/manifest.json +10 -0
- package/dist/web/static/exp_groups.afefd90b210f7c8e0df2.js +543 -0
- package/dist/web/static/index_ts.f7d30aa0c13ff0be393a.js +22 -0
- package/dist/web/static/main.c2178975889c1c720e80.js +653 -0
- package/dist/web/static/messages_ts.65a81c17fb37953c5d68.js +22 -0
- package/dist/web/static/package_json.aab0d3f37da0567c250c.js +22 -0
- package/dist/web/static/vendors-node_modules_pnpm_ant-design_icons_6_2_3_rea_94b50600dfe79448cabf92d130d83059_node_mo-c79f54.cf768c64b40c811ce6c9.js +273 -0
- package/dist/web/static/vendors-node_modules_pnpm_sinclair_typebox_0_30_4_node_modules_sinclair_typebox_typebox_js.7fa46fac84f2e9324e54.js +22 -0
- package/dist/web/static/web_index_tsx-webpack_sharing_consume_default_react.b4766180f4d467b7b24f.js +102 -0
- package/index.ts +183 -0
- package/instance.ts +171 -0
- package/messages.ts +692 -0
- package/module/control.lua +438 -0
- package/module/globals.lua +11 -0
- package/module/module.json +12 -0
- package/module/module_exports.lua +3 -0
- package/package.json +47 -0
- package/tsconfig.browser.json +4 -0
- package/tsconfig.json +7 -0
- package/tsconfig.node.json +5 -0
- package/web/components/AssignmentForm.tsx +74 -0
- package/web/components/AssignmentsTable.tsx +111 -0
- package/web/components/DeleteConfirm.tsx +16 -0
- package/web/components/GroupForm.tsx +45 -0
- package/web/components/GroupViewPage.tsx +287 -0
- package/web/components/GroupsTable.tsx +49 -0
- package/web/components/RoleMappingForm.tsx +106 -0
- package/web/components/RoleMappingsTable.tsx +107 -0
- package/web/index.tsx +108 -0
- package/webpack.config.js +34 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
4
|
+
* This devtool is neither made for production nor for readable output files.
|
|
5
|
+
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
6
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
7
|
+
* or disable the default devtool with "devtool: false".
|
|
8
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
9
|
+
*/
|
|
10
|
+
(self["webpackChunk_expcluster_permission_groups"] = self["webpackChunk_expcluster_permission_groups"] || []).push([["messages_ts"],{
|
|
11
|
+
|
|
12
|
+
/***/ 40
|
|
13
|
+
/*!*********************!*\
|
|
14
|
+
!*** ./messages.ts ***!
|
|
15
|
+
\*********************/
|
|
16
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
17
|
+
|
|
18
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AssignmentCreateRequest: () => (/* binding */ AssignmentCreateRequest),\n/* harmony export */ AssignmentDeleteRequest: () => (/* binding */ AssignmentDeleteRequest),\n/* harmony export */ AssignmentGetRequest: () => (/* binding */ AssignmentGetRequest),\n/* harmony export */ AssignmentListRequest: () => (/* binding */ AssignmentListRequest),\n/* harmony export */ AssignmentRecord: () => (/* binding */ AssignmentRecord),\n/* harmony export */ AssignmentUpdateRequest: () => (/* binding */ AssignmentUpdateRequest),\n/* harmony export */ GroupCreateRequest: () => (/* binding */ GroupCreateRequest),\n/* harmony export */ GroupDeleteRequest: () => (/* binding */ GroupDeleteRequest),\n/* harmony export */ GroupGetRequest: () => (/* binding */ GroupGetRequest),\n/* harmony export */ GroupListRequest: () => (/* binding */ GroupListRequest),\n/* harmony export */ GroupPermissions: () => (/* binding */ GroupPermissions),\n/* harmony export */ GroupRecord: () => (/* binding */ GroupRecord),\n/* harmony export */ GroupUpdateRequest: () => (/* binding */ GroupUpdateRequest),\n/* harmony export */ GroupUpdatedEvent: () => (/* binding */ GroupUpdatedEvent),\n/* harmony export */ ManualAssignmentUpdatedEvent: () => (/* binding */ ManualAssignmentUpdatedEvent),\n/* harmony export */ ResolvedAssignmentUpdatedEvent: () => (/* binding */ ResolvedAssignmentUpdatedEvent),\n/* harmony export */ RoleMappingCreateRequest: () => (/* binding */ RoleMappingCreateRequest),\n/* harmony export */ RoleMappingDeleteRequest: () => (/* binding */ RoleMappingDeleteRequest),\n/* harmony export */ RoleMappingGetRequest: () => (/* binding */ RoleMappingGetRequest),\n/* harmony export */ RoleMappingListRequest: () => (/* binding */ RoleMappingListRequest),\n/* harmony export */ RoleMappingRecord: () => (/* binding */ RoleMappingRecord),\n/* harmony export */ RoleMappingUpdateRequest: () => (/* binding */ RoleMappingUpdateRequest),\n/* harmony export */ RoleMappingUpdatedEvent: () => (/* binding */ RoleMappingUpdatedEvent)\n/* harmony export */ });\n/* harmony import */ var _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @clusterio/lib */ 194);\n/* harmony import */ var _clusterio_lib__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_clusterio_lib__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sinclair/typebox */ 213);\n\n\n/*\r\n Data records\r\n*/ class GroupPermissions {\n isBlacklist;\n permissions;\n constructor(isBlacklist, permissions){\n this.isBlacklist = isBlacklist;\n this.permissions = permissions;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n is_blacklist: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean(),\n permissions: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String())\n });\n toJSON() {\n return {\n is_blacklist: this.isBlacklist,\n permissions: this.permissions\n };\n }\n static fromJSON(json) {\n return new this(json.is_blacklist, json.permissions);\n }\n}\nclass GroupRecord {\n id;\n name;\n permissions;\n updatedAtMs;\n isDeleted;\n constructor(id, name, permissions, updatedAtMs = 0, isDeleted = false){\n this.id = id;\n this.name = name;\n this.permissions = permissions;\n this.updatedAtMs = updatedAtMs;\n this.isDeleted = isDeleted;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n permissions: GroupPermissions.jsonSchema,\n updated_at_ms: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number()),\n is_deleted: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean())\n });\n toJSON() {\n let json = {\n id: this.id,\n name: this.name,\n permissions: this.permissions.toJSON()\n };\n if (this.updatedAtMs) {\n json.updated_at_ms = this.updatedAtMs;\n }\n if (this.isDeleted) {\n json.is_deleted = true;\n }\n return json;\n }\n static fromJSON(json) {\n return new this(json.id, json.name, GroupPermissions.fromJSON(json.permissions), json.updated_at_ms ?? 0, json.is_deleted ?? false);\n }\n}\nclass AssignmentRecord {\n name;\n groupId;\n updatedAtMs;\n isDeleted;\n constructor(name, groupId, updatedAtMs = 0, isDeleted = false){\n this.name = name;\n this.groupId = groupId;\n this.updatedAtMs = updatedAtMs;\n this.isDeleted = isDeleted;\n }\n get id() {\n return this.name;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n updated_at_ms: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number()),\n is_deleted: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean())\n });\n toJSON() {\n let json = {\n name: this.name,\n group_id: this.groupId\n };\n if (this.updatedAtMs) {\n json.updated_at_ms = this.updatedAtMs;\n }\n if (this.isDeleted) {\n json.is_deleted = true;\n }\n return json;\n }\n static fromJSON(json) {\n return new this(json.name, json.group_id, json.updated_at_ms ?? 0, json.is_deleted ?? false);\n }\n}\nclass RoleMappingRecord {\n id;\n roleIds;\n groupId;\n priority;\n enabled;\n updatedAtMs;\n isDeleted;\n constructor(id, roleIds, groupId, priority, enabled, updatedAtMs = 0, isDeleted = false){\n this.id = id;\n this.roleIds = roleIds;\n this.groupId = groupId;\n this.priority = priority;\n this.enabled = enabled;\n this.updatedAtMs = updatedAtMs;\n this.isDeleted = isDeleted;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n role_ids: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n priority: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number(),\n enabled: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean(),\n updated_at_ms: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number()),\n is_deleted: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Optional(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean())\n });\n toJSON() {\n let json = {\n id: this.id,\n role_ids: [\n ...this.roleIds\n ],\n group_id: this.groupId,\n priority: this.priority,\n enabled: this.enabled\n };\n if (this.updatedAtMs) {\n json.updated_at_ms = this.updatedAtMs;\n }\n if (this.isDeleted) {\n json.is_deleted = true;\n }\n return json;\n }\n static fromJSON(json) {\n return new this(json.id, new Set(json.role_ids), json.group_id, json.priority, json.enabled, json.updated_at_ms ?? 0, json.is_deleted ?? false);\n }\n}\n/*\r\n Update events\r\n*/ class GroupUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = [\n \"control\",\n \"instance\"\n ];\n static permission = \"exp_groups.group.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(GroupRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((group)=>group.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((group)=>GroupRecord.fromJSON(group)));\n }\n}\nclass ManualAssignmentUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = [\n \"control\",\n \"instance\"\n ];\n static permission = \"exp_groups.assignment.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(AssignmentRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((assignment)=>assignment.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((assignment)=>AssignmentRecord.fromJSON(assignment)));\n }\n}\nclass ResolvedAssignmentUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = [\n \"control\",\n \"instance\"\n ];\n static permission = \"exp_groups.assignment.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(AssignmentRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((assignment)=>assignment.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((assignment)=>AssignmentRecord.fromJSON(assignment)));\n }\n}\nclass RoleMappingUpdatedEvent {\n updates;\n static plugin = \"exp_groups\";\n static type = \"event\";\n static src = \"controller\";\n static dst = \"control\";\n static permission = \"exp_groups.role_mapping.subscribe\";\n constructor(updates){\n this.updates = updates;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n updates: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(RoleMappingRecord.jsonSchema)\n });\n toJSON() {\n return {\n updates: this.updates.map((roleMapping)=>roleMapping.toJSON())\n };\n }\n static fromJSON(json) {\n return new this(json.updates.map((roleMapping)=>RoleMappingRecord.fromJSON(roleMapping)));\n }\n}\n/*\r\n Group requests\r\n*/ class GroupCreateRequest {\n name;\n permissions;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.create\";\n static Response = GroupRecord;\n constructor(name, permissions){\n this.name = name;\n this.permissions = permissions;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n permissions: GroupPermissions.jsonSchema\n });\n toJSON() {\n return {\n name: this.name,\n permissions: this.permissions.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(json.name, GroupPermissions.fromJSON(json.permissions));\n }\n}\nclass GroupUpdateRequest {\n group;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.update\";\n constructor(group){\n this.group = group;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n group: GroupRecord.jsonSchema\n });\n toJSON() {\n return {\n group: this.group.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(GroupRecord.fromJSON(json.group));\n }\n}\nclass GroupDeleteRequest {\n groupId;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.delete\";\n constructor(groupId){\n this.groupId = groupId;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n group_id: this.groupId\n };\n }\n static fromJSON(json) {\n return new this(json.group_id);\n }\n}\nclass GroupGetRequest {\n groupId;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.get\";\n static Response = GroupRecord;\n constructor(groupId){\n this.groupId = groupId;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n group_id: this.groupId\n };\n }\n static fromJSON(json) {\n return new this(json.group_id);\n }\n}\nclass GroupListRequest {\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.group.list\";\n static Response = _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__.jsonArray(GroupRecord);\n constructor(){}\n}\n/*\r\n Assignment requests\r\n*/ class AssignmentCreateRequest {\n name;\n groupId;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.create\";\n static Response = AssignmentRecord;\n constructor(name, groupId){\n this.name = name;\n this.groupId = groupId;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n name: this.name,\n group_id: this.groupId\n };\n }\n static fromJSON(json) {\n return new this(json.name, json.group_id);\n }\n}\nclass AssignmentUpdateRequest {\n assignment;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.update\";\n constructor(assignment){\n this.assignment = assignment;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n assignment: AssignmentRecord.jsonSchema\n });\n toJSON() {\n return {\n assignment: this.assignment.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(AssignmentRecord.fromJSON(json.assignment));\n }\n}\nclass AssignmentDeleteRequest {\n name;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.delete\";\n constructor(name){\n this.name = name;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String()\n });\n toJSON() {\n return {\n name: this.name\n };\n }\n static fromJSON(json) {\n return new this(json.name);\n }\n}\nclass AssignmentGetRequest {\n name;\n resolve;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.get\";\n static Response = AssignmentRecord;\n constructor(name, resolve = false){\n this.name = name;\n this.resolve = resolve;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n name: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.String(),\n resolve: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean()\n });\n toJSON() {\n return {\n name: this.name,\n resolve: this.resolve\n };\n }\n static fromJSON(json) {\n return new this(json.name, json.resolve);\n }\n}\nclass AssignmentListRequest {\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.assignment.list\";\n static Response = _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__.jsonArray(AssignmentRecord);\n constructor(){}\n}\n/*\r\n Role mapping requests\r\n*/ class RoleMappingCreateRequest {\n roleIds;\n groupId;\n priority;\n enabled;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.create\";\n static Response = RoleMappingRecord;\n constructor(roleIds, groupId, priority, enabled){\n this.roleIds = roleIds;\n this.groupId = groupId;\n this.priority = priority;\n this.enabled = enabled;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n role_ids: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Array(_sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()),\n group_id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer(),\n priority: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Number(),\n enabled: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Boolean()\n });\n toJSON() {\n return {\n role_ids: this.roleIds,\n group_id: this.groupId,\n priority: this.priority,\n enabled: this.enabled\n };\n }\n static fromJSON(json) {\n return new this(json.role_ids, json.group_id, json.priority, json.enabled);\n }\n}\nclass RoleMappingUpdateRequest {\n roleMapping;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.update\";\n constructor(roleMapping){\n this.roleMapping = roleMapping;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n role_mapping: RoleMappingRecord.jsonSchema\n });\n toJSON() {\n return {\n role_mapping: this.roleMapping.toJSON()\n };\n }\n static fromJSON(json) {\n return new this(RoleMappingRecord.fromJSON(json.role_mapping));\n }\n}\nclass RoleMappingDeleteRequest {\n id;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.delete\";\n constructor(id){\n this.id = id;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n id: this.id\n };\n }\n static fromJSON(json) {\n return new this(json.id);\n }\n}\nclass RoleMappingGetRequest {\n id;\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.get\";\n static Response = RoleMappingRecord;\n constructor(id){\n this.id = id;\n }\n static jsonSchema = _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Object({\n id: _sinclair_typebox__WEBPACK_IMPORTED_MODULE_1__.Type.Integer()\n });\n toJSON() {\n return {\n id: this.id\n };\n }\n static fromJSON(json) {\n return new this(json.id);\n }\n}\nclass RoleMappingListRequest {\n static plugin = \"exp_groups\";\n static type = \"request\";\n static src = [\n \"control\",\n \"instance\"\n ];\n static dst = \"controller\";\n static permission = \"exp_groups.role_mapping.list\";\n static Response = _clusterio_lib__WEBPACK_IMPORTED_MODULE_0__.jsonArray(RoleMappingRecord);\n constructor(){}\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQztBQUNuQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BleHBjbHVzdGVyL3Blcm1pc3Npb24tZ3JvdXBzLy4vbWVzc2FnZXMudHM/YzVmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsaWIgZnJvbSBcIkBjbHVzdGVyaW8vbGliXCI7XHJcbmltcG9ydCB7IFR5cGUsIFN0YXRpYyB9IGZyb20gXCJAc2luY2xhaXIvdHlwZWJveFwiO1xyXG5cclxuLypcclxuICAgIERhdGEgcmVjb3Jkc1xyXG4qL1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwUGVybWlzc2lvbnMge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlzQmxhY2tsaXN0OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyBwZXJtaXNzaW9uczogc3RyaW5nW10sXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgaXNfYmxhY2tsaXN0OiBUeXBlLkJvb2xlYW4oKSxcclxuICAgICAgICBwZXJtaXNzaW9uczogVHlwZS5BcnJheShUeXBlLlN0cmluZygpKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpOiBTdGF0aWM8dHlwZW9mIEdyb3VwUGVybWlzc2lvbnMuanNvblNjaGVtYT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlzX2JsYWNrbGlzdDogdGhpcy5pc0JsYWNrbGlzdCxcclxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IHRoaXMucGVybWlzc2lvbnMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKFxyXG4gICAgICAgICAgICBqc29uLmlzX2JsYWNrbGlzdCxcclxuICAgICAgICAgICAganNvbi5wZXJtaXNzaW9ucyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXBSZWNvcmQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbnMsXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZWRBdE1zOiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBpc0RlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBpZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICAgICAgbmFtZTogVHlwZS5TdHJpbmcoKSxcclxuICAgICAgICBwZXJtaXNzaW9uczogR3JvdXBQZXJtaXNzaW9ucy5qc29uU2NoZW1hLFxyXG4gICAgICAgIHVwZGF0ZWRfYXRfbXM6IFR5cGUuT3B0aW9uYWwoVHlwZS5OdW1iZXIoKSksXHJcbiAgICAgICAgaXNfZGVsZXRlZDogVHlwZS5PcHRpb25hbChUeXBlLkJvb2xlYW4oKSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgbGV0IGpzb246IFN0YXRpYzx0eXBlb2YgR3JvdXBSZWNvcmQuanNvblNjaGVtYT4gPSB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiB0aGlzLnBlcm1pc3Npb25zLnRvSlNPTigpLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZWRBdE1zKSB7XHJcbiAgICAgICAgICAgIGpzb24udXBkYXRlZF9hdF9tcyA9IHRoaXMudXBkYXRlZEF0TXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0RlbGV0ZWQpIHtcclxuICAgICAgICAgICAganNvbi5pc19kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24uaWQsXHJcbiAgICAgICAgICAgIGpzb24ubmFtZSxcclxuICAgICAgICAgICAgR3JvdXBQZXJtaXNzaW9ucy5mcm9tSlNPTihqc29uLnBlcm1pc3Npb25zKSxcclxuICAgICAgICAgICAganNvbi51cGRhdGVkX2F0X21zID8/IDAsXHJcbiAgICAgICAgICAgIGpzb24uaXNfZGVsZXRlZCA/PyBmYWxzZSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzaWdubWVudFJlY29yZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBncm91cElkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZWRBdE1zOiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBpc0RlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICkge31cclxuXHJcbiAgICBnZXQgaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBuYW1lOiBUeXBlLlN0cmluZygpLFxyXG4gICAgICAgIGdyb3VwX2lkOiBUeXBlLkludGVnZXIoKSxcclxuICAgICAgICB1cGRhdGVkX2F0X21zOiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxyXG4gICAgICAgIGlzX2RlbGV0ZWQ6IFR5cGUuT3B0aW9uYWwoVHlwZS5Cb29sZWFuKCkpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCk6IFN0YXRpYzx0eXBlb2YgQXNzaWdubWVudFJlY29yZC5qc29uU2NoZW1hPiB7XHJcbiAgICAgICAgbGV0IGpzb246IFN0YXRpYzx0eXBlb2YgQXNzaWdubWVudFJlY29yZC5qc29uU2NoZW1hPiA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBncm91cF9pZDogdGhpcy5ncm91cElkLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZWRBdE1zKSB7XHJcbiAgICAgICAgICAgIGpzb24udXBkYXRlZF9hdF9tcyA9IHRoaXMudXBkYXRlZEF0TXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0RlbGV0ZWQpIHtcclxuICAgICAgICAgICAganNvbi5pc19kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24ubmFtZSxcclxuICAgICAgICAgICAganNvbi5ncm91cF9pZCxcclxuICAgICAgICAgICAganNvbi51cGRhdGVkX2F0X21zID8/IDAsXHJcbiAgICAgICAgICAgIGpzb24uaXNfZGVsZXRlZCA/PyBmYWxzZSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdSZWNvcmQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHJvbGVJZHM6IFNldDxudW1iZXI+LFxyXG4gICAgICAgIHB1YmxpYyBncm91cElkOiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHByaW9yaXR5OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGVuYWJsZWQ6IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZWRBdE1zOiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBpc0RlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBpZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICAgICAgcm9sZV9pZHM6IFR5cGUuQXJyYXkoVHlwZS5JbnRlZ2VyKCkpLFxyXG4gICAgICAgIGdyb3VwX2lkOiBUeXBlLkludGVnZXIoKSxcclxuICAgICAgICBwcmlvcml0eTogVHlwZS5OdW1iZXIoKSxcclxuICAgICAgICBlbmFibGVkOiBUeXBlLkJvb2xlYW4oKSxcclxuICAgICAgICB1cGRhdGVkX2F0X21zOiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxyXG4gICAgICAgIGlzX2RlbGV0ZWQ6IFR5cGUuT3B0aW9uYWwoVHlwZS5Cb29sZWFuKCkpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCk6IFN0YXRpYzx0eXBlb2YgUm9sZU1hcHBpbmdSZWNvcmQuanNvblNjaGVtYT4ge1xyXG4gICAgICAgIGxldCBqc29uOiBTdGF0aWM8dHlwZW9mIFJvbGVNYXBwaW5nUmVjb3JkLmpzb25TY2hlbWE+ID0ge1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgcm9sZV9pZHM6IFsuLi50aGlzLnJvbGVJZHNdLFxyXG4gICAgICAgICAgICBncm91cF9pZDogdGhpcy5ncm91cElkLFxyXG4gICAgICAgICAgICBwcmlvcml0eTogdGhpcy5wcmlvcml0eSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5lbmFibGVkLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZWRBdE1zKSB7XHJcbiAgICAgICAgICAgIGpzb24udXBkYXRlZF9hdF9tcyA9IHRoaXMudXBkYXRlZEF0TXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0RlbGV0ZWQpIHtcclxuICAgICAgICAgICAganNvbi5pc19kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24uaWQsXHJcbiAgICAgICAgICAgIG5ldyBTZXQoanNvbi5yb2xlX2lkcyksXHJcbiAgICAgICAgICAgIGpzb24uZ3JvdXBfaWQsXHJcbiAgICAgICAgICAgIGpzb24ucHJpb3JpdHksXHJcbiAgICAgICAgICAgIGpzb24uZW5hYmxlZCxcclxuICAgICAgICAgICAganNvbi51cGRhdGVkX2F0X21zID8/IDAsXHJcbiAgICAgICAgICAgIGpzb24uaXNfZGVsZXRlZCA/PyBmYWxzZSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKlxyXG4gICAgVXBkYXRlIGV2ZW50c1xyXG4qL1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwVXBkYXRlZEV2ZW50IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBHcm91cFVwZGF0ZWRFdmVudDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJldmVudFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmdyb3VwLnN1YnNjcmliZVwiIGFzIGNvbnN0O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyB1cGRhdGVzOiBHcm91cFJlY29yZFtdLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHVwZGF0ZXM6IFR5cGUuQXJyYXkoR3JvdXBSZWNvcmQuanNvblNjaGVtYSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgdXBkYXRlczogdGhpcy51cGRhdGVzLm1hcChncm91cCA9PiBncm91cC50b0pTT04oKSkgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24udXBkYXRlcy5tYXAoZ3JvdXAgPT4gR3JvdXBSZWNvcmQuZnJvbUpTT04oZ3JvdXApKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYW51YWxBc3NpZ25tZW50VXBkYXRlZEV2ZW50IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBNYW51YWxBc3NpZ25tZW50VXBkYXRlZEV2ZW50O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcImV2ZW50XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC5zdWJzY3JpYmVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgdXBkYXRlczogQXNzaWdubWVudFJlY29yZFtdLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHVwZGF0ZXM6IFR5cGUuQXJyYXkoQXNzaWdubWVudFJlY29yZC5qc29uU2NoZW1hKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4geyB1cGRhdGVzOiB0aGlzLnVwZGF0ZXMubWFwKGFzc2lnbm1lbnQgPT4gYXNzaWdubWVudC50b0pTT04oKSkgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24udXBkYXRlcy5tYXAoYXNzaWdubWVudCA9PiBBc3NpZ25tZW50UmVjb3JkLmZyb21KU09OKGFzc2lnbm1lbnQpKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXNvbHZlZEFzc2lnbm1lbnRVcGRhdGVkRXZlbnQge1xyXG4gICAgZGVjbGFyZSBbXCJjb25zdHJ1Y3RvclwiXTogdHlwZW9mIFJlc29sdmVkQXNzaWdubWVudFVwZGF0ZWRFdmVudDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJldmVudFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmFzc2lnbm1lbnQuc3Vic2NyaWJlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZXM6IEFzc2lnbm1lbnRSZWNvcmRbXSxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICB1cGRhdGVzOiBUeXBlLkFycmF5KEFzc2lnbm1lbnRSZWNvcmQuanNvblNjaGVtYSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgdXBkYXRlczogdGhpcy51cGRhdGVzLm1hcChhc3NpZ25tZW50ID0+IGFzc2lnbm1lbnQudG9KU09OKCkpIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhqc29uLnVwZGF0ZXMubWFwKGFzc2lnbm1lbnQgPT4gQXNzaWdubWVudFJlY29yZC5mcm9tSlNPTihhc3NpZ25tZW50KSkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdVcGRhdGVkRXZlbnQge1xyXG4gICAgZGVjbGFyZSBbXCJjb25zdHJ1Y3RvclwiXTogdHlwZW9mIFJvbGVNYXBwaW5nVXBkYXRlZEV2ZW50O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcImV2ZW50XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuc3Vic2NyaWJlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHVwZGF0ZXM6IFJvbGVNYXBwaW5nUmVjb3JkW10sXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgdXBkYXRlczogVHlwZS5BcnJheShSb2xlTWFwcGluZ1JlY29yZC5qc29uU2NoZW1hKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4geyB1cGRhdGVzOiB0aGlzLnVwZGF0ZXMubWFwKHJvbGVNYXBwaW5nID0+IHJvbGVNYXBwaW5nLnRvSlNPTigpKSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoanNvbi51cGRhdGVzLm1hcChyb2xlTWFwcGluZyA9PiBSb2xlTWFwcGluZ1JlY29yZC5mcm9tSlNPTihyb2xlTWFwcGluZykpKTtcclxuICAgIH1cclxufVxyXG5cclxuLypcclxuICAgIEdyb3VwIHJlcXVlc3RzXHJcbiovXHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXBDcmVhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBHcm91cENyZWF0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmdyb3VwLmNyZWF0ZVwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIFJlc3BvbnNlID0gR3JvdXBSZWNvcmQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbnMsXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgbmFtZTogVHlwZS5TdHJpbmcoKSxcclxuICAgICAgICBwZXJtaXNzaW9uczogR3JvdXBQZXJtaXNzaW9ucy5qc29uU2NoZW1hLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IHRoaXMucGVybWlzc2lvbnMudG9KU09OKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKFxyXG4gICAgICAgICAgICBqc29uLm5hbWUsXHJcbiAgICAgICAgICAgIEdyb3VwUGVybWlzc2lvbnMuZnJvbUpTT04oanNvbi5wZXJtaXNzaW9ucyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwVXBkYXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBVcGRhdGVSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5ncm91cC51cGRhdGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgZ3JvdXA6IEdyb3VwUmVjb3JkLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIGdyb3VwOiBHcm91cFJlY29yZC5qc29uU2NoZW1hLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLnRvSlNPTigpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhcclxuICAgICAgICAgICAgR3JvdXBSZWNvcmQuZnJvbUpTT04oanNvbi5ncm91cCksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwRGVsZXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBEZWxldGVSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5ncm91cC5kZWxldGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgZ3JvdXBJZDogbnVtYmVyLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIGdyb3VwX2lkOiBUeXBlLkludGVnZXIoKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBncm91cF9pZDogdGhpcy5ncm91cElkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhqc29uLmdyb3VwX2lkKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwR2V0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBHZXRSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5ncm91cC5nZXRcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IEdyb3VwUmVjb3JkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBncm91cElkOiBudW1iZXIsXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgZ3JvdXBfaWQ6IFR5cGUuSW50ZWdlcigpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyb3VwX2lkOiB0aGlzLmdyb3VwSWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24uZ3JvdXBfaWQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdXBMaXN0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgR3JvdXBMaXN0UmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuZ3JvdXAubGlzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIFJlc3BvbnNlID0gbGliLmpzb25BcnJheShHcm91cFJlY29yZCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcblxyXG4vKlxyXG4gICAgQXNzaWdubWVudCByZXF1ZXN0c1xyXG4qL1xyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRDcmVhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBBc3NpZ25tZW50Q3JlYXRlUmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC5jcmVhdGVcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IEFzc2lnbm1lbnRSZWNvcmQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgZ3JvdXBJZDogbnVtYmVyLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIG5hbWU6IFR5cGUuU3RyaW5nKCksXHJcbiAgICAgICAgZ3JvdXBfaWQ6IFR5cGUuSW50ZWdlcigpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgZ3JvdXBfaWQ6IHRoaXMuZ3JvdXBJZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoanNvbi5uYW1lLCBqc29uLmdyb3VwX2lkKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRVcGRhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBBc3NpZ25tZW50VXBkYXRlUmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC51cGRhdGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgYXNzaWdubWVudDogQXNzaWdubWVudFJlY29yZCxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBhc3NpZ25tZW50OiBBc3NpZ25tZW50UmVjb3JkLmpzb25TY2hlbWEsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXNzaWdubWVudDogdGhpcy5hc3NpZ25tZW50LnRvSlNPTigpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhcclxuICAgICAgICAgICAgQXNzaWdubWVudFJlY29yZC5mcm9tSlNPTihqc29uLmFzc2lnbm1lbnQpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBc3NpZ25tZW50RGVsZXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgQXNzaWdubWVudERlbGV0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLmFzc2lnbm1lbnQuZGVsZXRlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBuYW1lOiBUeXBlLlN0cmluZygpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoanNvbi5uYW1lKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRHZXRSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBBc3NpZ25tZW50R2V0UmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMuYXNzaWdubWVudC5nZXRcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IEFzc2lnbm1lbnRSZWNvcmQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcmVzb2x2ZTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIG5hbWU6IFR5cGUuU3RyaW5nKCksXHJcbiAgICAgICAgcmVzb2x2ZTogVHlwZS5Cb29sZWFuKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICByZXNvbHZlOiB0aGlzLnJlc29sdmUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24ubmFtZSwganNvbi5yZXNvbHZlKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRMaXN0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgQXNzaWdubWVudExpc3RSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5hc3NpZ25tZW50Lmxpc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IGxpYi5qc29uQXJyYXkoQXNzaWdubWVudFJlY29yZCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG59XHJcblxyXG4vKlxyXG4gICAgUm9sZSBtYXBwaW5nIHJlcXVlc3RzXHJcbiovXHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdDcmVhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBSb2xlTWFwcGluZ0NyZWF0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy5jcmVhdGVcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IFJvbGVNYXBwaW5nUmVjb3JkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyByb2xlSWRzOiBudW1iZXJbXSxcclxuICAgICAgICBwdWJsaWMgZ3JvdXBJZDogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBwcmlvcml0eTogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBlbmFibGVkOiBib29sZWFuLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHJvbGVfaWRzOiBUeXBlLkFycmF5KFR5cGUuSW50ZWdlcigpKSxcclxuICAgICAgICBncm91cF9pZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICAgICAgcHJpb3JpdHk6IFR5cGUuTnVtYmVyKCksXHJcbiAgICAgICAgZW5hYmxlZDogVHlwZS5Cb29sZWFuKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcm9sZV9pZHM6IHRoaXMucm9sZUlkcyxcclxuICAgICAgICAgICAgZ3JvdXBfaWQ6IHRoaXMuZ3JvdXBJZCxcclxuICAgICAgICAgICAgcHJpb3JpdHk6IHRoaXMucHJpb3JpdHksXHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuZW5hYmxlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tSlNPTihqc29uOiBTdGF0aWM8dHlwZW9mIHRoaXMuanNvblNjaGVtYT4pIHtcclxuICAgICAgICByZXR1cm4gbmV3IHRoaXMoXHJcbiAgICAgICAgICAgIGpzb24ucm9sZV9pZHMsXHJcbiAgICAgICAgICAgIGpzb24uZ3JvdXBfaWQsXHJcbiAgICAgICAgICAgIGpzb24ucHJpb3JpdHksXHJcbiAgICAgICAgICAgIGpzb24uZW5hYmxlZCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdVcGRhdGVSZXF1ZXN0IHtcclxuICAgIGRlY2xhcmUgW1wiY29uc3RydWN0b3JcIl06IHR5cGVvZiBSb2xlTWFwcGluZ1VwZGF0ZVJlcXVlc3Q7XHJcbiAgICBzdGF0aWMgcGx1Z2luID0gXCJleHBfZ3JvdXBzXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgdHlwZSA9IFwicmVxdWVzdFwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHNyYyA9IFtcImNvbnRyb2xcIiwgXCJpbnN0YW5jZVwiXSBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBkc3QgPSBcImNvbnRyb2xsZXJcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBwZXJtaXNzaW9uID0gXCJleHBfZ3JvdXBzLnJvbGVfbWFwcGluZy51cGRhdGVcIiBhcyBjb25zdDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgcm9sZU1hcHBpbmc6IFJvbGVNYXBwaW5nUmVjb3JkLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIHN0YXRpYyBqc29uU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xyXG4gICAgICAgIHJvbGVfbWFwcGluZzogUm9sZU1hcHBpbmdSZWNvcmQuanNvblNjaGVtYSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByb2xlX21hcHBpbmc6IHRoaXMucm9sZU1hcHBpbmcudG9KU09OKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKFxyXG4gICAgICAgICAgICBSb2xlTWFwcGluZ1JlY29yZC5mcm9tSlNPTihqc29uLnJvbGVfbWFwcGluZyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvbGVNYXBwaW5nRGVsZXRlUmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgUm9sZU1hcHBpbmdEZWxldGVSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuZGVsZXRlXCIgYXMgY29uc3Q7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXHJcbiAgICApIHt9XHJcblxyXG4gICAgc3RhdGljIGpzb25TY2hlbWEgPSBUeXBlLk9iamVjdCh7XHJcbiAgICAgICAgaWQ6IFR5cGUuSW50ZWdlcigpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21KU09OKGpzb246IFN0YXRpYzx0eXBlb2YgdGhpcy5qc29uU2NoZW1hPikge1xyXG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhqc29uLmlkKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvbGVNYXBwaW5nR2V0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgUm9sZU1hcHBpbmdHZXRSZXF1ZXN0O1xyXG4gICAgc3RhdGljIHBsdWdpbiA9IFwiZXhwX2dyb3Vwc1wiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHR5cGUgPSBcInJlcXVlc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBzcmMgPSBbXCJjb250cm9sXCIsIFwiaW5zdGFuY2VcIl0gYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgZHN0ID0gXCJjb250cm9sbGVyXCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgcGVybWlzc2lvbiA9IFwiZXhwX2dyb3Vwcy5yb2xlX21hcHBpbmcuZ2V0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgUmVzcG9uc2UgPSBSb2xlTWFwcGluZ1JlY29yZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ6IG51bWJlcixcclxuICAgICkge31cclxuXHJcbiAgICBzdGF0aWMganNvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcclxuICAgICAgICBpZDogVHlwZS5JbnRlZ2VyKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUpTT04oanNvbjogU3RhdGljPHR5cGVvZiB0aGlzLmpzb25TY2hlbWE+KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGpzb24uaWQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUm9sZU1hcHBpbmdMaXN0UmVxdWVzdCB7XHJcbiAgICBkZWNsYXJlIFtcImNvbnN0cnVjdG9yXCJdOiB0eXBlb2YgUm9sZU1hcHBpbmdMaXN0UmVxdWVzdDtcclxuICAgIHN0YXRpYyBwbHVnaW4gPSBcImV4cF9ncm91cHNcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyB0eXBlID0gXCJyZXF1ZXN0XCIgYXMgY29uc3Q7XHJcbiAgICBzdGF0aWMgc3JjID0gW1wiY29udHJvbFwiLCBcImluc3RhbmNlXCJdIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIGRzdCA9IFwiY29udHJvbGxlclwiIGFzIGNvbnN0O1xyXG4gICAgc3RhdGljIHBlcm1pc3Npb24gPSBcImV4cF9ncm91cHMucm9sZV9tYXBwaW5nLmxpc3RcIiBhcyBjb25zdDtcclxuICAgIHN0YXRpYyBSZXNwb25zZSA9IGxpYi5qc29uQXJyYXkoUm9sZU1hcHBpbmdSZWNvcmQpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxufVxyXG4iXSwibmFtZXMiOlsibGliIiwiVHlwZSIsIkdyb3VwUGVybWlzc2lvbnMiLCJpc0JsYWNrbGlzdCIsInBlcm1pc3Npb25zIiwianNvblNjaGVtYSIsIk9iamVjdCIsImlzX2JsYWNrbGlzdCIsIkJvb2xlYW4iLCJBcnJheSIsIlN0cmluZyIsInRvSlNPTiIsImZyb21KU09OIiwianNvbiIsIkdyb3VwUmVjb3JkIiwiaWQiLCJuYW1lIiwidXBkYXRlZEF0TXMiLCJpc0RlbGV0ZWQiLCJJbnRlZ2VyIiwidXBkYXRlZF9hdF9tcyIsIk9wdGlvbmFsIiwiTnVtYmVyIiwiaXNfZGVsZXRlZCIsIkFzc2lnbm1lbnRSZWNvcmQiLCJncm91cElkIiwiZ3JvdXBfaWQiLCJSb2xlTWFwcGluZ1JlY29yZCIsInJvbGVJZHMiLCJwcmlvcml0eSIsImVuYWJsZWQiLCJyb2xlX2lkcyIsIlNldCIsIkdyb3VwVXBkYXRlZEV2ZW50IiwicGx1Z2luIiwidHlwZSIsInNyYyIsImRzdCIsInBlcm1pc3Npb24iLCJ1cGRhdGVzIiwibWFwIiwiZ3JvdXAiLCJNYW51YWxBc3NpZ25tZW50VXBkYXRlZEV2ZW50IiwiYXNzaWdubWVudCIsIlJlc29sdmVkQXNzaWdubWVudFVwZGF0ZWRFdmVudCIsIlJvbGVNYXBwaW5nVXBkYXRlZEV2ZW50Iiwicm9sZU1hcHBpbmciLCJHcm91cENyZWF0ZVJlcXVlc3QiLCJSZXNwb25zZSIsIkdyb3VwVXBkYXRlUmVxdWVzdCIsIkdyb3VwRGVsZXRlUmVxdWVzdCIsIkdyb3VwR2V0UmVxdWVzdCIsIkdyb3VwTGlzdFJlcXVlc3QiLCJqc29uQXJyYXkiLCJBc3NpZ25tZW50Q3JlYXRlUmVxdWVzdCIsIkFzc2lnbm1lbnRVcGRhdGVSZXF1ZXN0IiwiQXNzaWdubWVudERlbGV0ZVJlcXVlc3QiLCJBc3NpZ25tZW50R2V0UmVxdWVzdCIsInJlc29sdmUiLCJBc3NpZ25tZW50TGlzdFJlcXVlc3QiLCJSb2xlTWFwcGluZ0NyZWF0ZVJlcXVlc3QiLCJSb2xlTWFwcGluZ1VwZGF0ZVJlcXVlc3QiLCJyb2xlX21hcHBpbmciLCJSb2xlTWFwcGluZ0RlbGV0ZVJlcXVlc3QiLCJSb2xlTWFwcGluZ0dldFJlcXVlc3QiLCJSb2xlTWFwcGluZ0xpc3RSZXF1ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///40\n\n}");
|
|
19
|
+
|
|
20
|
+
/***/ }
|
|
21
|
+
|
|
22
|
+
}]);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
4
|
+
* This devtool is neither made for production nor for readable output files.
|
|
5
|
+
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
6
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
7
|
+
* or disable the default devtool with "devtool: false".
|
|
8
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
9
|
+
*/
|
|
10
|
+
(self["webpackChunk_expcluster_permission_groups"] = self["webpackChunk_expcluster_permission_groups"] || []).push([["package_json"],{
|
|
11
|
+
|
|
12
|
+
/***/ 330
|
|
13
|
+
/*!**********************!*\
|
|
14
|
+
!*** ./package.json ***!
|
|
15
|
+
\**********************/
|
|
16
|
+
(module) {
|
|
17
|
+
|
|
18
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@expcluster/permission-groups","version":"7.0.1","description":"Clusterio plugin providing syncing of permission groups","author":"Cooldude2606 <https://github.com/Cooldude2606>","license":"MIT","repository":"explosivegaming/ExpCluster","main":"dist/node/index.js","scripts":{"prepare":"tsc --build && webpack-cli --env production"},"engines":{"node":">=18"},"peerDependencies":{"@clusterio/controller":"workspace:^","@clusterio/host":"workspace:^","@clusterio/lib":"workspace:^","@clusterio/web_ui":"workspace:^"},"devDependencies":{"@ant-design/icons":"^6.2.3","@clusterio/controller":"workspace:^","@clusterio/host":"workspace:^","@clusterio/lib":"workspace:^","@clusterio/web_ui":"workspace:^","@types/node":"catalog:","@types/react":"catalog:","antd":"catalog:","react":"catalog:","react-dom":"catalog:","react-router-dom":"catalog:","typescript":"catalog:","webpack":"catalog:","webpack-cli":"catalog:","webpack-merge":"catalog:"},"dependencies":{"@sinclair/typebox":"catalog:"},"publishConfig":{"access":"public"},"keywords":["clusterio","clusterio-plugin","factorio"]}');
|
|
19
|
+
|
|
20
|
+
/***/ }
|
|
21
|
+
|
|
22
|
+
}]);
|