openvibers/openvibe.inventory Commits
fx_vegas (Josh Vegas): a one-of-a-kind name effect, issued by Live (#66)
Changes
@@@ -196,6 +196,21 @@"css_class": "name-fx-divine"}},++ {++ "alias": "fx_vegas",++ "kind": "live.name_effect",++ "name": "Josh Vegas",++ "description": "Slot reels and casino lights. One of a kind: granted to its one holder, never sold or earned",++ "art": {++ "emoji": "🎰",++ "token": "name-fx-vegas"++ },++ "rarity": "legendary",++ "attributes": {++ "tier": 6,++ "css_class": "name-fx-vegas"++ }++ },{"alias": "px_sparkle","kind": "live.particle",@@@ -41,7 +41,8 @@ const PRIVATE = ['/auth/', '/api/'];const ws = await t.get('/workshop');assert.match(ws.text, /<meta name="robots" content="index, follow">/, 'and indexable');const items = [...r.text.matchAll(/<loc>https:\/\/inventory\.openvibe\.network\/items\/itd_/g)];-- assert.strictEqual(items.length, 70, `expected 70 item entries, got ${items.length}`);++ const expected = require('../server/data/live-definitions.json').definitions.length;++ assert.strictEqual(items.length, expected, `expected ${expected} item entries, got ${items.length}`);for (const p of ['/me', '/u/', '/api/']) assert.ok(!r.text.includes(`<loc>https://inventory.openvibe.network${p}`), `private path in sitemap: ${p}`);for (const p of ['/auth/login', '/api/v1/ping']) assert.ok(!r.text.includes(`<loc>https://inventory.openvibe.network${p}</loc>`), `${p} is not a public page`);const lastmods = [...r.text.matchAll(/<lastmod>([^<]+)<\/lastmod>/g)].map((m) => m[1]);@@@ -24,12 +24,12 @@ const { boot, check, done } = require('./helpers/boot');let granted;try {-- await check('boot registers Live\'s five kinds, the Workshop\'s badge and Live\'s 70 cosmetics, published, found by Live\'s ids', async () => {++ await check('boot registers Live\'s five kinds, the Workshop\'s badge and every one of Live\'s cosmetics, published, found by Live\'s ids', async () => {const kinds = (await api('/kinds')).json().kinds;assert.deepStrictEqual(kinds.map((k) => k.id), ['live.chat_tag', 'live.hat', 'live.name_effect', 'live.particle', 'live.voice', 'network.badge'], 'Live\'s five and the Workshop\'s badge');for (const k of kinds) valid('inventory.kind@1', k);const defs = (await api('/definitions?limit=500')).json().definitions;-- assert.strictEqual(defs.length, 70);++ assert.strictEqual(defs.length, require('../server/data/live-definitions.json').definitions.length, 'one definition per entry of the seed file (71 since fx_vegas, 2026-10-22)');for (const d of defs) valid('inventory.definition@1', d);rainbow = defs.find((d) => (d.aliases || []).includes('fx_rainbow'));crown = defs.find((d) => (d.aliases || []).includes('hat_crown'));
@@ -196,6 +196,21 @@
@@ -196,6 +196,21 @@
"css_class": "name-fx-divine"
"css_class": "name-fx-divine"
}
}
},
},
+ {
+ "alias": "fx_vegas",
+ "kind": "live.name_effect",
+ "name": "Josh Vegas",
+ "description": "Slot reels and casino lights. One of a kind: granted to its one holder, never sold or earned",
+ "art": {
+ "emoji": "🎰",
+ "token": "name-fx-vegas"
+ },
+ "rarity": "legendary",
+ "attributes": {
+ "tier": 6,
+ "css_class": "name-fx-vegas"
+ }
+ },
{
{
"alias": "px_sparkle",
"alias": "px_sparkle",
"kind": "live.particle",
"kind": "live.particle",
@@ -41,7 +41,8 @@ const PRIVATE = ['/auth/', '/api/'];
@@ -41,7 +41,8 @@ const PRIVATE = ['/auth/', '/api/'];
const ws = await t.get('/workshop');
const ws = await t.get('/workshop');
assert.match(ws.text, /<meta name="robots" content="index, follow">/, 'and indexable');
assert.match(ws.text, /<meta name="robots" content="index, follow">/, 'and indexable');
const items = [...r.text.matchAll(/<loc>https:\/\/inventory\.openvibe\.network\/items\/itd_/g)];
const items = [...r.text.matchAll(/<loc>https:\/\/inventory\.openvibe\.network\/items\/itd_/g)];
- assert.strictEqual(items.length, 70, `expected 70 item entries, got ${items.length}`);
+ const expected = require('../server/data/live-definitions.json').definitions.length;
+ assert.strictEqual(items.length, expected, `expected ${expected} item entries, got ${items.length}`);
for (const p of ['/me', '/u/', '/api/']) assert.ok(!r.text.includes(`<loc>https://inventory.openvibe.network${p}`), `private path in sitemap: ${p}`);
for (const p of ['/me', '/u/', '/api/']) assert.ok(!r.text.includes(`<loc>https://inventory.openvibe.network${p}`), `private path in sitemap: ${p}`);
for (const p of ['/auth/login', '/api/v1/ping']) assert.ok(!r.text.includes(`<loc>https://inventory.openvibe.network${p}</loc>`), `${p} is not a public page`);
for (const p of ['/auth/login', '/api/v1/ping']) assert.ok(!r.text.includes(`<loc>https://inventory.openvibe.network${p}</loc>`), `${p} is not a public page`);
const lastmods = [...r.text.matchAll(/<lastmod>([^<]+)<\/lastmod>/g)].map((m) => m[1]);
const lastmods = [...r.text.matchAll(/<lastmod>([^<]+)<\/lastmod>/g)].map((m) => m[1]);
@@ -24,12 +24,12 @@ const { boot, check, done } = require('./helpers/boot');
@@ -24,12 +24,12 @@ const { boot, check, done } = require('./helpers/boot');
let granted;
let granted;
try {
try {
- await check('boot registers Live\'s five kinds, the Workshop\'s badge and Live\'s 70 cosmetics, published, found by Live\'s ids', async () => {
+ await check('boot registers Live\'s five kinds, the Workshop\'s badge and every one of Live\'s cosmetics, published, found by Live\'s ids', async () => {
const kinds = (await api('/kinds')).json().kinds;
const kinds = (await api('/kinds')).json().kinds;
assert.deepStrictEqual(kinds.map((k) => k.id), ['live.chat_tag', 'live.hat', 'live.name_effect', 'live.particle', 'live.voice', 'network.badge'], 'Live\'s five and the Workshop\'s badge');
assert.deepStrictEqual(kinds.map((k) => k.id), ['live.chat_tag', 'live.hat', 'live.name_effect', 'live.particle', 'live.voice', 'network.badge'], 'Live\'s five and the Workshop\'s badge');
for (const k of kinds) valid('inventory.kind@1', k);
for (const k of kinds) valid('inventory.kind@1', k);
const defs = (await api('/definitions?limit=500')).json().definitions;
const defs = (await api('/definitions?limit=500')).json().definitions;
- assert.strictEqual(defs.length, 70);
+ assert.strictEqual(defs.length, require('../server/data/live-definitions.json').definitions.length, 'one definition per entry of the seed file (71 since fx_vegas, 2026-10-22)');
for (const d of defs) valid('inventory.definition@1', d);
for (const d of defs) valid('inventory.definition@1', d);
rainbow = defs.find((d) => (d.aliases || []).includes('fx_rainbow'));
rainbow = defs.find((d) => (d.aliases || []).includes('fx_rainbow'));
crown = defs.find((d) => (d.aliases || []).includes('hat_crown'));
crown = defs.find((d) => (d.aliases || []).includes('hat_crown'));