@beclab/olaresid 0.1.12 → 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 (182) hide show
  1. package/CLI-TREE.md +107 -0
  2. package/CLI.md +122 -1329
  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 +1 -1
  12. package/dist/business/index.d.ts.map +1 -1
  13. package/dist/business/index.js +11 -24
  14. package/dist/business/index.js.map +1 -1
  15. package/dist/business/tag-context.d.ts +1 -0
  16. package/dist/business/tag-context.d.ts.map +1 -1
  17. package/dist/business/tag-context.js +13 -7
  18. package/dist/business/tag-context.js.map +1 -1
  19. package/dist/cli.js +238 -107
  20. package/dist/cli.js.map +1 -1
  21. package/dist/config/index.d.ts +16 -4
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +28 -14
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/domain/core.d.ts +65 -0
  26. package/dist/domain/core.d.ts.map +1 -0
  27. package/dist/domain/core.js +317 -0
  28. package/dist/domain/core.js.map +1 -0
  29. package/dist/domain/index.d.ts +104 -57
  30. package/dist/domain/index.d.ts.map +1 -1
  31. package/dist/domain/index.js +188 -428
  32. package/dist/domain/index.js.map +1 -1
  33. package/dist/domain/types.d.ts +56 -0
  34. package/dist/domain/types.d.ts.map +1 -0
  35. package/dist/domain/types.js +3 -0
  36. package/dist/domain/types.js.map +1 -0
  37. package/dist/index.d.ts +81 -24
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +153 -143
  40. package/dist/index.js.map +1 -1
  41. package/dist/utils/crypto-utils.d.ts +124 -0
  42. package/dist/utils/crypto-utils.d.ts.map +1 -1
  43. package/dist/utils/crypto-utils.js +156 -8
  44. package/dist/utils/crypto-utils.js.map +1 -1
  45. package/dist/utils/error-parser.d.ts.map +1 -1
  46. package/dist/utils/error-parser.js +2 -1
  47. package/dist/utils/error-parser.js.map +1 -1
  48. package/dist/utils/event-parser.d.ts +161 -0
  49. package/dist/utils/event-parser.d.ts.map +1 -0
  50. package/dist/utils/event-parser.js +140 -0
  51. package/dist/utils/event-parser.js.map +1 -0
  52. package/dist/utils/tag-type-builder.d.ts +43 -0
  53. package/dist/utils/tag-type-builder.d.ts.map +1 -1
  54. package/dist/utils/tag-type-builder.js +122 -0
  55. package/dist/utils/tag-type-builder.js.map +1 -1
  56. package/dist/utils/tag-type-parser.d.ts +70 -0
  57. package/dist/utils/tag-type-parser.d.ts.map +1 -0
  58. package/dist/utils/tag-type-parser.js +190 -0
  59. package/dist/utils/tag-type-parser.js.map +1 -0
  60. package/examples/create-with-rpc-demo.ts +142 -0
  61. package/examples/fetch-all-flat-demo.ts +159 -0
  62. package/examples/fetch-by-indices-demo.ts +235 -0
  63. package/examples/fetch-domain-demo.ts +137 -0
  64. package/examples/fetch-domains-demo.ts +221 -0
  65. package/examples/frontend-demo/index.html +2 -2
  66. package/examples/frontend-demo/package-lock.json +4 -1
  67. package/examples/index.ts +3 -5
  68. package/jest.config.js +25 -0
  69. package/package.json +6 -2
  70. package/src/abi/TerminusDIDQueryABI.ts +516 -0
  71. package/src/business/index.ts +10 -33
  72. package/src/business/tag-context.ts +35 -7
  73. package/src/cli.ts +344 -121
  74. package/src/config/index.ts +34 -19
  75. package/src/domain/core.ts +382 -0
  76. package/src/domain/index.ts +271 -641
  77. package/src/domain/types.ts +59 -0
  78. package/src/index.ts +222 -207
  79. package/src/utils/crypto-utils.ts +239 -2
  80. package/src/utils/error-parser.ts +2 -1
  81. package/src/utils/event-parser.ts +353 -0
  82. package/src/utils/tag-type-builder.ts +138 -0
  83. package/src/utils/tag-type-parser.ts +246 -0
  84. package/tests/unit/crypto-utils.test.ts +338 -0
  85. package/tests/unit/ed25519-jwk.test.ts +201 -0
  86. package/tests/unit/event-parser.test.ts +690 -0
  87. package/tests/unit/generate-mnemonic.test.ts +268 -0
  88. package/tests/unit/olares-id-format.test.ts +321 -0
  89. package/tests/unit/tag-type-parser.test.ts +802 -0
  90. package/tests/unit/tag-types.test.ts +821 -0
  91. package/tsconfig.json +3 -2
  92. package/dist/abi/ABITypeABI.d.ts +0 -88
  93. package/dist/abi/ABITypeABI.d.ts.map +0 -1
  94. package/dist/abi/ABITypeABI.js +0 -382
  95. package/dist/abi/ABITypeABI.js.map +0 -1
  96. package/dist/abi/RegistryABI.d.ts +0 -77
  97. package/dist/abi/RegistryABI.d.ts.map +0 -1
  98. package/dist/abi/RegistryABI.js +0 -462
  99. package/dist/abi/RegistryABI.js.map +0 -1
  100. package/dist/tag/address.d.ts +0 -11
  101. package/dist/tag/address.d.ts.map +0 -1
  102. package/dist/tag/address.js +0 -44
  103. package/dist/tag/address.js.map +0 -1
  104. package/dist/tag/array.d.ts +0 -14
  105. package/dist/tag/array.d.ts.map +0 -1
  106. package/dist/tag/array.js +0 -72
  107. package/dist/tag/array.js.map +0 -1
  108. package/dist/tag/bool.d.ts +0 -11
  109. package/dist/tag/bool.d.ts.map +0 -1
  110. package/dist/tag/bool.js +0 -43
  111. package/dist/tag/bool.js.map +0 -1
  112. package/dist/tag/bytes.d.ts +0 -11
  113. package/dist/tag/bytes.d.ts.map +0 -1
  114. package/dist/tag/bytes.js +0 -37
  115. package/dist/tag/bytes.js.map +0 -1
  116. package/dist/tag/flarray.d.ts +0 -15
  117. package/dist/tag/flarray.d.ts.map +0 -1
  118. package/dist/tag/flarray.js +0 -81
  119. package/dist/tag/flarray.js.map +0 -1
  120. package/dist/tag/flbytes.d.ts +0 -11
  121. package/dist/tag/flbytes.d.ts.map +0 -1
  122. package/dist/tag/flbytes.js +0 -47
  123. package/dist/tag/flbytes.js.map +0 -1
  124. package/dist/tag/index.d.ts +0 -32
  125. package/dist/tag/index.d.ts.map +0 -1
  126. package/dist/tag/index.js +0 -121
  127. package/dist/tag/index.js.map +0 -1
  128. package/dist/tag/int.d.ts +0 -12
  129. package/dist/tag/int.d.ts.map +0 -1
  130. package/dist/tag/int.js +0 -49
  131. package/dist/tag/int.js.map +0 -1
  132. package/dist/tag/string.d.ts +0 -11
  133. package/dist/tag/string.d.ts.map +0 -1
  134. package/dist/tag/string.js +0 -37
  135. package/dist/tag/string.js.map +0 -1
  136. package/dist/tag/tag.d.ts +0 -67
  137. package/dist/tag/tag.d.ts.map +0 -1
  138. package/dist/tag/tag.js +0 -157
  139. package/dist/tag/tag.js.map +0 -1
  140. package/dist/tag/tuple.d.ts +0 -17
  141. package/dist/tag/tuple.d.ts.map +0 -1
  142. package/dist/tag/tuple.js +0 -162
  143. package/dist/tag/tuple.js.map +0 -1
  144. package/dist/tag/uint.d.ts +0 -12
  145. package/dist/tag/uint.d.ts.map +0 -1
  146. package/dist/tag/uint.js +0 -49
  147. package/dist/tag/uint.js.map +0 -1
  148. package/dist/test/did.d.ts +0 -2
  149. package/dist/test/did.d.ts.map +0 -1
  150. package/dist/test/did.js +0 -177
  151. package/dist/test/did.js.map +0 -1
  152. package/dist/utils/tag-abi-codec.d.ts +0 -69
  153. package/dist/utils/tag-abi-codec.d.ts.map +0 -1
  154. package/dist/utils/tag-abi-codec.js +0 -144
  155. package/dist/utils/tag-abi-codec.js.map +0 -1
  156. package/examples/crypto-utilities.ts +0 -140
  157. package/examples/ed25519-jwk.ts +0 -73
  158. package/examples/generate-mnemonic.ts +0 -149
  159. package/examples/legacy.ts +0 -33
  160. package/examples/olares-id-format.ts +0 -197
  161. package/examples/tag-builder.ts +0 -235
  162. package/examples/tag-nested-tuple.ts +0 -190
  163. package/examples/tag-simple.ts +0 -149
  164. package/examples/tag-tagger.ts +0 -217
  165. package/examples/test-nested-tuple-conversion.ts +0 -143
  166. package/examples/test-type-bytes-parser.ts +0 -70
  167. package/src/abi/ABITypeABI.ts +0 -379
  168. package/src/abi/RegistryABI.ts +0 -459
  169. package/src/tag/address.ts +0 -48
  170. package/src/tag/array.ts +0 -80
  171. package/src/tag/bool.ts +0 -43
  172. package/src/tag/bytes.ts +0 -38
  173. package/src/tag/flarray.ts +0 -99
  174. package/src/tag/flbytes.ts +0 -48
  175. package/src/tag/index.ts +0 -170
  176. package/src/tag/int.ts +0 -51
  177. package/src/tag/string.ts +0 -38
  178. package/src/tag/tag.ts +0 -229
  179. package/src/tag/tuple.ts +0 -193
  180. package/src/tag/uint.ts +0 -51
  181. package/src/test/did.ts +0 -346
  182. 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.12",
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
  },