@ragemp-mango/client 2.0.6-beta.0

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.
@@ -0,0 +1,209 @@
1
+ import { G as Guard, E as ExecutionContext, M as MangoRequest, a as MangoResponse } from '../guard.interface-DzGLAoda.js';
2
+ import '@ragemp-mango/core/app';
3
+
4
+ /**
5
+ * Windows Virtual Key codes for use with mp.keys.bind().
6
+ * Based on: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
7
+ *
8
+ * Note: The @ragempcommunity/types-client package does not include a key code enum,
9
+ * so we provide this enum for developer convenience.
10
+ */
11
+ declare enum KeyCode {
12
+ Backspace = 8,
13
+ Tab = 9,
14
+ Enter = 13,
15
+ Shift = 16,
16
+ Ctrl = 17,
17
+ Alt = 18,
18
+ Pause = 19,
19
+ CapsLock = 20,
20
+ Escape = 27,
21
+ Space = 32,
22
+ PageUp = 33,
23
+ PageDown = 34,
24
+ End = 35,
25
+ Home = 36,
26
+ Left = 37,
27
+ Up = 38,
28
+ Right = 39,
29
+ Down = 40,
30
+ Insert = 45,
31
+ Delete = 46,
32
+ Key0 = 48,
33
+ Key1 = 49,
34
+ Key2 = 50,
35
+ Key3 = 51,
36
+ Key4 = 52,
37
+ Key5 = 53,
38
+ Key6 = 54,
39
+ Key7 = 55,
40
+ Key8 = 56,
41
+ Key9 = 57,
42
+ A = 65,
43
+ B = 66,
44
+ C = 67,
45
+ D = 68,
46
+ E = 69,
47
+ F = 70,
48
+ G = 71,
49
+ H = 72,
50
+ I = 73,
51
+ J = 74,
52
+ K = 75,
53
+ L = 76,
54
+ M = 77,
55
+ N = 78,
56
+ O = 79,
57
+ P = 80,
58
+ Q = 81,
59
+ R = 82,
60
+ S = 83,
61
+ T = 84,
62
+ U = 85,
63
+ V = 86,
64
+ W = 87,
65
+ X = 88,
66
+ Y = 89,
67
+ Z = 90,
68
+ Numpad0 = 96,
69
+ Numpad1 = 97,
70
+ Numpad2 = 98,
71
+ Numpad3 = 99,
72
+ Numpad4 = 100,
73
+ Numpad5 = 101,
74
+ Numpad6 = 102,
75
+ Numpad7 = 103,
76
+ Numpad8 = 104,
77
+ Numpad9 = 105,
78
+ NumpadMultiply = 106,
79
+ NumpadAdd = 107,
80
+ NumpadSubtract = 109,
81
+ NumpadDecimal = 110,
82
+ NumpadDivide = 111,
83
+ F1 = 112,
84
+ F2 = 113,
85
+ F3 = 114,
86
+ F4 = 115,
87
+ F5 = 116,
88
+ F6 = 117,
89
+ F7 = 118,
90
+ F8 = 119,
91
+ F9 = 120,
92
+ F10 = 121,
93
+ F11 = 122,
94
+ F12 = 123,
95
+ NumLock = 144,
96
+ ScrollLock = 145,
97
+ Semicolon = 186,
98
+ Equal = 187,
99
+ Comma = 188,
100
+ Minus = 189,
101
+ Period = 190,
102
+ Slash = 191,
103
+ Backquote = 192,
104
+ BracketLeft = 219,
105
+ Backslash = 220,
106
+ BracketRight = 221,
107
+ Quote = 222
108
+ }
109
+ interface KeyEventParameters {
110
+ key: number;
111
+ }
112
+ declare class KeyGuard implements Guard {
113
+ private readonly key;
114
+ constructor(key: KeyCode);
115
+ canActivate(context: ExecutionContext<MangoRequest<KeyEventParameters>, MangoResponse>): boolean;
116
+ }
117
+ type KeyHandler = () => void;
118
+ /**
119
+ * Decorator that binds a method to be called when a key is released (keyup).
120
+ * Uses mp.keys.bind internally with keydown=false.
121
+ *
122
+ * @param key - The key code to bind to
123
+ * @example
124
+ * ```typescript
125
+ * @OnKeyUp(KeyCode.F2)
126
+ * onF2Released() {
127
+ * mp.gui.chat.push("F2 was released");
128
+ * }
129
+ * ```
130
+ */
131
+ declare function OnKeyUp(key: KeyCode): MethodDecorator;
132
+ /**
133
+ * Decorator that binds a method to be called once when a key is released, then unbinds.
134
+ *
135
+ * @param key - The key code to bind to
136
+ * @example
137
+ * ```typescript
138
+ * @OnceKeyUp(KeyCode.F3)
139
+ * onF3ReleasedOnce() {
140
+ * mp.gui.chat.push("F3 was released (only fires once)");
141
+ * }
142
+ * ```
143
+ */
144
+ declare function OnceKeyUp(key: KeyCode): MethodDecorator;
145
+ /**
146
+ * Decorator that binds a method to be called when a key is pressed down (keydown).
147
+ * Uses mp.keys.bind internally with keydown=true.
148
+ *
149
+ * @param key - The key code to bind to
150
+ * @example
151
+ * ```typescript
152
+ * @OnKeyDown(KeyCode.F2)
153
+ * onF2Pressed() {
154
+ * mp.gui.chat.push("F2 was pressed");
155
+ * }
156
+ * ```
157
+ */
158
+ declare function OnKeyDown(key: KeyCode): MethodDecorator;
159
+ /**
160
+ * Decorator that binds a method to be called once when a key is pressed, then unbinds.
161
+ *
162
+ * @param key - The key code to bind to
163
+ * @example
164
+ * ```typescript
165
+ * @OnceKeyDown(KeyCode.F4)
166
+ * onF4PressedOnce() {
167
+ * mp.gui.chat.push("F4 was pressed (only fires once)");
168
+ * }
169
+ * ```
170
+ */
171
+ declare function OnceKeyDown(key: KeyCode): MethodDecorator;
172
+ /**
173
+ * Utility function to check if a key is currently pressed down.
174
+ * Wraps mp.keys.isDown.
175
+ *
176
+ * @param key - The key code to check
177
+ * @returns true if the key is pressed, false otherwise
178
+ */
179
+ declare function isKeyDown(key: KeyCode): boolean;
180
+ /**
181
+ * Utility function to check if a key is currently released.
182
+ * Wraps mp.keys.isUp.
183
+ *
184
+ * @param key - The key code to check
185
+ * @returns true if the key is released, false otherwise
186
+ */
187
+ declare function isKeyUp(key: KeyCode): boolean;
188
+ /**
189
+ * Manually bind a key handler.
190
+ *
191
+ * @param key - The key code to bind
192
+ * @param keydown - true for keydown, false for keyup
193
+ * @param handler - The function to call
194
+ */
195
+ declare function bindKey(key: KeyCode, keydown: boolean, handler: KeyHandler): void;
196
+ /**
197
+ * Manually unbind a key handler.
198
+ *
199
+ * @param key - The key code to unbind
200
+ * @param keydown - true for keydown, false for keyup
201
+ * @param handler - Optional specific handler to unbind
202
+ */
203
+ declare function unbindKey(key: KeyCode, keydown: boolean, handler?: KeyHandler): void;
204
+ /**
205
+ * Unbind all key bindings created by decorators.
206
+ */
207
+ declare function unbindAllKeys(): void;
208
+
209
+ export { KeyCode, KeyGuard, OnKeyDown, OnKeyUp, OnceKeyDown, OnceKeyUp, bindKey, isKeyDown, isKeyUp, unbindAllKeys, unbindKey };
@@ -0,0 +1,259 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/utils/keyboard-decorators.ts
5
+ var KeyCode = /* @__PURE__ */ (function(KeyCode2) {
6
+ KeyCode2[KeyCode2["Backspace"] = 8] = "Backspace";
7
+ KeyCode2[KeyCode2["Tab"] = 9] = "Tab";
8
+ KeyCode2[KeyCode2["Enter"] = 13] = "Enter";
9
+ KeyCode2[KeyCode2["Shift"] = 16] = "Shift";
10
+ KeyCode2[KeyCode2["Ctrl"] = 17] = "Ctrl";
11
+ KeyCode2[KeyCode2["Alt"] = 18] = "Alt";
12
+ KeyCode2[KeyCode2["Pause"] = 19] = "Pause";
13
+ KeyCode2[KeyCode2["CapsLock"] = 20] = "CapsLock";
14
+ KeyCode2[KeyCode2["Escape"] = 27] = "Escape";
15
+ KeyCode2[KeyCode2["Space"] = 32] = "Space";
16
+ KeyCode2[KeyCode2["PageUp"] = 33] = "PageUp";
17
+ KeyCode2[KeyCode2["PageDown"] = 34] = "PageDown";
18
+ KeyCode2[KeyCode2["End"] = 35] = "End";
19
+ KeyCode2[KeyCode2["Home"] = 36] = "Home";
20
+ KeyCode2[KeyCode2["Left"] = 37] = "Left";
21
+ KeyCode2[KeyCode2["Up"] = 38] = "Up";
22
+ KeyCode2[KeyCode2["Right"] = 39] = "Right";
23
+ KeyCode2[KeyCode2["Down"] = 40] = "Down";
24
+ KeyCode2[KeyCode2["Insert"] = 45] = "Insert";
25
+ KeyCode2[KeyCode2["Delete"] = 46] = "Delete";
26
+ KeyCode2[KeyCode2["Key0"] = 48] = "Key0";
27
+ KeyCode2[KeyCode2["Key1"] = 49] = "Key1";
28
+ KeyCode2[KeyCode2["Key2"] = 50] = "Key2";
29
+ KeyCode2[KeyCode2["Key3"] = 51] = "Key3";
30
+ KeyCode2[KeyCode2["Key4"] = 52] = "Key4";
31
+ KeyCode2[KeyCode2["Key5"] = 53] = "Key5";
32
+ KeyCode2[KeyCode2["Key6"] = 54] = "Key6";
33
+ KeyCode2[KeyCode2["Key7"] = 55] = "Key7";
34
+ KeyCode2[KeyCode2["Key8"] = 56] = "Key8";
35
+ KeyCode2[KeyCode2["Key9"] = 57] = "Key9";
36
+ KeyCode2[KeyCode2["A"] = 65] = "A";
37
+ KeyCode2[KeyCode2["B"] = 66] = "B";
38
+ KeyCode2[KeyCode2["C"] = 67] = "C";
39
+ KeyCode2[KeyCode2["D"] = 68] = "D";
40
+ KeyCode2[KeyCode2["E"] = 69] = "E";
41
+ KeyCode2[KeyCode2["F"] = 70] = "F";
42
+ KeyCode2[KeyCode2["G"] = 71] = "G";
43
+ KeyCode2[KeyCode2["H"] = 72] = "H";
44
+ KeyCode2[KeyCode2["I"] = 73] = "I";
45
+ KeyCode2[KeyCode2["J"] = 74] = "J";
46
+ KeyCode2[KeyCode2["K"] = 75] = "K";
47
+ KeyCode2[KeyCode2["L"] = 76] = "L";
48
+ KeyCode2[KeyCode2["M"] = 77] = "M";
49
+ KeyCode2[KeyCode2["N"] = 78] = "N";
50
+ KeyCode2[KeyCode2["O"] = 79] = "O";
51
+ KeyCode2[KeyCode2["P"] = 80] = "P";
52
+ KeyCode2[KeyCode2["Q"] = 81] = "Q";
53
+ KeyCode2[KeyCode2["R"] = 82] = "R";
54
+ KeyCode2[KeyCode2["S"] = 83] = "S";
55
+ KeyCode2[KeyCode2["T"] = 84] = "T";
56
+ KeyCode2[KeyCode2["U"] = 85] = "U";
57
+ KeyCode2[KeyCode2["V"] = 86] = "V";
58
+ KeyCode2[KeyCode2["W"] = 87] = "W";
59
+ KeyCode2[KeyCode2["X"] = 88] = "X";
60
+ KeyCode2[KeyCode2["Y"] = 89] = "Y";
61
+ KeyCode2[KeyCode2["Z"] = 90] = "Z";
62
+ KeyCode2[KeyCode2["Numpad0"] = 96] = "Numpad0";
63
+ KeyCode2[KeyCode2["Numpad1"] = 97] = "Numpad1";
64
+ KeyCode2[KeyCode2["Numpad2"] = 98] = "Numpad2";
65
+ KeyCode2[KeyCode2["Numpad3"] = 99] = "Numpad3";
66
+ KeyCode2[KeyCode2["Numpad4"] = 100] = "Numpad4";
67
+ KeyCode2[KeyCode2["Numpad5"] = 101] = "Numpad5";
68
+ KeyCode2[KeyCode2["Numpad6"] = 102] = "Numpad6";
69
+ KeyCode2[KeyCode2["Numpad7"] = 103] = "Numpad7";
70
+ KeyCode2[KeyCode2["Numpad8"] = 104] = "Numpad8";
71
+ KeyCode2[KeyCode2["Numpad9"] = 105] = "Numpad9";
72
+ KeyCode2[KeyCode2["NumpadMultiply"] = 106] = "NumpadMultiply";
73
+ KeyCode2[KeyCode2["NumpadAdd"] = 107] = "NumpadAdd";
74
+ KeyCode2[KeyCode2["NumpadSubtract"] = 109] = "NumpadSubtract";
75
+ KeyCode2[KeyCode2["NumpadDecimal"] = 110] = "NumpadDecimal";
76
+ KeyCode2[KeyCode2["NumpadDivide"] = 111] = "NumpadDivide";
77
+ KeyCode2[KeyCode2["F1"] = 112] = "F1";
78
+ KeyCode2[KeyCode2["F2"] = 113] = "F2";
79
+ KeyCode2[KeyCode2["F3"] = 114] = "F3";
80
+ KeyCode2[KeyCode2["F4"] = 115] = "F4";
81
+ KeyCode2[KeyCode2["F5"] = 116] = "F5";
82
+ KeyCode2[KeyCode2["F6"] = 117] = "F6";
83
+ KeyCode2[KeyCode2["F7"] = 118] = "F7";
84
+ KeyCode2[KeyCode2["F8"] = 119] = "F8";
85
+ KeyCode2[KeyCode2["F9"] = 120] = "F9";
86
+ KeyCode2[KeyCode2["F10"] = 121] = "F10";
87
+ KeyCode2[KeyCode2["F11"] = 122] = "F11";
88
+ KeyCode2[KeyCode2["F12"] = 123] = "F12";
89
+ KeyCode2[KeyCode2["NumLock"] = 144] = "NumLock";
90
+ KeyCode2[KeyCode2["ScrollLock"] = 145] = "ScrollLock";
91
+ KeyCode2[KeyCode2["Semicolon"] = 186] = "Semicolon";
92
+ KeyCode2[KeyCode2["Equal"] = 187] = "Equal";
93
+ KeyCode2[KeyCode2["Comma"] = 188] = "Comma";
94
+ KeyCode2[KeyCode2["Minus"] = 189] = "Minus";
95
+ KeyCode2[KeyCode2["Period"] = 190] = "Period";
96
+ KeyCode2[KeyCode2["Slash"] = 191] = "Slash";
97
+ KeyCode2[KeyCode2["Backquote"] = 192] = "Backquote";
98
+ KeyCode2[KeyCode2["BracketLeft"] = 219] = "BracketLeft";
99
+ KeyCode2[KeyCode2["Backslash"] = 220] = "Backslash";
100
+ KeyCode2[KeyCode2["BracketRight"] = 221] = "BracketRight";
101
+ KeyCode2[KeyCode2["Quote"] = 222] = "Quote";
102
+ return KeyCode2;
103
+ })({});
104
+ var KeyGuard = class {
105
+ static {
106
+ __name(this, "KeyGuard");
107
+ }
108
+ key;
109
+ constructor(key) {
110
+ this.key = key;
111
+ }
112
+ canActivate(context) {
113
+ const eventKey = context.request.body.key;
114
+ return eventKey === this.key;
115
+ }
116
+ };
117
+ var keyBindings = /* @__PURE__ */ new Map();
118
+ function OnKeyUp(key) {
119
+ return (target, propertyKey, descriptor) => {
120
+ const originalMethod = descriptor.value;
121
+ const bindingKey = `${target.constructor.name}_${String(propertyKey)}_keyup_${key}`;
122
+ Reflect.defineMetadata("mango:keyup", {
123
+ key,
124
+ bindingKey
125
+ }, target, propertyKey);
126
+ const handler = /* @__PURE__ */ __name(function() {
127
+ return originalMethod.apply(this, arguments);
128
+ }, "handler");
129
+ keyBindings.set(bindingKey, handler);
130
+ if (typeof mp !== "undefined" && mp.keys) {
131
+ mp.keys.bind(key, false, handler);
132
+ }
133
+ return descriptor;
134
+ };
135
+ }
136
+ __name(OnKeyUp, "OnKeyUp");
137
+ function OnceKeyUp(key) {
138
+ return (target, propertyKey, descriptor) => {
139
+ const originalMethod = descriptor.value;
140
+ const bindingKey = `${target.constructor.name}_${String(propertyKey)}_oncekeyup_${key}`;
141
+ Reflect.defineMetadata("mango:oncekeyup", {
142
+ key,
143
+ bindingKey
144
+ }, target, propertyKey);
145
+ const handler = /* @__PURE__ */ __name(function() {
146
+ if (typeof mp !== "undefined" && mp.keys) {
147
+ mp.keys.unbind(key, false, handler);
148
+ }
149
+ keyBindings.delete(bindingKey);
150
+ return originalMethod.apply(this, arguments);
151
+ }, "handler");
152
+ keyBindings.set(bindingKey, handler);
153
+ if (typeof mp !== "undefined" && mp.keys) {
154
+ mp.keys.bind(key, false, handler);
155
+ }
156
+ return descriptor;
157
+ };
158
+ }
159
+ __name(OnceKeyUp, "OnceKeyUp");
160
+ function OnKeyDown(key) {
161
+ return (target, propertyKey, descriptor) => {
162
+ const originalMethod = descriptor.value;
163
+ const bindingKey = `${target.constructor.name}_${String(propertyKey)}_keydown_${key}`;
164
+ Reflect.defineMetadata("mango:keydown", {
165
+ key,
166
+ bindingKey
167
+ }, target, propertyKey);
168
+ const handler = /* @__PURE__ */ __name(function() {
169
+ return originalMethod.apply(this, arguments);
170
+ }, "handler");
171
+ keyBindings.set(bindingKey, handler);
172
+ if (typeof mp !== "undefined" && mp.keys) {
173
+ mp.keys.bind(key, true, handler);
174
+ }
175
+ return descriptor;
176
+ };
177
+ }
178
+ __name(OnKeyDown, "OnKeyDown");
179
+ function OnceKeyDown(key) {
180
+ return (target, propertyKey, descriptor) => {
181
+ const originalMethod = descriptor.value;
182
+ const bindingKey = `${target.constructor.name}_${String(propertyKey)}_oncekeydown_${key}`;
183
+ Reflect.defineMetadata("mango:oncekeydown", {
184
+ key,
185
+ bindingKey
186
+ }, target, propertyKey);
187
+ const handler = /* @__PURE__ */ __name(function() {
188
+ if (typeof mp !== "undefined" && mp.keys) {
189
+ mp.keys.unbind(key, true, handler);
190
+ }
191
+ keyBindings.delete(bindingKey);
192
+ return originalMethod.apply(this, arguments);
193
+ }, "handler");
194
+ keyBindings.set(bindingKey, handler);
195
+ if (typeof mp !== "undefined" && mp.keys) {
196
+ mp.keys.bind(key, true, handler);
197
+ }
198
+ return descriptor;
199
+ };
200
+ }
201
+ __name(OnceKeyDown, "OnceKeyDown");
202
+ function isKeyDown(key) {
203
+ if (typeof mp !== "undefined" && mp.keys) {
204
+ return mp.keys.isDown(key);
205
+ }
206
+ return false;
207
+ }
208
+ __name(isKeyDown, "isKeyDown");
209
+ function isKeyUp(key) {
210
+ if (typeof mp !== "undefined" && mp.keys) {
211
+ return mp.keys.isUp(key);
212
+ }
213
+ return true;
214
+ }
215
+ __name(isKeyUp, "isKeyUp");
216
+ function bindKey(key, keydown, handler) {
217
+ if (typeof mp !== "undefined" && mp.keys) {
218
+ mp.keys.bind(key, keydown, handler);
219
+ }
220
+ }
221
+ __name(bindKey, "bindKey");
222
+ function unbindKey(key, keydown, handler) {
223
+ if (typeof mp !== "undefined" && mp.keys) {
224
+ if (handler) {
225
+ mp.keys.unbind(key, keydown, handler);
226
+ } else {
227
+ mp.keys.unbind(key, keydown);
228
+ }
229
+ }
230
+ }
231
+ __name(unbindKey, "unbindKey");
232
+ function unbindAllKeys() {
233
+ if (typeof mp !== "undefined" && mp.keys) {
234
+ keyBindings.forEach((handler, bindingKey) => {
235
+ const parts = bindingKey.split("_");
236
+ const keyStr = parts.pop();
237
+ if (!keyStr) return;
238
+ const isKeydown = bindingKey.includes("keydown");
239
+ const key = parseInt(keyStr, 10);
240
+ mp.keys.unbind(key, isKeydown, handler);
241
+ });
242
+ keyBindings.clear();
243
+ }
244
+ }
245
+ __name(unbindAllKeys, "unbindAllKeys");
246
+ export {
247
+ KeyCode,
248
+ KeyGuard,
249
+ OnKeyDown,
250
+ OnKeyUp,
251
+ OnceKeyDown,
252
+ OnceKeyUp,
253
+ bindKey,
254
+ isKeyDown,
255
+ isKeyUp,
256
+ unbindAllKeys,
257
+ unbindKey
258
+ };
259
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2tleWJvYXJkLWRlY29yYXRvcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCwgR3VhcmQsIE1hbmdvUmVxdWVzdCwgTWFuZ29SZXNwb25zZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIFdpbmRvd3MgVmlydHVhbCBLZXkgY29kZXMgZm9yIHVzZSB3aXRoIG1wLmtleXMuYmluZCgpLlxuICogQmFzZWQgb246IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvaW5wdXRkZXYvdmlydHVhbC1rZXktY29kZXNcbiAqXG4gKiBOb3RlOiBUaGUgQHJhZ2VtcGNvbW11bml0eS90eXBlcy1jbGllbnQgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEga2V5IGNvZGUgZW51bSxcbiAqIHNvIHdlIHByb3ZpZGUgdGhpcyBlbnVtIGZvciBkZXZlbG9wZXIgY29udmVuaWVuY2UuXG4gKi9cbmV4cG9ydCBlbnVtIEtleUNvZGUge1xuICAgIEJhY2tzcGFjZSA9IDB4MDgsXG4gICAgVGFiID0gMHgwOSxcbiAgICBFbnRlciA9IDB4MEQsXG4gICAgU2hpZnQgPSAweDEwLFxuICAgIEN0cmwgPSAweDExLFxuICAgIEFsdCA9IDB4MTIsXG4gICAgUGF1c2UgPSAweDEzLFxuICAgIENhcHNMb2NrID0gMHgxNCxcbiAgICBFc2NhcGUgPSAweDFCLFxuICAgIFNwYWNlID0gMHgyMCxcbiAgICBQYWdlVXAgPSAweDIxLFxuICAgIFBhZ2VEb3duID0gMHgyMixcbiAgICBFbmQgPSAweDIzLFxuICAgIEhvbWUgPSAweDI0LFxuICAgIExlZnQgPSAweDI1LFxuICAgIFVwID0gMHgyNixcbiAgICBSaWdodCA9IDB4MjcsXG4gICAgRG93biA9IDB4MjgsXG4gICAgSW5zZXJ0ID0gMHgyRCxcbiAgICBEZWxldGUgPSAweDJFLFxuICAgIEtleTAgPSAweDMwLFxuICAgIEtleTEgPSAweDMxLFxuICAgIEtleTIgPSAweDMyLFxuICAgIEtleTMgPSAweDMzLFxuICAgIEtleTQgPSAweDM0LFxuICAgIEtleTUgPSAweDM1LFxuICAgIEtleTYgPSAweDM2LFxuICAgIEtleTcgPSAweDM3LFxuICAgIEtleTggPSAweDM4LFxuICAgIEtleTkgPSAweDM5LFxuICAgIEEgPSAweDQxLFxuICAgIEIgPSAweDQyLFxuICAgIEMgPSAweDQzLFxuICAgIEQgPSAweDQ0LFxuICAgIEUgPSAweDQ1LFxuICAgIEYgPSAweDQ2LFxuICAgIEcgPSAweDQ3LFxuICAgIEggPSAweDQ4LFxuICAgIEkgPSAweDQ5LFxuICAgIEogPSAweDRBLFxuICAgIEsgPSAweDRCLFxuICAgIEwgPSAweDRDLFxuICAgIE0gPSAweDRELFxuICAgIE4gPSAweDRFLFxuICAgIE8gPSAweDRGLFxuICAgIFAgPSAweDUwLFxuICAgIFEgPSAweDUxLFxuICAgIFIgPSAweDUyLFxuICAgIFMgPSAweDUzLFxuICAgIFQgPSAweDU0LFxuICAgIFUgPSAweDU1LFxuICAgIFYgPSAweDU2LFxuICAgIFcgPSAweDU3LFxuICAgIFggPSAweDU4LFxuICAgIFkgPSAweDU5LFxuICAgIFogPSAweDVBLFxuICAgIE51bXBhZDAgPSAweDYwLFxuICAgIE51bXBhZDEgPSAweDYxLFxuICAgIE51bXBhZDIgPSAweDYyLFxuICAgIE51bXBhZDMgPSAweDYzLFxuICAgIE51bXBhZDQgPSAweDY0LFxuICAgIE51bXBhZDUgPSAweDY1LFxuICAgIE51bXBhZDYgPSAweDY2LFxuICAgIE51bXBhZDcgPSAweDY3LFxuICAgIE51bXBhZDggPSAweDY4LFxuICAgIE51bXBhZDkgPSAweDY5LFxuICAgIE51bXBhZE11bHRpcGx5ID0gMHg2QSxcbiAgICBOdW1wYWRBZGQgPSAweDZCLFxuICAgIE51bXBhZFN1YnRyYWN0ID0gMHg2RCxcbiAgICBOdW1wYWREZWNpbWFsID0gMHg2RSxcbiAgICBOdW1wYWREaXZpZGUgPSAweDZGLFxuICAgIEYxID0gMHg3MCxcbiAgICBGMiA9IDB4NzEsXG4gICAgRjMgPSAweDcyLFxuICAgIEY0ID0gMHg3MyxcbiAgICBGNSA9IDB4NzQsXG4gICAgRjYgPSAweDc1LFxuICAgIEY3ID0gMHg3NixcbiAgICBGOCA9IDB4NzcsXG4gICAgRjkgPSAweDc4LFxuICAgIEYxMCA9IDB4NzksXG4gICAgRjExID0gMHg3QSxcbiAgICBGMTIgPSAweDdCLFxuICAgIE51bUxvY2sgPSAweDkwLFxuICAgIFNjcm9sbExvY2sgPSAweDkxLFxuICAgIFNlbWljb2xvbiA9IDB4QkEsXG4gICAgRXF1YWwgPSAweEJCLFxuICAgIENvbW1hID0gMHhCQyxcbiAgICBNaW51cyA9IDB4QkQsXG4gICAgUGVyaW9kID0gMHhCRSxcbiAgICBTbGFzaCA9IDB4QkYsXG4gICAgQmFja3F1b3RlID0gMHhDMCxcbiAgICBCcmFja2V0TGVmdCA9IDB4REIsXG4gICAgQmFja3NsYXNoID0gMHhEQyxcbiAgICBCcmFja2V0UmlnaHQgPSAweERELFxuICAgIFF1b3RlID0gMHhERSxcbn1cblxuaW50ZXJmYWNlIEtleUV2ZW50UGFyYW1ldGVycyB7XG4gICAga2V5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBLZXlHdWFyZCBpbXBsZW1lbnRzIEd1YXJkIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBrZXk6IEtleUNvZGUpIHt9XG5cbiAgICBwdWJsaWMgY2FuQWN0aXZhdGUoXG4gICAgICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQ8TWFuZ29SZXF1ZXN0PEtleUV2ZW50UGFyYW1ldGVycz4sIE1hbmdvUmVzcG9uc2U+LFxuICAgICkge1xuICAgICAgICBjb25zdCBldmVudEtleSA9IGNvbnRleHQucmVxdWVzdC5ib2R5LmtleTtcbiAgICAgICAgcmV0dXJuIGV2ZW50S2V5ID09PSB0aGlzLmtleTtcbiAgICB9XG59XG5cbi8vIFN0b3JhZ2UgZm9yIGtleSBiaW5kaW5ncyB0byBhbGxvdyB1bmJpbmRpbmdcbnR5cGUgS2V5SGFuZGxlciA9ICgpID0+IHZvaWQ7XG5jb25zdCBrZXlCaW5kaW5ncyA9IG5ldyBNYXA8c3RyaW5nLCBLZXlIYW5kbGVyPigpO1xuXG4vKipcbiAqIERlY29yYXRvciB0aGF0IGJpbmRzIGEgbWV0aG9kIHRvIGJlIGNhbGxlZCB3aGVuIGEga2V5IGlzIHJlbGVhc2VkIChrZXl1cCkuXG4gKiBVc2VzIG1wLmtleXMuYmluZCBpbnRlcm5hbGx5IHdpdGgga2V5ZG93bj1mYWxzZS5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBjb2RlIHRvIGJpbmQgdG9cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAT25LZXlVcChLZXlDb2RlLkYyKVxuICogb25GMlJlbGVhc2VkKCkge1xuICogICAgIG1wLmd1aS5jaGF0LnB1c2goXCJGMiB3YXMgcmVsZWFzZWRcIik7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9uS2V5VXAoa2V5OiBLZXlDb2RlKTogTWV0aG9kRGVjb3JhdG9yIHtcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICBjb25zdCBiaW5kaW5nS2V5ID0gYCR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9XyR7U3RyaW5nKHByb3BlcnR5S2V5KX1fa2V5dXBfJHtrZXl9YDtcblxuICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBtZXRob2QgZm9yIGxhdGVyIGJpbmRpbmdcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSgnbWFuZ286a2V5dXAnLCB7IGtleSwgYmluZGluZ0tleSB9LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcblxuICAgICAgICAvLyBUaGUgYWN0dWFsIGJpbmRpbmcgaGFwcGVucyB3aGVuIHRoZSBjb250cm9sbGVyIGlzIGluaXRpYWxpemVkXG4gICAgICAgIGNvbnN0IGhhbmRsZXI6IEtleUhhbmRsZXIgPSBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGtleUJpbmRpbmdzLnNldChiaW5kaW5nS2V5LCBoYW5kbGVyKTtcblxuICAgICAgICAvLyBCaW5kIHRoZSBrZXkgb24gc2NyaXB0IGxvYWRcbiAgICAgICAgaWYgKHR5cGVvZiBtcCAhPT0gJ3VuZGVmaW5lZCcgJiYgbXAua2V5cykge1xuICAgICAgICAgICAgbXAua2V5cy5iaW5kKGtleSwgZmFsc2UsIGhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBiaW5kcyBhIG1ldGhvZCB0byBiZSBjYWxsZWQgb25jZSB3aGVuIGEga2V5IGlzIHJlbGVhc2VkLCB0aGVuIHVuYmluZHMuXG4gKlxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgY29kZSB0byBiaW5kIHRvXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQE9uY2VLZXlVcChLZXlDb2RlLkYzKVxuICogb25GM1JlbGVhc2VkT25jZSgpIHtcbiAqICAgICBtcC5ndWkuY2hhdC5wdXNoKFwiRjMgd2FzIHJlbGVhc2VkIChvbmx5IGZpcmVzIG9uY2UpXCIpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPbmNlS2V5VXAoa2V5OiBLZXlDb2RlKTogTWV0aG9kRGVjb3JhdG9yIHtcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICBjb25zdCBiaW5kaW5nS2V5ID0gYCR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9XyR7U3RyaW5nKHByb3BlcnR5S2V5KX1fb25jZWtleXVwXyR7a2V5fWA7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSgnbWFuZ286b25jZWtleXVwJywgeyBrZXksIGJpbmRpbmdLZXkgfSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlcjogS2V5SGFuZGxlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgICAgICAgLy8gVW5iaW5kIGFmdGVyIGZpcnN0IGNhbGxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIG1wLmtleXMpIHtcbiAgICAgICAgICAgICAgICBtcC5rZXlzLnVuYmluZChrZXksIGZhbHNlLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleUJpbmRpbmdzLmRlbGV0ZShiaW5kaW5nS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGtleUJpbmRpbmdzLnNldChiaW5kaW5nS2V5LCBoYW5kbGVyKTtcblxuICAgICAgICBpZiAodHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiBtcC5rZXlzKSB7XG4gICAgICAgICAgICBtcC5rZXlzLmJpbmQoa2V5LCBmYWxzZSwgaGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9O1xufVxuXG4vKipcbiAqIERlY29yYXRvciB0aGF0IGJpbmRzIGEgbWV0aG9kIHRvIGJlIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWQgZG93biAoa2V5ZG93bikuXG4gKiBVc2VzIG1wLmtleXMuYmluZCBpbnRlcm5hbGx5IHdpdGgga2V5ZG93bj10cnVlLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IGNvZGUgdG8gYmluZCB0b1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBPbktleURvd24oS2V5Q29kZS5GMilcbiAqIG9uRjJQcmVzc2VkKCkge1xuICogICAgIG1wLmd1aS5jaGF0LnB1c2goXCJGMiB3YXMgcHJlc3NlZFwiKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gT25LZXlEb3duKGtleTogS2V5Q29kZSk6IE1ldGhvZERlY29yYXRvciB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgY29uc3QgYmluZGluZ0tleSA9IGAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfV8ke1N0cmluZyhwcm9wZXJ0eUtleSl9X2tleWRvd25fJHtrZXl9YDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdtYW5nbzprZXlkb3duJywgeyBrZXksIGJpbmRpbmdLZXkgfSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlcjogS2V5SGFuZGxlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAga2V5QmluZGluZ3Muc2V0KGJpbmRpbmdLZXksIGhhbmRsZXIpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIG1wLmtleXMpIHtcbiAgICAgICAgICAgIG1wLmtleXMuYmluZChrZXksIHRydWUsIGhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBiaW5kcyBhIG1ldGhvZCB0byBiZSBjYWxsZWQgb25jZSB3aGVuIGEga2V5IGlzIHByZXNzZWQsIHRoZW4gdW5iaW5kcy5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBjb2RlIHRvIGJpbmQgdG9cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAT25jZUtleURvd24oS2V5Q29kZS5GNClcbiAqIG9uRjRQcmVzc2VkT25jZSgpIHtcbiAqICAgICBtcC5ndWkuY2hhdC5wdXNoKFwiRjQgd2FzIHByZXNzZWQgKG9ubHkgZmlyZXMgb25jZSlcIik7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VLZXlEb3duKGtleTogS2V5Q29kZSk6IE1ldGhvZERlY29yYXRvciB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgY29uc3QgYmluZGluZ0tleSA9IGAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfV8ke1N0cmluZyhwcm9wZXJ0eUtleSl9X29uY2VrZXlkb3duXyR7a2V5fWA7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSgnbWFuZ286b25jZWtleWRvd24nLCB7IGtleSwgYmluZGluZ0tleSB9LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcblxuICAgICAgICBjb25zdCBoYW5kbGVyOiBLZXlIYW5kbGVyID0gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICAgICAgICAvLyBVbmJpbmQgYWZ0ZXIgZmlyc3QgY2FsbFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtcCAhPT0gJ3VuZGVmaW5lZCcgJiYgbXAua2V5cykge1xuICAgICAgICAgICAgICAgIG1wLmtleXMudW5iaW5kKGtleSwgdHJ1ZSwgaGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXlCaW5kaW5ncy5kZWxldGUoYmluZGluZ0tleSk7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBrZXlCaW5kaW5ncy5zZXQoYmluZGluZ0tleSwgaGFuZGxlcik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBtcCAhPT0gJ3VuZGVmaW5lZCcgJiYgbXAua2V5cykge1xuICAgICAgICAgICAgbXAua2V5cy5iaW5kKGtleSwgdHJ1ZSwgaGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBrZXkgaXMgY3VycmVudGx5IHByZXNzZWQgZG93bi5cbiAqIFdyYXBzIG1wLmtleXMuaXNEb3duLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IGNvZGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGtleSBpcyBwcmVzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzS2V5RG93bihrZXk6IEtleUNvZGUpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiBtcC5rZXlzKSB7XG4gICAgICAgIHJldHVybiBtcC5rZXlzLmlzRG93bihrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIGtleSBpcyBjdXJyZW50bHkgcmVsZWFzZWQuXG4gKiBXcmFwcyBtcC5rZXlzLmlzVXAuXG4gKlxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgY29kZSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IGlzIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzS2V5VXAoa2V5OiBLZXlDb2RlKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBtcCAhPT0gJ3VuZGVmaW5lZCcgJiYgbXAua2V5cykge1xuICAgICAgICByZXR1cm4gbXAua2V5cy5pc1VwKGtleSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIE1hbnVhbGx5IGJpbmQgYSBrZXkgaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBjb2RlIHRvIGJpbmRcbiAqIEBwYXJhbSBrZXlkb3duIC0gdHJ1ZSBmb3Iga2V5ZG93biwgZmFsc2UgZm9yIGtleXVwXG4gKiBAcGFyYW0gaGFuZGxlciAtIFRoZSBmdW5jdGlvbiB0byBjYWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kS2V5KGtleTogS2V5Q29kZSwga2V5ZG93bjogYm9vbGVhbiwgaGFuZGxlcjogS2V5SGFuZGxlcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIG1wLmtleXMpIHtcbiAgICAgICAgbXAua2V5cy5iaW5kKGtleSwga2V5ZG93biwgaGFuZGxlcik7XG4gICAgfVxufVxuXG4vKipcbiAqIE1hbnVhbGx5IHVuYmluZCBhIGtleSBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IGNvZGUgdG8gdW5iaW5kXG4gKiBAcGFyYW0ga2V5ZG93biAtIHRydWUgZm9yIGtleWRvd24sIGZhbHNlIGZvciBrZXl1cFxuICogQHBhcmFtIGhhbmRsZXIgLSBPcHRpb25hbCBzcGVjaWZpYyBoYW5kbGVyIHRvIHVuYmluZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5iaW5kS2V5KGtleTogS2V5Q29kZSwga2V5ZG93bjogYm9vbGVhbiwgaGFuZGxlcj86IEtleUhhbmRsZXIpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiBtcC5rZXlzKSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgICBtcC5rZXlzLnVuYmluZChrZXksIGtleWRvd24sIGhhbmRsZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbXAua2V5cy51bmJpbmQoa2V5LCBrZXlkb3duKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBVbmJpbmQgYWxsIGtleSBiaW5kaW5ncyBjcmVhdGVkIGJ5IGRlY29yYXRvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmJpbmRBbGxLZXlzKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIG1wLmtleXMpIHtcbiAgICAgICAga2V5QmluZGluZ3MuZm9yRWFjaCgoaGFuZGxlciwgYmluZGluZ0tleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBiaW5kaW5nS2V5LnNwbGl0KCdfJyk7XG4gICAgICAgICAgICBjb25zdCBrZXlTdHIgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgIGlmICgha2V5U3RyKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBpc0tleWRvd24gPSBiaW5kaW5nS2V5LmluY2x1ZGVzKCdrZXlkb3duJyk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBwYXJzZUludChrZXlTdHIsIDEwKTtcbiAgICAgICAgICAgIG1wLmtleXMudW5iaW5kKGtleSwgaXNLZXlkb3duLCBoYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGtleUJpbmRpbmdzLmNsZWFyKCk7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7OztBQVNPLElBQUtBLFVBQUFBLDBCQUFBQSxVQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQUFBQTs7QUF1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Q1RJLFNBQUdDLEtBQUtHLE9BQU8zQixLQUFLb0MsU0FBU2pCLE9BQUFBO0lBQ2pDLE9BQU87QUFDSEksU0FBR0MsS0FBS0csT0FBTzNCLEtBQUtvQyxPQUFBQTtJQUN4QjtFQUNKO0FBQ0o7QUFSZ0JDO0FBYVQsU0FBU0MsZ0JBQUFBO0FBQ1osTUFBSSxPQUFPZixPQUFPLGVBQWVBLEdBQUdDLE1BQU07QUFDdENsQixnQkFBWWlDLFFBQVEsQ0FBQ3BCLFNBQVNMLGVBQUFBO0FBQzFCLFlBQU0wQixRQUFRMUIsV0FBVzJCLE1BQU0sR0FBQTtBQUMvQixZQUFNQyxTQUFTRixNQUFNRyxJQUFHO0FBQ3hCLFVBQUksQ0FBQ0QsT0FBUTtBQUNiLFlBQU1FLFlBQVk5QixXQUFXK0IsU0FBUyxTQUFBO0FBQ3RDLFlBQU03QyxNQUFNOEMsU0FBU0osUUFBUSxFQUFBO0FBQzdCbkIsU0FBR0MsS0FBS0csT0FBTzNCLEtBQUs0QyxXQUFXekIsT0FBQUE7SUFDbkMsQ0FBQTtBQUNBYixnQkFBWXlDLE1BQUs7RUFDckI7QUFDSjtBQVpnQlQ7IiwKICAibmFtZXMiOiBbIktleUNvZGUiLCAiS2V5R3VhcmQiLCAia2V5IiwgImNhbkFjdGl2YXRlIiwgImNvbnRleHQiLCAiZXZlbnRLZXkiLCAicmVxdWVzdCIsICJib2R5IiwgImtleUJpbmRpbmdzIiwgIk1hcCIsICJPbktleVVwIiwgInRhcmdldCIsICJwcm9wZXJ0eUtleSIsICJkZXNjcmlwdG9yIiwgIm9yaWdpbmFsTWV0aG9kIiwgInZhbHVlIiwgImJpbmRpbmdLZXkiLCAibmFtZSIsICJTdHJpbmciLCAiUmVmbGVjdCIsICJkZWZpbmVNZXRhZGF0YSIsICJoYW5kbGVyIiwgImFwcGx5IiwgImFyZ3VtZW50cyIsICJzZXQiLCAibXAiLCAia2V5cyIsICJiaW5kIiwgIk9uY2VLZXlVcCIsICJ1bmJpbmQiLCAiZGVsZXRlIiwgIk9uS2V5RG93biIsICJPbmNlS2V5RG93biIsICJpc0tleURvd24iLCAiaXNEb3duIiwgImlzS2V5VXAiLCAiaXNVcCIsICJiaW5kS2V5IiwgImtleWRvd24iLCAidW5iaW5kS2V5IiwgInVuYmluZEFsbEtleXMiLCAiZm9yRWFjaCIsICJwYXJ0cyIsICJzcGxpdCIsICJrZXlTdHIiLCAicG9wIiwgImlzS2V5ZG93biIsICJpbmNsdWRlcyIsICJwYXJzZUludCIsICJjbGVhciJdCn0K
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@ragemp-mango/client",
3
+ "version": "2.0.6-beta.0",
4
+ "homepage": "https://github.com/kkwlkk/ragemp-mango",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/kkwlkk/ragemp-mango",
8
+ "directory": "packages/client"
9
+ },
10
+ "license": "MIT",
11
+ "author": "5exyGuy (Aurėjus Remeika), wlk (https://github.com/kkwlkk)",
12
+ "description": "Client-side package for the RageMP Mango Framework - a decorator-driven TypeScript framework for RageMP servers.",
13
+ "type": "module",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "default": "./dist/index.js"
18
+ },
19
+ "./utils": {
20
+ "types": "./dist/utils/index.d.ts",
21
+ "default": "./dist/utils/index.js"
22
+ }
23
+ },
24
+ "main": "dist/index.js",
25
+ "types": "dist/index.d.ts",
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "dependencies": {},
30
+ "devDependencies": {
31
+ "@abraham/reflection": "^0.12.0",
32
+ "@rollup/plugin-commonjs": "^25.0.7",
33
+ "@rollup/plugin-node-resolve": "^15.2.3",
34
+ "@types/node": "^20.12.11",
35
+ "esbuild": "^0.21.1",
36
+ "rollup": "^4.17.2",
37
+ "rollup-plugin-esbuild": "^6.1.1",
38
+ "tsup": "^8.0.2",
39
+ "typescript": "^5.4.5",
40
+ "@ragemp-mango/core": "^2.0.6-beta.0"
41
+ },
42
+ "peerDependencies": {
43
+ "@ragempcommunity/types-client": "^2.1.8",
44
+ "inversify": "^6.0.2",
45
+ "@ragemp-mango/core": "^2.0.6-beta.0"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public",
49
+ "registry": "https://registry.npmjs.org/"
50
+ },
51
+ "scripts": {
52
+ "build": "tsup",
53
+ "dev": "tsup --watch",
54
+ "typecheck": "tsc --noEmit",
55
+ "types": "tsup --dts-only"
56
+ }
57
+ }