@twin.org/engine-types 0.0.2-next.13 → 0.0.2-next.14
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/dist/cjs/index.cjs +201 -110
- package/dist/esm/index.mjs +189 -100
- package/dist/types/components/rightsManagementDap.d.ts +13 -0
- package/dist/types/components/{rightsManagementPnrp.d.ts → rightsManagementDarp.d.ts} +3 -3
- package/dist/types/index.d.ts +7 -4
- package/dist/types/models/IEngineConfig.d.ts +8 -3
- package/dist/types/models/config/rightsManagementDapComponentConfig.d.ts +16 -0
- package/dist/types/models/config/rightsManagementDarpComponentConfig.d.ts +12 -0
- package/dist/types/models/config/rightsManagementPdpComponentConfig.d.ts +4 -1
- package/dist/types/models/config/rightsManagementPnpComponentConfig.d.ts +2 -1
- package/dist/types/models/types/rightsManagementDapComponentType.d.ts +17 -0
- package/dist/types/models/types/rightsManagementDarpComponentType.d.ts +13 -0
- package/docs/changelog.md +15 -0
- package/docs/reference/functions/initialiseRightsManagementDapComponent.md +41 -0
- package/docs/reference/functions/{initialiseRightsManagementPnrpComponent.md → initialiseRightsManagementDarpComponent.md} +4 -4
- package/docs/reference/index.md +8 -4
- package/docs/reference/interfaces/IEngineConfig.md +9 -3
- package/docs/reference/type-aliases/RightsManagementDapComponentConfig.md +5 -0
- package/docs/reference/type-aliases/RightsManagementDapComponentType.md +5 -0
- package/docs/reference/type-aliases/RightsManagementDarpComponentConfig.md +23 -0
- package/docs/reference/type-aliases/RightsManagementDarpComponentType.md +5 -0
- package/docs/reference/type-aliases/RightsManagementPdpComponentConfig.md +7 -1
- package/docs/reference/type-aliases/RightsManagementPnpComponentConfig.md +1 -1
- package/docs/reference/variables/RightsManagementDapComponentType.md +19 -0
- package/docs/reference/variables/RightsManagementDarpComponentType.md +13 -0
- package/package.json +4 -3
- package/dist/types/models/config/rightsManagementPnrpComponentConfig.d.ts +0 -9
- package/dist/types/models/types/rightsManagementPnrpComponentType.d.ts +0 -13
- package/docs/reference/type-aliases/RightsManagementPnrpComponentConfig.md +0 -17
- package/docs/reference/type-aliases/RightsManagementPnrpComponentType.md +0 -5
- package/docs/reference/variables/RightsManagementPnrpComponentType.md +0 -13
package/dist/esm/index.mjs
CHANGED
|
@@ -73,14 +73,15 @@ import { IotaNftConnector } from '@twin.org/nft-connector-iota';
|
|
|
73
73
|
import { NftConnectorFactory } from '@twin.org/nft-models';
|
|
74
74
|
import { NftClient } from '@twin.org/nft-rest-client';
|
|
75
75
|
import { NftService } from '@twin.org/nft-service';
|
|
76
|
+
import { DataAccessPointService, DataAccessRequestPointService } from '@twin.org/rights-management-dap-service';
|
|
77
|
+
import { DataAccessPointClient, PolicyAdministrationPointClient, PolicyNegotiationAdminPointClient, PolicyNegotiationPointClient } from '@twin.org/rights-management-rest-client';
|
|
76
78
|
import { initSchema as initSchema$d, PolicyAdministrationPointService } from '@twin.org/rights-management-pap-service';
|
|
77
|
-
import { PolicyAdministrationPointClient, PolicyNegotiationPointClient, PolicyNegotiationAdminPointClient } from '@twin.org/rights-management-rest-client';
|
|
78
|
-
import { PolicyDecisionPointService } from '@twin.org/rights-management-pdp-service';
|
|
79
79
|
import { EngineModuleHelper } from '@twin.org/engine-core';
|
|
80
|
+
import { PolicyDecisionPointService } from '@twin.org/rights-management-pdp-service';
|
|
80
81
|
import { PolicyEnforcementPointService } from '@twin.org/rights-management-pep-service';
|
|
81
82
|
import { PolicyInformationPointService } from '@twin.org/rights-management-pip-service';
|
|
82
83
|
import { PolicyManagementPointService } from '@twin.org/rights-management-pmp-service';
|
|
83
|
-
import {
|
|
84
|
+
import { initSchema as initSchema$e, PolicyNegotiationAdminPointService, PolicyNegotiationPointService } from '@twin.org/rights-management-pnp-service';
|
|
84
85
|
import { PolicyExecutionPointService } from '@twin.org/rights-management-pxp-service';
|
|
85
86
|
import { SynchronisedStorageClient } from '@twin.org/synchronised-storage-rest-client';
|
|
86
87
|
import { initSchema as initSchema$f, SynchronisedStorageService } from '@twin.org/synchronised-storage-service';
|
|
@@ -2290,6 +2291,126 @@ async function initialiseNftComponent(engineCore, context, instanceConfig, overr
|
|
|
2290
2291
|
return finalInstanceType;
|
|
2291
2292
|
}
|
|
2292
2293
|
|
|
2294
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2295
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
2296
|
+
/**
|
|
2297
|
+
* Rights management DAP component types.
|
|
2298
|
+
*/
|
|
2299
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
2300
|
+
const RightsManagementDapComponentType = {
|
|
2301
|
+
/**
|
|
2302
|
+
* Service.
|
|
2303
|
+
*/
|
|
2304
|
+
Service: "service",
|
|
2305
|
+
/**
|
|
2306
|
+
* REST client.
|
|
2307
|
+
*/
|
|
2308
|
+
RestClient: "rest-client"
|
|
2309
|
+
};
|
|
2310
|
+
|
|
2311
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2312
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
2313
|
+
/**
|
|
2314
|
+
* Initialise the rights management DAP component.
|
|
2315
|
+
* @param engineCore The engine core.
|
|
2316
|
+
* @param context The context for the engine.
|
|
2317
|
+
* @param instanceConfig The instance config.
|
|
2318
|
+
* @param overrideInstanceType The instance type to override the default.
|
|
2319
|
+
* @returns The name of the instance created.
|
|
2320
|
+
* @throws GeneralError if the component type is unknown.
|
|
2321
|
+
*/
|
|
2322
|
+
async function initialiseRightsManagementDapComponent(engineCore, context, instanceConfig, overrideInstanceType) {
|
|
2323
|
+
engineCore.logInfo(I18n.formatMessage("engineCore.configuring", {
|
|
2324
|
+
element: `Rights Management DAP Component: ${instanceConfig.type}`
|
|
2325
|
+
}));
|
|
2326
|
+
const type = instanceConfig.type;
|
|
2327
|
+
let component;
|
|
2328
|
+
let instanceType;
|
|
2329
|
+
if (type === RightsManagementDapComponentType.Service) {
|
|
2330
|
+
component = new DataAccessPointService({
|
|
2331
|
+
loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
|
|
2332
|
+
identityConnectorType: engineCore.getRegisteredInstanceType("identityConnector"),
|
|
2333
|
+
policyEnforcementPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPepComponent"),
|
|
2334
|
+
...instanceConfig.options,
|
|
2335
|
+
config: {
|
|
2336
|
+
...instanceConfig.options?.config
|
|
2337
|
+
}
|
|
2338
|
+
});
|
|
2339
|
+
instanceType = StringHelper.kebabCase("DataAccessPointService");
|
|
2340
|
+
}
|
|
2341
|
+
else if (type === RightsManagementDapComponentType.RestClient) {
|
|
2342
|
+
component = new DataAccessPointClient(instanceConfig.options);
|
|
2343
|
+
instanceType = StringHelper.kebabCase("DataAccessPointClient");
|
|
2344
|
+
}
|
|
2345
|
+
else {
|
|
2346
|
+
throw new GeneralError("engineCore", "componentUnknownType", {
|
|
2347
|
+
type,
|
|
2348
|
+
componentType: "RightsManagementDapComponent"
|
|
2349
|
+
});
|
|
2350
|
+
}
|
|
2351
|
+
const finalInstanceType = overrideInstanceType ?? instanceType;
|
|
2352
|
+
context.componentInstances.push({
|
|
2353
|
+
instanceType: finalInstanceType,
|
|
2354
|
+
component
|
|
2355
|
+
});
|
|
2356
|
+
ComponentFactory.register(finalInstanceType, () => component);
|
|
2357
|
+
return finalInstanceType;
|
|
2358
|
+
}
|
|
2359
|
+
|
|
2360
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2361
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
2362
|
+
/**
|
|
2363
|
+
* Rights management DARP component types.
|
|
2364
|
+
*/
|
|
2365
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
2366
|
+
const RightsManagementDarpComponentType = {
|
|
2367
|
+
/**
|
|
2368
|
+
* Service.
|
|
2369
|
+
*/
|
|
2370
|
+
Service: "service"
|
|
2371
|
+
};
|
|
2372
|
+
|
|
2373
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2374
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
2375
|
+
/**
|
|
2376
|
+
* Initialise the rights management DARP component.
|
|
2377
|
+
* @param engineCore The engine core.
|
|
2378
|
+
* @param context The context for the engine.
|
|
2379
|
+
* @param instanceConfig The instance config.
|
|
2380
|
+
* @param overrideInstanceType The instance type to override the default.
|
|
2381
|
+
* @returns The name of the instance created.
|
|
2382
|
+
* @throws GeneralError if the component type is unknown.
|
|
2383
|
+
*/
|
|
2384
|
+
async function initialiseRightsManagementDarpComponent(engineCore, context, instanceConfig, overrideInstanceType) {
|
|
2385
|
+
engineCore.logInfo(I18n.formatMessage("engineCore.configuring", {
|
|
2386
|
+
element: `Rights Management DARP Component: ${instanceConfig.type}`
|
|
2387
|
+
}));
|
|
2388
|
+
const type = instanceConfig.type;
|
|
2389
|
+
let component;
|
|
2390
|
+
let instanceType;
|
|
2391
|
+
if (type === RightsManagementDarpComponentType.Service) {
|
|
2392
|
+
component = new DataAccessRequestPointService({
|
|
2393
|
+
loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
|
|
2394
|
+
identityConnectorType: engineCore.getRegisteredInstanceType("identityConnector"),
|
|
2395
|
+
...instanceConfig.options
|
|
2396
|
+
});
|
|
2397
|
+
instanceType = StringHelper.kebabCase("DataAccessRequestPointService");
|
|
2398
|
+
}
|
|
2399
|
+
else {
|
|
2400
|
+
throw new GeneralError("engineCore", "componentUnknownType", {
|
|
2401
|
+
type,
|
|
2402
|
+
componentType: "RightsManagementDarpComponent"
|
|
2403
|
+
});
|
|
2404
|
+
}
|
|
2405
|
+
const finalInstanceType = overrideInstanceType ?? instanceType;
|
|
2406
|
+
context.componentInstances.push({
|
|
2407
|
+
instanceType: finalInstanceType,
|
|
2408
|
+
component
|
|
2409
|
+
});
|
|
2410
|
+
ComponentFactory.register(finalInstanceType, () => component);
|
|
2411
|
+
return finalInstanceType;
|
|
2412
|
+
}
|
|
2413
|
+
|
|
2293
2414
|
// Copyright 2024 IOTA Stiftung.
|
|
2294
2415
|
// SPDX-License-Identifier: Apache-2.0.
|
|
2295
2416
|
/**
|
|
@@ -2385,12 +2506,25 @@ async function initialiseRightsManagementPdpComponent(engineCore, context, insta
|
|
|
2385
2506
|
let component;
|
|
2386
2507
|
let instanceType;
|
|
2387
2508
|
if (type === RightsManagementPdpComponentType.Service) {
|
|
2509
|
+
const arbiterModules = [];
|
|
2510
|
+
if (Is.arrayValue(instanceConfig.options?.arbiterModulesConfig)) {
|
|
2511
|
+
for (const moduleConfig of instanceConfig.options.arbiterModulesConfig) {
|
|
2512
|
+
arbiterModules.push({
|
|
2513
|
+
arbiterId: moduleConfig.id,
|
|
2514
|
+
arbiter: await EngineModuleHelper.loadComponent(engineCore, moduleConfig)
|
|
2515
|
+
});
|
|
2516
|
+
}
|
|
2517
|
+
}
|
|
2388
2518
|
component = new PolicyDecisionPointService({
|
|
2389
2519
|
loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
|
|
2390
2520
|
policyInformationPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPipComponent"),
|
|
2391
2521
|
policyManagementPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPmpComponent"),
|
|
2392
2522
|
policyExecutionPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPxpComponent"),
|
|
2393
|
-
...instanceConfig.options
|
|
2523
|
+
...instanceConfig.options,
|
|
2524
|
+
config: {
|
|
2525
|
+
...instanceConfig.options?.config,
|
|
2526
|
+
arbiters: instanceConfig.options?.config?.arbiters ?? arbiterModules
|
|
2527
|
+
}
|
|
2394
2528
|
});
|
|
2395
2529
|
instanceType = StringHelper.kebabCase("PolicyDecisionPointService");
|
|
2396
2530
|
}
|
|
@@ -2445,10 +2579,10 @@ async function initialiseRightsManagementPepComponent(engineCore, context, insta
|
|
|
2445
2579
|
let component;
|
|
2446
2580
|
let instanceType;
|
|
2447
2581
|
if (type === RightsManagementPepComponentType.Service) {
|
|
2448
|
-
const
|
|
2582
|
+
const processorModules = [];
|
|
2449
2583
|
if (Is.arrayValue(instanceConfig.options?.processorModulesConfig)) {
|
|
2450
2584
|
for (const moduleConfig of instanceConfig.options.processorModulesConfig) {
|
|
2451
|
-
|
|
2585
|
+
processorModules.push({
|
|
2452
2586
|
processorId: moduleConfig.id,
|
|
2453
2587
|
processor: await EngineModuleHelper.loadComponent(engineCore, moduleConfig)
|
|
2454
2588
|
});
|
|
@@ -2460,7 +2594,7 @@ async function initialiseRightsManagementPepComponent(engineCore, context, insta
|
|
|
2460
2594
|
...instanceConfig.options,
|
|
2461
2595
|
config: {
|
|
2462
2596
|
...instanceConfig.options?.config,
|
|
2463
|
-
processors: instanceConfig.options?.config?.processors ??
|
|
2597
|
+
processors: instanceConfig.options?.config?.processors ?? processorModules
|
|
2464
2598
|
}
|
|
2465
2599
|
});
|
|
2466
2600
|
instanceType = StringHelper.kebabCase("PolicyEnforcementPointService");
|
|
@@ -2512,10 +2646,10 @@ async function initialiseRightsManagementPipComponent(engineCore, context, insta
|
|
|
2512
2646
|
let component;
|
|
2513
2647
|
let instanceType;
|
|
2514
2648
|
if (type === RightsManagementPipComponentType.Service) {
|
|
2515
|
-
const
|
|
2649
|
+
const informationSourceModules = [];
|
|
2516
2650
|
if (Is.arrayValue(instanceConfig.options?.informationModulesConfig)) {
|
|
2517
2651
|
for (const moduleConfig of instanceConfig.options.informationModulesConfig) {
|
|
2518
|
-
|
|
2652
|
+
informationSourceModules.push({
|
|
2519
2653
|
sourceId: moduleConfig.id,
|
|
2520
2654
|
source: await EngineModuleHelper.loadComponent(engineCore, moduleConfig)
|
|
2521
2655
|
});
|
|
@@ -2526,7 +2660,7 @@ async function initialiseRightsManagementPipComponent(engineCore, context, insta
|
|
|
2526
2660
|
...instanceConfig.options,
|
|
2527
2661
|
config: {
|
|
2528
2662
|
...instanceConfig.options?.config,
|
|
2529
|
-
sources: instanceConfig.options?.config?.sources ??
|
|
2663
|
+
sources: instanceConfig.options?.config?.sources ?? informationSourceModules
|
|
2530
2664
|
}
|
|
2531
2665
|
});
|
|
2532
2666
|
instanceType = StringHelper.kebabCase("PolicyInformationPointService");
|
|
@@ -2600,84 +2734,6 @@ async function initialiseRightsManagementPmpComponent(engineCore, context, insta
|
|
|
2600
2734
|
return finalInstanceType;
|
|
2601
2735
|
}
|
|
2602
2736
|
|
|
2603
|
-
// Copyright 2024 IOTA Stiftung.
|
|
2604
|
-
// SPDX-License-Identifier: Apache-2.0.
|
|
2605
|
-
/**
|
|
2606
|
-
* Rights management PNP component types.
|
|
2607
|
-
*/
|
|
2608
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
2609
|
-
const RightsManagementPnpComponentType = {
|
|
2610
|
-
/**
|
|
2611
|
-
* Service.
|
|
2612
|
-
*/
|
|
2613
|
-
Service: "service",
|
|
2614
|
-
/**
|
|
2615
|
-
* REST client.
|
|
2616
|
-
*/
|
|
2617
|
-
RestClient: "rest-client"
|
|
2618
|
-
};
|
|
2619
|
-
|
|
2620
|
-
// Copyright 2024 IOTA Stiftung.
|
|
2621
|
-
// SPDX-License-Identifier: Apache-2.0.
|
|
2622
|
-
/**
|
|
2623
|
-
* Initialise the rights management PNP component.
|
|
2624
|
-
* @param engineCore The engine core.
|
|
2625
|
-
* @param context The context for the engine.
|
|
2626
|
-
* @param instanceConfig The instance config.
|
|
2627
|
-
* @param overrideInstanceType The instance type to override the default.
|
|
2628
|
-
* @returns The name of the instance created.
|
|
2629
|
-
* @throws GeneralError if the component type is unknown.
|
|
2630
|
-
*/
|
|
2631
|
-
async function initialiseRightsManagementPnpComponent(engineCore, context, instanceConfig, overrideInstanceType) {
|
|
2632
|
-
engineCore.logInfo(I18n.formatMessage("engineCore.configuring", {
|
|
2633
|
-
element: `Rights Management PNP Component: ${instanceConfig.type}`
|
|
2634
|
-
}));
|
|
2635
|
-
const type = instanceConfig.type;
|
|
2636
|
-
let component;
|
|
2637
|
-
let instanceType;
|
|
2638
|
-
if (type === RightsManagementPnpComponentType.Service) {
|
|
2639
|
-
const modules = [];
|
|
2640
|
-
if (Is.arrayValue(instanceConfig.options?.negotiatorModulesConfig)) {
|
|
2641
|
-
for (const moduleConfig of instanceConfig.options.negotiatorModulesConfig) {
|
|
2642
|
-
modules.push({
|
|
2643
|
-
negotiatorId: moduleConfig.id,
|
|
2644
|
-
negotiator: await EngineModuleHelper.loadComponent(engineCore, moduleConfig)
|
|
2645
|
-
});
|
|
2646
|
-
}
|
|
2647
|
-
}
|
|
2648
|
-
component = new PolicyNegotiationPointService({
|
|
2649
|
-
loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
|
|
2650
|
-
identityConnectorType: engineCore.getRegisteredInstanceType("identityConnector"),
|
|
2651
|
-
policyNegotiationAdministrationPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPnapComponent"),
|
|
2652
|
-
policyAdministrationPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPapComponent"),
|
|
2653
|
-
policyInformationPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPipComponent"),
|
|
2654
|
-
...instanceConfig.options,
|
|
2655
|
-
config: {
|
|
2656
|
-
...instanceConfig.options?.config,
|
|
2657
|
-
negotiators: instanceConfig.options?.config?.negotiators ?? modules
|
|
2658
|
-
}
|
|
2659
|
-
});
|
|
2660
|
-
instanceType = StringHelper.kebabCase("PolicyNegotiationPointService");
|
|
2661
|
-
}
|
|
2662
|
-
else if (type === RightsManagementPnpComponentType.RestClient) {
|
|
2663
|
-
component = new PolicyNegotiationPointClient(instanceConfig.options);
|
|
2664
|
-
instanceType = StringHelper.kebabCase("PolicyNegotiationPointClient");
|
|
2665
|
-
}
|
|
2666
|
-
else {
|
|
2667
|
-
throw new GeneralError("engineCore", "componentUnknownType", {
|
|
2668
|
-
type,
|
|
2669
|
-
componentType: "RightsManagementPnpComponent"
|
|
2670
|
-
});
|
|
2671
|
-
}
|
|
2672
|
-
const finalInstanceType = overrideInstanceType ?? instanceType;
|
|
2673
|
-
context.componentInstances.push({
|
|
2674
|
-
instanceType: finalInstanceType,
|
|
2675
|
-
component
|
|
2676
|
-
});
|
|
2677
|
-
ComponentFactory.register(finalInstanceType, () => component);
|
|
2678
|
-
return finalInstanceType;
|
|
2679
|
-
}
|
|
2680
|
-
|
|
2681
2737
|
// Copyright 2024 IOTA Stiftung.
|
|
2682
2738
|
// SPDX-License-Identifier: Apache-2.0.
|
|
2683
2739
|
/**
|
|
@@ -2746,20 +2802,24 @@ async function initialiseRightsManagementPnapComponent(engineCore, context, inst
|
|
|
2746
2802
|
// Copyright 2024 IOTA Stiftung.
|
|
2747
2803
|
// SPDX-License-Identifier: Apache-2.0.
|
|
2748
2804
|
/**
|
|
2749
|
-
* Rights management
|
|
2805
|
+
* Rights management PNP component types.
|
|
2750
2806
|
*/
|
|
2751
2807
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
2752
|
-
const
|
|
2808
|
+
const RightsManagementPnpComponentType = {
|
|
2753
2809
|
/**
|
|
2754
2810
|
* Service.
|
|
2755
2811
|
*/
|
|
2756
|
-
Service: "service"
|
|
2812
|
+
Service: "service",
|
|
2813
|
+
/**
|
|
2814
|
+
* REST client.
|
|
2815
|
+
*/
|
|
2816
|
+
RestClient: "rest-client"
|
|
2757
2817
|
};
|
|
2758
2818
|
|
|
2759
2819
|
// Copyright 2024 IOTA Stiftung.
|
|
2760
2820
|
// SPDX-License-Identifier: Apache-2.0.
|
|
2761
2821
|
/**
|
|
2762
|
-
* Initialise the rights management
|
|
2822
|
+
* Initialise the rights management PNP component.
|
|
2763
2823
|
* @param engineCore The engine core.
|
|
2764
2824
|
* @param context The context for the engine.
|
|
2765
2825
|
* @param instanceConfig The instance config.
|
|
@@ -2767,26 +2827,55 @@ const RightsManagementPnrpComponentType = {
|
|
|
2767
2827
|
* @returns The name of the instance created.
|
|
2768
2828
|
* @throws GeneralError if the component type is unknown.
|
|
2769
2829
|
*/
|
|
2770
|
-
async function
|
|
2830
|
+
async function initialiseRightsManagementPnpComponent(engineCore, context, instanceConfig, overrideInstanceType) {
|
|
2771
2831
|
engineCore.logInfo(I18n.formatMessage("engineCore.configuring", {
|
|
2772
|
-
element: `Rights Management
|
|
2832
|
+
element: `Rights Management PNP Component: ${instanceConfig.type}`
|
|
2773
2833
|
}));
|
|
2774
2834
|
const type = instanceConfig.type;
|
|
2775
2835
|
let component;
|
|
2776
2836
|
let instanceType;
|
|
2777
|
-
if (type ===
|
|
2778
|
-
|
|
2837
|
+
if (type === RightsManagementPnpComponentType.Service) {
|
|
2838
|
+
const negotiatorModules = [];
|
|
2839
|
+
if (Is.arrayValue(instanceConfig.options?.negotiatorModulesConfig)) {
|
|
2840
|
+
for (const moduleConfig of instanceConfig.options.negotiatorModulesConfig) {
|
|
2841
|
+
negotiatorModules.push({
|
|
2842
|
+
negotiatorId: moduleConfig.id,
|
|
2843
|
+
negotiator: await EngineModuleHelper.loadComponent(engineCore, moduleConfig)
|
|
2844
|
+
});
|
|
2845
|
+
}
|
|
2846
|
+
}
|
|
2847
|
+
const requesterModules = [];
|
|
2848
|
+
if (Is.arrayValue(instanceConfig.options?.requesterModulesConfig)) {
|
|
2849
|
+
for (const moduleConfig of instanceConfig.options.requesterModulesConfig) {
|
|
2850
|
+
requesterModules.push({
|
|
2851
|
+
requesterId: moduleConfig.id,
|
|
2852
|
+
requester: await EngineModuleHelper.loadComponent(engineCore, moduleConfig)
|
|
2853
|
+
});
|
|
2854
|
+
}
|
|
2855
|
+
}
|
|
2856
|
+
component = new PolicyNegotiationPointService({
|
|
2779
2857
|
loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
|
|
2780
2858
|
identityConnectorType: engineCore.getRegisteredInstanceType("identityConnector"),
|
|
2859
|
+
policyNegotiationAdministrationPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPnapComponent"),
|
|
2860
|
+
policyAdministrationPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPapComponent"),
|
|
2781
2861
|
policyInformationPointComponentType: engineCore.getRegisteredInstanceType("rightsManagementPipComponent"),
|
|
2782
|
-
...instanceConfig.options
|
|
2862
|
+
...instanceConfig.options,
|
|
2863
|
+
config: {
|
|
2864
|
+
...instanceConfig.options?.config,
|
|
2865
|
+
negotiators: instanceConfig.options?.config?.negotiators ?? negotiatorModules,
|
|
2866
|
+
requesters: instanceConfig.options?.config?.requesters ?? requesterModules
|
|
2867
|
+
}
|
|
2783
2868
|
});
|
|
2784
|
-
instanceType = StringHelper.kebabCase("
|
|
2869
|
+
instanceType = StringHelper.kebabCase("PolicyNegotiationPointService");
|
|
2870
|
+
}
|
|
2871
|
+
else if (type === RightsManagementPnpComponentType.RestClient) {
|
|
2872
|
+
component = new PolicyNegotiationPointClient(instanceConfig.options);
|
|
2873
|
+
instanceType = StringHelper.kebabCase("PolicyNegotiationPointClient");
|
|
2785
2874
|
}
|
|
2786
2875
|
else {
|
|
2787
2876
|
throw new GeneralError("engineCore", "componentUnknownType", {
|
|
2788
2877
|
type,
|
|
2789
|
-
componentType: "
|
|
2878
|
+
componentType: "RightsManagementPnpComponent"
|
|
2790
2879
|
});
|
|
2791
2880
|
}
|
|
2792
2881
|
const finalInstanceType = overrideInstanceType ?? instanceType;
|
|
@@ -3388,4 +3477,4 @@ const DltConfigType = {
|
|
|
3388
3477
|
Iota: "iota"
|
|
3389
3478
|
};
|
|
3390
3479
|
|
|
3391
|
-
export { AttestationComponentType, AttestationConnectorType, AuditableItemGraphComponentType, AuditableItemStreamComponentType, BackgroundTaskConnectorType, BlobStorageComponentType, BlobStorageConnectorType, DataConverterConnectorType, DataExtractorConnectorType, DataProcessingComponentType, DataSpaceConnectorComponentType, DltConfigType, DocumentManagementComponentType, EntityStorageComponentType, EntityStorageConnectorType, EventBusComponentType, EventBusConnectorType, FaucetConnectorType, FederatedCatalogueComponentType, IdentityComponentType, IdentityConnectorType, IdentityProfileComponentType, IdentityProfileConnectorType, IdentityResolverComponentType, IdentityResolverConnectorType, ImmutableProofComponentType, LoggingComponentType, LoggingConnectorType, MessagingComponentType, MessagingEmailConnectorType, MessagingPushNotificationConnectorType, MessagingSmsConnectorType, NftComponentType, NftConnectorType, RightsManagementPapComponentType, RightsManagementPdpComponentType, RightsManagementPepComponentType, RightsManagementPipComponentType, RightsManagementPmpComponentType, RightsManagementPnapComponentType, RightsManagementPnpComponentType,
|
|
3480
|
+
export { AttestationComponentType, AttestationConnectorType, AuditableItemGraphComponentType, AuditableItemStreamComponentType, BackgroundTaskConnectorType, BlobStorageComponentType, BlobStorageConnectorType, DataConverterConnectorType, DataExtractorConnectorType, DataProcessingComponentType, DataSpaceConnectorComponentType, DltConfigType, DocumentManagementComponentType, EntityStorageComponentType, EntityStorageConnectorType, EventBusComponentType, EventBusConnectorType, FaucetConnectorType, FederatedCatalogueComponentType, IdentityComponentType, IdentityConnectorType, IdentityProfileComponentType, IdentityProfileConnectorType, IdentityResolverComponentType, IdentityResolverConnectorType, ImmutableProofComponentType, LoggingComponentType, LoggingConnectorType, MessagingComponentType, MessagingEmailConnectorType, MessagingPushNotificationConnectorType, MessagingSmsConnectorType, NftComponentType, NftConnectorType, RightsManagementDapComponentType, RightsManagementDarpComponentType, RightsManagementPapComponentType, RightsManagementPdpComponentType, RightsManagementPepComponentType, RightsManagementPipComponentType, RightsManagementPmpComponentType, RightsManagementPnapComponentType, RightsManagementPnpComponentType, RightsManagementPxpComponentType, SynchronisedStorageComponentType, TaskSchedulerComponentType, TelemetryComponentType, TelemetryConnectorType, VaultConnectorType, VerifiableStorageComponentType, VerifiableStorageConnectorType, WalletConnectorType, initialiseAttestationComponent, initialiseAttestationConnector, initialiseAuditableItemGraphComponent, initialiseAuditableItemStreamComponent, initialiseBackgroundTaskConnector, initialiseBlobStorageComponent, initialiseBlobStorageConnector, initialiseDataConverterConnector, initialiseDataExtractorConnector, initialiseDataProcessingComponent, initialiseDataSpaceConnectorComponent, initialiseDocumentManagementComponent, initialiseEntityStorageComponent, initialiseEntityStorageConnector, initialiseEventBusComponent, initialiseEventBusConnector, initialiseFaucetConnector, initialiseFederatedCatalogueComponent, initialiseIdentityComponent, initialiseIdentityConnector, initialiseIdentityProfileComponent, initialiseIdentityProfileConnector, initialiseIdentityResolverComponent, initialiseIdentityResolverConnector, initialiseImmutableProofComponent, initialiseLoggingComponent, initialiseLoggingConnector, initialiseMessagingComponent, initialiseMessagingEmailConnector, initialiseMessagingPushNotificationConnector, initialiseMessagingSmsConnector, initialiseNftComponent, initialiseNftConnector, initialiseRightsManagementDapComponent, initialiseRightsManagementDarpComponent, initialiseRightsManagementPapComponent, initialiseRightsManagementPdpComponent, initialiseRightsManagementPepComponent, initialiseRightsManagementPipComponent, initialiseRightsManagementPmpComponent, initialiseRightsManagementPnapComponent, initialiseRightsManagementPnpComponent, initialiseRightsManagementPxpComponent, initialiseSynchronisedStorageComponent, initialiseTaskSchedulerComponent, initialiseTelemetryComponent, initialiseTelemetryConnector, initialiseVaultConnector, initialiseVerifiableStorageComponent, initialiseVerifiableStorageConnector, initialiseWalletConnector, initialiseWalletStorage };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IEngineCore, IEngineCoreContext } from "@twin.org/engine-models";
|
|
2
|
+
import type { RightsManagementDapComponentConfig } from "../models/config/rightsManagementDapComponentConfig";
|
|
3
|
+
import type { IEngineConfig } from "../models/IEngineConfig";
|
|
4
|
+
/**
|
|
5
|
+
* Initialise the rights management DAP component.
|
|
6
|
+
* @param engineCore The engine core.
|
|
7
|
+
* @param context The context for the engine.
|
|
8
|
+
* @param instanceConfig The instance config.
|
|
9
|
+
* @param overrideInstanceType The instance type to override the default.
|
|
10
|
+
* @returns The name of the instance created.
|
|
11
|
+
* @throws GeneralError if the component type is unknown.
|
|
12
|
+
*/
|
|
13
|
+
export declare function initialiseRightsManagementDapComponent(engineCore: IEngineCore<IEngineConfig>, context: IEngineCoreContext<IEngineConfig>, instanceConfig: RightsManagementDapComponentConfig, overrideInstanceType?: string): Promise<string | undefined>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { IEngineCore, IEngineCoreContext } from "@twin.org/engine-models";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RightsManagementDarpComponentConfig } from "../models/config/rightsManagementDarpComponentConfig";
|
|
3
3
|
import type { IEngineConfig } from "../models/IEngineConfig";
|
|
4
4
|
/**
|
|
5
|
-
* Initialise the rights management
|
|
5
|
+
* Initialise the rights management DARP component.
|
|
6
6
|
* @param engineCore The engine core.
|
|
7
7
|
* @param context The context for the engine.
|
|
8
8
|
* @param instanceConfig The instance config.
|
|
@@ -10,4 +10,4 @@ import type { IEngineConfig } from "../models/IEngineConfig";
|
|
|
10
10
|
* @returns The name of the instance created.
|
|
11
11
|
* @throws GeneralError if the component type is unknown.
|
|
12
12
|
*/
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function initialiseRightsManagementDarpComponent(engineCore: IEngineCore<IEngineConfig>, context: IEngineCoreContext<IEngineConfig>, instanceConfig: RightsManagementDarpComponentConfig, overrideInstanceType?: string): Promise<string | undefined>;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -17,14 +17,15 @@ export * from "./components/immutableProof";
|
|
|
17
17
|
export * from "./components/logging";
|
|
18
18
|
export * from "./components/messaging";
|
|
19
19
|
export * from "./components/nft";
|
|
20
|
+
export * from "./components/rightsManagementDap";
|
|
21
|
+
export * from "./components/rightsManagementDarp";
|
|
20
22
|
export * from "./components/rightsManagementPap";
|
|
21
23
|
export * from "./components/rightsManagementPdp";
|
|
22
24
|
export * from "./components/rightsManagementPep";
|
|
23
25
|
export * from "./components/rightsManagementPip";
|
|
24
26
|
export * from "./components/rightsManagementPmp";
|
|
25
|
-
export * from "./components/rightsManagementPnp";
|
|
26
27
|
export * from "./components/rightsManagementPnap";
|
|
27
|
-
export * from "./components/
|
|
28
|
+
export * from "./components/rightsManagementPnp";
|
|
28
29
|
export * from "./components/rightsManagementPxp";
|
|
29
30
|
export * from "./components/synchronisedStorage";
|
|
30
31
|
export * from "./components/taskScheduler";
|
|
@@ -66,6 +67,8 @@ export * from "./models/config/messagingPushNotificationConnectorConfig";
|
|
|
66
67
|
export * from "./models/config/messagingSmsConnectorConfig";
|
|
67
68
|
export * from "./models/config/nftComponentConfig";
|
|
68
69
|
export * from "./models/config/nftConnectorConfig";
|
|
70
|
+
export * from "./models/config/rightsManagementDapComponentConfig";
|
|
71
|
+
export * from "./models/config/rightsManagementDarpComponentConfig";
|
|
69
72
|
export * from "./models/config/rightsManagementPapComponentConfig";
|
|
70
73
|
export * from "./models/config/rightsManagementPdpComponentConfig";
|
|
71
74
|
export * from "./models/config/rightsManagementPepComponentConfig";
|
|
@@ -73,7 +76,6 @@ export * from "./models/config/rightsManagementPipComponentConfig";
|
|
|
73
76
|
export * from "./models/config/rightsManagementPmpComponentConfig";
|
|
74
77
|
export * from "./models/config/rightsManagementPnapComponentConfig";
|
|
75
78
|
export * from "./models/config/rightsManagementPnpComponentConfig";
|
|
76
|
-
export * from "./models/config/rightsManagementPnrpComponentConfig";
|
|
77
79
|
export * from "./models/config/rightsManagementPxpComponentConfig";
|
|
78
80
|
export * from "./models/config/synchronisedStorageComponentConfig";
|
|
79
81
|
export * from "./models/config/taskSchedulerComponentConfig";
|
|
@@ -118,6 +120,8 @@ export * from "./models/types/messagingPushNotificationConnectorType";
|
|
|
118
120
|
export * from "./models/types/messagingSmsConnectorType";
|
|
119
121
|
export * from "./models/types/nftComponentType";
|
|
120
122
|
export * from "./models/types/nftConnectorType";
|
|
123
|
+
export * from "./models/types/rightsManagementDapComponentType";
|
|
124
|
+
export * from "./models/types/rightsManagementDarpComponentType";
|
|
121
125
|
export * from "./models/types/rightsManagementPapComponentType";
|
|
122
126
|
export * from "./models/types/rightsManagementPdpComponentType";
|
|
123
127
|
export * from "./models/types/rightsManagementPepComponentType";
|
|
@@ -125,7 +129,6 @@ export * from "./models/types/rightsManagementPipComponentType";
|
|
|
125
129
|
export * from "./models/types/rightsManagementPmpComponentType";
|
|
126
130
|
export * from "./models/types/rightsManagementPnapComponentType";
|
|
127
131
|
export * from "./models/types/rightsManagementPnpComponentType";
|
|
128
|
-
export * from "./models/types/rightsManagementPnrpComponentType";
|
|
129
132
|
export * from "./models/types/rightsManagementPxpComponentType";
|
|
130
133
|
export * from "./models/types/synchronisedStorageComponentType";
|
|
131
134
|
export * from "./models/types/taskSchedulerComponentType";
|
|
@@ -33,6 +33,8 @@ import type { MessagingPushNotificationConnectorConfig } from "./config/messagin
|
|
|
33
33
|
import type { MessagingSmsConnectorConfig } from "./config/messagingSmsConnectorConfig";
|
|
34
34
|
import type { NftComponentConfig } from "./config/nftComponentConfig";
|
|
35
35
|
import type { NftConnectorConfig } from "./config/nftConnectorConfig";
|
|
36
|
+
import type { RightsManagementDapComponentConfig } from "./config/rightsManagementDapComponentConfig";
|
|
37
|
+
import type { RightsManagementDarpComponentConfig } from "./config/rightsManagementDarpComponentConfig";
|
|
36
38
|
import type { RightsManagementPapComponentConfig } from "./config/rightsManagementPapComponentConfig";
|
|
37
39
|
import type { RightsManagementPdpComponentConfig } from "./config/rightsManagementPdpComponentConfig";
|
|
38
40
|
import type { RightsManagementPepComponentConfig } from "./config/rightsManagementPepComponentConfig";
|
|
@@ -40,7 +42,6 @@ import type { RightsManagementPipComponentConfig } from "./config/rightsManageme
|
|
|
40
42
|
import type { RightsManagementPmpComponentConfig } from "./config/rightsManagementPmpComponentConfig";
|
|
41
43
|
import type { RightsManagementPnapComponentConfig } from "./config/rightsManagementPnapComponentConfig";
|
|
42
44
|
import type { RightsManagementPnpComponentConfig } from "./config/rightsManagementPnpComponentConfig";
|
|
43
|
-
import type { RightsManagementPnrpComponentConfig } from "./config/rightsManagementPnrpComponentConfig";
|
|
44
45
|
import type { RightsManagementPxpComponentConfig } from "./config/rightsManagementPxpComponentConfig";
|
|
45
46
|
import type { SynchronisedStorageComponentConfig } from "./config/synchronisedStorageComponentConfig";
|
|
46
47
|
import type { TaskSchedulerComponentConfig } from "./config/taskSchedulerComponentConfig";
|
|
@@ -248,9 +249,13 @@ export interface IEngineConfig extends IEngineCoreConfig {
|
|
|
248
249
|
*/
|
|
249
250
|
rightsManagementPnapComponent?: IEngineCoreTypeConfig<RightsManagementPnapComponentConfig>[];
|
|
250
251
|
/**
|
|
251
|
-
* Rights management
|
|
252
|
+
* Rights management DAP options which can be overridden by individual components by specifying types other than default.
|
|
252
253
|
*/
|
|
253
|
-
|
|
254
|
+
rightsManagementDapComponent?: IEngineCoreTypeConfig<RightsManagementDapComponentConfig>[];
|
|
255
|
+
/**
|
|
256
|
+
* Rights management DARP options which can be overridden by individual components by specifying types other than default.
|
|
257
|
+
*/
|
|
258
|
+
rightsManagementDarpComponent?: IEngineCoreTypeConfig<RightsManagementDarpComponentConfig>[];
|
|
254
259
|
/**
|
|
255
260
|
* Synchronised storage options which can be overridden by individual components by specifying types other than default.
|
|
256
261
|
*/
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IBaseRestClientConfig } from "@twin.org/api-models";
|
|
2
|
+
import type { IEngineModuleConfig } from "@twin.org/engine-models";
|
|
3
|
+
import type { IDataAccessPointServiceConstructorOptions } from "@twin.org/rights-management-dap-service";
|
|
4
|
+
import type { RightsManagementDapComponentType } from "../types/rightsManagementDapComponentType";
|
|
5
|
+
/**
|
|
6
|
+
* Rights management DAP component config types.
|
|
7
|
+
*/
|
|
8
|
+
export type RightsManagementDapComponentConfig = {
|
|
9
|
+
type: typeof RightsManagementDapComponentType.Service;
|
|
10
|
+
options?: IDataAccessPointServiceConstructorOptions & {
|
|
11
|
+
negotiatorModulesConfig?: IEngineModuleConfig[];
|
|
12
|
+
};
|
|
13
|
+
} | {
|
|
14
|
+
type: typeof RightsManagementDapComponentType.RestClient;
|
|
15
|
+
options: IBaseRestClientConfig;
|
|
16
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IEngineModuleConfig } from "@twin.org/engine-models";
|
|
2
|
+
import type { IDataAccessRequestPointServiceConstructorOptions } from "@twin.org/rights-management-dap-service";
|
|
3
|
+
import type { RightsManagementDarpComponentType } from "../types/rightsManagementDarpComponentType";
|
|
4
|
+
/**
|
|
5
|
+
* Rights management DARP component config types.
|
|
6
|
+
*/
|
|
7
|
+
export type RightsManagementDarpComponentConfig = {
|
|
8
|
+
type: typeof RightsManagementDarpComponentType.Service;
|
|
9
|
+
options: IDataAccessRequestPointServiceConstructorOptions & {
|
|
10
|
+
negotiatorModulesConfig?: IEngineModuleConfig[];
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IEngineModuleConfig } from "@twin.org/engine-models";
|
|
1
2
|
import type { IPolicyDecisionPointServiceConstructorOptions } from "@twin.org/rights-management-pdp-service";
|
|
2
3
|
import type { RightsManagementPdpComponentType } from "../types/rightsManagementPdpComponentType";
|
|
3
4
|
/**
|
|
@@ -5,5 +6,7 @@ import type { RightsManagementPdpComponentType } from "../types/rightsManagement
|
|
|
5
6
|
*/
|
|
6
7
|
export type RightsManagementPdpComponentConfig = {
|
|
7
8
|
type: typeof RightsManagementPdpComponentType.Service;
|
|
8
|
-
options?: IPolicyDecisionPointServiceConstructorOptions
|
|
9
|
+
options?: IPolicyDecisionPointServiceConstructorOptions & {
|
|
10
|
+
arbiterModulesConfig?: IEngineModuleConfig[];
|
|
11
|
+
};
|
|
9
12
|
};
|
|
@@ -7,8 +7,9 @@ import type { RightsManagementPnpComponentType } from "../types/rightsManagement
|
|
|
7
7
|
*/
|
|
8
8
|
export type RightsManagementPnpComponentConfig = {
|
|
9
9
|
type: typeof RightsManagementPnpComponentType.Service;
|
|
10
|
-
options
|
|
10
|
+
options: IPolicyNegotiationPointServiceConstructorOptions & {
|
|
11
11
|
negotiatorModulesConfig?: IEngineModuleConfig[];
|
|
12
|
+
requesterModulesConfig?: IEngineModuleConfig[];
|
|
12
13
|
};
|
|
13
14
|
} | {
|
|
14
15
|
type: typeof RightsManagementPnpComponentType.RestClient;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rights management DAP component types.
|
|
3
|
+
*/
|
|
4
|
+
export declare const RightsManagementDapComponentType: {
|
|
5
|
+
/**
|
|
6
|
+
* Service.
|
|
7
|
+
*/
|
|
8
|
+
readonly Service: "service";
|
|
9
|
+
/**
|
|
10
|
+
* REST client.
|
|
11
|
+
*/
|
|
12
|
+
readonly RestClient: "rest-client";
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Rights management DAP component types.
|
|
16
|
+
*/
|
|
17
|
+
export type RightsManagementDapComponentType = (typeof RightsManagementDapComponentType)[keyof typeof RightsManagementDapComponentType];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rights management DARP component types.
|
|
3
|
+
*/
|
|
4
|
+
export declare const RightsManagementDarpComponentType: {
|
|
5
|
+
/**
|
|
6
|
+
* Service.
|
|
7
|
+
*/
|
|
8
|
+
readonly Service: "service";
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Rights management DARP component types.
|
|
12
|
+
*/
|
|
13
|
+
export type RightsManagementDarpComponentType = (typeof RightsManagementDarpComponentType)[keyof typeof RightsManagementDarpComponentType];
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @twin.org/engine-types - Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.2-next.14](https://github.com/twinfoundation/engine/compare/engine-types-v0.0.2-next.13...engine-types-v0.0.2-next.14) (2025-09-19)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add latest rights management components ([2d305c8](https://github.com/twinfoundation/engine/commit/2d305c8c85c77bb4f5694c76422db4a11efc1a40))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/engine-core bumped from 0.0.2-next.13 to 0.0.2-next.14
|
|
16
|
+
* @twin.org/engine-models bumped from 0.0.2-next.13 to 0.0.2-next.14
|
|
17
|
+
|
|
3
18
|
## [0.0.2-next.13](https://github.com/twinfoundation/engine/compare/engine-types-v0.0.2-next.12...engine-types-v0.0.2-next.13) (2025-09-08)
|
|
4
19
|
|
|
5
20
|
|