@twin.org/immutable-proof-task 0.0.3-next.10 → 0.0.3-next.12
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/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# TWIN Immutable Proof Task
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This package provides background processing for immutable proof generation. It accepts prepared task payloads, resolves the configured identity connector, and produces verifiable credential output for downstream storage and verification.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
package/docs/changelog.md
CHANGED
|
@@ -1,6 +1,34 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Changelog
|
|
2
2
|
|
|
3
|
-
## [0.0.3-next.
|
|
3
|
+
## [0.0.3-next.12](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.11...immutable-proof-task-v0.0.3-next.12) (2026-05-12)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* typescript 6 update ([34d8aea](https://github.com/iotaledger/twin-immutable-proof/commit/34d8aea0ea0c1e1252de1882517abb1683d98313))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.11 to 0.0.3-next.12
|
|
16
|
+
|
|
17
|
+
## [0.0.3-next.11](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.10...immutable-proof-task-v0.0.3-next.11) (2026-03-25)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Miscellaneous Chores
|
|
21
|
+
|
|
22
|
+
* **immutable-proof-task:** Synchronize repo versions
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Dependencies
|
|
26
|
+
|
|
27
|
+
* The following workspace dependencies were updated
|
|
28
|
+
* dependencies
|
|
29
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.10 to 0.0.3-next.11
|
|
30
|
+
|
|
31
|
+
## [0.0.3-next.10](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.9...immutable-proof-task-v0.0.3-next.10) (2026-02-25)
|
|
4
32
|
|
|
5
33
|
|
|
6
34
|
### Miscellaneous Chores
|
|
@@ -14,12 +42,12 @@
|
|
|
14
42
|
* dependencies
|
|
15
43
|
* @twin.org/immutable-proof-models bumped from 0.0.3-next.9 to 0.0.3-next.10
|
|
16
44
|
|
|
17
|
-
## [0.0.3-next.9](https://github.com/
|
|
45
|
+
## [0.0.3-next.9](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.8...immutable-proof-task-v0.0.3-next.9) (2026-02-13)
|
|
18
46
|
|
|
19
47
|
|
|
20
48
|
### Bug Fixes
|
|
21
49
|
|
|
22
|
-
* package dependencies ([4514e66](https://github.com/
|
|
50
|
+
* package dependencies ([4514e66](https://github.com/iotaledger/twin-immutable-proof/commit/4514e6632f40a91659e3dc92c474459fc146130c))
|
|
23
51
|
|
|
24
52
|
|
|
25
53
|
### Dependencies
|
|
@@ -28,128 +56,128 @@
|
|
|
28
56
|
* dependencies
|
|
29
57
|
* @twin.org/immutable-proof-models bumped from 0.0.3-next.8 to 0.0.3-next.9
|
|
30
58
|
|
|
31
|
-
## [0.0.3-next.8](https://github.com/
|
|
59
|
+
## [0.0.3-next.8](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.7...immutable-proof-task-v0.0.3-next.8) (2026-02-10)
|
|
32
60
|
|
|
33
61
|
|
|
34
62
|
### Features
|
|
35
63
|
|
|
36
|
-
* immutable proof as vc ([#31](https://github.com/
|
|
64
|
+
* immutable proof as vc ([#31](https://github.com/iotaledger/twin-immutable-proof/issues/31)) ([79cdb03](https://github.com/iotaledger/twin-immutable-proof/commit/79cdb03eb86c4f6d2ab1d5bf235f74ff74e8b877))
|
|
37
65
|
|
|
38
|
-
## [0.0.3-next.7](https://github.com/
|
|
66
|
+
## [0.0.3-next.7](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.6...immutable-proof-task-v0.0.3-next.7) (2026-02-05)
|
|
39
67
|
|
|
40
68
|
|
|
41
69
|
### Bug Fixes
|
|
42
70
|
|
|
43
|
-
* pass context ids to populateClone ([#24](https://github.com/
|
|
71
|
+
* pass context ids to populateClone ([#24](https://github.com/iotaledger/twin-immutable-proof/issues/24)) ([f360e71](https://github.com/iotaledger/twin-immutable-proof/commit/f360e71d6895d9abbc85e1f5ffb2579e9d9666ac))
|
|
44
72
|
|
|
45
|
-
## [0.0.3-next.6](https://github.com/
|
|
73
|
+
## [0.0.3-next.6](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.5...immutable-proof-task-v0.0.3-next.6) (2026-01-21)
|
|
46
74
|
|
|
47
75
|
|
|
48
76
|
### Miscellaneous Chores
|
|
49
77
|
|
|
50
78
|
* **immutable-proof-task:** Synchronize repo versions
|
|
51
79
|
|
|
52
|
-
## [0.0.3-next.5](https://github.com/
|
|
80
|
+
## [0.0.3-next.5](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.4...immutable-proof-task-v0.0.3-next.5) (2026-01-14)
|
|
53
81
|
|
|
54
82
|
|
|
55
83
|
### Miscellaneous Chores
|
|
56
84
|
|
|
57
85
|
* **immutable-proof-task:** Synchronize repo versions
|
|
58
86
|
|
|
59
|
-
## [0.0.3-next.4](https://github.com/
|
|
87
|
+
## [0.0.3-next.4](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.3...immutable-proof-task-v0.0.3-next.4) (2026-01-07)
|
|
60
88
|
|
|
61
89
|
|
|
62
90
|
### Miscellaneous Chores
|
|
63
91
|
|
|
64
92
|
* **immutable-proof-task:** Synchronize repo versions
|
|
65
93
|
|
|
66
|
-
## [0.0.3-next.3](https://github.com/
|
|
94
|
+
## [0.0.3-next.3](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.2...immutable-proof-task-v0.0.3-next.3) (2025-11-28)
|
|
67
95
|
|
|
68
96
|
|
|
69
97
|
### Miscellaneous Chores
|
|
70
98
|
|
|
71
99
|
* **immutable-proof-task:** Synchronize repo versions
|
|
72
100
|
|
|
73
|
-
## [0.0.3-next.2](https://github.com/
|
|
101
|
+
## [0.0.3-next.2](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.1...immutable-proof-task-v0.0.3-next.2) (2025-11-28)
|
|
74
102
|
|
|
75
103
|
|
|
76
104
|
### Features
|
|
77
105
|
|
|
78
|
-
* update background tasks ([f25741c](https://github.com/
|
|
106
|
+
* update background tasks ([f25741c](https://github.com/iotaledger/twin-immutable-proof/commit/f25741c704e2c8311bc98bc69d4d926c523c781e))
|
|
79
107
|
|
|
80
|
-
## [0.0.3-next.1](https://github.com/
|
|
108
|
+
## [0.0.3-next.1](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.3-next.0...immutable-proof-task-v0.0.3-next.1) (2025-11-12)
|
|
81
109
|
|
|
82
110
|
|
|
83
111
|
### Features
|
|
84
112
|
|
|
85
|
-
* add context id features ([#14](https://github.com/
|
|
86
|
-
* add validate-locales ([d6a7c07](https://github.com/
|
|
87
|
-
* eslint migration to flat config ([9e63e42](https://github.com/
|
|
88
|
-
* eslint migration to flat config ([c8536f2](https://github.com/
|
|
89
|
-
* update dependencies ([7d6b321](https://github.com/
|
|
90
|
-
* update framework core ([e708d4d](https://github.com/
|
|
91
|
-
* use shared store mechanism ([#3](https://github.com/
|
|
113
|
+
* add context id features ([#14](https://github.com/iotaledger/twin-immutable-proof/issues/14)) ([ed5a594](https://github.com/iotaledger/twin-immutable-proof/commit/ed5a594eaa7d50f74b1c09a7a560d48b33a4ecd1))
|
|
114
|
+
* add validate-locales ([d6a7c07](https://github.com/iotaledger/twin-immutable-proof/commit/d6a7c0794a1922981a42f56cc24724d7cee727f6))
|
|
115
|
+
* eslint migration to flat config ([9e63e42](https://github.com/iotaledger/twin-immutable-proof/commit/9e63e420ba686db78dca806d111f646c057083d6))
|
|
116
|
+
* eslint migration to flat config ([c8536f2](https://github.com/iotaledger/twin-immutable-proof/commit/c8536f219c7709c6c08b9266e537831f9054dda9))
|
|
117
|
+
* update dependencies ([7d6b321](https://github.com/iotaledger/twin-immutable-proof/commit/7d6b321928ca0434ee530816b1440f1687b94a6e))
|
|
118
|
+
* update framework core ([e708d4d](https://github.com/iotaledger/twin-immutable-proof/commit/e708d4dd3febcfbcd64663d5be004eab1d26c0fb))
|
|
119
|
+
* use shared store mechanism ([#3](https://github.com/iotaledger/twin-immutable-proof/issues/3)) ([7042a40](https://github.com/iotaledger/twin-immutable-proof/commit/7042a40f0ef8b01463f07aeb1efae4f417162fa1))
|
|
92
120
|
|
|
93
|
-
## [0.0.2-next.3](https://github.com/
|
|
121
|
+
## [0.0.2-next.3](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.2-next.2...immutable-proof-task-v0.0.2-next.3) (2025-10-09)
|
|
94
122
|
|
|
95
123
|
|
|
96
124
|
### Features
|
|
97
125
|
|
|
98
|
-
* add validate-locales ([d6a7c07](https://github.com/
|
|
99
|
-
* eslint migration to flat config ([9e63e42](https://github.com/
|
|
126
|
+
* add validate-locales ([d6a7c07](https://github.com/iotaledger/twin-immutable-proof/commit/d6a7c0794a1922981a42f56cc24724d7cee727f6))
|
|
127
|
+
* eslint migration to flat config ([9e63e42](https://github.com/iotaledger/twin-immutable-proof/commit/9e63e420ba686db78dca806d111f646c057083d6))
|
|
100
128
|
|
|
101
|
-
## [0.0.2-next.2](https://github.com/
|
|
129
|
+
## [0.0.2-next.2](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.2-next.1...immutable-proof-task-v0.0.2-next.2) (2025-08-29)
|
|
102
130
|
|
|
103
131
|
|
|
104
132
|
### Features
|
|
105
133
|
|
|
106
|
-
* eslint migration to flat config ([c8536f2](https://github.com/
|
|
134
|
+
* eslint migration to flat config ([c8536f2](https://github.com/iotaledger/twin-immutable-proof/commit/c8536f219c7709c6c08b9266e537831f9054dda9))
|
|
107
135
|
|
|
108
|
-
## [0.0.2-next.1](https://github.com/
|
|
136
|
+
## [0.0.2-next.1](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.2-next.0...immutable-proof-task-v0.0.2-next.1) (2025-08-20)
|
|
109
137
|
|
|
110
138
|
|
|
111
139
|
### Features
|
|
112
140
|
|
|
113
|
-
* update dependencies ([7d6b321](https://github.com/
|
|
114
|
-
* update framework core ([e708d4d](https://github.com/
|
|
115
|
-
* use shared store mechanism ([#3](https://github.com/
|
|
141
|
+
* update dependencies ([7d6b321](https://github.com/iotaledger/twin-immutable-proof/commit/7d6b321928ca0434ee530816b1440f1687b94a6e))
|
|
142
|
+
* update framework core ([e708d4d](https://github.com/iotaledger/twin-immutable-proof/commit/e708d4dd3febcfbcd64663d5be004eab1d26c0fb))
|
|
143
|
+
* use shared store mechanism ([#3](https://github.com/iotaledger/twin-immutable-proof/issues/3)) ([7042a40](https://github.com/iotaledger/twin-immutable-proof/commit/7042a40f0ef8b01463f07aeb1efae4f417162fa1))
|
|
116
144
|
|
|
117
145
|
## 0.0.1 (2025-07-09)
|
|
118
146
|
|
|
119
147
|
|
|
120
148
|
### Features
|
|
121
149
|
|
|
122
|
-
* release to production ([cb7ecff](https://github.com/
|
|
150
|
+
* release to production ([cb7ecff](https://github.com/iotaledger/twin-immutable-proof/commit/cb7ecff3e9a1ec8b4391d7efea4a58057b8b66c6))
|
|
123
151
|
|
|
124
|
-
## [0.0.1-next.35](https://github.com/
|
|
152
|
+
## [0.0.1-next.35](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.1-next.34...immutable-proof-task-v0.0.1-next.35) (2025-06-12)
|
|
125
153
|
|
|
126
154
|
|
|
127
155
|
### Features
|
|
128
156
|
|
|
129
|
-
* update dependencies ([7d6b321](https://github.com/
|
|
157
|
+
* update dependencies ([7d6b321](https://github.com/iotaledger/twin-immutable-proof/commit/7d6b321928ca0434ee530816b1440f1687b94a6e))
|
|
130
158
|
|
|
131
|
-
## [0.0.1-next.34](https://github.com/
|
|
159
|
+
## [0.0.1-next.34](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.1-next.33...immutable-proof-task-v0.0.1-next.34) (2025-06-03)
|
|
132
160
|
|
|
133
161
|
|
|
134
162
|
### Miscellaneous Chores
|
|
135
163
|
|
|
136
164
|
* **immutable-proof-task:** Synchronize repo versions
|
|
137
165
|
|
|
138
|
-
## [0.0.1-next.33](https://github.com/
|
|
166
|
+
## [0.0.1-next.33](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.1-next.32...immutable-proof-task-v0.0.1-next.33) (2025-05-28)
|
|
139
167
|
|
|
140
168
|
|
|
141
169
|
### Miscellaneous Chores
|
|
142
170
|
|
|
143
171
|
* **immutable-proof-task:** Synchronize repo versions
|
|
144
172
|
|
|
145
|
-
## [0.0.1-next.32](https://github.com/
|
|
173
|
+
## [0.0.1-next.32](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.1-next.31...immutable-proof-task-v0.0.1-next.32) (2025-04-17)
|
|
146
174
|
|
|
147
175
|
|
|
148
176
|
### Features
|
|
149
177
|
|
|
150
|
-
* use shared store mechanism ([#3](https://github.com/
|
|
178
|
+
* use shared store mechanism ([#3](https://github.com/iotaledger/twin-immutable-proof/issues/3)) ([7042a40](https://github.com/iotaledger/twin-immutable-proof/commit/7042a40f0ef8b01463f07aeb1efae4f417162fa1))
|
|
151
179
|
|
|
152
|
-
## [0.0.1-next.31](https://github.com/
|
|
180
|
+
## [0.0.1-next.31](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-task-v0.0.1-next.30...immutable-proof-task-v0.0.1-next.31) (2025-03-28)
|
|
153
181
|
|
|
154
182
|
|
|
155
183
|
### Miscellaneous Chores
|
package/docs/examples.md
CHANGED
|
@@ -1 +1,49 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Immutable Proof Task Examples
|
|
2
|
+
|
|
3
|
+
These snippets show how to prepare payloads and execute background task processing for immutable proof generation.
|
|
4
|
+
|
|
5
|
+
## processProofTask
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import type { IImmutableProofTaskPayload } from '@twin.org/immutable-proof-task';
|
|
9
|
+
|
|
10
|
+
const payload: IImmutableProofTaskPayload = {
|
|
11
|
+
proofId: 'immutable-proof:01JABCDEF1234567890',
|
|
12
|
+
identity: 'did:iota:tst:issuer',
|
|
13
|
+
identityConnectorType: 'identity',
|
|
14
|
+
verificationMethodId: 'immutable-proof-assertion',
|
|
15
|
+
credentialSubject: {
|
|
16
|
+
'@context': ['https://schema.twindev.org/immutable-proof', 'https://schema.twindev.org/common'],
|
|
17
|
+
type: 'ImmutableProof',
|
|
18
|
+
id: 'https://example.org/documents/100',
|
|
19
|
+
proofIntegrity: 'yEr9VvYCGDh2Ww1YwQMehUy4LlW35mLhX8j8R8U6x0g='
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
console.log(payload.identity); // did:iota:tst:issuer
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { processProofTask } from '@twin.org/immutable-proof-task';
|
|
28
|
+
import type { IEngineCoreClone } from '@twin.org/engine-models';
|
|
29
|
+
|
|
30
|
+
const engineCloneData: IEngineCoreClone = {
|
|
31
|
+
factories: {},
|
|
32
|
+
components: {}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const result = await processProofTask(engineCloneData, {
|
|
36
|
+
proofId: 'immutable-proof:01JABCDEF1234567890',
|
|
37
|
+
identity: 'did:iota:tst:issuer',
|
|
38
|
+
identityConnectorType: 'identity',
|
|
39
|
+
verificationMethodId: 'immutable-proof-assertion',
|
|
40
|
+
credentialSubject: {
|
|
41
|
+
'@context': ['https://schema.twindev.org/immutable-proof', 'https://schema.twindev.org/common'],
|
|
42
|
+
type: 'ImmutableProof',
|
|
43
|
+
id: 'https://example.org/documents/100',
|
|
44
|
+
proofIntegrity: 'yEr9VvYCGDh2Ww1YwQMehUy4LlW35mLhX8j8R8U6x0g='
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
console.log(result.proofId); // immutable-proof:01JABCDEF1234567890
|
|
49
|
+
```
|
|
@@ -4,7 +4,7 @@ The payload for the immutable proof task.
|
|
|
4
4
|
|
|
5
5
|
## Properties
|
|
6
6
|
|
|
7
|
-
### proofId
|
|
7
|
+
### proofId {#proofid}
|
|
8
8
|
|
|
9
9
|
> **proofId**: `string`
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ The proof id.
|
|
|
12
12
|
|
|
13
13
|
***
|
|
14
14
|
|
|
15
|
-
### identity
|
|
15
|
+
### identity {#identity}
|
|
16
16
|
|
|
17
17
|
> **identity**: `string`
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@ The identity to create the proof for.
|
|
|
20
20
|
|
|
21
21
|
***
|
|
22
22
|
|
|
23
|
-
### identityConnectorType
|
|
23
|
+
### identityConnectorType {#identityconnectortype}
|
|
24
24
|
|
|
25
25
|
> **identityConnectorType**: `string`
|
|
26
26
|
|
|
@@ -28,7 +28,7 @@ The identity connector type.
|
|
|
28
28
|
|
|
29
29
|
***
|
|
30
30
|
|
|
31
|
-
### verificationMethodId
|
|
31
|
+
### verificationMethodId {#verificationmethodid}
|
|
32
32
|
|
|
33
33
|
> **verificationMethodId**: `string`
|
|
34
34
|
|
|
@@ -36,7 +36,7 @@ The assertion method id.
|
|
|
36
36
|
|
|
37
37
|
***
|
|
38
38
|
|
|
39
|
-
### credentialSubject
|
|
39
|
+
### credentialSubject {#credentialsubject}
|
|
40
40
|
|
|
41
41
|
> **credentialSubject**: `IImmutableProof`
|
|
42
42
|
|
|
@@ -4,7 +4,7 @@ The result for the immutable proof task.
|
|
|
4
4
|
|
|
5
5
|
## Properties
|
|
6
6
|
|
|
7
|
-
### proofId
|
|
7
|
+
### proofId {#proofid}
|
|
8
8
|
|
|
9
9
|
> **proofId**: `string`
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ The proof id.
|
|
|
12
12
|
|
|
13
13
|
***
|
|
14
14
|
|
|
15
|
-
### verifiableCredential
|
|
15
|
+
### verifiableCredential {#verifiablecredential}
|
|
16
16
|
|
|
17
17
|
> **verifiableCredential**: `IDidVerifiableCredential`
|
|
18
18
|
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/immutable-proof-task",
|
|
3
|
-
"version": "0.0.3-next.
|
|
4
|
-
"description": "Background
|
|
3
|
+
"version": "0.0.3-next.12",
|
|
4
|
+
"description": "Background proof processing that creates verifiable credentials from prepared payloads",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
|
-
"url": "git+https://github.com/
|
|
7
|
+
"url": "git+https://github.com/iotaledger/immutable-proof.git",
|
|
8
8
|
"directory": "packages/immutable-proof-task"
|
|
9
9
|
},
|
|
10
10
|
"author": "martyn.janes@iota.org",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@twin.org/engine-core": "next",
|
|
21
21
|
"@twin.org/engine-models": "next",
|
|
22
22
|
"@twin.org/identity-models": "next",
|
|
23
|
-
"@twin.org/immutable-proof-models": "0.0.3-next.
|
|
23
|
+
"@twin.org/immutable-proof-models": "0.0.3-next.12",
|
|
24
24
|
"@twin.org/nameof": "next",
|
|
25
25
|
"@twin.org/standards-w3c-did": "next"
|
|
26
26
|
},
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"immutable-proof"
|
|
50
50
|
],
|
|
51
51
|
"bugs": {
|
|
52
|
-
"url": "git+https://github.com/
|
|
52
|
+
"url": "git+https://github.com/iotaledger/immutable-proof/issues"
|
|
53
53
|
},
|
|
54
54
|
"homepage": "https://twindev.org"
|
|
55
55
|
}
|