@beclab/olaresid 0.1.13 → 0.2.0

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.
Files changed (181) hide show
  1. package/CLI-TREE.md +107 -0
  2. package/CLI.md +122 -1340
  3. package/README.md +30 -12
  4. package/SDK-TREE.md +151 -0
  5. package/TAG.md +95 -41
  6. package/config.json +6 -4
  7. package/dist/abi/TerminusDIDQueryABI.d.ts +397 -0
  8. package/dist/abi/TerminusDIDQueryABI.d.ts.map +1 -0
  9. package/dist/abi/TerminusDIDQueryABI.js +519 -0
  10. package/dist/abi/TerminusDIDQueryABI.js.map +1 -0
  11. package/dist/business/index.d.ts.map +1 -1
  12. package/dist/business/index.js +9 -23
  13. package/dist/business/index.js.map +1 -1
  14. package/dist/business/tag-context.d.ts +1 -0
  15. package/dist/business/tag-context.d.ts.map +1 -1
  16. package/dist/business/tag-context.js +13 -7
  17. package/dist/business/tag-context.js.map +1 -1
  18. package/dist/cli.js +177 -76
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config/index.d.ts +16 -4
  21. package/dist/config/index.d.ts.map +1 -1
  22. package/dist/config/index.js +28 -14
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/domain/core.d.ts +65 -0
  25. package/dist/domain/core.d.ts.map +1 -0
  26. package/dist/domain/core.js +317 -0
  27. package/dist/domain/core.js.map +1 -0
  28. package/dist/domain/index.d.ts +104 -57
  29. package/dist/domain/index.d.ts.map +1 -1
  30. package/dist/domain/index.js +188 -428
  31. package/dist/domain/index.js.map +1 -1
  32. package/dist/domain/types.d.ts +56 -0
  33. package/dist/domain/types.d.ts.map +1 -0
  34. package/dist/domain/types.js +3 -0
  35. package/dist/domain/types.js.map +1 -0
  36. package/dist/index.d.ts +80 -23
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +152 -143
  39. package/dist/index.js.map +1 -1
  40. package/dist/utils/crypto-utils.d.ts +110 -0
  41. package/dist/utils/crypto-utils.d.ts.map +1 -1
  42. package/dist/utils/crypto-utils.js +127 -8
  43. package/dist/utils/crypto-utils.js.map +1 -1
  44. package/dist/utils/error-parser.d.ts.map +1 -1
  45. package/dist/utils/error-parser.js +2 -1
  46. package/dist/utils/error-parser.js.map +1 -1
  47. package/dist/utils/event-parser.d.ts +161 -0
  48. package/dist/utils/event-parser.d.ts.map +1 -0
  49. package/dist/utils/event-parser.js +140 -0
  50. package/dist/utils/event-parser.js.map +1 -0
  51. package/dist/utils/tag-type-builder.d.ts +43 -0
  52. package/dist/utils/tag-type-builder.d.ts.map +1 -1
  53. package/dist/utils/tag-type-builder.js +122 -0
  54. package/dist/utils/tag-type-builder.js.map +1 -1
  55. package/dist/utils/tag-type-parser.d.ts +70 -0
  56. package/dist/utils/tag-type-parser.d.ts.map +1 -0
  57. package/dist/utils/tag-type-parser.js +190 -0
  58. package/dist/utils/tag-type-parser.js.map +1 -0
  59. package/examples/create-with-rpc-demo.ts +142 -0
  60. package/examples/fetch-all-flat-demo.ts +159 -0
  61. package/examples/fetch-by-indices-demo.ts +235 -0
  62. package/examples/fetch-domain-demo.ts +137 -0
  63. package/examples/fetch-domains-demo.ts +221 -0
  64. package/examples/frontend-demo/index.html +2 -2
  65. package/examples/frontend-demo/package-lock.json +4 -1
  66. package/examples/index.ts +3 -5
  67. package/jest.config.js +25 -0
  68. package/package.json +6 -2
  69. package/src/abi/TerminusDIDQueryABI.ts +516 -0
  70. package/src/business/index.ts +9 -33
  71. package/src/business/tag-context.ts +35 -7
  72. package/src/cli.ts +253 -90
  73. package/src/config/index.ts +34 -19
  74. package/src/domain/core.ts +382 -0
  75. package/src/domain/index.ts +271 -641
  76. package/src/domain/types.ts +59 -0
  77. package/src/index.ts +221 -207
  78. package/src/utils/crypto-utils.ts +205 -2
  79. package/src/utils/error-parser.ts +2 -1
  80. package/src/utils/event-parser.ts +353 -0
  81. package/src/utils/tag-type-builder.ts +138 -0
  82. package/src/utils/tag-type-parser.ts +246 -0
  83. package/tests/unit/crypto-utils.test.ts +338 -0
  84. package/tests/unit/ed25519-jwk.test.ts +201 -0
  85. package/tests/unit/event-parser.test.ts +690 -0
  86. package/tests/unit/generate-mnemonic.test.ts +268 -0
  87. package/tests/unit/olares-id-format.test.ts +321 -0
  88. package/tests/unit/tag-type-parser.test.ts +802 -0
  89. package/tests/unit/tag-types.test.ts +821 -0
  90. package/tsconfig.json +3 -2
  91. package/dist/abi/ABITypeABI.d.ts +0 -88
  92. package/dist/abi/ABITypeABI.d.ts.map +0 -1
  93. package/dist/abi/ABITypeABI.js +0 -382
  94. package/dist/abi/ABITypeABI.js.map +0 -1
  95. package/dist/abi/RegistryABI.d.ts +0 -77
  96. package/dist/abi/RegistryABI.d.ts.map +0 -1
  97. package/dist/abi/RegistryABI.js +0 -462
  98. package/dist/abi/RegistryABI.js.map +0 -1
  99. package/dist/tag/address.d.ts +0 -11
  100. package/dist/tag/address.d.ts.map +0 -1
  101. package/dist/tag/address.js +0 -44
  102. package/dist/tag/address.js.map +0 -1
  103. package/dist/tag/array.d.ts +0 -14
  104. package/dist/tag/array.d.ts.map +0 -1
  105. package/dist/tag/array.js +0 -72
  106. package/dist/tag/array.js.map +0 -1
  107. package/dist/tag/bool.d.ts +0 -11
  108. package/dist/tag/bool.d.ts.map +0 -1
  109. package/dist/tag/bool.js +0 -43
  110. package/dist/tag/bool.js.map +0 -1
  111. package/dist/tag/bytes.d.ts +0 -11
  112. package/dist/tag/bytes.d.ts.map +0 -1
  113. package/dist/tag/bytes.js +0 -37
  114. package/dist/tag/bytes.js.map +0 -1
  115. package/dist/tag/flarray.d.ts +0 -15
  116. package/dist/tag/flarray.d.ts.map +0 -1
  117. package/dist/tag/flarray.js +0 -81
  118. package/dist/tag/flarray.js.map +0 -1
  119. package/dist/tag/flbytes.d.ts +0 -11
  120. package/dist/tag/flbytes.d.ts.map +0 -1
  121. package/dist/tag/flbytes.js +0 -47
  122. package/dist/tag/flbytes.js.map +0 -1
  123. package/dist/tag/index.d.ts +0 -32
  124. package/dist/tag/index.d.ts.map +0 -1
  125. package/dist/tag/index.js +0 -121
  126. package/dist/tag/index.js.map +0 -1
  127. package/dist/tag/int.d.ts +0 -12
  128. package/dist/tag/int.d.ts.map +0 -1
  129. package/dist/tag/int.js +0 -49
  130. package/dist/tag/int.js.map +0 -1
  131. package/dist/tag/string.d.ts +0 -11
  132. package/dist/tag/string.d.ts.map +0 -1
  133. package/dist/tag/string.js +0 -37
  134. package/dist/tag/string.js.map +0 -1
  135. package/dist/tag/tag.d.ts +0 -67
  136. package/dist/tag/tag.d.ts.map +0 -1
  137. package/dist/tag/tag.js +0 -157
  138. package/dist/tag/tag.js.map +0 -1
  139. package/dist/tag/tuple.d.ts +0 -17
  140. package/dist/tag/tuple.d.ts.map +0 -1
  141. package/dist/tag/tuple.js +0 -162
  142. package/dist/tag/tuple.js.map +0 -1
  143. package/dist/tag/uint.d.ts +0 -12
  144. package/dist/tag/uint.d.ts.map +0 -1
  145. package/dist/tag/uint.js +0 -49
  146. package/dist/tag/uint.js.map +0 -1
  147. package/dist/test/did.d.ts +0 -2
  148. package/dist/test/did.d.ts.map +0 -1
  149. package/dist/test/did.js +0 -177
  150. package/dist/test/did.js.map +0 -1
  151. package/dist/utils/tag-abi-codec.d.ts +0 -69
  152. package/dist/utils/tag-abi-codec.d.ts.map +0 -1
  153. package/dist/utils/tag-abi-codec.js +0 -144
  154. package/dist/utils/tag-abi-codec.js.map +0 -1
  155. package/examples/crypto-utilities.ts +0 -140
  156. package/examples/ed25519-jwk.ts +0 -73
  157. package/examples/generate-mnemonic.ts +0 -149
  158. package/examples/legacy.ts +0 -33
  159. package/examples/olares-id-format.ts +0 -197
  160. package/examples/tag-builder.ts +0 -235
  161. package/examples/tag-nested-tuple.ts +0 -190
  162. package/examples/tag-simple.ts +0 -149
  163. package/examples/tag-tagger.ts +0 -217
  164. package/examples/test-nested-tuple-conversion.ts +0 -143
  165. package/examples/test-type-bytes-parser.ts +0 -70
  166. package/src/abi/ABITypeABI.ts +0 -379
  167. package/src/abi/RegistryABI.ts +0 -459
  168. package/src/tag/address.ts +0 -48
  169. package/src/tag/array.ts +0 -80
  170. package/src/tag/bool.ts +0 -43
  171. package/src/tag/bytes.ts +0 -38
  172. package/src/tag/flarray.ts +0 -99
  173. package/src/tag/flbytes.ts +0 -48
  174. package/src/tag/index.ts +0 -170
  175. package/src/tag/int.ts +0 -51
  176. package/src/tag/string.ts +0 -38
  177. package/src/tag/tag.ts +0 -229
  178. package/src/tag/tuple.ts +0 -193
  179. package/src/tag/uint.ts +0 -51
  180. package/src/test/did.ts +0 -346
  181. package/src/utils/tag-abi-codec.ts +0 -158
@@ -0,0 +1,221 @@
1
+ import OlaresID from '../src/index';
2
+
3
+ /**
4
+ * Example: Paginated domain fetching with fetchDomains
5
+ *
6
+ * This example demonstrates how to use fetchDomains to fetch domains
7
+ * in controlled batches, useful for:
8
+ * - Building paginated UIs
9
+ * - Processing large datasets in chunks
10
+ * - Implementing infinite scroll
11
+ * - Memory-efficient data loading
12
+ *
13
+ * Run: npx ts-node examples/fetch-domains-demo.ts
14
+ */
15
+
16
+ // Configuration
17
+ const USE_TESTNET = true; // Switch to false for mainnet
18
+
19
+ async function main() {
20
+ const network = process.env.NETWORK || 'sepolia';
21
+
22
+ console.log('🚀 fetchDomains Demo - Paginated Query\n');
23
+ console.log('='.repeat(80));
24
+ console.log('📝 Config:');
25
+ console.log(` Network: ${network}`);
26
+ console.log('='.repeat(80));
27
+ console.log('');
28
+
29
+ // Create DID console instance (query contract automatically configured)
30
+ const didConsole =
31
+ network === 'mainnet'
32
+ ? OlaresID.createMainnet()
33
+ : OlaresID.createTestnet();
34
+
35
+ // Verify query contract is configured
36
+ if (!didConsole.queryContractAddress) {
37
+ console.error(
38
+ '❌ Error: Query contract address not configured for this network'
39
+ );
40
+ process.exit(1);
41
+ }
42
+
43
+ console.log(`📋 Query Contract: ${didConsole.queryContractAddress}\n`);
44
+
45
+ // Get total supply first
46
+ const totalSupply = Number(await didConsole.getTotalSupply());
47
+
48
+ console.log(`📊 Total domains: ${totalSupply}\n`);
49
+
50
+ // Example 1: Fetch first page
51
+ console.log('📄 Example 1: Fetch First Page (10 domains)');
52
+ console.log('-'.repeat(80));
53
+
54
+ const pageSize = 10;
55
+ const startTime1 = Date.now();
56
+
57
+ const firstPage = await didConsole.fetchDomains(
58
+ 0,
59
+ Math.min(pageSize, totalSupply)
60
+ );
61
+
62
+ const elapsed1 = Date.now() - startTime1;
63
+ console.log(`✅ Fetched ${firstPage.length} domains in ${elapsed1}ms\n`);
64
+
65
+ firstPage.forEach((domain, i) => {
66
+ console.log(` ${i + 1}. ${domain.name}`);
67
+ console.log(` ID: ${domain.id.substring(0, 20)}...`);
68
+ console.log(` Owner: ${domain.owner}`);
69
+ console.log(` Tags: ${domain.tags.length}, Level: ${domain.level}`);
70
+ });
71
+
72
+ // Example 2: Fetch second page (if exists)
73
+ if (totalSupply > pageSize) {
74
+ console.log(`\n📄 Example 2: Fetch Second Page (offset ${pageSize})`);
75
+ console.log('-'.repeat(80));
76
+
77
+ const startTime2 = Date.now();
78
+
79
+ const secondPage = await didConsole.fetchDomains(
80
+ pageSize,
81
+ Math.min(pageSize, totalSupply - pageSize)
82
+ );
83
+
84
+ const elapsed2 = Date.now() - startTime2;
85
+ console.log(
86
+ `✅ Fetched ${secondPage.length} domains in ${elapsed2}ms\n`
87
+ );
88
+
89
+ secondPage.slice(0, 5).forEach((domain, i) => {
90
+ console.log(
91
+ ` ${i + 1}. ${domain.name} (${domain.tags.length} tags)`
92
+ );
93
+ });
94
+
95
+ if (secondPage.length > 5) {
96
+ console.log(` ... and ${secondPage.length - 5} more`);
97
+ }
98
+ }
99
+
100
+ // Example 3: Fetch specific range
101
+ if (totalSupply > 20) {
102
+ console.log('\n📄 Example 3: Fetch Specific Range (20-30)');
103
+ console.log('-'.repeat(80));
104
+
105
+ const startTime3 = Date.now();
106
+
107
+ const customRange = await didConsole.fetchDomains(
108
+ 20,
109
+ Math.min(10, totalSupply - 20)
110
+ );
111
+
112
+ const elapsed3 = Date.now() - startTime3;
113
+ console.log(
114
+ `✅ Fetched ${customRange.length} domains in ${elapsed3}ms\n`
115
+ );
116
+
117
+ customRange.slice(0, 5).forEach((domain, i) => {
118
+ console.log(
119
+ ` ${i + 1}. ${domain.name} (${domain.tags.length} tags)`
120
+ );
121
+ });
122
+ }
123
+
124
+ // Example 4: Simulate pagination loop
125
+ console.log('\n📄 Example 4: Pagination Loop (Fetch All Pages)');
126
+ console.log('-'.repeat(80));
127
+
128
+ const pagesLimit = 3; // Limit to 3 pages for demo
129
+ let currentOffset = 0;
130
+ let pageNumber = 1;
131
+ let allFetchedDomains = [];
132
+
133
+ while (currentOffset < totalSupply && pageNumber <= pagesLimit) {
134
+ const limit = Math.min(pageSize, totalSupply - currentOffset);
135
+
136
+ console.log(
137
+ `\nFetching page ${pageNumber} (offset: ${currentOffset}, limit: ${limit})...`
138
+ );
139
+
140
+ const startTime = Date.now();
141
+ const pageDomains = await didConsole.fetchDomains(currentOffset, limit);
142
+ const elapsed = Date.now() - startTime;
143
+
144
+ allFetchedDomains.push(...pageDomains);
145
+
146
+ console.log(
147
+ `✅ Page ${pageNumber}: ${pageDomains.length} domains in ${elapsed}ms`
148
+ );
149
+ console.log(
150
+ ` Domains: ${pageDomains
151
+ .slice(0, 3)
152
+ .map((d) => d.name)
153
+ .join(', ')}${pageDomains.length > 3 ? '...' : ''}`
154
+ );
155
+
156
+ currentOffset += pageSize;
157
+ pageNumber++;
158
+ }
159
+
160
+ console.log(
161
+ `\n📊 Total fetched across ${pageNumber - 1} pages: ${
162
+ allFetchedDomains.length
163
+ } domains`
164
+ );
165
+
166
+ // Example 5: Error handling - invalid parameters
167
+ console.log('\n⚠️ Example 5: Error Handling');
168
+ console.log('-'.repeat(80));
169
+
170
+ try {
171
+ await didConsole.fetchDomains(-1, 10);
172
+ } catch (error) {
173
+ console.log('✅ Correctly caught error for negative offset:');
174
+ console.log(` ${(error as Error).message}`);
175
+ }
176
+
177
+ try {
178
+ await didConsole.fetchDomains(0, 0);
179
+ } catch (error) {
180
+ console.log('✅ Correctly caught error for zero limit:');
181
+ console.log(` ${(error as Error).message}`);
182
+ }
183
+
184
+ // Fetch beyond total supply (contract will throw InvalidPagination)
185
+ console.log('\n✅ Fetching beyond total supply:');
186
+ try {
187
+ const emptyResult = await didConsole.fetchDomains(
188
+ totalSupply + 100,
189
+ 10
190
+ );
191
+ console.log(
192
+ ` Returned ${emptyResult.length} domains (expected 0 or error)`
193
+ );
194
+ } catch (error) {
195
+ console.log(` ✅ Contract correctly reverted with InvalidPagination`);
196
+ console.log(
197
+ ` (This is expected behavior when offset exceeds total supply)`
198
+ );
199
+ }
200
+
201
+ console.log('\n' + '='.repeat(80));
202
+ console.log('✅ Demo completed successfully!');
203
+ console.log('\n💡 Use Cases:');
204
+ console.log(' - Paginated UI: Load 10-50 domains per page');
205
+ console.log(' - Infinite scroll: Load next batch on scroll');
206
+ console.log(' - Memory efficient: Process large datasets in chunks');
207
+ console.log(' - Background sync: Fetch and process incrementally');
208
+ console.log('\n💡 Simplified API:');
209
+ console.log(' - No need to pass queryContractAddress');
210
+ console.log(' - Automatically configured based on network');
211
+ }
212
+
213
+ // Run the example
214
+ main().catch((error) => {
215
+ console.error('\n❌ Error:', error);
216
+ if (error instanceof Error) {
217
+ console.error('Message:', error.message);
218
+ console.error('Stack:', error.stack);
219
+ }
220
+ process.exit(1);
221
+ });
@@ -3,8 +3,8 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <meta name="description" content="DID Gate - Decentralized Identity Service" />
7
- <title>DID Gate</title>
6
+ <meta name="description" content="Olares SDK Demo" />
7
+ <title>Olares SDK Demo</title>
8
8
  </head>
9
9
  <body>
10
10
  <div id="app"></div>
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "../..": {
34
34
  "name": "@beclab/olaresid",
35
- "version": "0.1.7",
35
+ "version": "0.2.0",
36
36
  "license": "Terminus License",
37
37
  "dependencies": {
38
38
  "@solana/web3.js": "^1.87.6",
@@ -48,8 +48,11 @@
48
48
  "did-cli": "dist/cli.js"
49
49
  },
50
50
  "devDependencies": {
51
+ "@types/jest": "^30.0.0",
51
52
  "@types/node": "^20.0.0",
52
53
  "@types/varint": "^6.0.3",
54
+ "jest": "^30.2.0",
55
+ "ts-jest": "^29.4.6",
53
56
  "ts-node": "^10.9.2",
54
57
  "typescript": "^5.9.3"
55
58
  }
package/examples/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import OlaresID, { debug } from '../src/index';
1
+ import OlaresID from '../src/index';
2
2
 
3
3
  async function main() {
4
4
  const olaresId = OlaresID.createTestnet();
@@ -6,10 +6,8 @@ async function main() {
6
6
  const domain = await olaresId.fetchDomain('tw7613781.olares.com');
7
7
  console.log(domain);
8
8
 
9
- // Get all domain data (the mainnet has a large amount of data, the testnet has a small amount of data, for testing it is recommended to experience this function in the testnet environment)
10
- // await olaresId.fetchAll();
11
- // console.log('All Domains:', olaresId.allDomainCache);
12
- // console.log('Domain Tree Cache:', olaresId.treesCache);
9
+ const allDomains = await olaresId.fetchAllFlat();
10
+ console.log('All Domains:', JSON.stringify(allDomains, null, 2));
13
11
  }
14
12
 
15
13
  main().catch(console.error);
package/jest.config.js ADDED
@@ -0,0 +1,25 @@
1
+ module.exports = {
2
+ preset: 'ts-jest',
3
+ testEnvironment: 'node',
4
+ roots: ['<rootDir>/tests'],
5
+ testMatch: ['**/*.test.ts'],
6
+ collectCoverageFrom: [
7
+ 'src/**/*.ts',
8
+ '!src/**/*.d.ts',
9
+ '!src/test/**',
10
+ '!src/cli.ts'
11
+ ],
12
+ coverageDirectory: 'coverage',
13
+ coverageReporters: ['text', 'lcov', 'html'],
14
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
15
+ transform: {
16
+ '^.+\\.tsx?$': [
17
+ 'ts-jest',
18
+ {
19
+ tsconfig: {
20
+ esModuleInterop: true
21
+ }
22
+ }
23
+ ]
24
+ }
25
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beclab/olaresid",
3
- "version": "0.1.13",
3
+ "version": "0.2.0",
4
4
  "description": "DID Contract SDK with CLI tool",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,7 +17,8 @@
17
17
  },
18
18
  "scripts": {
19
19
  "build": "tsc",
20
- "test": "npm run build && node dist/test/did.js",
20
+ "test:unit": "jest tests/unit",
21
+ "test:coverage": "jest --coverage",
21
22
  "prepublishOnly": "npm run build",
22
23
  "example": "ts-node ./examples/index.ts",
23
24
  "example:debug": "ts-node ./examples/index.ts --debug",
@@ -48,8 +49,11 @@
48
49
  },
49
50
  "module": "commonjs",
50
51
  "devDependencies": {
52
+ "@types/jest": "^30.0.0",
51
53
  "@types/node": "^20.0.0",
52
54
  "@types/varint": "^6.0.3",
55
+ "jest": "^30.2.0",
56
+ "ts-jest": "^29.4.6",
53
57
  "ts-node": "^10.9.2",
54
58
  "typescript": "^5.9.3"
55
59
  },