@twin.org/node 0.0.3-next.51 → 0.0.3-next.53
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 +113 -55
- package/docs/changelog.md +28 -0
- package/docs/open-api/spec.json +202 -22
- package/docs/usage.md +22 -8
- 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,12 @@
|
|
|
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 bootstrap with the \"node-identity\" feature first."
|
|
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
|
+
"nodeOrganizationIdNotAvailableInMultiTenantMode": "The node-organization-id option is not available in multi-tenant mode, use tenant-organization-id instead."
|
|
22
26
|
},
|
|
23
27
|
"identityImport": {
|
|
24
28
|
"identityNotFound": "The identity was not found, it must be created on-chain already.",
|
|
@@ -33,11 +37,6 @@
|
|
|
33
37
|
"tenantCreate": {
|
|
34
38
|
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
|
|
35
39
|
},
|
|
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
40
|
"tenantImport": {
|
|
42
41
|
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
|
|
43
42
|
},
|
|
@@ -58,6 +57,17 @@
|
|
|
58
57
|
"nodeSetIdentity": {
|
|
59
58
|
"identityNotFound": "The identity with DID \"{notFoundId}\" was not found in the system."
|
|
60
59
|
},
|
|
60
|
+
"setNodeOrgId": {
|
|
61
|
+
"notAvailableInMultiTenantMode": "The set-node-org-id command is not available in multi-tenant mode, use set-tenant-org-id instead."
|
|
62
|
+
},
|
|
63
|
+
"applyOrganizationIdToTenant": {
|
|
64
|
+
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command.",
|
|
65
|
+
"organizationIdAlreadyInUse": "The organization ID \"{organizationId}\" is already assigned to tenant \"{conflictingTenantId}\"."
|
|
66
|
+
},
|
|
67
|
+
"removeTenantOrgAlias": {
|
|
68
|
+
"tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command.",
|
|
69
|
+
"aliasNotFound": "The alias \"{alias}\" was not found in the tenant organization legacy list."
|
|
70
|
+
},
|
|
61
71
|
"entityStorageAuthenticationService": {
|
|
62
72
|
"loginFailed": "Login failed",
|
|
63
73
|
"userNotFound": "The user with the specified e-mail could not be found",
|
|
@@ -330,9 +340,12 @@
|
|
|
330
340
|
},
|
|
331
341
|
"tenantProcessor": {
|
|
332
342
|
"missingApiKey": "API key \"{keyName}\" is missing",
|
|
333
|
-
"
|
|
334
|
-
"apiKeyNotFound": "No
|
|
335
|
-
"
|
|
343
|
+
"missingOrganizationId": "Organization ID query parameter \"{paramName}\" is missing",
|
|
344
|
+
"apiKeyNotFound": "No tenant found for API key \"{key}\".",
|
|
345
|
+
"organizationIdNotFound": "No tenant found for organization ID \"{organizationId}\"."
|
|
346
|
+
},
|
|
347
|
+
"singleTenantProcessor": {
|
|
348
|
+
"invalidOrganizationId": "Organization ID query parameter \"{paramName}\" value \"{value}\" is not valid for this node"
|
|
336
349
|
},
|
|
337
350
|
"tenantAdminService": {
|
|
338
351
|
"apiKeyAlreadyInUse": "The provided API key is already in use by another tenant.",
|
|
@@ -384,12 +397,6 @@
|
|
|
384
397
|
"entityStorageMissing": "Entity storage configuration missing for component \"{storageName}\"",
|
|
385
398
|
"connectorUnknownType": "Unknown connector type \"{type}\" specified for \"{connectorType}\""
|
|
386
399
|
},
|
|
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
400
|
"healthService": {
|
|
394
401
|
"componentHealthCheckFailed": "Health check failed for component \"{className}\""
|
|
395
402
|
},
|
|
@@ -578,6 +585,9 @@
|
|
|
578
585
|
"mimeTypeNotFound": "Unable to detect MIME type from data",
|
|
579
586
|
"converterNotFound": "Unable to find a converter for the MIME type \"{notFoundId}\""
|
|
580
587
|
},
|
|
588
|
+
"dataspaceControlPlaneRestClient": {
|
|
589
|
+
"notSupportedOnClient": "The method \"{methodName}\" is not supported on the REST client, it can only be used on a server side component"
|
|
590
|
+
},
|
|
581
591
|
"dataspaceControlPlaneService": {
|
|
582
592
|
"transferProcessNotFound": "Transfer Process not found",
|
|
583
593
|
"pullTransfersNotSupported": "PULL transfers are not supported. Configure dataPlanePath in service configuration to enable PULL transfers.",
|
|
@@ -599,11 +609,8 @@
|
|
|
599
609
|
"datasetNotInCatalog": "Dataset \"{datasetId}\" not found in Federated Catalogue (Agreement: {agreementId})",
|
|
600
610
|
"catalogLookupFailed": "Failed to lookup dataset in Federated Catalogue: {datasetId} (Agreement: {agreementId})",
|
|
601
611
|
"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}\"",
|
|
612
|
+
"agreementAssignerMismatch": "Agreement assigner does not match current caller identity. Agreement: {agreementId}, consumerPid: {consumerPid}, expected: {organizationIdentity}, actual: {actualAssigner}",
|
|
613
|
+
"agreementAssignerMismatchProvider": "Agreement assigner does not match current caller identity. Agreement: {agreementId}, providerPid: {providerPid}, expected: {organizationIdentity}, actual: {actualAssigner}",
|
|
607
614
|
"agreementAssigneeMismatch": "Agreement assignee does not match expected consumer identity. Agreement: {agreementId}, providerPid: {providerPid}, expected: {expectedConsumerIdentity}, actual: {actualAssignee}",
|
|
608
615
|
"negotiationInitiationFailed": "Failed to initiate contract negotiation",
|
|
609
616
|
"datasetNotFoundInCatalog": "Dataset/Offer \"{offerId}\" not found in Federated Catalogue. Cannot initiate negotiation for non-existent offer.",
|
|
@@ -628,21 +635,20 @@
|
|
|
628
635
|
"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
636
|
"datasetPublishFailed": "Failed to publish dataset \"{datasetId}\" for app \"{appId}\" (tenant: \"{tenantId}\")",
|
|
630
637
|
"datasetRemoveFailed": "Failed to remove dataset \"{datasetId}\" from the Federated Catalogue (tenant: \"{tenantId}\")",
|
|
631
|
-
"datasetNodeContextRequired": "A node context is required to register a dataset.",
|
|
632
638
|
"datasetAlreadyExists": "A dataset with id \"{existingId}\" already exists.",
|
|
633
639
|
"datasetNotFound": "Dataset not found",
|
|
634
|
-
"
|
|
635
|
-
"
|
|
640
|
+
"datasetWrongOrganization": "The calling organization does not own this dataset.",
|
|
641
|
+
"transferWrongOrganization": "The calling organization does not own this transfer.",
|
|
636
642
|
"invalidDatasetId": "Dataset ID \"{id}\" is not a valid URN or URL"
|
|
637
643
|
},
|
|
638
644
|
"dataspaceControlPlanePolicyRequester": {},
|
|
645
|
+
"trustHelper": {
|
|
646
|
+
"trustVerifyFailed": "Trust verification failed for action \"{action}\""
|
|
647
|
+
},
|
|
639
648
|
"odrlPolicyHelper": {
|
|
640
649
|
"policyMissingAssignee": "The {policyType} with id \"{policyId}\" is missing an assignee.",
|
|
641
650
|
"policyMissingAssigner": "The {policyType} with id \"{policyId}\" is missing an assigner."
|
|
642
651
|
},
|
|
643
|
-
"trustHelper": {
|
|
644
|
-
"trustVerifyFailed": "Trust verification failed for action \"{action}\""
|
|
645
|
-
},
|
|
646
652
|
"dataspaceDataPlaneRestClient": {
|
|
647
653
|
"notSupportedOnClient": "The method \"{methodName}\" is not supported on the REST client, it can only be used on a server side component"
|
|
648
654
|
},
|
|
@@ -660,7 +666,7 @@
|
|
|
660
666
|
"transferNotInStartedState": "Transfer Process is not in STARTED state. Current state: \"{currentState}\"",
|
|
661
667
|
"transferMissingDatasetId": "Transfer Process is missing datasetId",
|
|
662
668
|
"transferMissingDataAddress": "Transfer Process is missing a valid push dataAddress endpoint (consumerPid: {consumerPid})",
|
|
663
|
-
"
|
|
669
|
+
"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
670
|
"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
671
|
"schemaNotFound": "Schema \"{schemaId}\" not found",
|
|
666
672
|
"cleanupFailed": "Error occurred during cleanup of activity logs",
|
|
@@ -1340,6 +1346,7 @@
|
|
|
1340
1346
|
"extensionHttpsDownloading": "Downloading HTTPS extension",
|
|
1341
1347
|
"extensionCacheExpired": "Cache expired for extension: {url}",
|
|
1342
1348
|
"extensionForceRefresh": "Force refresh enabled for extension: {url}",
|
|
1349
|
+
"tenantOrganizationIdAutoAssigned": "Legacy migration: automatically assigned organization ID \"{organizationId}\" to tenant \"{tenantId}\".",
|
|
1343
1350
|
"cli": {
|
|
1344
1351
|
"commands": {
|
|
1345
1352
|
"command": "Command",
|
|
@@ -1368,16 +1375,18 @@
|
|
|
1368
1375
|
"labels": {
|
|
1369
1376
|
"nodeIdentityCreate": "Creating node identity",
|
|
1370
1377
|
"nodeAuthKeyCreate": "Creating node auth key",
|
|
1371
|
-
"trustVerificationMethodCreate": "Creating trust verification method for
|
|
1378
|
+
"trustVerificationMethodCreate": "Creating trust verification method for organisation identity",
|
|
1372
1379
|
"nodeIdentitySet": "Setting node 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",
|
|
1386
|
+
"tenantOrganizationIdSet": "Setting tenant organisation ID",
|
|
1378
1387
|
"adminIdentityCreate": "Creating admin user identity",
|
|
1379
1388
|
"adminUserCreate": "Creating admin user",
|
|
1380
|
-
"
|
|
1389
|
+
"tenantFallback": "No Node-labelled tenant found; using first available tenant"
|
|
1381
1390
|
}
|
|
1382
1391
|
},
|
|
1383
1392
|
"identity-create": {
|
|
@@ -1410,6 +1419,12 @@
|
|
|
1410
1419
|
},
|
|
1411
1420
|
"output-env-prefix": {
|
|
1412
1421
|
"description": "Prefix to use for variables in the output .env file."
|
|
1422
|
+
},
|
|
1423
|
+
"node-organization-id": {
|
|
1424
|
+
"description": "If true, set the created identity DID as the node organization ID (not available in multi-tenant mode)."
|
|
1425
|
+
},
|
|
1426
|
+
"tenant-organization-id": {
|
|
1427
|
+
"description": "The tenant ID to set the created identity DID as the organization ID for (requires multi-tenant mode)."
|
|
1413
1428
|
}
|
|
1414
1429
|
},
|
|
1415
1430
|
"labels": {
|
|
@@ -1604,7 +1619,7 @@
|
|
|
1604
1619
|
},
|
|
1605
1620
|
"tenant-create": {
|
|
1606
1621
|
"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\"",
|
|
1622
|
+
"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
1623
|
"params": {
|
|
1609
1624
|
"env-prefix": {
|
|
1610
1625
|
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
@@ -1615,6 +1630,9 @@
|
|
|
1615
1630
|
"api-key": {
|
|
1616
1631
|
"description": "The API key to associate with the tenant id. If not provided, a random key will be generated."
|
|
1617
1632
|
},
|
|
1633
|
+
"organization-id": {
|
|
1634
|
+
"description": "The organization DID to associate with the tenant."
|
|
1635
|
+
},
|
|
1618
1636
|
"label": {
|
|
1619
1637
|
"description": "A descriptive label for the tenant."
|
|
1620
1638
|
},
|
|
@@ -1638,6 +1656,7 @@
|
|
|
1638
1656
|
"creating": "Creating tenant",
|
|
1639
1657
|
"tenantId": "Tenant ID",
|
|
1640
1658
|
"apiKey": "API Key",
|
|
1659
|
+
"organizationId": "Organization ID",
|
|
1641
1660
|
"label": "Label",
|
|
1642
1661
|
"publicOrigin": "Public Origin"
|
|
1643
1662
|
}
|
|
@@ -1698,30 +1717,6 @@
|
|
|
1698
1717
|
"updated": "Updated tenant"
|
|
1699
1718
|
}
|
|
1700
1719
|
},
|
|
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
1720
|
"user-create": {
|
|
1726
1721
|
"description": "Create a user",
|
|
1727
1722
|
"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 +1859,69 @@
|
|
|
1864
1859
|
"publicKeyHex": "Public Key Hex"
|
|
1865
1860
|
}
|
|
1866
1861
|
},
|
|
1862
|
+
"set-node-org-id": {
|
|
1863
|
+
"description": "Set the node organization ID",
|
|
1864
|
+
"example": "set-node-org-id --organization-id=\"did:iota:...\"",
|
|
1865
|
+
"params": {
|
|
1866
|
+
"env-prefix": {
|
|
1867
|
+
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
1868
|
+
},
|
|
1869
|
+
"organization-id": {
|
|
1870
|
+
"description": "The organization DID to set as the node organization ID."
|
|
1871
|
+
},
|
|
1872
|
+
"load-env": {
|
|
1873
|
+
"description": "Comma separated list of paths to .env files to read input parameters from."
|
|
1874
|
+
}
|
|
1875
|
+
},
|
|
1876
|
+
"labels": {
|
|
1877
|
+
"stored": "The node organization ID has been stored"
|
|
1878
|
+
}
|
|
1879
|
+
},
|
|
1880
|
+
"set-tenant-org-id": {
|
|
1881
|
+
"description": "Set the organization ID for a tenant",
|
|
1882
|
+
"example": "set-tenant-org-id --tenant-id=\"0011..aabb\" --organization-id=\"did:iota:...\"",
|
|
1883
|
+
"params": {
|
|
1884
|
+
"env-prefix": {
|
|
1885
|
+
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
1886
|
+
},
|
|
1887
|
+
"tenant-id": {
|
|
1888
|
+
"description": "The tenant ID to update."
|
|
1889
|
+
},
|
|
1890
|
+
"organization-id": {
|
|
1891
|
+
"description": "The organization DID to set as the tenant organization ID."
|
|
1892
|
+
},
|
|
1893
|
+
"load-env": {
|
|
1894
|
+
"description": "Comma separated list of paths to .env files to read input parameters from."
|
|
1895
|
+
}
|
|
1896
|
+
},
|
|
1897
|
+
"labels": {
|
|
1898
|
+
"updating": "Updating tenant organization ID",
|
|
1899
|
+
"stored": "The tenant organization ID has been stored"
|
|
1900
|
+
}
|
|
1901
|
+
},
|
|
1902
|
+
"remove-tenant-org-alias": {
|
|
1903
|
+
"description": "Remove an alias from the tenant organization ID legacy list",
|
|
1904
|
+
"example": "remove-tenant-org-alias --tenant-id=\"0011..aabb\" --alias=\"did:iota:...\"",
|
|
1905
|
+
"params": {
|
|
1906
|
+
"env-prefix": {
|
|
1907
|
+
"description": "Prefix to use for standard .env files e.g. TWIN_."
|
|
1908
|
+
},
|
|
1909
|
+
"tenant-id": {
|
|
1910
|
+
"description": "The tenant ID to update."
|
|
1911
|
+
},
|
|
1912
|
+
"alias": {
|
|
1913
|
+
"description": "The organization DID alias to remove from the legacy list."
|
|
1914
|
+
},
|
|
1915
|
+
"load-env": {
|
|
1916
|
+
"description": "Comma separated list of paths to .env files to read input parameters from."
|
|
1917
|
+
}
|
|
1918
|
+
},
|
|
1919
|
+
"labels": {
|
|
1920
|
+
"reading": "Reading tenant",
|
|
1921
|
+
"updating": "Removing alias from tenant organization legacy list",
|
|
1922
|
+
"removed": "The alias has been removed from the tenant organization legacy list"
|
|
1923
|
+
}
|
|
1924
|
+
},
|
|
1867
1925
|
"vault-key-import": {
|
|
1868
1926
|
"description": "Import a vault key for an identity",
|
|
1869
1927
|
"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.53](https://github.com/iotaledger/twin-node/compare/node-v0.0.3-next.52...node-v0.0.3-next.53) (2026-06-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* organization identifiers ([#203](https://github.com/iotaledger/twin-node/issues/203)) ([1a6b176](https://github.com/iotaledger/twin-node/commit/1a6b1760d9f8e43a769407668426c70e1c8e1aa8))
|
|
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.52 to 0.0.3-next.53
|
|
16
|
+
|
|
17
|
+
## [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)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Miscellaneous Chores
|
|
21
|
+
|
|
22
|
+
* **node:** Synchronize repo versions
|
|
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.51 to 0.0.3-next.52
|
|
30
|
+
|
|
3
31
|
## [0.0.3-next.51](https://github.com/iotaledger/twin-node/compare/node-v0.0.3-next.50...node-v0.0.3-next.51) (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",
|
|
@@ -19844,7 +20043,6 @@
|
|
|
19844
20043
|
"correlationId": "cid",
|
|
19845
20044
|
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
19846
20045
|
"state": "REQUESTED",
|
|
19847
|
-
"nodeIdentity": "did:iota:nodexyz",
|
|
19848
20046
|
"organizationIdentity": "did:iota:123456789abcdefghi"
|
|
19849
20047
|
}
|
|
19850
20048
|
}
|
|
@@ -19950,7 +20148,6 @@
|
|
|
19950
20148
|
"correlationId": "cid",
|
|
19951
20149
|
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
19952
20150
|
"state": "REQUESTED",
|
|
19953
|
-
"nodeIdentity": "did:iota:nodexyz",
|
|
19954
20151
|
"organizationIdentity": "did:iota:123456789abcdefghi"
|
|
19955
20152
|
}
|
|
19956
20153
|
}
|
|
@@ -20159,7 +20356,6 @@
|
|
|
20159
20356
|
"correlationId": "cid",
|
|
20160
20357
|
"dateCreated": "2025-09-03T00:00:00.000Z",
|
|
20161
20358
|
"state": "REQUESTED",
|
|
20162
|
-
"nodeIdentity": "did:iota:nodexyz",
|
|
20163
20359
|
"organizationIdentity": "did:iota:123456789abcdefghi"
|
|
20164
20360
|
}
|
|
20165
20361
|
]
|
|
@@ -22668,17 +22864,9 @@
|
|
|
22668
22864
|
"type": "string",
|
|
22669
22865
|
"description": "The public origin of the server that initiated or received this negotiation.\nUsed to construct callback URLs in subsequent async messages."
|
|
22670
22866
|
},
|
|
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
22867
|
"organizationIdentity": {
|
|
22680
22868
|
"type": "string",
|
|
22681
|
-
"description": "Organization identity
|
|
22869
|
+
"description": "Organization identity."
|
|
22682
22870
|
},
|
|
22683
22871
|
"offer": {
|
|
22684
22872
|
"$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolOffer"
|
|
@@ -22746,7 +22934,7 @@
|
|
|
22746
22934
|
"correlationId",
|
|
22747
22935
|
"dateCreated",
|
|
22748
22936
|
"state",
|
|
22749
|
-
"
|
|
22937
|
+
"organizationIdentity"
|
|
22750
22938
|
]
|
|
22751
22939
|
},
|
|
22752
22940
|
"RefreshTokenRequest": {
|
|
@@ -23340,15 +23528,7 @@
|
|
|
23340
23528
|
"properties": {
|
|
23341
23529
|
"identity": {
|
|
23342
23530
|
"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."
|
|
23531
|
+
"description": "The organization identity associated with the payload."
|
|
23352
23532
|
},
|
|
23353
23533
|
"data": {
|
|
23354
23534
|
"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
|
|
@@ -115,22 +117,22 @@ twin-node vault-key-create --load-env="node-identity.env" --identity=!NODE_DID -
|
|
|
115
117
|
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
|
|
116
118
|
```
|
|
117
119
|
|
|
118
|
-
###
|
|
120
|
+
### Import an existing key associated with the node identity for use in authentication signing
|
|
119
121
|
|
|
120
122
|
```shell
|
|
121
|
-
twin-node vault-key-
|
|
123
|
+
twin-node vault-key-import --load-env="node-identity.env,my-key.json" --identity=!NODE_DID --key-id=!TWIN_AUTH_SIGNING_KEY_ID --key-type=!KEY_TYPE --private-key-hex=!PRIVATE_KEY_HEX
|
|
122
124
|
```
|
|
123
125
|
|
|
124
|
-
###
|
|
126
|
+
### Create an organisation identity
|
|
125
127
|
|
|
126
128
|
```shell
|
|
127
|
-
twin-node
|
|
129
|
+
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
|
|
128
130
|
```
|
|
129
131
|
|
|
130
132
|
### Create a tenant to be used by the node
|
|
131
133
|
|
|
132
134
|
```shell
|
|
133
|
-
twin-node tenant-create --label="node" --public-origin="https://api.example.com" --output-env-prefix=node --output-json="node-tenant.json" --output-env="node-tenant.env"
|
|
135
|
+
twin-node tenant-create --load-env="organization-identity.env" --label="node" --public-origin="https://api.example.com" --organization-id=!ORGANIZATION_DID --output-env-prefix=node --output-json="node-tenant.json" --output-env="node-tenant.env"
|
|
134
136
|
```
|
|
135
137
|
|
|
136
138
|
### Import a tenant to be used by the node
|
|
@@ -145,10 +147,22 @@ twin-node tenant-import --load-env="node-tenant.json" --tenant-id=!NODE_TENANT_I
|
|
|
145
147
|
twin-node tenant-update --load-env="node-tenant.json" --tenant-id=!NODE_TENANT_ID --label="New Label"
|
|
146
148
|
```
|
|
147
149
|
|
|
148
|
-
###
|
|
150
|
+
### Set the organization ID on the node
|
|
149
151
|
|
|
150
152
|
```shell
|
|
151
|
-
twin-node
|
|
153
|
+
twin-node set-node-org-id --load-env="organization-identity.env" --organization-id=!ORGANIZATION_DID
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Set the organization ID on a tenant
|
|
157
|
+
|
|
158
|
+
```shell
|
|
159
|
+
twin-node set-tenant-org-id --load-env="node-tenant.env,organization-identity.env" --tenant-id=!NODE_TENANT_ID --organization-id=!ORGANIZATION_DID
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Remove an alias from the tenant organization ID legacy list
|
|
163
|
+
|
|
164
|
+
```shell
|
|
165
|
+
twin-node remove-tenant-org-alias --load-env="node-tenant.env" --tenant-id=!NODE_TENANT_ID --alias=!OLD_ORGANIZATION_DID
|
|
152
166
|
```
|
|
153
167
|
|
|
154
168
|
### Add a verification method to the organisation identity for attestation
|
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.53",
|
|
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.53"
|
|
18
18
|
},
|
|
19
19
|
"bugs": {
|
|
20
20
|
"url": "git+https://github.com/iotaledger/twin-node/issues"
|