Skip to content

Commit

Permalink
feat: adjusted stld delimiter according to updated spec -> : => @
Browse files Browse the repository at this point in the history
  • Loading branch information
ohager committed Sep 1, 2023
1 parent a5c48c0 commit 939a693
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 30 deletions.
2 changes: 1 addition & 1 deletion packages/standards/src/src44/DescriptorDataBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export class DescriptorDataBuilder {
}

setAlias(a: string, tld?: string) {
this.data.raw.al = tld ? `${a}:${tld}` : a;
this.data.raw.al = tld ? `${a}@${tld}` : a;
return this;
}

Expand Down
6 changes: 3 additions & 3 deletions packages/standards/src/src44/__tests__/descriptorData.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const TestObjectAliasTld = {
'bg': {'QmUFc4dyX7TJn5dPxp8CrcDeedoV18owTBUWApYMuF6Koc': 'image/jpeg'},
'hp': 'https://bittrex.com',
'sr': '^[0-9a-fA-F]{24}$',
'al': 'somealias:mytld',
'al': 'somealias@mytld',
'xt': 'QmUFc4dyX7TJn5dPxp8CrcDeedoV18owTBUWApYMuF6Koc',
'sc': ['https://twitter.com/bittrex', 'https://twitter.com/bittrex2']
};
Expand Down Expand Up @@ -75,7 +75,7 @@ describe('descriptorData', () => {
const descriptor = DescriptorData.parse(JSON.stringify(TestObjectAliasTld));
expect(descriptor.get()).toEqual(
{
'alias': 'somealias:mytld',
'alias': 'somealias@mytld',
'avatar': {
'ipfsCid': 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR',
'mimeType': 'image/gif',
Expand Down Expand Up @@ -166,7 +166,7 @@ describe('descriptorData', () => {
'vs': 1,
'al': '@somealias',
}));
}).toThrow('[SRC44 Validation Error]: al must match /^\\w{1,100}(\\:[a-zA-Z0-9]{1,40})?$/ - Got @somealias');
}).toThrow('[SRC44 Validation Error]: al must match /^\\w{1,100}(@[a-zA-Z0-9]{1,40})?$/ - Got @somealias');
});

it('should throw exception if object is not valid - 2', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ describe('descriptorDataBuilder', () => {
.build();

expect(descriptorData.raw).toEqual({
'al': 'alias:mytld',
'al': 'alias@mytld',
'nm': 'Some name',
'vs': 1,
});
Expand Down
24 changes: 12 additions & 12 deletions packages/standards/src/src44/__tests__/descriptorDataClient.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {DescriptorDataBuilder} from '../DescriptorDataBuilder';
import {DescriptorDataClient} from '../DescriptorDataClient';

const MockDescriptor = {
'al': 'alias:tld',
'al': 'alias@tld',
'ac': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',
'av': {'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR': 'image/gif'},
Expand Down Expand Up @@ -60,7 +60,7 @@ describe('descriptorDataClient', () => {
const client = new DescriptorDataClient(MockLedger);
const descriptor = await client.getFromContract('1');
expect(descriptor).toEqual({
'alias': 'alias:tld',
'alias': 'alias@tld',
'account': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',
'avatar': {
Expand All @@ -76,7 +76,7 @@ describe('descriptorDataClient', () => {
'homePage': 'https://homepage.com',
'name': 'Some name',
'resolvedAlias': {
'alias': 'alias:tld',
'alias': 'alias@tld',
'account': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',
'avatar': {
Expand Down Expand Up @@ -115,7 +115,7 @@ describe('descriptorDataClient', () => {
const client = new DescriptorDataClient(MockLedger);
const descriptor = await client.getFromAsset('1');
expect(descriptor).toEqual({
'alias': 'alias:tld',
'alias': 'alias@tld',
'account': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',
'avatar': {
Expand All @@ -131,7 +131,7 @@ describe('descriptorDataClient', () => {
'homePage': 'https://homepage.com',
'name': 'Some name',
'resolvedAlias': {
'alias': 'alias:tld',
'alias': 'alias@tld',
'account': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',
'avatar': {
Expand Down Expand Up @@ -170,7 +170,7 @@ describe('descriptorDataClient', () => {
const client = new DescriptorDataClient(MockLedger);
const descriptor = await client.getFromAccount('1');
expect(descriptor).toEqual({
'alias': 'alias:tld',
'alias': 'alias@tld',
'account': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',

Expand All @@ -187,7 +187,7 @@ describe('descriptorDataClient', () => {
'homePage': 'https://homepage.com',
'name': 'Some name',
'resolvedAlias': {
'alias': 'alias:tld',
'alias': 'alias@tld',
'account': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',

Expand Down Expand Up @@ -315,7 +315,7 @@ describe('descriptorDataClient', () => {
const client = new DescriptorDataClient(MockLedger);
const descriptor = await client.getFromAlias('alias');
expect(descriptor).toEqual({
'alias': 'alias:tld',
'alias': 'alias@tld',
'account': '895212263565386113',
'id': 'dc1de06b-a2a2-4a6e-b3e1-a5d97835667d',
'avatar': {
Expand Down Expand Up @@ -346,7 +346,7 @@ describe('descriptorDataClient', () => {
const client = new DescriptorDataClient(MockLedger);
const account = await client.getAccountByAlias('alias');
expect(account).toEqual({
'description': '{"al":"alias:tld","ac":"895212263565386113","id":"dc1de06b-a2a2-4a6e-b3e1-a5d97835667d","av":{"QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR":"image/gif"},"bg":{"QmUFc4dyX7TJn5dPxp8CrcDeedoV18owTBUWApYMuF6Koc":"image/jpeg"},"ds":"description","hp":"https://homepage.com","nm":"Some name","sc":["https://somelink.com"],"sr":"^[a-z]{3}$","tp":"oth","vs":1,"xc":"value","xt":"QmUFc4dyX7TJn5dPxp8CrcDeedoV18owTBUWApYMuF6Koc"}',
'description': '{"al":"alias@tld","ac":"895212263565386113","id":"dc1de06b-a2a2-4a6e-b3e1-a5d97835667d","av":{"QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR":"image/gif"},"bg":{"QmUFc4dyX7TJn5dPxp8CrcDeedoV18owTBUWApYMuF6Koc":"image/jpeg"},"ds":"description","hp":"https://homepage.com","nm":"Some name","sc":["https://somelink.com"],"sr":"^[a-z]{3}$","tp":"oth","vs":1,"xc":"value","xt":"QmUFc4dyX7TJn5dPxp8CrcDeedoV18owTBUWApYMuF6Koc"}',
'name': 'Account Name',
});
});
Expand All @@ -372,7 +372,7 @@ describe('descriptorDataClient', () => {
expect(brands).toHaveLength(1);
expect(brands[0]).toEqual({
'account': '895212263565386113',
'alias': 'alias:tld',
'alias': 'alias@tld',
'avatar': {
'ipfsCid': 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR',
'mimeType': 'image/gif'
Expand Down Expand Up @@ -423,7 +423,7 @@ describe('descriptorDataClient', () => {
expect(brands).toHaveLength(1);
expect(brands[0]).toEqual({
'account': '895212263565386113',
'alias': 'alias:tld',
'alias': 'alias@tld',
'avatar': {
'ipfsCid': 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR',
'mimeType': 'image/gif'
Expand Down Expand Up @@ -502,7 +502,7 @@ describe('descriptorDataClient', () => {
expect(brands).toHaveLength(1);
expect(brands[0]).toEqual({
'account': '895212263565386113',
'alias': 'alias:tld',
'alias': 'alias@tld',
'avatar': {
'ipfsCid': 'QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR',
'mimeType': 'image/gif'
Expand Down
6 changes: 3 additions & 3 deletions packages/standards/src/src44/__tests__/validateSRC44.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ describe('validateSRC44', () => {
validateSRC44({
vs: 1,
nm: 'name',
al: 'some_alias:mytld'
al: 'some_alias@mytld'
});
});
it('throws error for wrong alias', () => {
Expand All @@ -202,7 +202,7 @@ describe('validateSRC44', () => {
nm: 'name',
al: '@invalid alias'
});
}).toThrow('[SRC44 Validation Error]: al must match /^\\w{1,100}(\\:[a-zA-Z0-9]{1,40})?$/ - Got @invalid alias');
}).toThrow('[SRC44 Validation Error]: al must match /^\\w{1,100}(@[a-zA-Z0-9]{1,40})?$/ - Got @invalid alias');
});
it('throws error for beign too large', () => {
expect(() => {
Expand All @@ -211,7 +211,7 @@ describe('validateSRC44', () => {
nm: 'name',
al: 'alias'.repeat(30)
});
}).toThrow('al must match /^\\w{1,100}(\\:[a-zA-Z0-9]{1,40})?$/');
}).toThrow('al must match /^\\w{1,100}(@[a-zA-Z0-9]{1,40})?$/');
});
});

Expand Down
4 changes: 2 additions & 2 deletions packages/standards/src/src44/validateSRC44.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ export function validateSRC44(json: SRC44Descriptor, strict = true) {
throw new Error(`id must be at maximum ${IdLength} bytes - Got ${json.id.length}`);
}

if (json.al && !/^\w{1,100}(\:[a-zA-Z0-9]{1,40})?$/.test(json.al)) {
throw new Error(`al must match /^\\w{1,100}(\\:[a-zA-Z0-9]{1,40})?$/ - Got ${json.al}`);
if (json.al && !/^\w{1,100}(@[a-zA-Z0-9]{1,40})?$/.test(json.al)) {
throw new Error(`al must match /^\\w{1,100}(@[a-zA-Z0-9]{1,40})?$/ - Got ${json.al}`);
}

if (json.ac && !/^\d{10,22}$/.test(json.ac)) {
Expand Down
4 changes: 2 additions & 2 deletions packages/standards/src/src47/URIResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export class URIResolver {
}

// @ts-ignore
const {schema, body, tld, path} = result.groups;
const {schema, body, tld = 'signum', path} = result.groups;

const domains = body.replace('$', '').split('.');

Expand Down Expand Up @@ -175,7 +175,7 @@ export class URIResolver {
let stopSearch = !descriptor.alias;
let iterationCount = 0;
while (!stopSearch) {
const [aliasName, topleveldomain] = descriptor.alias.split(':');
const [aliasName, topleveldomain] = descriptor.alias.split('@');
alias = await this.ledger.alias.getAliasByName(aliasName, topleveldomain);
descriptor = DescriptorData.parse(alias.aliasURI);
if (descriptor.name === subdomain) {
Expand Down
39 changes: 33 additions & 6 deletions packages/standards/src/src47/__tests__/URIResolver.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ const TestAliases = {
},
// single hop
'johndoe1': {
aliasURI: JSON.stringify({vs: 1, hp: 'https://johndoe.com', al: 'jd00001:web3'})
aliasURI: JSON.stringify({vs: 1, hp: 'https://johndoe.com', al: 'jd00001@web3'})
},
'johndoe1@crypto': {
aliasURI: JSON.stringify({vs: 1, hp: 'https://johndoe.com', al: 'jd00001:web3'})
aliasURI: JSON.stringify({vs: 1, hp: 'https://johndoe.com', al: 'jd00001@web3'})
},
'jd00001@web3': {
aliasURI: JSON.stringify({vs: 1, nm: 'arts', hp: 'https://signumart.io/profile/123456'})
aliasURI: JSON.stringify({vs: 1, nm: 'arts', ac: '1234567891011121314', hp: 'https://signumart.io/profile/123456'})
},
// multi hop
'johndoe2': {
Expand Down Expand Up @@ -74,7 +74,7 @@ const TestAliases = {
export const MockLedger = {
alias: {
getAliasByName: (name: string, tld?: string) => {
const alias = tld ? TestAliases[`${name}@${tld}`] : TestAliases[name];
const alias = tld && tld !== 'signum' ? TestAliases[`${name}@${tld}`] : TestAliases[name];
// usually it returns an HttpError, but we mock that here
return !alias ? Promise.reject('Unknown alias') : Promise.resolve(alias);
}
Expand All @@ -95,6 +95,8 @@ describe('URIResolver', () => {
expect(url).toEqual('https://johndoe.com');
url = await resolver.resolve('https://johndoe.web3');
expect(url).toEqual('https://johndoe.com');
url = await resolver.resolve('https://johndoe');
expect(url).toEqual('https://johndoe.com');
// and all the other domains
});
it('should resolve by TLDs using `@`', async () => {
Expand All @@ -111,7 +113,9 @@ describe('URIResolver', () => {
it('should resolve deeply', async () => {
// @ts-ignore
const resolver = new URIResolver(MockLedger);
const accountId = await resolver.resolve('http://johndoe.signum/ac');
let accountId = await resolver.resolve('http://johndoe.signum/ac');
expect(accountId).toEqual('1234567891011121314');
accountId = await resolver.resolve('http://johndoe/ac');
expect(accountId).toEqual('1234567891011121314');
const custom = await resolver.resolve('https://johndoe.signum/x-custom');
expect(custom).toEqual({foo: 'bar'});
Expand All @@ -136,8 +140,11 @@ describe('URIResolver', () => {
it('should resolve deeply', async () => {
// @ts-ignore
const resolver = new URIResolver(MockLedger);
const accountId = await resolver.resolve('https://johndoe.signum/ac');
let accountId = await resolver.resolve('https://johndoe.signum/ac');
expect(accountId).toEqual('1234567891011121314');
accountId = await resolver.resolve('https://arts.johndoe1/ac');
expect(accountId).toEqual('1234567891011121314');

let custom = await resolver.resolve('http://social.johndoe2/x-custom');
expect(custom).toEqual({foo: 'bar'});
custom = await resolver.resolve('http://social.johndoe2@signum/x-custom');
Expand Down Expand Up @@ -286,6 +293,26 @@ describe('URIResolver', () => {
tld: 'customtld'
});
});
it('should resolve without default TLD "signum"', () => {
expect(URIResolver.parseURI('http://johndoe')).toEqual({
schema: 'http',
domain: 'johndoe',
tld: 'signum',
});
expect(URIResolver.parseURI('http://sub.johndoe')).toEqual({
schema: 'http',
domain: 'johndoe',
subdomain: 'sub',
tld: 'signum'
});
expect(URIResolver.parseURI('http://sub.johndoe/ac')).toEqual({
schema: 'http',
domain: 'johndoe',
subdomain: 'sub',
path: 'ac',
tld: 'signum'
});
});

it('should throw on unsupported scheme', () => {
expect(() => URIResolver.parseURI('mailto://sub.johndoe.web3')).toThrow('Invalid SRC47 URI: mailto://sub.johndoe@web3');
Expand Down

0 comments on commit 939a693

Please sign in to comment.