@privateaim/server-http-kit 0.7.0 → 0.8.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/CHANGELOG.md +43 -0
- package/dist/middlewares/index.d.ts +2 -0
- package/dist/middlewares/index.d.ts.map +1 -1
- package/dist/middlewares/index.js +2 -0
- package/dist/middlewares/index.js.map +1 -1
- package/dist/middlewares/swagger.d.ts +1 -1
- package/dist/middlewares/swagger.d.ts.map +1 -1
- package/dist/middlewares/swagger.js +1 -1
- package/dist/middlewares/swagger.js.map +1 -1
- package/dist/services/authup/utils.d.ts.map +1 -1
- package/dist/services/authup/utils.js +4 -1
- package/dist/services/authup/utils.js.map +1 -1
- package/package.json +17 -17
- package/src/middlewares/index.ts +2 -0
- package/src/middlewares/swagger.ts +1 -1
- package/src/services/authup/utils.ts +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.8.1](https://github.com/PrivateAIM/hub/compare/v0.8.0...v0.8.1) (2024-08-19)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **deps:** bump express-validator from 7.1.0 to 7.2.0 ([#654](https://github.com/PrivateAIM/hub/issues/654)) ([1b1d70e](https://github.com/PrivateAIM/hub/commit/1b1d70e759c94d05fc1ae7098f308275735ce971))
|
|
9
|
+
* **deps:** bump typeorm-extension from 3.5.1 to 3.6.0 ([#619](https://github.com/PrivateAIM/hub/issues/619)) ([7af46a3](https://github.com/PrivateAIM/hub/commit/7af46a317755cb8e1d5c26779d5d9157964ba51d))
|
|
10
|
+
* **deps:** bump typeorm-extension from 3.6.0 to 3.6.1 ([#652](https://github.com/PrivateAIM/hub/issues/652)) ([c862af7](https://github.com/PrivateAIM/hub/commit/c862af75dec7d42e3da9c50761e7ab61225a1c8f))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Dependencies
|
|
14
|
+
|
|
15
|
+
* The following workspace dependencies were updated
|
|
16
|
+
* dependencies
|
|
17
|
+
* @privateaim/kit bumped from ^0.8.0 to ^0.8.1
|
|
18
|
+
* @privateaim/server-kit bumped from ^0.8.0 to ^0.8.1
|
|
19
|
+
|
|
20
|
+
## [0.8.0](https://github.com/PrivateAIM/hub/compare/v0.7.0...v0.8.0) (2024-07-02)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* expose all middlewares ([4681e3f](https://github.com/PrivateAIM/hub/commit/4681e3f5b4ce030e3651c00854d3db9c941e336f))
|
|
26
|
+
* simplified and adjusted permission usage across codespace ([1839f5e](https://github.com/PrivateAIM/hub/commit/1839f5eb768f120e268e57e0a496fef5eb0eca41))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Bug Fixes
|
|
30
|
+
|
|
31
|
+
* **deps:** bump @routup/basic from 1.3.2 to 1.4.0 ([#523](https://github.com/PrivateAIM/hub/issues/523)) ([409a594](https://github.com/PrivateAIM/hub/commit/409a59460fbce2934ba489e7fde579063e2fc6d4))
|
|
32
|
+
* **deps:** bump @routup/decorators from 3.3.2 to 3.4.0 ([#531](https://github.com/PrivateAIM/hub/issues/531)) ([295f692](https://github.com/PrivateAIM/hub/commit/295f6926b8492aa58856ec2e0ea469e9b19388d3))
|
|
33
|
+
* **deps:** bump @routup/prometheus from 2.3.0 to 2.4.0 ([#525](https://github.com/PrivateAIM/hub/issues/525)) ([b98e5f1](https://github.com/PrivateAIM/hub/commit/b98e5f1020f2363c5074f98408e4786cdde24e0d))
|
|
34
|
+
* **deps:** bump @routup/swagger from 2.3.6 to 2.4.0 ([#530](https://github.com/PrivateAIM/hub/issues/530)) ([cef8d2c](https://github.com/PrivateAIM/hub/commit/cef8d2c2de5d29c0cc7cf84abf8ef980b05c5fe9))
|
|
35
|
+
* **deps:** bump authup to v1.0.0.beta-19 ([3410786](https://github.com/PrivateAIM/hub/commit/34107860d7f810cea7b2024b0f303cd70d32a5fe))
|
|
36
|
+
* **deps:** bump routup to v4.x ([787bb7c](https://github.com/PrivateAIM/hub/commit/787bb7cb6951f32fed29ac77467dcdec76683672))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### Dependencies
|
|
40
|
+
|
|
41
|
+
* The following workspace dependencies were updated
|
|
42
|
+
* dependencies
|
|
43
|
+
* @privateaim/kit bumped from ^0.7.0 to ^0.8.0
|
|
44
|
+
* @privateaim/server-kit bumped from ^0.7.0 to ^0.8.0
|
|
45
|
+
|
|
3
46
|
## [0.7.0](https://github.com/PrivateAIM/hub/compare/v0.6.0...v0.7.0) (2024-06-26)
|
|
4
47
|
|
|
5
48
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAOA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAOA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
|
@@ -20,7 +20,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
20
20
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
__exportStar(require("./basic"), exports);
|
|
23
24
|
__exportStar(require("./cors"), exports);
|
|
25
|
+
__exportStar(require("./decorators"), exports);
|
|
24
26
|
__exportStar(require("./error"), exports);
|
|
25
27
|
__exportStar(require("./force-logged-in"), exports);
|
|
26
28
|
__exportStar(require("./module"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,yCAAuB;AACvB,0CAAwB;AACxB,oDAAkC;AAClC,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,4CAA0B;AAC1B,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB;AACxB,oDAAkC;AAClC,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,4CAA0B;AAC1B,0CAAwB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Router } from 'routup';
|
|
2
2
|
import type { MiddlewareSwaggerOptions } from './types';
|
|
3
|
-
export declare function mountSwaggerMiddleware(router: Router, options
|
|
3
|
+
export declare function mountSwaggerMiddleware(router: Router, options?: MiddlewareSwaggerOptions): void;
|
|
4
4
|
//# sourceMappingURL=swagger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger.d.ts","sourceRoot":"","sources":["../../src/middlewares/swagger.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAExD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"swagger.d.ts","sourceRoot":"","sources":["../../src/middlewares/swagger.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAExD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,QAW5F"}
|
|
@@ -14,7 +14,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
14
14
|
const swagger_1 = require("@routup/swagger");
|
|
15
15
|
const locter_1 = require("locter");
|
|
16
16
|
const node_process_1 = __importDefault(require("node:process"));
|
|
17
|
-
function mountSwaggerMiddleware(router, options) {
|
|
17
|
+
function mountSwaggerMiddleware(router, options = {}) {
|
|
18
18
|
let document;
|
|
19
19
|
if (options.cwd) {
|
|
20
20
|
document = (0, locter_1.loadSync)(node_path_1.default.join(options.cwd, 'swagger.json'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../src/middlewares/swagger.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AASH,wDAWC;AAlBD,0DAA6B;AAC7B,6CAA4C;AAC5C,mCAAkC;AAClC,gEAAmC;AAInC,SAAgB,sBAAsB,CAAC,MAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"swagger.js","sourceRoot":"","sources":["../../src/middlewares/swagger.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AASH,wDAWC;AAlBD,0DAA6B;AAC7B,6CAA4C;AAC5C,mCAAkC;AAClC,gEAAmC;AAInC,SAAgB,sBAAsB,CAAC,MAAc,EAAE,UAAoC,EAAE;IACzF,IAAI,QAAc,CAAC;IACnB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,QAAQ,GAAG,IAAA,iBAAQ,EAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACJ,QAAQ,GAAG,IAAA,iBAAQ,EAAC,mBAAI,CAAC,IAAI,CAAC,sBAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAA,mBAAS,EAAC,QAAQ,EAAE;QACpC,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAC,CAAC;AACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/services/authup/utils.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,KAAK,4BAA4B,GAAG,IAAI,CACxC,qBAAqB,EACrB,aAAa,GACb,UAAU,GACV,YAAY,GACZ,KAAK,GACL,UAAU,GACV,UAAU,CACT,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/services/authup/utils.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,KAAK,4BAA4B,GAAG,IAAI,CACxC,qBAAqB,EACrB,aAAa,GACb,UAAU,GACV,YAAY,GACZ,KAAK,GACL,UAAU,GACV,UAAU,CACT,CAAC;AAWF,wBAAgB,+BAA+B,IAAI,4BAA4B,CAW9E;AAED,wBAAgB,0BAA0B,CACtC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,4BAA4B,EAClC,aAAa,CAAC,EAAE,OAAO,QA+B1B"}
|
|
@@ -13,7 +13,10 @@ const core_kit_1 = require("@authup/core-kit");
|
|
|
13
13
|
const kit_2 = require("@privateaim/kit");
|
|
14
14
|
const request_1 = require("../../request");
|
|
15
15
|
function generateAbilities() {
|
|
16
|
-
return Object.values(
|
|
16
|
+
return Object.values({
|
|
17
|
+
...kit_2.PermissionName,
|
|
18
|
+
...core_kit_1.PermissionName,
|
|
19
|
+
}).map((name) => ({
|
|
17
20
|
name,
|
|
18
21
|
}));
|
|
19
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/services/authup/utils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/services/authup/utils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA6BH,0EAWC;AAED,gEAkCC;AAzED,qCAAwC;AACxC,+CAA6F;AAE7F,yCAAiD;AAEjD,2CAA8C;AAY9C,SAAS,iBAAiB;IACtB,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,GAAG,oBAAc;QACjB,GAAG,yBAAoB;KAC1B,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,IAAI;KACY,CAAA,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,+BAA+B;IAC3C,OAAO;QACH,QAAQ,EAAE,sCAAsC;QAChD,UAAU,EAAE,4BAAiB;QAE7B,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,sCAAsC;QAC3C,QAAQ,EAAE,OAAO;QAEjB,WAAW,EAAE,iBAAiB,EAAE;KACnC,CAAC;AACN,CAAC;AAED,SAAgB,0BAA0B,CACtC,GAAY,EACZ,IAAkC,EAClC,aAAuB;IAEvB,IAAI,SAAoB,CAAC;IACzB,IAAI,aAAa,EAAE,CAAC;QAChB,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACpC,CAAC;SAAM,CAAC;QACJ,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,eAAS,CAAC,SAAS,CAAC,CAAC;IACzC,IAAA,uBAAa,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAA,uBAAa,EAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAA,uBAAa,EAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,IAAA,uBAAa,EAAC,GAAG,EAAE,OAAO,EAAE;QACxB,EAAE,EAAE,IAAI,CAAC,QAAQ;QACjB,IAAI,EAAE,IAAI,CAAC,UAAU;KACxB,CAAC,CAAC;IAEH,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,IAAA,uBAAa,EAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,IAAA,uBAAa,EAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM;QACV,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,IAAA,uBAAa,EAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,IAAA,uBAAa,EAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM;QACV,CAAC;IACL,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@privateaim/server-http-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"author": {
|
|
@@ -11,35 +11,35 @@
|
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"description": "This package contains the realtime application which connects the API with socket based clients.",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@authup/kit": "^1.0.0-beta.
|
|
15
|
-
"@authup/core-kit": "^1.0.0-beta.
|
|
16
|
-
"@authup/core-http-kit": "^1.0.0-beta.
|
|
14
|
+
"@authup/kit": "^1.0.0-beta.19",
|
|
15
|
+
"@authup/core-kit": "^1.0.0-beta.19",
|
|
16
|
+
"@authup/core-http-kit": "^1.0.0-beta.19",
|
|
17
17
|
"@authup/server-core-plugin-kit": "^1.0.0-beta.18",
|
|
18
18
|
"@authup/server-core-plugin-http": "^1.0.0-beta.18",
|
|
19
19
|
"@ebec/http": "^2.3.0",
|
|
20
|
-
"@privateaim/kit": "^0.
|
|
21
|
-
"@privateaim/server-kit": "^0.
|
|
22
|
-
"@routup/basic": "^1.
|
|
23
|
-
"@routup/decorators": "^3.
|
|
24
|
-
"@routup/prometheus": "^2.
|
|
25
|
-
"@routup/rate-limit": "^2.
|
|
26
|
-
"@routup/swagger": "^2.
|
|
20
|
+
"@privateaim/kit": "^0.8.1",
|
|
21
|
+
"@privateaim/server-kit": "^0.8.1",
|
|
22
|
+
"@routup/basic": "^1.4.0",
|
|
23
|
+
"@routup/decorators": "^3.4.0",
|
|
24
|
+
"@routup/prometheus": "^2.4.0",
|
|
25
|
+
"@routup/rate-limit": "^2.4.0",
|
|
26
|
+
"@routup/swagger": "^2.4.0",
|
|
27
27
|
"cors": "^2.8.5",
|
|
28
28
|
"hapic": "^2.5.1",
|
|
29
29
|
"locter": "^2.1.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/cors": "^2.8.17",
|
|
33
|
-
"express-validator": "^7.
|
|
33
|
+
"express-validator": "^7.2.0",
|
|
34
34
|
"redis-extension": "^1.5.0",
|
|
35
|
-
"routup": "^
|
|
36
|
-
"typeorm-extension": "^3.
|
|
35
|
+
"routup": "^4.0.0",
|
|
36
|
+
"typeorm-extension": "^3.6.1"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"express-validator": "^7.
|
|
39
|
+
"express-validator": "^7.2.0",
|
|
40
40
|
"redis-extension": "^1.5.0",
|
|
41
|
-
"routup": "^
|
|
42
|
-
"typeorm-extension": "^3.
|
|
41
|
+
"routup": "^4.0.0",
|
|
42
|
+
"typeorm-extension": "^3.6.1"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"dev": "ts-node src/index.ts",
|
package/src/middlewares/index.ts
CHANGED
|
@@ -12,7 +12,7 @@ import process from 'node:process';
|
|
|
12
12
|
import type { Router } from 'routup';
|
|
13
13
|
import type { MiddlewareSwaggerOptions } from './types';
|
|
14
14
|
|
|
15
|
-
export function mountSwaggerMiddleware(router: Router, options: MiddlewareSwaggerOptions) {
|
|
15
|
+
export function mountSwaggerMiddleware(router: Router, options: MiddlewareSwaggerOptions = {}) {
|
|
16
16
|
let document : any;
|
|
17
17
|
if (options.cwd) {
|
|
18
18
|
document = loadSync(path.join(options.cwd, 'swagger.json'));
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
import type { Ability } from '@authup/kit';
|
|
9
9
|
import { Abilities } from '@authup/kit';
|
|
10
|
-
import { REALM_MASTER_NAME } from '@authup/core-kit';
|
|
10
|
+
import { PermissionName as AuthupPermissionName, REALM_MASTER_NAME } from '@authup/core-kit';
|
|
11
11
|
import type { TokenVerificationData } from '@authup/server-core-plugin-kit';
|
|
12
|
-
import {
|
|
12
|
+
import { PermissionName } from '@privateaim/kit';
|
|
13
13
|
import type { Request } from 'routup';
|
|
14
14
|
import { setRequestEnv } from '../../request';
|
|
15
15
|
|
|
@@ -24,7 +24,10 @@ TokenVerificationData,
|
|
|
24
24
|
>;
|
|
25
25
|
|
|
26
26
|
function generateAbilities(): Ability[] {
|
|
27
|
-
return Object.values(
|
|
27
|
+
return Object.values({
|
|
28
|
+
...PermissionName,
|
|
29
|
+
...AuthupPermissionName,
|
|
30
|
+
}).map((name) => ({
|
|
28
31
|
name,
|
|
29
32
|
} satisfies Ability));
|
|
30
33
|
}
|