@mantle-rwa/sdk 0.1.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 (79) hide show
  1. package/dist/cjs/client.js +198 -0
  2. package/dist/cjs/client.js.map +1 -0
  3. package/dist/cjs/constants/index.js +211 -0
  4. package/dist/cjs/constants/index.js.map +1 -0
  5. package/dist/cjs/errors/index.js +218 -0
  6. package/dist/cjs/errors/index.js.map +1 -0
  7. package/dist/cjs/index.js +51 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/modules/compliance.js +202 -0
  10. package/dist/cjs/modules/compliance.js.map +1 -0
  11. package/dist/cjs/modules/index.js +18 -0
  12. package/dist/cjs/modules/index.js.map +1 -0
  13. package/dist/cjs/modules/kyc.js +278 -0
  14. package/dist/cjs/modules/kyc.js.map +1 -0
  15. package/dist/cjs/modules/token.js +365 -0
  16. package/dist/cjs/modules/token.js.map +1 -0
  17. package/dist/cjs/modules/yield.js +406 -0
  18. package/dist/cjs/modules/yield.js.map +1 -0
  19. package/dist/cjs/package.json +3 -0
  20. package/dist/cjs/types/index.js +20 -0
  21. package/dist/cjs/types/index.js.map +1 -0
  22. package/dist/cjs/utils/index.js +206 -0
  23. package/dist/cjs/utils/index.js.map +1 -0
  24. package/dist/esm/client.js +194 -0
  25. package/dist/esm/client.js.map +1 -0
  26. package/dist/esm/constants/index.js +208 -0
  27. package/dist/esm/constants/index.js.map +1 -0
  28. package/dist/esm/errors/index.js +209 -0
  29. package/dist/esm/errors/index.js.map +1 -0
  30. package/dist/esm/index.js +17 -0
  31. package/dist/esm/index.js.map +1 -0
  32. package/dist/esm/modules/compliance.js +198 -0
  33. package/dist/esm/modules/compliance.js.map +1 -0
  34. package/dist/esm/modules/index.js +8 -0
  35. package/dist/esm/modules/index.js.map +1 -0
  36. package/dist/esm/modules/kyc.js +273 -0
  37. package/dist/esm/modules/kyc.js.map +1 -0
  38. package/dist/esm/modules/token.js +360 -0
  39. package/dist/esm/modules/token.js.map +1 -0
  40. package/dist/esm/modules/yield.js +401 -0
  41. package/dist/esm/modules/yield.js.map +1 -0
  42. package/dist/esm/types/index.js +17 -0
  43. package/dist/esm/types/index.js.map +1 -0
  44. package/dist/esm/utils/index.js +188 -0
  45. package/dist/esm/utils/index.js.map +1 -0
  46. package/dist/types/client.d.ts +93 -0
  47. package/dist/types/client.d.ts.map +1 -0
  48. package/dist/types/constants/index.d.ts +83 -0
  49. package/dist/types/constants/index.d.ts.map +1 -0
  50. package/dist/types/errors/index.d.ts +83 -0
  51. package/dist/types/errors/index.d.ts.map +1 -0
  52. package/dist/types/index.d.ts +13 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/modules/compliance.d.ts +29 -0
  55. package/dist/types/modules/compliance.d.ts.map +1 -0
  56. package/dist/types/modules/index.d.ts +8 -0
  57. package/dist/types/modules/index.d.ts.map +1 -0
  58. package/dist/types/modules/kyc.d.ts +131 -0
  59. package/dist/types/modules/kyc.d.ts.map +1 -0
  60. package/dist/types/modules/token.d.ts +145 -0
  61. package/dist/types/modules/token.d.ts.map +1 -0
  62. package/dist/types/modules/yield.d.ts +143 -0
  63. package/dist/types/modules/yield.d.ts.map +1 -0
  64. package/dist/types/types/index.d.ts +254 -0
  65. package/dist/types/types/index.d.ts.map +1 -0
  66. package/dist/types/utils/index.d.ts +80 -0
  67. package/dist/types/utils/index.d.ts.map +1 -0
  68. package/package.json +52 -0
  69. package/src/client.ts +258 -0
  70. package/src/constants/index.ts +226 -0
  71. package/src/errors/index.ts +291 -0
  72. package/src/index.ts +42 -0
  73. package/src/modules/compliance.ts +252 -0
  74. package/src/modules/index.ts +8 -0
  75. package/src/modules/kyc.ts +446 -0
  76. package/src/modules/token.ts +488 -0
  77. package/src/modules/yield.ts +566 -0
  78. package/src/types/index.ts +326 -0
  79. package/src/utils/index.ts +240 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @mantle-rwa/sdk
3
+ * TypeScript SDK for Real-World Asset tokenization on Mantle Network
4
+ */
5
+ // Core client
6
+ export { RWAClient } from './client.js';
7
+ // Modules
8
+ export { TokenModule, TokenInstance, KYCModule, KYCRegistryInstance, YieldModule, YieldDistributorInstance, ComplianceModule, } from './modules/index.js';
9
+ // Types
10
+ export * from './types/index.js';
11
+ // Errors
12
+ export * from './errors/index.js';
13
+ // Constants
14
+ export * from './constants/index.js';
15
+ // Utilities
16
+ export { isValidAddress, normalizeAddress, parseAmount, formatAmount, hashIdentityData, timestampToDate, dateToTimestamp, isExpired, calculatePercentage, } from './utils/index.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,UAAU;AACV,OAAO,EACH,WAAW,EACX,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,WAAW,EACX,wBAAwB,EACxB,gBAAgB,GACnB,MAAM,WAAW,CAAC;AAGnB,QAAQ;AACR,cAAc,SAAS,CAAC;AAExB,SAAS;AACT,cAAc,UAAU,CAAC;AAEzB,YAAY;AACZ,cAAc,aAAa,CAAC;AAE5B,YAAY;AACZ,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,SAAS,EACT,mBAAmB,GACtB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * ComplianceModule - Handles transfer eligibility and compliance reporting
3
+ */
4
+ import { ethers } from 'ethers';
5
+ import { RWA_TOKEN_ABI, KYC_REGISTRY_ABI } from '../constants/index.js';
6
+ import { RWAError, ErrorCode } from '../errors/index.js';
7
+ import { isValidAddress, normalizeAddress, parseAmount } from '../utils/index.js';
8
+ /**
9
+ * Module for compliance operations
10
+ */
11
+ export class ComplianceModule {
12
+ _provider;
13
+ constructor(provider, _signer) {
14
+ this._provider = provider;
15
+ }
16
+ /**
17
+ * Check if a transfer is eligible
18
+ */
19
+ async checkTransferEligibility(tokenAddress, from, to, amount) {
20
+ if (!isValidAddress(tokenAddress)) {
21
+ throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid token address: ${tokenAddress}`);
22
+ }
23
+ if (!isValidAddress(from)) {
24
+ throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid from address: ${from}`);
25
+ }
26
+ if (!isValidAddress(to)) {
27
+ throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid to address: ${to}`);
28
+ }
29
+ const token = new ethers.Contract(tokenAddress, RWA_TOKEN_ABI, this._provider);
30
+ const checks = [];
31
+ // Check 1: Token not paused
32
+ try {
33
+ const paused = await token.paused();
34
+ checks.push({
35
+ name: 'Token Active',
36
+ passed: !paused,
37
+ details: paused ? 'Token transfers are currently paused' : 'Token is active',
38
+ });
39
+ }
40
+ catch {
41
+ checks.push({
42
+ name: 'Token Active',
43
+ passed: false,
44
+ details: 'Unable to check pause status',
45
+ });
46
+ }
47
+ // Check 2: Sender has sufficient balance
48
+ try {
49
+ const balance = await token.balanceOf(normalizeAddress(from));
50
+ const amountWei = parseAmount(amount);
51
+ const hasBalance = balance >= amountWei;
52
+ checks.push({
53
+ name: 'Sufficient Balance',
54
+ passed: hasBalance,
55
+ details: hasBalance
56
+ ? `Balance: ${balance.toString()}`
57
+ : `Insufficient balance. Has: ${balance.toString()}, Needs: ${amountWei.toString()}`,
58
+ });
59
+ }
60
+ catch {
61
+ checks.push({
62
+ name: 'Sufficient Balance',
63
+ passed: false,
64
+ details: 'Unable to check balance',
65
+ });
66
+ }
67
+ // Check 3: KYC verification for sender and recipient
68
+ try {
69
+ const kycRegistryAddress = await token.kycRegistry();
70
+ if (kycRegistryAddress !== ethers.ZeroAddress) {
71
+ const kycRegistry = new ethers.Contract(kycRegistryAddress, KYC_REGISTRY_ABI, this._provider);
72
+ // Check sender (skip for minting from zero address)
73
+ if (from !== ethers.ZeroAddress) {
74
+ const senderVerified = await kycRegistry.isVerified(normalizeAddress(from));
75
+ checks.push({
76
+ name: 'Sender KYC Verified',
77
+ passed: senderVerified,
78
+ details: senderVerified
79
+ ? 'Sender is KYC verified'
80
+ : 'Sender is not KYC verified or verification has expired',
81
+ });
82
+ }
83
+ // Check recipient
84
+ const recipientVerified = await kycRegistry.isVerified(normalizeAddress(to));
85
+ checks.push({
86
+ name: 'Recipient KYC Verified',
87
+ passed: recipientVerified,
88
+ details: recipientVerified
89
+ ? 'Recipient is KYC verified'
90
+ : 'Recipient is not KYC verified or verification has expired',
91
+ });
92
+ }
93
+ }
94
+ catch {
95
+ checks.push({
96
+ name: 'KYC Verification',
97
+ passed: false,
98
+ details: 'Unable to check KYC status',
99
+ });
100
+ }
101
+ // Check 4: Compliance modules
102
+ try {
103
+ const [allowed, reason] = await token.isTransferAllowed(normalizeAddress(from), normalizeAddress(to), parseAmount(amount));
104
+ checks.push({
105
+ name: 'Compliance Modules',
106
+ passed: allowed,
107
+ details: allowed ? 'All compliance checks passed' : reason,
108
+ });
109
+ }
110
+ catch {
111
+ checks.push({
112
+ name: 'Compliance Modules',
113
+ passed: false,
114
+ details: 'Unable to check compliance modules',
115
+ });
116
+ }
117
+ // Determine overall eligibility
118
+ const allPassed = checks.every((c) => c.passed);
119
+ const failedCheck = checks.find((c) => !c.passed);
120
+ return {
121
+ eligible: allPassed,
122
+ reason: allPassed ? undefined : failedCheck?.details,
123
+ checks,
124
+ };
125
+ }
126
+ /**
127
+ * Generate a compliance report for a token
128
+ */
129
+ async generateComplianceReport(tokenAddress) {
130
+ if (!isValidAddress(tokenAddress)) {
131
+ throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid token address: ${tokenAddress}`);
132
+ }
133
+ const token = new ethers.Contract(tokenAddress, RWA_TOKEN_ABI, this._provider);
134
+ // Get KYC registry - verify it exists
135
+ try {
136
+ await token.kycRegistry();
137
+ }
138
+ catch {
139
+ throw new RWAError(ErrorCode.INVALID_CONFIGURATION, 'Unable to get KYC registry from token contract');
140
+ }
141
+ // Note: In a production implementation, this would require an indexer
142
+ // to track all token holders and their KYC status. This is a simplified
143
+ // version that returns placeholder data.
144
+ const report = {
145
+ generatedAt: new Date(),
146
+ tokenAddress: normalizeAddress(tokenAddress),
147
+ totalHolders: 0, // Would need indexer
148
+ verifiedHolders: 0, // Would need indexer
149
+ accreditedHolders: 0, // Would need indexer
150
+ transfersBlocked: 0, // Would need event indexing
151
+ complianceScore: 100, // Placeholder
152
+ };
153
+ return report;
154
+ }
155
+ /**
156
+ * Export a compliance report in various formats
157
+ */
158
+ async exportReport(report, format) {
159
+ switch (format) {
160
+ case 'json':
161
+ return Buffer.from(JSON.stringify(report, null, 2));
162
+ case 'csv': {
163
+ const headers = Object.keys(report).join(',');
164
+ const values = Object.values(report)
165
+ .map((v) => (v instanceof Date ? v.toISOString() : String(v)))
166
+ .join(',');
167
+ return Buffer.from(`${headers}\n${values}`);
168
+ }
169
+ case 'pdf':
170
+ // PDF generation would require a library like pdfkit
171
+ throw new RWAError(ErrorCode.INVALID_CONFIGURATION, 'PDF export requires additional dependencies. Use JSON or CSV format.');
172
+ default:
173
+ throw new RWAError(ErrorCode.INVALID_CONFIGURATION, `Unsupported export format: ${format}`);
174
+ }
175
+ }
176
+ /**
177
+ * Prepare filing data for regulatory submissions
178
+ */
179
+ async prepareFilingData(tokenAddress, filingType, startDate, endDate) {
180
+ const report = await this.generateComplianceReport(tokenAddress);
181
+ return {
182
+ filingType,
183
+ tokenAddress: normalizeAddress(tokenAddress),
184
+ reportingPeriod: {
185
+ start: startDate || new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // Default: 30 days ago
186
+ end: endDate || new Date(),
187
+ },
188
+ data: {
189
+ totalHolders: report.totalHolders,
190
+ verifiedHolders: report.verifiedHolders,
191
+ accreditedHolders: report.accreditedHolders,
192
+ complianceScore: report.complianceScore,
193
+ generatedAt: report.generatedAt.toISOString(),
194
+ },
195
+ };
196
+ }
197
+ }
198
+ //# sourceMappingURL=compliance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../../src/modules/compliance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * SDK Modules
3
+ */
4
+ export { TokenModule, TokenInstance } from './token.js';
5
+ export { KYCModule, KYCRegistryInstance } from './kyc.js';
6
+ export { YieldModule, YieldDistributorInstance } from './yield.js';
7
+ export { ComplianceModule } from './compliance.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAoB,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * KYCModule - Handles KYC registry interactions and provider integrations
3
+ */
4
+ import { ethers } from 'ethers';
5
+ import { KYC_REGISTRY_ABI } from '../constants/index.js';
6
+ import { RWAError, ErrorCode, parseContractError } from '../errors/index.js';
7
+ import { isValidAddress, normalizeAddress, parseEvents, createTransactionResult, retry, estimateGasWithBuffer, timestampToDate, dateToTimestamp, hashIdentityData, } from '../utils/index.js';
8
+ /**
9
+ * Instance of a connected KYC registry
10
+ */
11
+ export class KYCRegistryInstance {
12
+ _contract;
13
+ _retries;
14
+ _retryDelay;
15
+ /** Registry contract address */
16
+ address;
17
+ constructor(address, provider, signer, retries, retryDelay) {
18
+ this.address = normalizeAddress(address);
19
+ this._retries = retries;
20
+ this._retryDelay = retryDelay;
21
+ this._contract = new ethers.Contract(this.address, KYC_REGISTRY_ABI, signer || provider);
22
+ }
23
+ /*//////////////////////////////////////////////////////////////
24
+ READ FUNCTIONS
25
+ //////////////////////////////////////////////////////////////*/
26
+ /**
27
+ * Check if an investor is verified
28
+ */
29
+ async isVerified(investor) {
30
+ return this._contract.isVerified(normalizeAddress(investor));
31
+ }
32
+ /**
33
+ * Check if an investor is accredited
34
+ */
35
+ async isAccredited(investor) {
36
+ return this._contract.isAccredited(normalizeAddress(investor));
37
+ }
38
+ /**
39
+ * Get investor information
40
+ */
41
+ async getInvestorInfo(investor) {
42
+ const [verified, tier, expiry, identityHash] = await this._contract.getInvestorInfo(normalizeAddress(investor));
43
+ return {
44
+ verified,
45
+ tier: tier,
46
+ expiry: timestampToDate(expiry),
47
+ identityHash,
48
+ };
49
+ }
50
+ /*//////////////////////////////////////////////////////////////
51
+ WRITE FUNCTIONS
52
+ //////////////////////////////////////////////////////////////*/
53
+ /**
54
+ * Add an investor to the registry
55
+ */
56
+ async addInvestor(investor, tier, expiryDate, identityHash, options) {
57
+ const investorAddress = normalizeAddress(investor);
58
+ const expiryTimestamp = dateToTimestamp(expiryDate);
59
+ try {
60
+ const tx = await retry(async () => {
61
+ const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.addInvestor.estimateGas(investorAddress, tier, expiryTimestamp, identityHash));
62
+ return this._contract.addInvestor(investorAddress, tier, expiryTimestamp, identityHash, { gasLimit });
63
+ }, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
64
+ const receipt = await tx.wait();
65
+ const events = parseEvents(receipt, this._contract.interface);
66
+ return createTransactionResult(receipt, events);
67
+ }
68
+ catch (error) {
69
+ throw parseContractError(error, this.address, 'addInvestor');
70
+ }
71
+ }
72
+ /**
73
+ * Update an investor's information
74
+ */
75
+ async updateInvestor(investor, tier, expiryDate, options) {
76
+ const investorAddress = normalizeAddress(investor);
77
+ const expiryTimestamp = dateToTimestamp(expiryDate);
78
+ try {
79
+ const tx = await retry(async () => {
80
+ const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.updateInvestor.estimateGas(investorAddress, tier, expiryTimestamp));
81
+ return this._contract.updateInvestor(investorAddress, tier, expiryTimestamp, { gasLimit });
82
+ }, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
83
+ const receipt = await tx.wait();
84
+ const events = parseEvents(receipt, this._contract.interface);
85
+ return createTransactionResult(receipt, events);
86
+ }
87
+ catch (error) {
88
+ throw parseContractError(error, this.address, 'updateInvestor');
89
+ }
90
+ }
91
+ /**
92
+ * Remove an investor from the registry
93
+ */
94
+ async removeInvestor(investor, options) {
95
+ const investorAddress = normalizeAddress(investor);
96
+ try {
97
+ const tx = await retry(async () => {
98
+ const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.removeInvestor.estimateGas(investorAddress));
99
+ return this._contract.removeInvestor(investorAddress, { gasLimit });
100
+ }, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
101
+ const receipt = await tx.wait();
102
+ const events = parseEvents(receipt, this._contract.interface);
103
+ return createTransactionResult(receipt, events);
104
+ }
105
+ catch (error) {
106
+ throw parseContractError(error, this.address, 'removeInvestor');
107
+ }
108
+ }
109
+ /**
110
+ * Batch add investors
111
+ */
112
+ async batchAddInvestors(investors, options) {
113
+ const addresses = investors.map((i) => normalizeAddress(i.address));
114
+ const tiers = investors.map((i) => i.tier);
115
+ const expiries = investors.map((i) => dateToTimestamp(i.expiryDate));
116
+ const hashes = investors.map((i) => i.identityHash);
117
+ try {
118
+ const tx = await retry(async () => {
119
+ const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.batchAddInvestors.estimateGas(addresses, tiers, expiries, hashes));
120
+ return this._contract.batchAddInvestors(addresses, tiers, expiries, hashes, { gasLimit });
121
+ }, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
122
+ const receipt = await tx.wait();
123
+ const events = parseEvents(receipt, this._contract.interface);
124
+ return createTransactionResult(receipt, events);
125
+ }
126
+ catch (error) {
127
+ throw parseContractError(error, this.address, 'batchAddInvestors');
128
+ }
129
+ }
130
+ /*//////////////////////////////////////////////////////////////
131
+ EVENT LISTENERS
132
+ //////////////////////////////////////////////////////////////*/
133
+ /**
134
+ * Listen for InvestorVerified events
135
+ */
136
+ onInvestorVerified(callback) {
137
+ const listener = (investor, tier, expiry) => {
138
+ callback(investor, tier, expiry);
139
+ };
140
+ this._contract.on('InvestorVerified', listener);
141
+ return () => this._contract.off('InvestorVerified', listener);
142
+ }
143
+ /**
144
+ * Listen for InvestorRemoved events
145
+ */
146
+ onInvestorRemoved(callback) {
147
+ const listener = (investor) => callback(investor);
148
+ this._contract.on('InvestorRemoved', listener);
149
+ return () => this._contract.off('InvestorRemoved', listener);
150
+ }
151
+ /**
152
+ * Listen for InvestorUpdated events
153
+ */
154
+ onInvestorUpdated(callback) {
155
+ const listener = (investor, newTier, newExpiry) => {
156
+ callback(investor, newTier, newExpiry);
157
+ };
158
+ this._contract.on('InvestorUpdated', listener);
159
+ return () => this._contract.off('InvestorUpdated', listener);
160
+ }
161
+ }
162
+ /**
163
+ * Module for KYC operations
164
+ */
165
+ export class KYCModule {
166
+ _provider;
167
+ _signer;
168
+ _retries;
169
+ _retryDelay;
170
+ _kycProvider = null;
171
+ constructor(provider, signer, retries, retryDelay) {
172
+ this._provider = provider;
173
+ this._signer = signer;
174
+ this._retries = retries;
175
+ this._retryDelay = retryDelay;
176
+ }
177
+ /**
178
+ * Connect to an existing KYC registry
179
+ */
180
+ connect(address) {
181
+ if (!isValidAddress(address)) {
182
+ throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid registry address: ${address}`);
183
+ }
184
+ return new KYCRegistryInstance(address, this._provider, this._signer, this._retries, this._retryDelay);
185
+ }
186
+ /**
187
+ * Set the KYC provider
188
+ */
189
+ setProvider(provider) {
190
+ if (typeof provider === 'string') {
191
+ // Create stub provider for built-in providers
192
+ this._kycProvider = this._createBuiltInProvider(provider);
193
+ }
194
+ else {
195
+ this._kycProvider = provider;
196
+ }
197
+ }
198
+ /**
199
+ * Get the current KYC provider
200
+ */
201
+ get provider() {
202
+ return this._kycProvider;
203
+ }
204
+ /**
205
+ * Initiate verification for an investor
206
+ */
207
+ async verifyInvestor(investorAddress, options) {
208
+ if (!this._kycProvider) {
209
+ throw new RWAError(ErrorCode.PROVIDER_NOT_CONFIGURED, 'KYC provider not configured. Call setProvider() first.');
210
+ }
211
+ return this._kycProvider.initiateVerification(investorAddress, options);
212
+ }
213
+ /**
214
+ * Check accreditation status
215
+ */
216
+ async checkAccreditation(registryAddress, investorAddress) {
217
+ const registry = this.connect(registryAddress);
218
+ const info = await registry.getInvestorInfo(investorAddress);
219
+ return info.tier;
220
+ }
221
+ /**
222
+ * Update registry with verification result
223
+ */
224
+ async updateRegistry(registryAddress, investorAddress, result) {
225
+ const registry = this.connect(registryAddress);
226
+ return registry.addInvestor(investorAddress, result.tier, result.expiryDate, result.identityHash);
227
+ }
228
+ /**
229
+ * Batch update registry with multiple verification results
230
+ */
231
+ async batchUpdateRegistry(registryAddress, results) {
232
+ const registry = this.connect(registryAddress);
233
+ const investors = results.map((r) => ({
234
+ address: r.address,
235
+ tier: r.result.tier,
236
+ expiryDate: r.result.expiryDate,
237
+ identityHash: r.result.identityHash,
238
+ }));
239
+ return registry.batchAddInvestors(investors);
240
+ }
241
+ /**
242
+ * Generate identity hash from data
243
+ */
244
+ generateIdentityHash(data) {
245
+ return hashIdentityData(data);
246
+ }
247
+ /**
248
+ * Create a built-in provider stub
249
+ */
250
+ _createBuiltInProvider(name) {
251
+ return {
252
+ name,
253
+ initiateVerification: async (investorAddress) => {
254
+ // Stub implementation - in production, this would call the actual provider API
255
+ return {
256
+ sessionId: `${name}-${Date.now()}-${investorAddress.slice(2, 10)}`,
257
+ provider: name,
258
+ status: 'pending',
259
+ redirectUrl: `https://${name}.com/verify?session=${Date.now()}`,
260
+ };
261
+ },
262
+ checkStatus: async () => {
263
+ // Stub implementation
264
+ return 'pending';
265
+ },
266
+ getVerificationResult: async () => {
267
+ // Stub implementation
268
+ throw new RWAError(ErrorCode.PROVIDER_NOT_CONFIGURED, `${name} provider integration requires API credentials. Configure the provider with your API keys.`);
269
+ },
270
+ };
271
+ }
272
+ }
273
+ //# sourceMappingURL=kyc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kyc.js","sourceRoot":"","sources":["../../../src/modules/kyc.ts"],"names":[],"mappings":"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"}