Skip to content

Commit 51702db

Browse files
authored
fix: add starkid improvements (#1301)
* fix: add starkid improvements * fix: test
1 parent 8fb2193 commit 51702db

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

__tests__/account.starknetId.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ describe('deploy and test Wallet', () => {
8585
expect(hexToDecimalString(address)).toEqual(hexToDecimalString(account.address));
8686
});
8787

88+
test('Should throw error when invalid stark domain is provided', async () => {
89+
await expect(account.getAddressFromStarkName('invalid_domain', namingAddress)).rejects.toThrow(
90+
'Invalid domain, must be a valid .stark domain'
91+
);
92+
});
93+
8894
test('Get the account from a stark name of the account (using starknet.id)', async () => {
8995
const name = await account.getStarkName(undefined, namingAddress);
9096
expect(name).toEqual('fricoben.stark');

src/provider/extensions/starknetId.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
getStarknetIdPfpContract,
1313
getStarknetIdPopContract,
1414
getStarknetIdVerifierContract,
15+
isStarkDomain,
1516
useDecoded,
1617
useEncoded,
1718
} from '../../utils/starknetId';
@@ -97,11 +98,17 @@ export class StarknetId {
9798
name: string,
9899
StarknetIdContract?: string
99100
): Promise<string> {
101+
const starkName = name.endsWith('.stark') ? name : `${name}.stark`;
102+
103+
if (!isStarkDomain(starkName)) {
104+
throw new Error('Invalid domain, must be a valid .stark domain');
105+
}
106+
100107
const chainId = await provider.getChainId();
101108
const contract = StarknetIdContract ?? getStarknetIdContract(chainId);
102109

103110
try {
104-
const encodedDomain = name
111+
const encodedDomain = starkName
105112
.replace('.stark', '')
106113
.split('.')
107114
.map((part) => useEncoded(part).toString(10));

src/utils/starknetId.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,3 +393,21 @@ export function dynamicCallData(
393393
ArrayReference: arrayReference ? tuple(arrayReference[0], arrayReference[1]) : undefined,
394394
});
395395
}
396+
397+
/**
398+
* Check if a given string is a valid Starknet.id domain.
399+
*
400+
* @param {string} domain - The domain string to validate.
401+
* @returns {boolean} - True if the domain is a valid Starknet.id domain, false otherwise.
402+
* @example
403+
* ```typescript
404+
* const result = starknetId.isStarkDomain("example.stark");
405+
* // result = true
406+
*
407+
* const result2 = starknetId.isStarkDomain("invalid-domain");
408+
* // result2 = false
409+
* ```
410+
*/
411+
export function isStarkDomain(domain: string): boolean {
412+
return /^(?:[a-z0-9-]{1,48}(?:[a-z0-9-]{1,48}[a-z0-9-])?\.)*[a-z0-9-]{1,48}\.stark$/.test(domain);
413+
}

0 commit comments

Comments
 (0)