@twin.org/node 0.0.3-next.52 → 0.0.3-next.54
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/locales/en.json +120 -59
- package/docs/changelog.md +28 -0
- package/docs/open-api/spec.json +313 -30
- package/docs/usage.md +97 -43
- package/package.json +2 -2
package/dist/locales/en.json
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
"error": {
|
|
3
3
|
"node": {
|
|
4
4
|
"nodeIdentityNotSet": "The node identity is enabled in config but is not set, please set it using the \"node-set-identity\" CLI command.",
|
|
5
|
+
"nodeOrganizationIdNotSet": "The node organization is not set, please set it using the \"set-node-org-id\".",
|
|
6
|
+
"tenantsWithoutOrganizationId": "The following tenants have no organization ID assigned. Use the \"set-tenant-org-id\" command to assign one before starting the node: {tenantIds}",
|
|
5
7
|
"storageFileRootNotSet": "{storageFileRoot} is not set, the server will not start without it, please set it in the shell or create a .env file",
|
|
6
8
|
"extensionLoadingError": "Failed to load extension \"{extension}\"",
|
|
7
9
|
"insecureProtocol": "Cannot load extension from insecure protocol: {protocol}. Only HTTPS is allowed for remote extensions.",
|
|
@@ -15,10 +17,13 @@
|
|
|
15
17
|
"invalidPublicOrigin": "The public origin \"{publicOrigin}\" is not a valid origin URL, it should be in the format \"protocol://host[:port]\"."
|
|
16
18
|
},
|
|
17
19
|
"bootstrapLegacy": {
|
|
18
|
-
"noFeaturesEnabled": "No features are enabled in legacy bootstrap mode, at least one feature must be enabled."
|
|
20
|
+
"noFeaturesEnabled": "No features are enabled in legacy bootstrap mode, at least one feature must be enabled.",
|
|
21
|
+
"organizationNotSet": "The organisation identity has not been set. Run \"set-node-org-id\"."
|
|
19
22
|
},
|
|
20
23
|
"identityCreate": {
|
|
21
|
-
"invalidMnemonic": "The mnemonic is invalid, it should be 24 words from the standard wordlist."
|
|
24
|
+
"invalidMnemonic": "The mnemonic is invalid, it should be 24 words from the standard wordlist.",
|
|
25
|
+
"onlyOneAssignmentOptionAllowed": "Only one of node-id, node-organization-id, or tenant-organization-id can be set at the same time.",
|
|
26
|
+
"nodeOrganizationIdNotAvailableInMultiTenantMode": "The node-organization-id option is not available in multi-tenant mode, use tenant-organization-id instead."
|
|
22
27
|
},
|
|
23
28
|
"identityImport": {
|
|
24
29
|
"identityNotFound": "The identity was not found, it must be created on-chain already.",
|
|
@@ -33,11 +38,6 @@
|
|
|
33
38
|
"tenantCreate": {
|
|
34
39
|
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
|
|
35
40
|
},
|
|
36
|
-
"tenantToken": {
|
|
37
|
-
"tenantIdOrApiKeyRequired": "Either a tenant ID or an API key must be provided.",
|
|
38
|
-
"urlTransformerComponentNotRegistered": "The URL transformer component is not registered, ensure the node is configured correctly.",
|
|
39
|
-
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
|
|
40
|
-
},
|
|
41
41
|
"tenantImport": {
|
|
42
42
|
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
|
|
43
43
|
},
|
|
@@ -58,6 +58,17 @@
|
|
|
58
58
|
"nodeSetIdentity": {
|
|
59
59
|
"identityNotFound": "The identity with DID \"{notFoundId}\" was not found in the system."
|
|
60
60
|
},
|
|
61
|
+
"setNodeOrgId": {
|
|
62
|
+
"notAvailableInMultiTenantMode": "The set-node-org-id command is not available in multi-tenant mode, use set-tenant-org-id instead."
|
|
63
|
+
},
|
|
64
|
+
"applyOrganizationIdToTenant": {
|
|
65
|
+
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command.",
|
|
66
|
+
"organizationIdAlreadyInUse": "The organization ID \"{organizationId}\" is already assigned to tenant \"{conflictingTenantId}\"."
|
|
67
|
+
},
|
|
68
|
+
"removeTenantOrgAlias": {
|
|
69
|
+
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command.",
|
|
70
|
+
"aliasNotFound": "The alias \"{alias}\" was not found in the tenant organization legacy list."
|
|
71
|
+
},
|
|
61
72
|
"entityStorageAuthenticationService": {
|
|
62
73
|
"loginFailed": "Login failed",
|
|
63
74
|
"userNotFound": "The user with the specified e-mail could not be found",
|
|
@@ -330,9 +341,12 @@
|
|
|
330
341
|
},
|
|
331
342
|
"tenantProcessor": {
|
|
332
343
|
"missingApiKey": "API key \"{keyName}\" is missing",
|
|
333
|
-
"
|
|
334
|
-
"apiKeyNotFound": "No
|
|
335
|
-
"
|
|
344
|
+
"missingOrganizationId": "Organization ID query parameter \"{paramName}\" is missing",
|
|
345
|
+
"apiKeyNotFound": "No tenant found for API key \"{key}\".",
|
|
346
|
+
"organizationIdNotFound": "No tenant found for organization ID \"{organizationId}\"."
|
|
347
|
+
},
|
|
348
|
+
"singleTenantProcessor": {
|
|
349
|
+
"invalidOrganizationId": "Organization ID query parameter \"{paramName}\" value \"{value}\" is not valid for this node"
|
|
336
350
|
},
|
|
337
351
|
"tenantAdminService": {
|
|
338
352
|
"apiKeyAlreadyInUse": "The provided API key is already in use by another tenant.",
|
|
@@ -384,12 +398,6 @@
|
|
|
384
398
|
"entityStorageMissing": "Entity storage configuration missing for component \"{storageName}\"",
|
|
385
399
|
"connectorUnknownType": "Unknown connector type \"{type}\" specified for \"{connectorType}\""
|
|
386
400
|
},
|
|
387
|
-
"urlTransformerService": {
|
|
388
|
-
"encryptionUnavailable": "Encryption is unavailable because no nodeId is configured",
|
|
389
|
-
"decryptionUnavailable": "Decryption is unavailable because no nodeId is configured",
|
|
390
|
-
"encryptionFailed": "An error occurred during encryption",
|
|
391
|
-
"decryptionFailed": "An error occurred during decryption"
|
|
392
|
-
},
|
|
393
401
|
"healthService": {
|
|
394
402
|
"componentHealthCheckFailed": "Health check failed for component \"{className}\""
|
|
395
403
|
},
|
|
@@ -578,6 +586,9 @@
|
|
|
578
586
|
"mimeTypeNotFound": "Unable to detect MIME type from data",
|
|
579
587
|
"converterNotFound": "Unable to find a converter for the MIME type \"{notFoundId}\""
|
|
580
588
|
},
|
|
589
|
+
"dataspaceControlPlaneRestClient": {
|
|
590
|
+
"notSupportedOnClient": "The method \"{methodName}\" is not supported on the REST client, it can only be used on a server side component"
|
|
591
|
+
},
|
|
581
592
|
"dataspaceControlPlaneService": {
|
|
582
593
|
"transferProcessNotFound": "Transfer Process not found",
|
|
583
594
|
"pullTransfersNotSupported": "PULL transfers are not supported. Configure dataPlanePath in service configuration to enable PULL transfers.",
|
|
@@ -599,11 +610,8 @@
|
|
|
599
610
|
"datasetNotInCatalog": "Dataset \"{datasetId}\" not found in Federated Catalogue (Agreement: {agreementId})",
|
|
600
611
|
"catalogLookupFailed": "Failed to lookup dataset in Federated Catalogue: {datasetId} (Agreement: {agreementId})",
|
|
601
612
|
"agreementNotMatchingOffer": "Agreement \"{agreementId}\" does not match any Catalog Offer for dataset {datasetId}. Available Offers: {availableOffers}",
|
|
602
|
-
"
|
|
603
|
-
"
|
|
604
|
-
"agreementAssignerMismatch": "Agreement assigner does not match current caller identity. Agreement: {agreementId}, consumerPid: {consumerPid}, expected: {expectedComposite}, actual: {actualAssigner}",
|
|
605
|
-
"agreementAssignerMismatchProvider": "Agreement assigner does not match current caller identity. Agreement: {agreementId}, providerPid: {providerPid}, expected: {expectedComposite}, actual: {actualAssigner}",
|
|
606
|
-
"invalidCompositeIdentifier": "Composite tenant identifier is not in a recognised shape (expected `nodeDid` or `nodeDid:tenantIdHash`, where `nodeDid` starts with `did:`). Got: \"{composite}\"",
|
|
613
|
+
"agreementAssignerMismatch": "Agreement assigner does not match current caller identity. Agreement: {agreementId}, consumerPid: {consumerPid}, expected: {organizationIdentity}, actual: {actualAssigner}",
|
|
614
|
+
"agreementAssignerMismatchProvider": "Agreement assigner does not match current caller identity. Agreement: {agreementId}, providerPid: {providerPid}, expected: {organizationIdentity}, actual: {actualAssigner}",
|
|
607
615
|
"agreementAssigneeMismatch": "Agreement assignee does not match expected consumer identity. Agreement: {agreementId}, providerPid: {providerPid}, expected: {expectedConsumerIdentity}, actual: {actualAssignee}",
|
|
608
616
|
"negotiationInitiationFailed": "Failed to initiate contract negotiation",
|
|
609
617
|
"datasetNotFoundInCatalog": "Dataset/Offer \"{offerId}\" not found in Federated Catalogue. Cannot initiate negotiation for non-existent offer.",
|
|
@@ -628,21 +636,20 @@
|
|
|
628
636
|
"dataPlaneNotRegistered": "Push-mode transfer requires the data plane component to be registered (factory key: \"dataspace-data-plane\"). This deployment was configured without a data plane — register one to enable push, or use pull-mode transfers only.",
|
|
629
637
|
"datasetPublishFailed": "Failed to publish dataset \"{datasetId}\" for app \"{appId}\" (tenant: \"{tenantId}\")",
|
|
630
638
|
"datasetRemoveFailed": "Failed to remove dataset \"{datasetId}\" from the Federated Catalogue (tenant: \"{tenantId}\")",
|
|
631
|
-
"datasetNodeContextRequired": "A node context is required to register a dataset.",
|
|
632
639
|
"datasetAlreadyExists": "A dataset with id \"{existingId}\" already exists.",
|
|
633
640
|
"datasetNotFound": "Dataset not found",
|
|
634
|
-
"
|
|
635
|
-
"
|
|
641
|
+
"datasetWrongOrganization": "The calling organization does not own this dataset.",
|
|
642
|
+
"transferWrongOrganization": "The calling organization does not own this transfer.",
|
|
636
643
|
"invalidDatasetId": "Dataset ID \"{id}\" is not a valid URN or URL"
|
|
637
644
|
},
|
|
638
645
|
"dataspaceControlPlanePolicyRequester": {},
|
|
646
|
+
"trustHelper": {
|
|
647
|
+
"trustVerifyFailed": "Trust verification failed for action \"{action}\""
|
|
648
|
+
},
|
|
639
649
|
"odrlPolicyHelper": {
|
|
640
650
|
"policyMissingAssignee": "The {policyType} with id \"{policyId}\" is missing an assignee.",
|
|
641
651
|
"policyMissingAssigner": "The {policyType} with id \"{policyId}\" is missing an assigner."
|
|
642
652
|
},
|
|
643
|
-
"trustHelper": {
|
|
644
|
-
"trustVerifyFailed": "Trust verification failed for action \"{action}\""
|
|
645
|
-
},
|
|
646
653
|
"dataspaceDataPlaneRestClient": {
|
|
647
654
|
"notSupportedOnClient": "The method \"{methodName}\" is not supported on the REST client, it can only be used on a server side component"
|
|
648
655
|
},
|
|
@@ -660,7 +667,7 @@
|
|
|
660
667
|
"transferNotInStartedState": "Transfer Process is not in STARTED state. Current state: \"{currentState}\"",
|
|
661
668
|
"transferMissingDatasetId": "Transfer Process is missing datasetId",
|
|
662
669
|
"transferMissingDataAddress": "Transfer Process is missing a valid push dataAddress endpoint (consumerPid: {consumerPid})",
|
|
663
|
-
"
|
|
670
|
+
"pushSubscriptionMissingOrganizationId": "Push subscription setup rejected: consumer endpoint does not carry an `organization` query parameter (consumerPid: {consumerPid}, endpoint: {endpoint}). On multi-tenant publishers the consumer must bake its organization ID before sending the dataAddress.",
|
|
664
671
|
"pushSubscriptionStorageNotRegistered": "Push-mode transfer requires push-subscription storage to be registered (entity-storage key: \"push-subscription\"). This deployment was configured without it — register the storage to enable push, or use pull-mode transfers only.",
|
|
665
672
|
"schemaNotFound": "Schema \"{schemaId}\" not found",
|
|
666
673
|
"cleanupFailed": "Error occurred during cleanup of activity logs",
|
|
@@ -1340,6 +1347,7 @@
|
|
|
1340
1347
|
"extensionHttpsDownloading": "Downloading HTTPS extension",
|
|
1341
1348
|
"extensionCacheExpired": "Cache expired for extension: {url}",
|
|
1342
1349
|
"extensionForceRefresh": "Force refresh enabled for extension: {url}",
|
|
1350
|
+
"tenantOrganizationIdAutoAssigned": "Legacy migration: automatically assigned organization ID \"{organizationId}\" to tenant \"{tenantId}\".",
|
|
1343
1351
|
"cli": {
|
|
1344
1352
|
"commands": {
|
|
1345
1353
|
"command": "Command",
|
|
@@ -1368,16 +1376,16 @@
|
|
|
1368
1376
|
"labels": {
|
|
1369
1377
|
"nodeIdentityCreate": "Creating node identity",
|
|
1370
1378
|
"nodeAuthKeyCreate": "Creating node auth key",
|
|
1371
|
-
"trustVerificationMethodCreate": "Creating trust verification method for
|
|
1372
|
-
"nodeIdentitySet": "Setting node identity",
|
|
1379
|
+
"trustVerificationMethodCreate": "Creating trust verification method for organisation identity",
|
|
1373
1380
|
"nodeTenantCreate": "Creating node tenant",
|
|
1374
1381
|
"organisationCreate": "Creating organisation identity",
|
|
1375
1382
|
"blobStorageKeyCreate": "Creating blob storage encryption key for organisation identity",
|
|
1376
1383
|
"attestationMethodCreate": "Creating attestation method for organisation identity",
|
|
1377
1384
|
"immutableProofMethodCreate": "Creating immutable proof method for organisation identity",
|
|
1385
|
+
"nodeOrganizationIdSet": "Setting node organisation ID",
|
|
1378
1386
|
"adminIdentityCreate": "Creating admin user identity",
|
|
1379
1387
|
"adminUserCreate": "Creating admin user",
|
|
1380
|
-
"
|
|
1388
|
+
"tenantFallback": "No Node-labelled tenant found; using first available tenant"
|
|
1381
1389
|
}
|
|
1382
1390
|
},
|
|
1383
1391
|
"identity-create": {
|
|
@@ -1410,6 +1418,15 @@
|
|
|
1410
1418
|
},
|
|
1411
1419
|
"output-env-prefix": {
|
|
1412
1420
|
"description": "Prefix to use for variables in the output .env file."
|
|
1421
|
+
},
|
|
1422
|
+
"node-id": {
|
|
1423
|
+
"description": "If true, set the created identity DID as the node identity."
|
|
1424
|
+
},
|
|
1425
|
+
"node-organization-id": {
|
|
1426
|
+
"description": "If true, set the created identity DID as the node organization ID (not available in multi-tenant mode)."
|
|
1427
|
+
},
|
|
1428
|
+
"tenant-organization-id": {
|
|
1429
|
+
"description": "The tenant ID to set the created identity DID as the organization ID for (requires multi-tenant mode)."
|
|
1413
1430
|
}
|
|
1414
1431
|
},
|
|
1415
1432
|
"labels": {
|
|
@@ -1417,12 +1434,12 @@
|
|
|
1417
1434
|
"processingMnemonic": "Processing mnemonic",
|
|
1418
1435
|
"readingMnemonic": "Reading mnemonic",
|
|
1419
1436
|
"storingMnemonic": "Storing mnemonic",
|
|
1420
|
-
"existingMnemonic": "Mnemonic already exists",
|
|
1437
|
+
"existingMnemonic": "Mnemonic already exists, skipping creation",
|
|
1421
1438
|
"noExistingMnemonic": "No existing mnemonic found",
|
|
1422
1439
|
"generatingMnemonic": "Generating mnemonic",
|
|
1423
1440
|
"processingIdentity": "Processing identity",
|
|
1424
1441
|
"resolvingIdentity": "Resolving identity",
|
|
1425
|
-
"existingIdentity": "Identity already exists",
|
|
1442
|
+
"existingIdentity": "Identity already exists, skipping creation",
|
|
1426
1443
|
"noIdentityFound": "No identity found",
|
|
1427
1444
|
"creatingIdentity": "Creating identity",
|
|
1428
1445
|
"createdIdentity": "Created identity",
|
|
@@ -1599,12 +1616,13 @@
|
|
|
1599
1616
|
},
|
|
1600
1617
|
"labels": {
|
|
1601
1618
|
"resolvingIdentity": "Resolving identity",
|
|
1602
|
-
"stored": "The node identity has been stored"
|
|
1619
|
+
"stored": "The node identity has been stored",
|
|
1620
|
+
"skipping": "The node identity has not changed, skipping"
|
|
1603
1621
|
}
|
|
1604
1622
|
},
|
|
1605
1623
|
"tenant-create": {
|
|
1606
1624
|
"description": "Create a tenant with associated api key",
|
|
1607
|
-
"example": "tenant-create --tenant-id=\"0011..aabb\" --api-key=\"aabb..0099\" --label=\"My Tenant\" --public-origin=\"https://example.com:1234\"",
|
|
1625
|
+
"example": "tenant-create --tenant-id=\"0011..aabb\" --api-key=\"aabb..0099\" --organization-id=\"did:iota:...\" --label=\"My Tenant\" --public-origin=\"https://example.com:1234\"",
|
|
1608
1626
|
"params": {
|
|
1609
1627
|
"env-prefix": {
|
|
1610
1628
|
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
@@ -1615,6 +1633,9 @@
|
|
|
1615
1633
|
"api-key": {
|
|
1616
1634
|
"description": "The API key to associate with the tenant id. If not provided, a random key will be generated."
|
|
1617
1635
|
},
|
|
1636
|
+
"organization-id": {
|
|
1637
|
+
"description": "The organization DID to associate with the tenant."
|
|
1638
|
+
},
|
|
1618
1639
|
"label": {
|
|
1619
1640
|
"description": "A descriptive label for the tenant."
|
|
1620
1641
|
},
|
|
@@ -1638,6 +1659,7 @@
|
|
|
1638
1659
|
"creating": "Creating tenant",
|
|
1639
1660
|
"tenantId": "Tenant ID",
|
|
1640
1661
|
"apiKey": "API Key",
|
|
1662
|
+
"organizationId": "Organization ID",
|
|
1641
1663
|
"label": "Label",
|
|
1642
1664
|
"publicOrigin": "Public Origin"
|
|
1643
1665
|
}
|
|
@@ -1698,30 +1720,6 @@
|
|
|
1698
1720
|
"updated": "Updated tenant"
|
|
1699
1721
|
}
|
|
1700
1722
|
},
|
|
1701
|
-
"tenant-token": {
|
|
1702
|
-
"description": "Generate the x-enc-tenant-token token value for a tenant",
|
|
1703
|
-
"example": "tenant-token --tenant-id=\"0011..aabb\"",
|
|
1704
|
-
"params": {
|
|
1705
|
-
"tenant-id": {
|
|
1706
|
-
"description": "The tenant ID to generate the token for."
|
|
1707
|
-
},
|
|
1708
|
-
"api-key": {
|
|
1709
|
-
"description": "The API key to look up the tenant ID from."
|
|
1710
|
-
},
|
|
1711
|
-
"load-env": {
|
|
1712
|
-
"description": "Comma separated list of paths to .env files to read input parameters from."
|
|
1713
|
-
},
|
|
1714
|
-
"output-json": {
|
|
1715
|
-
"description": "Path to a .json file to store the command output."
|
|
1716
|
-
}
|
|
1717
|
-
},
|
|
1718
|
-
"labels": {
|
|
1719
|
-
"lookingUp": "Looking up tenant",
|
|
1720
|
-
"generating": "Generating tenant token",
|
|
1721
|
-
"tenantId": "Tenant ID",
|
|
1722
|
-
"token": "Token"
|
|
1723
|
-
}
|
|
1724
|
-
},
|
|
1725
1723
|
"user-create": {
|
|
1726
1724
|
"description": "Create a user",
|
|
1727
1725
|
"example": "user-create --user-identity=\"did:iota:....\" --organization-identity=\"did:iota:....\" --email=\"bob@examples.com\" --password=\"pass1234\" --scope=\"tenant-admin\" --givenName=\"Bob\" --familyName=\"Smith\"",
|
|
@@ -1864,6 +1862,69 @@
|
|
|
1864
1862
|
"publicKeyHex": "Public Key Hex"
|
|
1865
1863
|
}
|
|
1866
1864
|
},
|
|
1865
|
+
"set-node-org-id": {
|
|
1866
|
+
"description": "Set the node organization ID",
|
|
1867
|
+
"example": "set-node-org-id --organization-id=\"did:iota:...\"",
|
|
1868
|
+
"params": {
|
|
1869
|
+
"env-prefix": {
|
|
1870
|
+
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
1871
|
+
},
|
|
1872
|
+
"organization-id": {
|
|
1873
|
+
"description": "The organization DID to set as the node organization ID."
|
|
1874
|
+
},
|
|
1875
|
+
"load-env": {
|
|
1876
|
+
"description": "Comma separated list of paths to .env files to read input parameters from."
|
|
1877
|
+
}
|
|
1878
|
+
},
|
|
1879
|
+
"labels": {
|
|
1880
|
+
"stored": "The node organization ID has been stored"
|
|
1881
|
+
}
|
|
1882
|
+
},
|
|
1883
|
+
"set-tenant-org-id": {
|
|
1884
|
+
"description": "Set the organization ID for a tenant",
|
|
1885
|
+
"example": "set-tenant-org-id --tenant-id=\"0011..aabb\" --organization-id=\"did:iota:...\"",
|
|
1886
|
+
"params": {
|
|
1887
|
+
"env-prefix": {
|
|
1888
|
+
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
1889
|
+
},
|
|
1890
|
+
"tenant-id": {
|
|
1891
|
+
"description": "The tenant ID to update."
|
|
1892
|
+
},
|
|
1893
|
+
"organization-id": {
|
|
1894
|
+
"description": "The organization DID to set as the tenant organization ID."
|
|
1895
|
+
},
|
|
1896
|
+
"load-env": {
|
|
1897
|
+
"description": "Comma separated list of paths to .env files to read input parameters from."
|
|
1898
|
+
}
|
|
1899
|
+
},
|
|
1900
|
+
"labels": {
|
|
1901
|
+
"updating": "Updating tenant organization ID",
|
|
1902
|
+
"stored": "The tenant organization ID has been stored"
|
|
1903
|
+
}
|
|
1904
|
+
},
|
|
1905
|
+
"remove-tenant-org-alias": {
|
|
1906
|
+
"description": "Remove an alias from the tenant organization ID legacy list",
|
|
1907
|
+
"example": "remove-tenant-org-alias --tenant-id=\"0011..aabb\" --alias=\"did:iota:...\"",
|
|
1908
|
+
"params": {
|
|
1909
|
+
"env-prefix": {
|
|
1910
|
+
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
1911
|
+
},
|
|
1912
|
+
"tenant-id": {
|
|
1913
|
+
"description": "The tenant ID to update."
|
|
1914
|
+
},
|
|
1915
|
+
"alias": {
|
|
1916
|
+
"description": "The organization DID alias to remove from the legacy list."
|
|
1917
|
+
},
|
|
1918
|
+
"load-env": {
|
|
1919
|
+
"description": "Comma separated list of paths to .env files to read input parameters from."
|
|
1920
|
+
}
|
|
1921
|
+
},
|
|
1922
|
+
"labels": {
|
|
1923
|
+
"reading": "Reading tenant",
|
|
1924
|
+
"updating": "Removing alias from tenant organization legacy list",
|
|
1925
|
+
"removed": "The alias has been removed from the tenant organization legacy list"
|
|
1926
|
+
}
|
|
1927
|
+
},
|
|
1867
1928
|
"vault-key-import": {
|
|
1868
1929
|
"description": "Import a vault key for an identity",
|
|
1869
1930
|
"example": "vault-key-import --identity=\"did:iota:....\" --key-id=\"my-key\" --key-type=Ed25519 --private-key-hex=\"15...a2\"",
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.3-next.54](https://github.com/iotaledger/twin-node/compare/node-v0.0.3-next.53...node-v0.0.3-next.54) (2026-06-12)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* improved cli commands ([#206](https://github.com/iotaledger/twin-node/issues/206)) ([cf00850](https://github.com/iotaledger/twin-node/commit/cf0085023a66e187aaaaf3889128c845c73a1faf))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/node-core bumped from 0.0.3-next.53 to 0.0.3-next.54
|
|
16
|
+
|
|
17
|
+
## [0.0.3-next.53](https://github.com/iotaledger/twin-node/compare/node-v0.0.3-next.52...node-v0.0.3-next.53) (2026-06-11)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* organization identifiers ([#203](https://github.com/iotaledger/twin-node/issues/203)) ([1a6b176](https://github.com/iotaledger/twin-node/commit/1a6b1760d9f8e43a769407668426c70e1c8e1aa8))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Dependencies
|
|
26
|
+
|
|
27
|
+
* The following workspace dependencies were updated
|
|
28
|
+
* dependencies
|
|
29
|
+
* @twin.org/node-core bumped from 0.0.3-next.52 to 0.0.3-next.53
|
|
30
|
+
|
|
3
31
|
## [0.0.3-next.52](https://github.com/iotaledger/twin-node/compare/node-v0.0.3-next.51...node-v0.0.3-next.52) (2026-06-09)
|
|
4
32
|
|
|
5
33
|
|
package/docs/open-api/spec.json
CHANGED
|
@@ -13158,6 +13158,95 @@
|
|
|
13158
13158
|
}
|
|
13159
13159
|
}
|
|
13160
13160
|
},
|
|
13161
|
+
"/aig/{id}/proof": {
|
|
13162
|
+
"delete": {
|
|
13163
|
+
"operationId": "auditableItemGraphRemoveProof",
|
|
13164
|
+
"summary": "Remove the notarization proof from all changesets of a graph vertex",
|
|
13165
|
+
"tags": [
|
|
13166
|
+
"Auditable Item Graph"
|
|
13167
|
+
],
|
|
13168
|
+
"parameters": [
|
|
13169
|
+
{
|
|
13170
|
+
"name": "id",
|
|
13171
|
+
"description": "The id of the vertex whose proof should be removed.",
|
|
13172
|
+
"in": "path",
|
|
13173
|
+
"required": true,
|
|
13174
|
+
"schema": {
|
|
13175
|
+
"type": "string"
|
|
13176
|
+
},
|
|
13177
|
+
"style": "simple",
|
|
13178
|
+
"example": "0101010101010101010101010101010101010101010101010101010101010101"
|
|
13179
|
+
}
|
|
13180
|
+
],
|
|
13181
|
+
"security": [
|
|
13182
|
+
{
|
|
13183
|
+
"jwtBearerAuthScheme": []
|
|
13184
|
+
}
|
|
13185
|
+
],
|
|
13186
|
+
"responses": {
|
|
13187
|
+
"204": {
|
|
13188
|
+
"description": "The rest request ended in success with no data."
|
|
13189
|
+
},
|
|
13190
|
+
"400": {
|
|
13191
|
+
"description": "The server cannot process the request, see the content for more details.",
|
|
13192
|
+
"content": {
|
|
13193
|
+
"application/json": {
|
|
13194
|
+
"schema": {
|
|
13195
|
+
"$ref": "#/components/schemas/Error"
|
|
13196
|
+
},
|
|
13197
|
+
"examples": {
|
|
13198
|
+
"exampleResponse": {
|
|
13199
|
+
"value": {
|
|
13200
|
+
"name": "GeneralError",
|
|
13201
|
+
"message": "errorMessage",
|
|
13202
|
+
"properties": {
|
|
13203
|
+
"foo": "bar"
|
|
13204
|
+
}
|
|
13205
|
+
}
|
|
13206
|
+
}
|
|
13207
|
+
}
|
|
13208
|
+
}
|
|
13209
|
+
}
|
|
13210
|
+
},
|
|
13211
|
+
"401": {
|
|
13212
|
+
"description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
|
|
13213
|
+
"content": {
|
|
13214
|
+
"application/json": {
|
|
13215
|
+
"schema": {
|
|
13216
|
+
"$ref": "#/components/schemas/Error"
|
|
13217
|
+
},
|
|
13218
|
+
"examples": {
|
|
13219
|
+
"exampleResponse": {
|
|
13220
|
+
"value": {
|
|
13221
|
+
"name": "UnauthorizedError",
|
|
13222
|
+
"message": "errorMessage"
|
|
13223
|
+
}
|
|
13224
|
+
}
|
|
13225
|
+
}
|
|
13226
|
+
}
|
|
13227
|
+
}
|
|
13228
|
+
},
|
|
13229
|
+
"500": {
|
|
13230
|
+
"description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
|
|
13231
|
+
"content": {
|
|
13232
|
+
"application/json": {
|
|
13233
|
+
"schema": {
|
|
13234
|
+
"$ref": "#/components/schemas/Error"
|
|
13235
|
+
},
|
|
13236
|
+
"examples": {
|
|
13237
|
+
"exampleResponse": {
|
|
13238
|
+
"value": {
|
|
13239
|
+
"name": "InternalServerError",
|
|
13240
|
+
"message": "errorMessage"
|
|
13241
|
+
}
|
|
13242
|
+
}
|
|
13243
|
+
}
|
|
13244
|
+
}
|
|
13245
|
+
}
|
|
13246
|
+
}
|
|
13247
|
+
}
|
|
13248
|
+
}
|
|
13249
|
+
},
|
|
13161
13250
|
"/ais": {
|
|
13162
13251
|
"post": {
|
|
13163
13252
|
"operationId": "auditableItemStreamCreate",
|
|
@@ -15786,6 +15875,116 @@
|
|
|
15786
15875
|
}
|
|
15787
15876
|
}
|
|
15788
15877
|
},
|
|
15878
|
+
"/ais/{id}/proof": {
|
|
15879
|
+
"delete": {
|
|
15880
|
+
"operationId": "auditableItemStreamRemoveProof",
|
|
15881
|
+
"summary": "Remove the proof from a stream",
|
|
15882
|
+
"tags": [
|
|
15883
|
+
"Auditable Item Stream"
|
|
15884
|
+
],
|
|
15885
|
+
"parameters": [
|
|
15886
|
+
{
|
|
15887
|
+
"name": "id",
|
|
15888
|
+
"description": "The id of the stream to remove the proof from.",
|
|
15889
|
+
"in": "path",
|
|
15890
|
+
"required": true,
|
|
15891
|
+
"schema": {
|
|
15892
|
+
"type": "string"
|
|
15893
|
+
},
|
|
15894
|
+
"style": "simple",
|
|
15895
|
+
"example": "ais:1234567890"
|
|
15896
|
+
}
|
|
15897
|
+
],
|
|
15898
|
+
"security": [
|
|
15899
|
+
{
|
|
15900
|
+
"jwtBearerAuthScheme": []
|
|
15901
|
+
}
|
|
15902
|
+
],
|
|
15903
|
+
"responses": {
|
|
15904
|
+
"204": {
|
|
15905
|
+
"description": "The rest request ended in success with no data."
|
|
15906
|
+
},
|
|
15907
|
+
"400": {
|
|
15908
|
+
"description": "The server cannot process the request, see the content for more details.",
|
|
15909
|
+
"content": {
|
|
15910
|
+
"application/json": {
|
|
15911
|
+
"schema": {
|
|
15912
|
+
"$ref": "#/components/schemas/Error"
|
|
15913
|
+
},
|
|
15914
|
+
"examples": {
|
|
15915
|
+
"exampleResponse": {
|
|
15916
|
+
"value": {
|
|
15917
|
+
"name": "GeneralError",
|
|
15918
|
+
"message": "errorMessage",
|
|
15919
|
+
"properties": {
|
|
15920
|
+
"foo": "bar"
|
|
15921
|
+
}
|
|
15922
|
+
}
|
|
15923
|
+
}
|
|
15924
|
+
}
|
|
15925
|
+
}
|
|
15926
|
+
}
|
|
15927
|
+
},
|
|
15928
|
+
"401": {
|
|
15929
|
+
"description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
|
|
15930
|
+
"content": {
|
|
15931
|
+
"application/json": {
|
|
15932
|
+
"schema": {
|
|
15933
|
+
"$ref": "#/components/schemas/Error"
|
|
15934
|
+
},
|
|
15935
|
+
"examples": {
|
|
15936
|
+
"exampleResponse": {
|
|
15937
|
+
"value": {
|
|
15938
|
+
"name": "UnauthorizedError",
|
|
15939
|
+
"message": "errorMessage"
|
|
15940
|
+
}
|
|
15941
|
+
}
|
|
15942
|
+
}
|
|
15943
|
+
}
|
|
15944
|
+
}
|
|
15945
|
+
},
|
|
15946
|
+
"404": {
|
|
15947
|
+
"description": "The resource you tried to access does not exist, see the content for more details.",
|
|
15948
|
+
"content": {
|
|
15949
|
+
"application/json": {
|
|
15950
|
+
"schema": {
|
|
15951
|
+
"$ref": "#/components/schemas/NotFoundResponse"
|
|
15952
|
+
},
|
|
15953
|
+
"examples": {
|
|
15954
|
+
"exampleResponse": {
|
|
15955
|
+
"value": {
|
|
15956
|
+
"name": "NotFoundError",
|
|
15957
|
+
"message": "errorMessage",
|
|
15958
|
+
"properties": {
|
|
15959
|
+
"notFoundId": "1"
|
|
15960
|
+
}
|
|
15961
|
+
}
|
|
15962
|
+
}
|
|
15963
|
+
}
|
|
15964
|
+
}
|
|
15965
|
+
}
|
|
15966
|
+
},
|
|
15967
|
+
"500": {
|
|
15968
|
+
"description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
|
|
15969
|
+
"content": {
|
|
15970
|
+
"application/json": {
|
|
15971
|
+
"schema": {
|
|
15972
|
+
"$ref": "#/components/schemas/Error"
|
|
15973
|
+
},
|
|
15974
|
+
"examples": {
|
|
15975
|
+
"exampleResponse": {
|
|
15976
|
+
"value": {
|
|
15977
|
+
"name": "InternalServerError",
|
|
15978
|
+
"message": "errorMessage"
|
|
15979
|
+
}
|
|
15980
|
+
}
|
|
15981
|
+
}
|
|
15982
|
+
}
|
|
15983
|
+
}
|
|
15984
|
+
}
|
|
15985
|
+
}
|
|
15986
|
+
}
|
|
15987
|
+
},
|
|
15789
15988
|
"/catalog/request": {
|
|
15790
15989
|
"post": {
|
|
15791
15990
|
"operationId": "catalogRequest",
|
|
@@ -18044,9 +18243,17 @@
|
|
|
18044
18243
|
"papQueryResponseExample": {
|
|
18045
18244
|
"value": [
|
|
18046
18245
|
{
|
|
18047
|
-
"@context":
|
|
18246
|
+
"@context": [
|
|
18247
|
+
"http://www.w3.org/ns/odrl.jsonld",
|
|
18248
|
+
{
|
|
18249
|
+
"dateCreated": "https://schema.org/dateCreated",
|
|
18250
|
+
"dateModified": "https://schema.org/dateModified"
|
|
18251
|
+
}
|
|
18252
|
+
],
|
|
18048
18253
|
"@type": "Set",
|
|
18049
18254
|
"@id": "urn:rights-management:abc123def456",
|
|
18255
|
+
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
18256
|
+
"dateModified": "2025-09-03T00:00:00.000Z",
|
|
18050
18257
|
"permission": [
|
|
18051
18258
|
{
|
|
18052
18259
|
"target": "http://example.com/asset/1",
|
|
@@ -18269,9 +18476,17 @@
|
|
|
18269
18476
|
"examples": {
|
|
18270
18477
|
"papGetResponseExample": {
|
|
18271
18478
|
"value": {
|
|
18272
|
-
"@context":
|
|
18479
|
+
"@context": [
|
|
18480
|
+
"http://www.w3.org/ns/odrl.jsonld",
|
|
18481
|
+
{
|
|
18482
|
+
"dateCreated": "https://schema.org/dateCreated",
|
|
18483
|
+
"dateModified": "https://schema.org/dateModified"
|
|
18484
|
+
}
|
|
18485
|
+
],
|
|
18273
18486
|
"@type": "Set",
|
|
18274
18487
|
"@id": "urn:rights-management:abc123def456",
|
|
18488
|
+
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
18489
|
+
"dateModified": "2025-09-03T00:00:00.000Z",
|
|
18275
18490
|
"permission": [
|
|
18276
18491
|
{
|
|
18277
18492
|
"target": "http://example.com/asset/1",
|
|
@@ -18462,14 +18677,22 @@
|
|
|
18462
18677
|
"content": {
|
|
18463
18678
|
"application/json": {
|
|
18464
18679
|
"schema": {
|
|
18465
|
-
"$ref": "
|
|
18680
|
+
"$ref": "#/components/schemas/RightsManagementAgreement"
|
|
18466
18681
|
},
|
|
18467
18682
|
"examples": {
|
|
18468
18683
|
"papGetResponseExample": {
|
|
18469
18684
|
"value": {
|
|
18470
|
-
"@context":
|
|
18685
|
+
"@context": [
|
|
18686
|
+
"http://www.w3.org/ns/odrl.jsonld",
|
|
18687
|
+
{
|
|
18688
|
+
"dateCreated": "https://schema.org/dateCreated",
|
|
18689
|
+
"dateModified": "https://schema.org/dateModified"
|
|
18690
|
+
}
|
|
18691
|
+
],
|
|
18471
18692
|
"@type": "Agreement",
|
|
18472
18693
|
"@id": "urn:rights-management:abc123def456",
|
|
18694
|
+
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
18695
|
+
"dateModified": "2025-09-03T00:00:00.000Z",
|
|
18473
18696
|
"permission": [
|
|
18474
18697
|
{
|
|
18475
18698
|
"target": "http://example.com/asset/1",
|
|
@@ -18575,14 +18798,22 @@
|
|
|
18575
18798
|
"content": {
|
|
18576
18799
|
"application/json": {
|
|
18577
18800
|
"schema": {
|
|
18578
|
-
"$ref": "
|
|
18801
|
+
"$ref": "#/components/schemas/RightsManagementOffer"
|
|
18579
18802
|
},
|
|
18580
18803
|
"examples": {
|
|
18581
18804
|
"papGetResponseExample": {
|
|
18582
18805
|
"value": {
|
|
18583
|
-
"@context":
|
|
18806
|
+
"@context": [
|
|
18807
|
+
"http://www.w3.org/ns/odrl.jsonld",
|
|
18808
|
+
{
|
|
18809
|
+
"dateCreated": "https://schema.org/dateCreated",
|
|
18810
|
+
"dateModified": "https://schema.org/dateModified"
|
|
18811
|
+
}
|
|
18812
|
+
],
|
|
18584
18813
|
"@type": "Offer",
|
|
18585
18814
|
"@id": "urn:rights-management:abc123def456",
|
|
18815
|
+
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
18816
|
+
"dateModified": "2025-09-03T00:00:00.000Z",
|
|
18586
18817
|
"permission": [
|
|
18587
18818
|
{
|
|
18588
18819
|
"target": "http://example.com/asset/1",
|
|
@@ -18688,14 +18919,22 @@
|
|
|
18688
18919
|
"content": {
|
|
18689
18920
|
"application/json": {
|
|
18690
18921
|
"schema": {
|
|
18691
|
-
"$ref": "
|
|
18922
|
+
"$ref": "#/components/schemas/RightsManagementSet"
|
|
18692
18923
|
},
|
|
18693
18924
|
"examples": {
|
|
18694
18925
|
"papGetResponseExample": {
|
|
18695
18926
|
"value": {
|
|
18696
|
-
"@context":
|
|
18927
|
+
"@context": [
|
|
18928
|
+
"http://www.w3.org/ns/odrl.jsonld",
|
|
18929
|
+
{
|
|
18930
|
+
"dateCreated": "https://schema.org/dateCreated",
|
|
18931
|
+
"dateModified": "https://schema.org/dateModified"
|
|
18932
|
+
}
|
|
18933
|
+
],
|
|
18697
18934
|
"@type": "Set",
|
|
18698
18935
|
"@id": "urn:rights-management:abc123def456",
|
|
18936
|
+
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
18937
|
+
"dateModified": "2025-09-03T00:00:00.000Z",
|
|
18699
18938
|
"permission": [
|
|
18700
18939
|
{
|
|
18701
18940
|
"target": "http://example.com/asset/1",
|
|
@@ -19844,7 +20083,6 @@
|
|
|
19844
20083
|
"correlationId": "cid",
|
|
19845
20084
|
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
19846
20085
|
"state": "REQUESTED",
|
|
19847
|
-
"nodeIdentity": "did:iota:nodexyz",
|
|
19848
20086
|
"organizationIdentity": "did:iota:123456789abcdefghi"
|
|
19849
20087
|
}
|
|
19850
20088
|
}
|
|
@@ -19950,7 +20188,6 @@
|
|
|
19950
20188
|
"correlationId": "cid",
|
|
19951
20189
|
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
19952
20190
|
"state": "REQUESTED",
|
|
19953
|
-
"nodeIdentity": "did:iota:nodexyz",
|
|
19954
20191
|
"organizationIdentity": "did:iota:123456789abcdefghi"
|
|
19955
20192
|
}
|
|
19956
20193
|
}
|
|
@@ -20159,7 +20396,6 @@
|
|
|
20159
20396
|
"correlationId": "cid",
|
|
20160
20397
|
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
20161
20398
|
"state": "REQUESTED",
|
|
20162
|
-
"nodeIdentity": "did:iota:nodexyz",
|
|
20163
20399
|
"organizationIdentity": "did:iota:123456789abcdefghi"
|
|
20164
20400
|
}
|
|
20165
20401
|
]
|
|
@@ -22399,6 +22635,14 @@
|
|
|
22399
22635
|
"description": "The body of the request - the policy to create (id will be auto-generated if not provided).",
|
|
22400
22636
|
"type": "object",
|
|
22401
22637
|
"properties": {
|
|
22638
|
+
"dateCreated": {
|
|
22639
|
+
"type": "string",
|
|
22640
|
+
"description": "schema.org dateCreated — ISO 8601 date-time set by PAP on create."
|
|
22641
|
+
},
|
|
22642
|
+
"dateModified": {
|
|
22643
|
+
"type": "string",
|
|
22644
|
+
"description": "schema.org dateModified — ISO 8601 date-time set by PAP on create and update."
|
|
22645
|
+
},
|
|
22402
22646
|
"@context": {
|
|
22403
22647
|
"$ref": "https://schema.twindev.org/w3c-odrl/OdrlContextType"
|
|
22404
22648
|
},
|
|
@@ -22668,17 +22912,9 @@
|
|
|
22668
22912
|
"type": "string",
|
|
22669
22913
|
"description": "The public origin of the server that initiated or received this negotiation.\nUsed to construct callback URLs in subsequent async messages."
|
|
22670
22914
|
},
|
|
22671
|
-
"tenantId": {
|
|
22672
|
-
"type": "string",
|
|
22673
|
-
"description": "The tenant id this negotiation belongs to."
|
|
22674
|
-
},
|
|
22675
|
-
"nodeIdentity": {
|
|
22676
|
-
"type": "string",
|
|
22677
|
-
"description": "The node identity (DID) used to sign trust payloads."
|
|
22678
|
-
},
|
|
22679
22915
|
"organizationIdentity": {
|
|
22680
22916
|
"type": "string",
|
|
22681
|
-
"description": "Organization identity
|
|
22917
|
+
"description": "Organization identity."
|
|
22682
22918
|
},
|
|
22683
22919
|
"offer": {
|
|
22684
22920
|
"$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolOffer"
|
|
@@ -22746,7 +22982,7 @@
|
|
|
22746
22982
|
"correlationId",
|
|
22747
22983
|
"dateCreated",
|
|
22748
22984
|
"state",
|
|
22749
|
-
"
|
|
22985
|
+
"organizationIdentity"
|
|
22750
22986
|
]
|
|
22751
22987
|
},
|
|
22752
22988
|
"RefreshTokenRequest": {
|
|
@@ -22783,6 +23019,30 @@
|
|
|
22783
23019
|
],
|
|
22784
23020
|
"description": "Transfer Process (DSP compliant) with state REQUESTED, or error."
|
|
22785
23021
|
},
|
|
23022
|
+
"RightsManagementAgreement": {
|
|
23023
|
+
"description": "Agreement policy returned by PAP, including optional PAP-managed lifecycle metadata.",
|
|
23024
|
+
"type": "object",
|
|
23025
|
+
"allOf": [
|
|
23026
|
+
{
|
|
23027
|
+
"$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolAgreement"
|
|
23028
|
+
},
|
|
23029
|
+
{
|
|
23030
|
+
"$ref": "#/components/schemas/RightsManagementPolicyMetadata"
|
|
23031
|
+
}
|
|
23032
|
+
]
|
|
23033
|
+
},
|
|
23034
|
+
"RightsManagementOffer": {
|
|
23035
|
+
"description": "Offer policy returned by PAP, including optional PAP-managed lifecycle metadata.",
|
|
23036
|
+
"type": "object",
|
|
23037
|
+
"allOf": [
|
|
23038
|
+
{
|
|
23039
|
+
"$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolOffer"
|
|
23040
|
+
},
|
|
23041
|
+
{
|
|
23042
|
+
"$ref": "#/components/schemas/RightsManagementPolicyMetadata"
|
|
23043
|
+
}
|
|
23044
|
+
]
|
|
23045
|
+
},
|
|
22786
23046
|
"RightsManagementPolicy": {
|
|
22787
23047
|
"description": "Base type for any ODRL policy stored and managed by the TWIN rights-management PAP.",
|
|
22788
23048
|
"type": "object",
|
|
@@ -22995,6 +23255,37 @@
|
|
|
22995
23255
|
"@context",
|
|
22996
23256
|
"@id",
|
|
22997
23257
|
"@type"
|
|
23258
|
+
],
|
|
23259
|
+
"allOf": [
|
|
23260
|
+
{
|
|
23261
|
+
"$ref": "#/components/schemas/RightsManagementPolicyMetadata"
|
|
23262
|
+
}
|
|
23263
|
+
]
|
|
23264
|
+
},
|
|
23265
|
+
"RightsManagementPolicyMetadata": {
|
|
23266
|
+
"description": "PAP-managed metadata attached to stored and returned ODRL policies.",
|
|
23267
|
+
"type": "object",
|
|
23268
|
+
"properties": {
|
|
23269
|
+
"dateCreated": {
|
|
23270
|
+
"type": "string",
|
|
23271
|
+
"description": "schema.org dateCreated — ISO 8601 date-time set by PAP on create."
|
|
23272
|
+
},
|
|
23273
|
+
"dateModified": {
|
|
23274
|
+
"type": "string",
|
|
23275
|
+
"description": "schema.org dateModified — ISO 8601 date-time set by PAP on create and update."
|
|
23276
|
+
}
|
|
23277
|
+
}
|
|
23278
|
+
},
|
|
23279
|
+
"RightsManagementSet": {
|
|
23280
|
+
"description": "Set policy returned by PAP, including optional PAP-managed lifecycle metadata.",
|
|
23281
|
+
"type": "object",
|
|
23282
|
+
"allOf": [
|
|
23283
|
+
{
|
|
23284
|
+
"$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolSet"
|
|
23285
|
+
},
|
|
23286
|
+
{
|
|
23287
|
+
"$ref": "#/components/schemas/RightsManagementPolicyMetadata"
|
|
23288
|
+
}
|
|
22998
23289
|
]
|
|
22999
23290
|
},
|
|
23000
23291
|
"Rule": {
|
|
@@ -23340,15 +23631,7 @@
|
|
|
23340
23631
|
"properties": {
|
|
23341
23632
|
"identity": {
|
|
23342
23633
|
"type": "string",
|
|
23343
|
-
"description": "The identity associated with the payload."
|
|
23344
|
-
},
|
|
23345
|
-
"tenantId": {
|
|
23346
|
-
"type": "string",
|
|
23347
|
-
"description": "The tenant that issued the payload, if multi-tenancy was active at generation time."
|
|
23348
|
-
},
|
|
23349
|
-
"organizationId": {
|
|
23350
|
-
"type": "string",
|
|
23351
|
-
"description": "The organisation that issued the payload, if an authenticated user context was available at generation time."
|
|
23634
|
+
"description": "The organization identity associated with the payload."
|
|
23352
23635
|
},
|
|
23353
23636
|
"data": {
|
|
23354
23637
|
"type": "object",
|
package/docs/usage.md
CHANGED
|
@@ -32,9 +32,11 @@ identity-verification-method-create: Create an identity verification method
|
|
|
32
32
|
identity-verification-method-import: Import an identity verification method
|
|
33
33
|
identity-verifiable-credential-create: Create a verifiable credential
|
|
34
34
|
node-set-identity: Set the node identity
|
|
35
|
+
remove-tenant-org-alias: Remove an alias from the tenant organization ID legacy list
|
|
36
|
+
set-node-org-id: Set the node organization ID
|
|
37
|
+
set-tenant-org-id: Set the organization ID for a tenant
|
|
35
38
|
tenant-create: Create a tenant with associated api key
|
|
36
39
|
tenant-import: Import a tenant with associated api key
|
|
37
|
-
tenant-token: Generate the x-enc-tenant-token token value for a tenant
|
|
38
40
|
tenant-update: Update a tenant with associated api key
|
|
39
41
|
user-create: Create a user
|
|
40
42
|
user-update: Update a user
|
|
@@ -42,6 +44,45 @@ vault-key-create: Create a vault key for an identity
|
|
|
42
44
|
vault-key-import: Import a vault key for an identity
|
|
43
45
|
```
|
|
44
46
|
|
|
47
|
+
## Server Configuration
|
|
48
|
+
|
|
49
|
+
Key environment variables that control how the node server handles authentication. A full reference is in the `.env` example files.
|
|
50
|
+
|
|
51
|
+
| Variable | Default | Description |
|
|
52
|
+
| -------------------------- | -------------- | ---------------------------------------------- |
|
|
53
|
+
| `TWIN_AUTH_API_KEY_HEADER` | `x-api-key` | HTTP header name for the API key on requests. |
|
|
54
|
+
| `TWIN_AUTH_SIGNING_KEY_ID` | `auth-signing` | Vault key ID used to sign authentication JWTs. |
|
|
55
|
+
|
|
56
|
+
## bootstrap-legacy --help
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
bootstrap-legacy: Bootstrap in legacy mode for backwards compatibility, **will be deprecated in future versions**
|
|
60
|
+
|
|
61
|
+
env-prefix: (string, optional)
|
|
62
|
+
Prefix to use for standard .env files e.g. TWIN_.
|
|
63
|
+
|
|
64
|
+
load-env: (string, optional)
|
|
65
|
+
Comma separated list of paths to .env files to read input parameters from.
|
|
66
|
+
|
|
67
|
+
Example: bootstrap-legacy --load-env=".env.bootstrap-legacy"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The command reads the following environment variables (use `load-env` to supply them from a file):
|
|
71
|
+
|
|
72
|
+
| Variable | Default | Description |
|
|
73
|
+
| ---------------------------- | ------------------------------ | --------------------------------------------------------------------------- |
|
|
74
|
+
| `TWIN_NODE_IDENTITY` | generated | The DID of the node identity. |
|
|
75
|
+
| `TWIN_NODE_MNEMONIC` | randomly generated | The Bip39 mnemonic for the node identity seed. |
|
|
76
|
+
| `TWIN_FEATURES` | `admin-user,wallet` | Comma-separated feature flags: `admin-user`, `wallet`. |
|
|
77
|
+
| `TWIN_ORGANIZATION_IDENTITY` | generated | The DID to use for the organisation identity. |
|
|
78
|
+
| `TWIN_ORGANIZATION_MNEMONIC` | randomly generated | The Bip39 mnemonic for the organisation identity seed. |
|
|
79
|
+
| `TWIN_TENANT_ID` | generated | The tenant ID for the node tenant (multi-tenant only). |
|
|
80
|
+
| `TWIN_TENANT_API_KEY` | generated | The API key for the node tenant (multi-tenant only). |
|
|
81
|
+
| `TWIN_ADMIN_USER_IDENTITY` | generated | The DID for the admin user identity (`admin-user` feature). |
|
|
82
|
+
| `TWIN_ADMIN_USER_MNEMONIC` | randomly generated | The Bip39 mnemonic for the admin user identity seed (`admin-user` feature). |
|
|
83
|
+
| `TWIN_ADMIN_USER_NAME` | `admin@node` or `admin@tenant` | The email/username for the admin user (`admin-user` feature). |
|
|
84
|
+
| `TWIN_ADMIN_USER_PASSWORD` | randomly generated | The password for the admin user (`admin-user` feature). |
|
|
85
|
+
|
|
45
86
|
## identity-create --help
|
|
46
87
|
|
|
47
88
|
```text
|
|
@@ -74,133 +115,146 @@ Path to a .env file to store the command output.
|
|
|
74
115
|
output-env-prefix: (string, optional)
|
|
75
116
|
Prefix to use for variables in the output .env file.
|
|
76
117
|
|
|
118
|
+
node-id: (boolean, default: 'false', optional)
|
|
119
|
+
If true, set the created identity DID as the node identity.
|
|
120
|
+
|
|
121
|
+
node-organization-id: (boolean, default: 'false', optional)
|
|
122
|
+
If true, set the created identity DID as the node organization ID (not available in multi-tenant mode).
|
|
123
|
+
|
|
124
|
+
tenant-organization-id: (string, hex(32), optional)
|
|
125
|
+
The tenant ID to set the created identity DID as the organization ID for (requires multi-tenant mode).
|
|
126
|
+
|
|
77
127
|
Example: identity-create --mnemonic="..." --fund-wallet=true
|
|
78
128
|
```
|
|
79
129
|
|
|
80
130
|
## Example
|
|
81
131
|
|
|
82
|
-
### Bootstrap legacy
|
|
132
|
+
### Bootstrap legacy (single command)
|
|
133
|
+
|
|
134
|
+
Runs the complete bootstrap sequence in one step using values from `.env.bootstrap-legacy`:
|
|
83
135
|
|
|
84
136
|
```shell
|
|
85
137
|
twin-node bootstrap-legacy --load-env=".env.bootstrap-legacy"
|
|
86
138
|
```
|
|
87
139
|
|
|
88
|
-
|
|
140
|
+
The sections below show the equivalent step-by-step commands that replicate the bootstrap-legacy process.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### Step 1 - Create the node identity and associate it with the node
|
|
145
|
+
|
|
146
|
+
Supply `--fund-wallet=true` when the `wallet` feature is enabled. `--node-id=true` sets the created identity as the node identity in the same step.
|
|
89
147
|
|
|
90
148
|
```shell
|
|
91
|
-
twin-node identity-create --fund-wallet=true --output-json="node-identity.json" --output-env="node-identity.env" --output-env-prefix=node
|
|
149
|
+
twin-node identity-create --node-id=true --fund-wallet=true --output-json="node-identity.json" --output-env="node-identity.env" --output-env-prefix=node
|
|
92
150
|
```
|
|
93
151
|
|
|
94
|
-
###
|
|
152
|
+
### Step 2 - Create the authentication signing key for the node
|
|
95
153
|
|
|
96
154
|
```shell
|
|
97
|
-
twin-node
|
|
155
|
+
twin-node vault-key-create --load-env="node-identity.env" --identity=!NODE_DID --key-type=Ed25519 --key-id=!TWIN_AUTH_SIGNING_KEY_ID --overwrite-mode=skip --output-json="node-auth-key.json" --output-env="node-auth-key.env"
|
|
98
156
|
```
|
|
99
157
|
|
|
100
|
-
|
|
158
|
+
To import an existing authentication signing key instead:
|
|
101
159
|
|
|
102
160
|
```shell
|
|
103
|
-
twin-node
|
|
161
|
+
twin-node vault-key-import --load-env="node-identity.env,node-auth-key.json" --identity=!NODE_DID --key-id=!TWIN_AUTH_SIGNING_KEY_ID --key-type=!KEY_TYPE --private-key-hex=!PRIVATE_KEY_HEX
|
|
104
162
|
```
|
|
105
163
|
|
|
106
|
-
###
|
|
164
|
+
### Step 3 - Create the organisation identity
|
|
107
165
|
|
|
108
166
|
```shell
|
|
109
|
-
twin-node
|
|
167
|
+
twin-node identity-create --load-env="node-identity.env" --fund-wallet=true --output-json="organization-identity.json" --output-env="organization-identity.env" --output-env-prefix=organization
|
|
110
168
|
```
|
|
111
169
|
|
|
112
|
-
###
|
|
170
|
+
### Step 4 - Add the trust verification method to the organisation identity
|
|
113
171
|
|
|
114
172
|
```shell
|
|
115
|
-
twin-node
|
|
173
|
+
twin-node identity-verification-method-create --load-env="node-identity.env,organization-identity.env" --identity=!ORGANIZATION_DID --verification-method-type=assertionMethod --verification-method-id=!TWIN_TRUST_VERIFICATION_METHOD_ID --overwrite-mode=skip --output-json="organization-trust.json" --output-env="organization-trust.env"
|
|
116
174
|
```
|
|
117
175
|
|
|
118
|
-
###
|
|
176
|
+
### Step 5 - Set the organisation identity on the node (single-tenant)
|
|
119
177
|
|
|
120
178
|
```shell
|
|
121
|
-
twin-node
|
|
179
|
+
twin-node set-node-org-id --load-env="organization-identity.env" --organization-id=!ORGANIZATION_DID
|
|
122
180
|
```
|
|
123
181
|
|
|
124
|
-
###
|
|
182
|
+
### Step 6 - Create the node tenant and associate the organisation (multi-tenant only)
|
|
125
183
|
|
|
126
184
|
```shell
|
|
127
|
-
twin-node
|
|
185
|
+
twin-node tenant-create --load-env="node-identity.env" --label="Node" --output-json="node-tenant.json" --output-env="node-tenant.env" --output-env-prefix=node
|
|
128
186
|
```
|
|
129
187
|
|
|
130
|
-
### Create a tenant to be used by the node
|
|
131
|
-
|
|
132
188
|
```shell
|
|
133
|
-
twin-node tenant-
|
|
189
|
+
twin-node set-tenant-org-id --load-env="node-tenant.env,organization-identity.env" --tenant-id=!NODE_TENANT_ID --organization-id=!ORGANIZATION_DID
|
|
134
190
|
```
|
|
135
191
|
|
|
136
|
-
|
|
192
|
+
To import an existing tenant instead:
|
|
137
193
|
|
|
138
194
|
```shell
|
|
139
195
|
twin-node tenant-import --load-env="node-tenant.json" --tenant-id=!NODE_TENANT_ID --api-key=!NODE_API_KEY --label=!NODE_LABEL --public-origin="https://api.example.com"
|
|
140
196
|
```
|
|
141
197
|
|
|
142
|
-
|
|
198
|
+
To update an existing tenant:
|
|
143
199
|
|
|
144
200
|
```shell
|
|
145
201
|
twin-node tenant-update --load-env="node-tenant.json" --tenant-id=!NODE_TENANT_ID --label="New Label"
|
|
146
202
|
```
|
|
147
203
|
|
|
148
|
-
|
|
204
|
+
To remove a stale organisation alias from a tenant:
|
|
149
205
|
|
|
150
206
|
```shell
|
|
151
|
-
twin-node
|
|
207
|
+
twin-node remove-tenant-org-alias --load-env="node-tenant.env" --tenant-id=!NODE_TENANT_ID --alias=!OLD_ORGANIZATION_DID
|
|
152
208
|
```
|
|
153
209
|
|
|
154
|
-
|
|
210
|
+
---
|
|
155
211
|
|
|
156
|
-
|
|
157
|
-
twin-node identity-verification-method-create --load-env="node-identity.env,organization-identity.env" --identity=!ORGANIZATION_DID --controller=!NODE_DID --verification-method-id=!TWIN_ATTESTATION_VERIFICATION_METHOD_ID --output-json="organization-attestation.json" --output-env="organization-attestation.env"
|
|
158
|
-
```
|
|
212
|
+
The following steps run when the `admin-user` feature is enabled.
|
|
159
213
|
|
|
160
|
-
###
|
|
214
|
+
### Step 7 - Add the blob encryption key to the organisation (if blob encryption is enabled)
|
|
161
215
|
|
|
162
216
|
```shell
|
|
163
|
-
twin-node
|
|
217
|
+
twin-node vault-key-create --load-env="organization-identity.env" --identity=!ORGANIZATION_DID --key-type=ChaCha20Poly1305 --key-id=!TWIN_BLOB_STORAGE_ENCRYPTION_KEY_ID --overwrite-mode=skip --output-json="organization-blob-encryption.json" --output-env="organization-blob-encryption.env"
|
|
164
218
|
```
|
|
165
219
|
|
|
166
|
-
###
|
|
220
|
+
### Step 8 - Add the attestation verification method to the organisation (if attestation is enabled)
|
|
167
221
|
|
|
168
222
|
```shell
|
|
169
|
-
twin-node identity-
|
|
223
|
+
twin-node identity-verification-method-create --load-env="node-identity.env,organization-identity.env" --identity=!ORGANIZATION_DID --verification-method-type=assertionMethod --verification-method-id=!TWIN_ATTESTATION_VERIFICATION_METHOD_ID --overwrite-mode=skip --output-json="organization-attestation.json" --output-env="organization-attestation.env"
|
|
170
224
|
```
|
|
171
225
|
|
|
172
|
-
|
|
226
|
+
To import an existing attestation verification method:
|
|
173
227
|
|
|
174
228
|
```shell
|
|
175
|
-
twin-node identity-verification-method-
|
|
229
|
+
twin-node identity-verification-method-import --load-env="node-identity.env,organization-identity.env,organization-attestation.env" --identity=!ORGANIZATION_DID --verification-method-id=!DID_VERIFICATION_METHOD_ID --private-key-hex=!DID_VERIFICATION_METHOD_PRIVATE_KEY_HEX
|
|
176
230
|
```
|
|
177
231
|
|
|
178
|
-
|
|
232
|
+
To create a verifiable credential using the attestation verification method:
|
|
179
233
|
|
|
180
234
|
```shell
|
|
181
|
-
twin-node identity-
|
|
235
|
+
twin-node identity-verifiable-credential-create --load-env="organization-identity.env,organization-attestation.env" --identity=!ORGANIZATION_DID --verification-method-id=!TWIN_ATTESTATION_VERIFICATION_METHOD_ID --subject-json="subject.json" --output-json="organization-attestation-credential.json" --output-env="organization-attestation-credential.env"
|
|
182
236
|
```
|
|
183
237
|
|
|
184
|
-
### Add
|
|
238
|
+
### Step 9 - Add the immutable proof verification method to the organisation (if immutable proofs are enabled)
|
|
185
239
|
|
|
186
240
|
```shell
|
|
187
|
-
twin-node
|
|
241
|
+
twin-node identity-verification-method-create --load-env="node-identity.env,organization-identity.env" --identity=!ORGANIZATION_DID --verification-method-type=assertionMethod --verification-method-id=!TWIN_IMMUTABLE_PROOF_VERIFICATION_METHOD_ID --overwrite-mode=skip --output-json="organization-immutable-proof.json" --output-env="organization-immutable-proof.env"
|
|
188
242
|
```
|
|
189
243
|
|
|
190
|
-
###
|
|
244
|
+
### Step 10 - Create the admin user identity
|
|
191
245
|
|
|
192
246
|
```shell
|
|
193
|
-
twin-node identity-create --load-env="organization-identity.env" --controller=!ORGANIZATION_DID --output-json="user-identity.json" --output-env="user-identity.env" --output-env-prefix=
|
|
247
|
+
twin-node identity-create --load-env="organization-identity.env" --controller=!ORGANIZATION_DID --output-json="admin-user-identity.json" --output-env="admin-user-identity.env" --output-env-prefix=admin_user
|
|
194
248
|
```
|
|
195
249
|
|
|
196
|
-
###
|
|
250
|
+
### Step 11 - Create the admin user account
|
|
197
251
|
|
|
198
252
|
```shell
|
|
199
|
-
twin-node user-create --load-env="organization-identity.env,user-identity.env,node-tenant.env" --user-identity=!
|
|
253
|
+
twin-node user-create --load-env="organization-identity.env,admin-user-identity.env,node-tenant.env" --user-identity=!ADMIN_USER_DID --organization-identity=!ORGANIZATION_DID --email="admin@node" --given-name="Node" --family-name="Admin" --scope="tenant-admin,user-admin" --output-json="user-account-admin.json" --output-env="user-account-admin.env" --output-env-prefix=admin
|
|
200
254
|
```
|
|
201
255
|
|
|
202
|
-
|
|
256
|
+
To update an existing user:
|
|
203
257
|
|
|
204
258
|
```shell
|
|
205
|
-
twin-node user-update --load-env="organization-identity.env,user-identity.env,node-tenant.env" --email="admin@node" --scope="tenant-admin,foo"
|
|
259
|
+
twin-node user-update --load-env="organization-identity.env,admin-user-identity.env,node-tenant.env" --email="admin@node" --scope="tenant-admin,user-admin,foo"
|
|
206
260
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/node",
|
|
3
|
-
"version": "0.0.3-next.
|
|
3
|
+
"version": "0.0.3-next.54",
|
|
4
4
|
"description": "TWIN Node serving APIs using the specified configuration",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"node": ">=20.0.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@twin.org/node-core": "0.0.3-next.
|
|
17
|
+
"@twin.org/node-core": "0.0.3-next.54"
|
|
18
18
|
},
|
|
19
19
|
"bugs": {
|
|
20
20
|
"url": "git+https://github.com/iotaledger/twin-node/issues"
|