@koralabs/kora-labs-common 2.2.0 → 2.3.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.
- package/lib/handles/buildMetadata.d.ts +6 -0
- package/lib/handles/buildMetadata.js +52 -0
- package/lib/handles/buildMetadata.test.d.ts +1 -0
- package/lib/handles/buildMetadata.test.js +75 -0
- package/lib/handles/utils.d.ts +2 -0
- package/lib/handles/utils.js +21 -0
- package/lib/handles/validation.js +1 -1
- package/lib/handles/validation.test.d.ts +1 -0
- package/lib/handles/validation.test.js +16 -0
- package/lib/index.d.ts +9 -7
- package/lib/index.js +4 -1
- package/package.json +1 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildMetadata = void 0;
|
|
4
|
+
const interfaces_1 = require("./interfaces");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const buildCharacters = (name) => {
|
|
7
|
+
const characters = [];
|
|
8
|
+
if (/[a-z]+/.test(name)) {
|
|
9
|
+
characters.push('letters');
|
|
10
|
+
}
|
|
11
|
+
if (/[0-9]+/.test(name)) {
|
|
12
|
+
characters.push('numbers');
|
|
13
|
+
}
|
|
14
|
+
if (/[_\-.]+/.test(name)) {
|
|
15
|
+
characters.push('special');
|
|
16
|
+
}
|
|
17
|
+
return characters.join(',');
|
|
18
|
+
};
|
|
19
|
+
const buildNumericModifiers = (name) => {
|
|
20
|
+
const modifiers = [];
|
|
21
|
+
if (/^-?[0-9]\d*(\.\d+)?$/.test(name)) {
|
|
22
|
+
if (name.startsWith('-')) {
|
|
23
|
+
modifiers.push('negative');
|
|
24
|
+
}
|
|
25
|
+
if (name.includes('.')) {
|
|
26
|
+
modifiers.push('decimal');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return modifiers.join(',');
|
|
30
|
+
};
|
|
31
|
+
const buildMetadata = ({ handleName, cid, ogNumber }) => {
|
|
32
|
+
const isSubHandle = handleName.includes('@');
|
|
33
|
+
const [subHandleName, rootHandleName] = handleName.split('@');
|
|
34
|
+
let metadata = {
|
|
35
|
+
name: `$${handleName}`,
|
|
36
|
+
image: `ipfs://${cid}`,
|
|
37
|
+
mediaType: 'image/jpeg',
|
|
38
|
+
og: isSubHandle ? 0 : ogNumber ? 1 : 0,
|
|
39
|
+
og_number: isSubHandle ? 0 : ogNumber !== null && ogNumber !== void 0 ? ogNumber : 0,
|
|
40
|
+
rarity: (0, utils_1.getRarity)(rootHandleName !== null && rootHandleName !== void 0 ? rootHandleName : handleName),
|
|
41
|
+
length: handleName.length,
|
|
42
|
+
characters: buildCharacters(rootHandleName !== null && rootHandleName !== void 0 ? rootHandleName : handleName),
|
|
43
|
+
numeric_modifiers: buildNumericModifiers(rootHandleName !== null && rootHandleName !== void 0 ? rootHandleName : handleName),
|
|
44
|
+
handle_type: isSubHandle ? interfaces_1.HandleType.NFT_SUBHANDLE : interfaces_1.HandleType.HANDLE,
|
|
45
|
+
version: 1
|
|
46
|
+
};
|
|
47
|
+
if (isSubHandle) {
|
|
48
|
+
metadata = Object.assign(Object.assign({}, metadata), { sub_rarity: (0, utils_1.getRarity)(subHandleName), sub_length: subHandleName.length, sub_characters: buildCharacters(subHandleName), sub_numeric_modifiers: buildNumericModifiers(subHandleName) });
|
|
49
|
+
}
|
|
50
|
+
return metadata;
|
|
51
|
+
};
|
|
52
|
+
exports.buildMetadata = buildMetadata;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const buildMetadata_1 = require("./buildMetadata");
|
|
4
|
+
const interfaces_1 = require("./interfaces");
|
|
5
|
+
describe('buildMetadata', () => {
|
|
6
|
+
it('should build metadata', () => {
|
|
7
|
+
const input = {
|
|
8
|
+
handleName: 'test',
|
|
9
|
+
cid: 'cid123',
|
|
10
|
+
ogNumber: 1
|
|
11
|
+
};
|
|
12
|
+
const metadata = (0, buildMetadata_1.buildMetadata)(input);
|
|
13
|
+
expect(metadata).toEqual({
|
|
14
|
+
characters: 'letters',
|
|
15
|
+
handle_type: interfaces_1.HandleType.HANDLE,
|
|
16
|
+
image: `ipfs://${input.cid}`,
|
|
17
|
+
length: 4,
|
|
18
|
+
mediaType: 'image/jpeg',
|
|
19
|
+
name: '$' + input.handleName,
|
|
20
|
+
numeric_modifiers: '',
|
|
21
|
+
og: input.ogNumber ? 1 : 0,
|
|
22
|
+
og_number: input.ogNumber,
|
|
23
|
+
rarity: 'common',
|
|
24
|
+
version: 1
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
it('should build metadata for nft sub handle', () => {
|
|
28
|
+
const input = {
|
|
29
|
+
handleName: 'sub@handle',
|
|
30
|
+
cid: 'cid111'
|
|
31
|
+
};
|
|
32
|
+
const metadata = (0, buildMetadata_1.buildMetadata)(input);
|
|
33
|
+
expect(metadata).toEqual({
|
|
34
|
+
characters: 'letters',
|
|
35
|
+
handle_type: interfaces_1.HandleType.NFT_SUBHANDLE,
|
|
36
|
+
image: `ipfs://${input.cid}`,
|
|
37
|
+
length: 10,
|
|
38
|
+
mediaType: 'image/jpeg',
|
|
39
|
+
name: '$' + input.handleName,
|
|
40
|
+
numeric_modifiers: '',
|
|
41
|
+
og: 0,
|
|
42
|
+
og_number: 0,
|
|
43
|
+
rarity: 'common',
|
|
44
|
+
version: 1,
|
|
45
|
+
sub_characters: 'letters',
|
|
46
|
+
sub_length: 3,
|
|
47
|
+
sub_numeric_modifiers: '',
|
|
48
|
+
sub_rarity: interfaces_1.Rarity.rare
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
it('should build metadata for nft sub handle with numbers', () => {
|
|
52
|
+
const input = {
|
|
53
|
+
handleName: '...@-123',
|
|
54
|
+
cid: 'cid222'
|
|
55
|
+
};
|
|
56
|
+
const metadata = (0, buildMetadata_1.buildMetadata)(input);
|
|
57
|
+
expect(metadata).toEqual({
|
|
58
|
+
characters: 'numbers,special',
|
|
59
|
+
handle_type: interfaces_1.HandleType.NFT_SUBHANDLE,
|
|
60
|
+
image: `ipfs://${input.cid}`,
|
|
61
|
+
length: 8,
|
|
62
|
+
mediaType: 'image/jpeg',
|
|
63
|
+
name: '$' + input.handleName,
|
|
64
|
+
numeric_modifiers: 'negative',
|
|
65
|
+
og: 0,
|
|
66
|
+
og_number: 0,
|
|
67
|
+
rarity: 'common',
|
|
68
|
+
version: 1,
|
|
69
|
+
sub_characters: 'special',
|
|
70
|
+
sub_length: 3,
|
|
71
|
+
sub_numeric_modifiers: '',
|
|
72
|
+
sub_rarity: interfaces_1.Rarity.rare
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRarity = void 0;
|
|
4
|
+
const interfaces_1 = require("./interfaces");
|
|
5
|
+
const getRarity = (name) => {
|
|
6
|
+
const length = name.length;
|
|
7
|
+
if (1 === length) {
|
|
8
|
+
return interfaces_1.Rarity.legendary;
|
|
9
|
+
}
|
|
10
|
+
if (2 === length) {
|
|
11
|
+
return interfaces_1.Rarity.ultra_rare;
|
|
12
|
+
}
|
|
13
|
+
if (3 === length) {
|
|
14
|
+
return interfaces_1.Rarity.rare;
|
|
15
|
+
}
|
|
16
|
+
if (length > 3 && length < 8) {
|
|
17
|
+
return interfaces_1.Rarity.common;
|
|
18
|
+
}
|
|
19
|
+
return interfaces_1.Rarity.basic;
|
|
20
|
+
};
|
|
21
|
+
exports.getRarity = getRarity;
|
|
@@ -10,7 +10,7 @@ const checkHandlePattern = (handle, root) => {
|
|
|
10
10
|
message: constants_1.RESPONSE_UNAVAILABLE_LEGENDARY
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
if (!handle.match(constants_1.REGEX_SUB_HANDLE) && root ? handle.endsWith(`@${root}`) : true) {
|
|
13
|
+
if (!handle.match(constants_1.REGEX_SUB_HANDLE) && (root ? handle.endsWith(`@${root}`) : true)) {
|
|
14
14
|
return {
|
|
15
15
|
valid: false,
|
|
16
16
|
message: constants_1.RESPONSE_INVALID_HANDLE_FORMAT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const validation_1 = require("./validation");
|
|
4
|
+
describe('validation tests', () => {
|
|
5
|
+
it('should return true', () => {
|
|
6
|
+
const result = (0, validation_1.checkHandlePattern)('...');
|
|
7
|
+
expect(result).toEqual({ message: 'Yay! This handle is available.', valid: true });
|
|
8
|
+
});
|
|
9
|
+
it('should return false', () => {
|
|
10
|
+
const result = (0, validation_1.checkHandlePattern)('***');
|
|
11
|
+
expect(result).toEqual({
|
|
12
|
+
message: 'Invalid handle. Only a-z, 0-9, dash (-), underscore (_), and period (.) are allowed.',
|
|
13
|
+
valid: false
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
});
|
package/lib/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
export { Logger, LogCategory } from
|
|
2
|
-
export { Environment, ComputeEnvironment } from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export { checkHandlePattern } from
|
|
6
|
-
export * from
|
|
7
|
-
export { ProtectedWords } from
|
|
1
|
+
export { Logger, LogCategory } from './logger';
|
|
2
|
+
export { Environment, ComputeEnvironment } from './environment';
|
|
3
|
+
export * from './handles/interfaces';
|
|
4
|
+
export * from './handles/constants';
|
|
5
|
+
export { checkHandlePattern } from './handles/validation';
|
|
6
|
+
export * from './utils';
|
|
7
|
+
export { ProtectedWords } from './protectedWords';
|
|
8
|
+
export { buildMetadata } from './handles/buildMetadata';
|
|
9
|
+
export * from './handles/utils';
|
package/lib/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.ProtectedWords = exports.checkHandlePattern = exports.ComputeEnvironment = exports.Environment = exports.LogCategory = exports.Logger = void 0;
|
|
17
|
+
exports.buildMetadata = exports.ProtectedWords = exports.checkHandlePattern = exports.ComputeEnvironment = exports.Environment = exports.LogCategory = exports.Logger = void 0;
|
|
18
18
|
var logger_1 = require("./logger");
|
|
19
19
|
Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_1.Logger; } });
|
|
20
20
|
Object.defineProperty(exports, "LogCategory", { enumerable: true, get: function () { return logger_1.LogCategory; } });
|
|
@@ -28,3 +28,6 @@ Object.defineProperty(exports, "checkHandlePattern", { enumerable: true, get: fu
|
|
|
28
28
|
__exportStar(require("./utils"), exports);
|
|
29
29
|
var protectedWords_1 = require("./protectedWords");
|
|
30
30
|
Object.defineProperty(exports, "ProtectedWords", { enumerable: true, get: function () { return protectedWords_1.ProtectedWords; } });
|
|
31
|
+
var buildMetadata_1 = require("./handles/buildMetadata");
|
|
32
|
+
Object.defineProperty(exports, "buildMetadata", { enumerable: true, get: function () { return buildMetadata_1.buildMetadata; } });
|
|
33
|
+
__exportStar(require("./handles/utils"), exports);
|