@twin.org/node 0.9.1-next.3 → 0.9.1-next.4

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.
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "error": {
3
3
  "node": {
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}",
4
+ "nodeIdentityNotSet": "The node identity is enabled in config but is not set, please set it using the \"node-identity-set\" CLI command.",
5
+ "nodeOrganizationIdNotSet": "The node organization is not set, please set it using the \"node-org-id-set\".",
6
+ "tenantsWithoutOrganizationId": "The following tenants have no organization ID assigned. Use the \"tenant-org-id-set\" command to assign one before starting the node: {tenantIds}",
7
7
  "storageFileRootNotSet": "{storageFileRoot} is not set, the server will not start without it, please set it in the shell or create a .env file",
8
8
  "extensionLoadingError": "Failed to load extension \"{extension}\"",
9
9
  "insecureProtocol": "Cannot load extension from insecure protocol: {protocol}. Only HTTPS is allowed for remote extensions.",
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "bootstrapLegacy": {
20
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\"."
21
+ "organizationNotSet": "The organisation identity has not been set. Run \"node-org-id-set\"."
22
22
  },
23
23
  "identityCreate": {
24
24
  "invalidMnemonic": "The mnemonic is invalid, it should be 24 words from the standard wordlist.",
@@ -49,17 +49,27 @@
49
49
  "userAlreadyExists": "The user with ID already exists and overwriteMode is set to \"error\".",
50
50
  "tenantIdRequired": "The tenant ID is required when multi-tenancy is enabled."
51
51
  },
52
+ "userGet": {
53
+ "tenantIdRequired": "The tenant ID is required when multi-tenancy is enabled."
54
+ },
52
55
  "userUpdate": {
53
56
  "tenantIdRequired": "The tenant ID is required when multi-tenancy is enabled."
54
57
  },
58
+ "orgUsersList": {
59
+ "orgDidRequired": "The organization DID is required in multi-tenant mode. Provide --org-did or switch to single-tenant mode."
60
+ },
55
61
  "vaultKeyCreate": {
56
62
  "vaultKeyAlreadyExists": "The vault key with ID already exists and overwriteMode is set to \"error\"."
57
63
  },
58
- "nodeSetIdentity": {
64
+ "nodeIdentitySet": {
59
65
  "identityNotFound": "The identity with DID \"{notFoundId}\" was not found in the system."
60
66
  },
61
- "setNodeOrgId": {
62
- "notAvailableInMultiTenantMode": "The set-node-org-id command is not available in multi-tenant mode, use set-tenant-org-id instead."
67
+ "nodeOrgIdGet": {
68
+ "notAvailableInMultiTenantMode": "The node-org-id-get command is not available in multi-tenant mode, use tenant-org-id-set instead.",
69
+ "nodeOrganizationIdNotSet": "The node organization ID is not set. Use \"node-org-id-set\" to set it first."
70
+ },
71
+ "nodeOrgIdSet": {
72
+ "notAvailableInMultiTenantMode": "The node-org-id-set command is not available in multi-tenant mode, use tenant-org-id-set instead."
63
73
  },
64
74
  "applyOrganizationIdToTenant": {
65
75
  "tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
@@ -68,6 +78,21 @@
68
78
  "tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command.",
69
79
  "aliasNotFound": "The alias \"{alias}\" was not found in the tenant organization legacy list."
70
80
  },
81
+ "tenantList": {
82
+ "tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
83
+ },
84
+ "tenantGet": {
85
+ "tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
86
+ },
87
+ "tenantListByOrg": {
88
+ "tenantAdminComponentNotRegistered": "Multi-tenant support must be enabled to use this command."
89
+ },
90
+ "nodeIdentityGet": {
91
+ "nodeIdentityNotSet": "The node identity is not set. Use \"node-identity-set\" to set it first."
92
+ },
93
+ "identityResolve": {
94
+ "identityNotFound": "The identity \"{identity}\" was not found."
95
+ },
71
96
  "entityStorageAuthenticationService": {
72
97
  "loginFailed": "Login failed",
73
98
  "userNotFound": "The user with the specified e-mail could not be found",
@@ -353,7 +378,10 @@
353
378
  },
354
379
  "entityStorageHelper": {
355
380
  "sortNotIndexed": "The property \"{property}\" is not indexed and cannot be used for sorting",
356
- "propertyNotInSchema": "The property \"{property}\" does not exist in the schema and cannot be used for projection"
381
+ "propertyNotInSchema": "The property \"{property}\" does not exist in the schema and cannot be used for projection",
382
+ "unknownPropertyInConditionProperty": "The property \"{property}\" is not a recognised schema property and cannot be used as a condition property",
383
+ "unknownPropertyInConditions": "The property \"{property}\" is not a recognised schema property and cannot be used in conditions",
384
+ "invalidConditionPropertyPath": "The property \"{property}\" has an invalid path: the root must be an object or array type, segments must not exceed 128 characters, and must not contain SQL metacharacters or control characters"
357
385
  },
358
386
  "migrationHelper": {
359
387
  "migrateSchemaFailed": "Migration failed for schema \"{schemaName}\".",
@@ -1433,11 +1461,13 @@
1433
1461
  "cli": {
1434
1462
  "commands": {
1435
1463
  "command": "Command",
1464
+ "deprecatedAlias": "\"{alias}\" is a deprecated alias, please use \"{command}\" instead.",
1436
1465
  "help": {
1437
1466
  "description": "Display help information about CLI commands",
1438
1467
  "labels": {
1439
1468
  "commands": "All the commands available are listed below, for more information use the --help option with a specific command.",
1440
1469
  "example": "Example",
1470
+ "aliases": "Deprecated aliases",
1441
1471
  "optional": "optional",
1442
1472
  "required": "required",
1443
1473
  "default": "default",
@@ -1682,9 +1712,9 @@
1682
1712
  "publicKeyHex": "Public Key Hex"
1683
1713
  }
1684
1714
  },
1685
- "node-set-identity": {
1715
+ "node-identity-set": {
1686
1716
  "description": "Set the node identity",
1687
- "example": "node-set-identity --identity=\"did:iota...\"",
1717
+ "example": "node-identity-set --identity=\"did:iota...\"",
1688
1718
  "params": {
1689
1719
  "env-prefix": {
1690
1720
  "description": "Prefix to use for standard .env files e.g. TWIN_."
@@ -1808,6 +1838,31 @@
1808
1838
  "updated": "Updated tenant"
1809
1839
  }
1810
1840
  },
1841
+ "user-get": {
1842
+ "description": "Get a user by email address",
1843
+ "example": "user-get --email=\"bob@example.com\"",
1844
+ "params": {
1845
+ "env-prefix": {
1846
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
1847
+ },
1848
+ "email": {
1849
+ "description": "The email address of the user to retrieve."
1850
+ },
1851
+ "tenant-id": {
1852
+ "description": "The tenant ID to retrieve the user from (multi-tenant mode only)."
1853
+ },
1854
+ "load-env": {
1855
+ "description": "Comma separated list of paths to .env files to read input parameters from."
1856
+ }
1857
+ },
1858
+ "labels": {
1859
+ "retrieving": "Retrieving user",
1860
+ "email": "Email",
1861
+ "identity": "Identity",
1862
+ "organization": "Organization",
1863
+ "scope": "Scope"
1864
+ }
1865
+ },
1811
1866
  "user-create": {
1812
1867
  "description": "Create a user",
1813
1868
  "example": "user-create --user-identity=\"did:iota:....\" --organization-identity=\"did:iota:....\" --email=\"bob@examples.com\" --password=\"pass1234\" --scope=\"tenant-admin\" --givenName=\"Bob\" --familyName=\"Smith\"",
@@ -1950,9 +2005,24 @@
1950
2005
  "publicKeyHex": "Public Key Hex"
1951
2006
  }
1952
2007
  },
1953
- "set-node-org-id": {
2008
+ "node-org-id-get": {
2009
+ "description": "Get the organization ID currently assigned to the node",
2010
+ "example": "node-org-id-get",
2011
+ "params": {
2012
+ "env-prefix": {
2013
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2014
+ },
2015
+ "load-env": {
2016
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2017
+ }
2018
+ },
2019
+ "labels": {
2020
+ "organizationId": "Organization ID"
2021
+ }
2022
+ },
2023
+ "node-org-id-set": {
1954
2024
  "description": "Set the node organization ID",
1955
- "example": "set-node-org-id --organization-id=\"did:iota:...\"",
2025
+ "example": "node-org-id-set --organization-id=\"did:iota:...\"",
1956
2026
  "params": {
1957
2027
  "env-prefix": {
1958
2028
  "description": "Prefix to use for standard .env files e.g. TWIN_."
@@ -1968,9 +2038,9 @@
1968
2038
  "stored": "The node organization ID has been stored"
1969
2039
  }
1970
2040
  },
1971
- "set-tenant-org-id": {
2041
+ "tenant-org-id-set": {
1972
2042
  "description": "Set the organization ID for a tenant",
1973
- "example": "set-tenant-org-id --tenant-id=\"0011..aabb\" --organization-id=\"did:iota:...\"",
2043
+ "example": "tenant-org-id-set --tenant-id=\"0011..aabb\" --organization-id=\"did:iota:...\"",
1974
2044
  "params": {
1975
2045
  "env-prefix": {
1976
2046
  "description": "Prefix to use for standard .env files e.g. TWIN_."
@@ -2040,6 +2110,151 @@
2040
2110
  "importing": "Importing key",
2041
2111
  "imported": "Imported key"
2042
2112
  }
2113
+ },
2114
+ "tenant-list": {
2115
+ "description": "List all tenants",
2116
+ "example": "tenant-list",
2117
+ "params": {
2118
+ "env-prefix": {
2119
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2120
+ },
2121
+ "load-env": {
2122
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2123
+ }
2124
+ },
2125
+ "labels": {
2126
+ "listing": "Listing tenants",
2127
+ "tenantId": "Tenant ID",
2128
+ "apiKey": "API Key",
2129
+ "organizationId": "Organization ID",
2130
+ "label": "Label",
2131
+ "count": "Total tenants"
2132
+ }
2133
+ },
2134
+ "tenant-get": {
2135
+ "description": "Get the full configuration record for a single tenant",
2136
+ "example": "tenant-get --tenant-id=\"0011..aabb\"",
2137
+ "params": {
2138
+ "env-prefix": {
2139
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2140
+ },
2141
+ "tenant-id": {
2142
+ "description": "The tenant ID to retrieve."
2143
+ },
2144
+ "load-env": {
2145
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2146
+ }
2147
+ },
2148
+ "labels": {
2149
+ "retrieving": "Retrieving tenant",
2150
+ "tenantId": "Tenant ID",
2151
+ "apiKey": "API Key",
2152
+ "organizationId": "Organization ID",
2153
+ "label": "Label",
2154
+ "publicOrigin": "Public Origin",
2155
+ "dateCreated": "Date Created",
2156
+ "dateModified": "Date Modified"
2157
+ }
2158
+ },
2159
+ "tenant-list-by-org": {
2160
+ "description": "List all tenants associated with a given organization DID",
2161
+ "example": "tenant-list-by-org --org-id=\"did:iota:...\"",
2162
+ "params": {
2163
+ "env-prefix": {
2164
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2165
+ },
2166
+ "org-id": {
2167
+ "description": "The organization DID to filter tenants by."
2168
+ },
2169
+ "load-env": {
2170
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2171
+ }
2172
+ },
2173
+ "labels": {
2174
+ "listing": "Listing tenants for organization",
2175
+ "tenantId": "Tenant ID",
2176
+ "apiKey": "API Key",
2177
+ "organizationId": "Organization ID",
2178
+ "label": "Label",
2179
+ "count": "Total tenants"
2180
+ }
2181
+ },
2182
+ "node-identity-get": {
2183
+ "description": "Get the identity currently assigned to the node",
2184
+ "example": "node-identity-get",
2185
+ "params": {
2186
+ "env-prefix": {
2187
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2188
+ },
2189
+ "load-env": {
2190
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2191
+ }
2192
+ },
2193
+ "labels": {
2194
+ "resolving": "Resolving node identity",
2195
+ "did": "DID",
2196
+ "verificationMethods": "Verification Methods"
2197
+ }
2198
+ },
2199
+ "identity-list": {
2200
+ "description": "List all identities held in custody by the node",
2201
+ "example": "identity-list",
2202
+ "params": {
2203
+ "env-prefix": {
2204
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2205
+ },
2206
+ "load-env": {
2207
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2208
+ }
2209
+ },
2210
+ "labels": {
2211
+ "listing": "Listing identities",
2212
+ "did": "DID",
2213
+ "controller": "Controller",
2214
+ "count": "Total identities"
2215
+ }
2216
+ },
2217
+ "identity-resolve": {
2218
+ "description": "Resolve an identity DID to its full document",
2219
+ "example": "identity-resolve --identity=\"did:iota:...\"",
2220
+ "params": {
2221
+ "env-prefix": {
2222
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2223
+ },
2224
+ "identity": {
2225
+ "description": "The DID to resolve."
2226
+ },
2227
+ "load-env": {
2228
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2229
+ }
2230
+ },
2231
+ "labels": {
2232
+ "resolving": "Resolving identity",
2233
+ "did": "DID",
2234
+ "verificationMethods": "Verification Methods"
2235
+ }
2236
+ },
2237
+ "org-users-list": {
2238
+ "description": "List all users belonging to an organization DID",
2239
+ "example": "org-users-list --org-did=\"did:iota:...\"",
2240
+ "params": {
2241
+ "env-prefix": {
2242
+ "description": "Prefix to use for standard .env files e.g. TWIN_."
2243
+ },
2244
+ "org-did": {
2245
+ "description": "The organization DID to list users for. Defaults to the node organization ID in single-tenant mode."
2246
+ },
2247
+ "load-env": {
2248
+ "description": "Comma separated list of paths to .env files to read input parameters from."
2249
+ }
2250
+ },
2251
+ "labels": {
2252
+ "listing": "Listing organization users",
2253
+ "email": "Email",
2254
+ "identity": "Identity",
2255
+ "scope": "Scope",
2256
+ "count": "Total users"
2257
+ }
2043
2258
  }
2044
2259
  }
2045
2260
  }
package/docs/changelog.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.1-next.4](https://github.com/iotaledger/twin-node/compare/node-v0.9.1-next.3...node-v0.9.1-next.4) (2026-07-01)
4
+
5
+
6
+ ### Features
7
+
8
+ * additional cli commands ([#269](https://github.com/iotaledger/twin-node/issues/269)) ([c9e7c93](https://github.com/iotaledger/twin-node/commit/c9e7c939aedfceed9cbe501f2dc936e84289ed62))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/node-core bumped from 0.9.1-next.3 to 0.9.1-next.4
16
+
3
17
  ## [0.9.1-next.3](https://github.com/iotaledger/twin-node/compare/node-v0.9.1-next.2...node-v0.9.1-next.3) (2026-06-30)
4
18
 
5
19
 
package/docs/usage.md CHANGED
@@ -28,17 +28,26 @@ All the commands available are listed below, for more information use the --help
28
28
  bootstrap-legacy: Bootstrap in legacy mode for backwards compatibility, **will be deprecated in future versions**
29
29
  identity-create: Create an identity
30
30
  identity-import: Import an identity
31
+ identity-list: List all identities held in custody by the node
32
+ identity-resolve: Resolve an identity DID to its full document
31
33
  identity-verification-method-create: Create an identity verification method
32
34
  identity-verification-method-import: Import an identity verification method
33
35
  identity-verifiable-credential-create: Create a verifiable credential
34
- node-set-identity: Set the node identity
36
+ node-identity-get: Get the identity currently assigned to the node
37
+ node-identity-set: Set the node identity
38
+ org-users-list: List all users belonging to an organization DID
35
39
  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
40
+ node-org-id-get: Get the organization ID currently assigned to the node
41
+ node-org-id-set: Set the node organization ID
42
+ tenant-org-id-set: Set the organization ID for a tenant
38
43
  tenant-create: Create a tenant with associated api key
44
+ tenant-get: Get the full configuration record for a single tenant
39
45
  tenant-import: Import a tenant with associated api key
46
+ tenant-list: List all tenants
47
+ tenant-list-by-org: List all tenants associated with a given organization DID
40
48
  tenant-update: Update a tenant with associated api key
41
49
  user-create: Create a user
50
+ user-get: Get a user by email address
42
51
  user-update: Update a user
43
52
  vault-key-create: Create a vault key for an identity
44
53
  vault-key-import: Import a vault key for an identity
@@ -127,6 +136,150 @@ The tenant ID to set the created identity DID as the organization ID for (requir
127
136
  Example: identity-create --mnemonic="..." --fund-wallet=true
128
137
  ```
129
138
 
139
+ ## identity-list --help
140
+
141
+ ```text
142
+ identity-list: List all identities held in custody by the node
143
+
144
+ env-prefix: (string, optional)
145
+ Prefix to use for standard .env files e.g. TWIN_.
146
+
147
+ load-env: (string, optional)
148
+ Comma separated list of paths to .env files to read input parameters from.
149
+
150
+ Example: identity-list
151
+ ```
152
+
153
+ ## identity-resolve --help
154
+
155
+ ```text
156
+ identity-resolve: Resolve an identity DID to its full document
157
+
158
+ env-prefix: (string, optional)
159
+ Prefix to use for standard .env files e.g. TWIN_.
160
+
161
+ identity: (string, did, required)
162
+ The DID to resolve.
163
+
164
+ load-env: (string, optional)
165
+ Comma separated list of paths to .env files to read input parameters from.
166
+
167
+ Example: identity-resolve --identity="did:iota:..."
168
+ ```
169
+
170
+ ## node-identity-get --help
171
+
172
+ ```text
173
+ node-identity-get: Get the identity currently assigned to the node
174
+
175
+ env-prefix: (string, optional)
176
+ Prefix to use for standard .env files e.g. TWIN_.
177
+
178
+ load-env: (string, optional)
179
+ Comma separated list of paths to .env files to read input parameters from.
180
+
181
+ Example: node-identity-get
182
+ ```
183
+
184
+ ## node-org-id-get --help
185
+
186
+ ```text
187
+ node-org-id-get: Get the organization ID currently assigned to the node
188
+
189
+ env-prefix: (string, optional)
190
+ Prefix to use for standard .env files e.g. TWIN_.
191
+
192
+ load-env: (string, optional)
193
+ Comma separated list of paths to .env files to read input parameters from.
194
+
195
+ Example: node-org-id-get
196
+ ```
197
+
198
+ ## org-users-list --help
199
+
200
+ ```text
201
+ org-users-list: List all users belonging to an organization DID
202
+
203
+ env-prefix: (string, optional)
204
+ Prefix to use for standard .env files e.g. TWIN_.
205
+
206
+ org-did: (string, did, optional)
207
+ The organization DID to list users for. Defaults to the node organization ID in single-tenant mode.
208
+
209
+ load-env: (string, optional)
210
+ Comma separated list of paths to .env files to read input parameters from.
211
+
212
+ Example: org-users-list --org-did="did:iota:..."
213
+ ```
214
+
215
+ ## user-get --help
216
+
217
+ ```text
218
+ user-get: Get a user by email address
219
+
220
+ env-prefix: (string, optional)
221
+ Prefix to use for standard .env files e.g. TWIN_.
222
+
223
+ email: (string, email, required)
224
+ The email address of the user to retrieve.
225
+
226
+ tenant-id: (string, hex(32), optional)
227
+ The tenant ID to retrieve the user from (multi-tenant mode only).
228
+
229
+ load-env: (string, optional)
230
+ Comma separated list of paths to .env files to read input parameters from.
231
+
232
+ Example: user-get --email="bob@example.com"
233
+ ```
234
+
235
+ ## tenant-get --help
236
+
237
+ ```text
238
+ tenant-get: Get the full configuration record for a single tenant
239
+
240
+ env-prefix: (string, optional)
241
+ Prefix to use for standard .env files e.g. TWIN_.
242
+
243
+ tenant-id: (string, hex(32), required)
244
+ The tenant ID to retrieve.
245
+
246
+ load-env: (string, optional)
247
+ Comma separated list of paths to .env files to read input parameters from.
248
+
249
+ Example: tenant-get --tenant-id="0011..aabb"
250
+ ```
251
+
252
+ ## tenant-list --help
253
+
254
+ ```text
255
+ tenant-list: List all tenants
256
+
257
+ env-prefix: (string, optional)
258
+ Prefix to use for standard .env files e.g. TWIN_.
259
+
260
+ load-env: (string, optional)
261
+ Comma separated list of paths to .env files to read input parameters from.
262
+
263
+ Example: tenant-list
264
+ ```
265
+
266
+ ## tenant-list-by-org --help
267
+
268
+ ```text
269
+ tenant-list-by-org: List all tenants associated with a given organization DID
270
+
271
+ env-prefix: (string, optional)
272
+ Prefix to use for standard .env files e.g. TWIN_.
273
+
274
+ org-id: (string, did, required)
275
+ The organization DID to filter tenants by.
276
+
277
+ load-env: (string, optional)
278
+ Comma separated list of paths to .env files to read input parameters from.
279
+
280
+ Example: tenant-list-by-org --org-id="did:iota:..."
281
+ ```
282
+
130
283
  ## Example
131
284
 
132
285
  ### Bootstrap legacy (single command)
@@ -176,7 +329,7 @@ twin-node identity-verification-method-create --load-env="node-identity.env,orga
176
329
  ### Step 5 - Set the organisation identity on the node (single-tenant)
177
330
 
178
331
  ```shell
179
- twin-node set-node-org-id --load-env="organization-identity.env" --organization-id=!ORGANIZATION_DID
332
+ twin-node node-org-id-set --load-env="organization-identity.env" --organization-id=!ORGANIZATION_DID
180
333
  ```
181
334
 
182
335
  ### Step 6 - Create the node tenant and associate the organisation (multi-tenant only)
@@ -186,7 +339,7 @@ twin-node tenant-create --load-env="node-identity.env" --label="Node" --output-j
186
339
  ```
187
340
 
188
341
  ```shell
189
- twin-node set-tenant-org-id --load-env="node-tenant.env,organization-identity.env" --tenant-id=!NODE_TENANT_ID --organization-id=!ORGANIZATION_DID
342
+ twin-node tenant-org-id-set --load-env="node-tenant.env,organization-identity.env" --tenant-id=!NODE_TENANT_ID --organization-id=!ORGANIZATION_DID
190
343
  ```
191
344
 
192
345
  To import an existing tenant instead:
@@ -258,3 +411,85 @@ To update an existing user:
258
411
  ```shell
259
412
  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"
260
413
  ```
414
+
415
+ ---
416
+
417
+ ## Inspection commands
418
+
419
+ The following commands are read-only and can be run at any time to inspect the state of the node.
420
+
421
+ ### Get the node identity
422
+
423
+ Resolves and displays the DID document currently assigned as the node identity:
424
+
425
+ ```shell
426
+ twin-node node-identity-get
427
+ ```
428
+
429
+ ### Get the node organization ID
430
+
431
+ Displays the organization DID currently assigned to the node (single-tenant only):
432
+
433
+ ```shell
434
+ twin-node node-org-id-get
435
+ ```
436
+
437
+ ### Resolve an identity
438
+
439
+ Resolve any DID to its full document, including its verification methods:
440
+
441
+ ```shell
442
+ twin-node identity-resolve --identity="did:iota:..."
443
+ ```
444
+
445
+ ### List all identities
446
+
447
+ List every identity held in custody by the node, showing each DID and its controller:
448
+
449
+ ```shell
450
+ twin-node identity-list
451
+ ```
452
+
453
+ ### List all tenants (multi-tenant only)
454
+
455
+ ```shell
456
+ twin-node tenant-list
457
+ ```
458
+
459
+ ### Get a single tenant (multi-tenant only)
460
+
461
+ ```shell
462
+ twin-node tenant-get --load-env="node-tenant.env" --tenant-id=!NODE_TENANT_ID
463
+ ```
464
+
465
+ ### List tenants for an organization (multi-tenant only)
466
+
467
+ ```shell
468
+ twin-node tenant-list-by-org --load-env="organization-identity.env" --org-id=!ORGANIZATION_DID
469
+ ```
470
+
471
+ ### List users for an organization
472
+
473
+ In single-tenant mode, `--org-did` can be omitted and the node organization ID is used automatically:
474
+
475
+ ```shell
476
+ twin-node org-users-list
477
+ ```
478
+
479
+ To list users for a specific organization:
480
+
481
+ ```shell
482
+ twin-node org-users-list --load-env="organization-identity.env" --org-did=!ORGANIZATION_DID
483
+ ```
484
+
485
+ ### Get a single user
486
+
487
+ ```shell
488
+ twin-node user-get --email="admin@node"
489
+ ```
490
+
491
+ In multi-tenant mode supply the tenant ID:
492
+
493
+ ```shell
494
+ twin-node user-get --load-env="node-tenant.env" --tenant-id=!NODE_TENANT_ID --email="admin@node"
495
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/node",
3
- "version": "0.9.1-next.3",
3
+ "version": "0.9.1-next.4",
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.9.1-next.3"
17
+ "@twin.org/node-core": "0.9.1-next.4"
18
18
  },
19
19
  "bugs": {
20
20
  "url": "git+https://github.com/iotaledger/twin-node/issues"