diff --git a/lib/classes/commands/GridCommands.ts b/lib/classes/commands/GridCommands.ts index abd404e..6b17ac7 100644 --- a/lib/classes/commands/GridCommands.ts +++ b/lib/classes/commands/GridCommands.ts @@ -251,6 +251,76 @@ export class GridCommands extends CommandsBase }); } + avatarName2KeyAndName(name: string): Promise<{avatarKey: UUID, avatarName: string}> + { + const check = name.split('.'); + if (check.length > 1) + { + name = check.join(' '); + } + else + { + name += ' resident'; + } + name = name.toLowerCase(); + + const queryID = UUID.random(); + return new Promise<{avatarKey: UUID, avatarName: string}>((resolve, reject) => + { + const aprm = new AvatarPickerRequestMessage(); + aprm.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID, + QueryID: queryID + }; + aprm.Data = { + Name: Utils.StringToBuffer(name) + }; + + this.circuit.sendMessage(aprm, PacketFlags.Reliable); + this.circuit.waitForMessage(Message.AvatarPickerReply, 10000, (apr: AvatarPickerReplyMessage): FilterResponse => + { + if (apr.AgentData.QueryID.toString() === queryID.toString()) + { + return FilterResponse.Finish; + } + else + { + return FilterResponse.NoMatch; + } + }).then((apr: AvatarPickerReplyMessage) => + { + let foundKey: UUID | undefined; + let foundName: string | undefined; + apr.Data.forEach((dataBlock) => + { + const resultName = (Utils.BufferToStringSimple(dataBlock.FirstName) + ' ' + + Utils.BufferToStringSimple(dataBlock.LastName)); + if (resultName.toLowerCase() === name) + { + foundKey = dataBlock.AvatarID; + foundName = resultName; + } + }); + + if (foundKey !== undefined && foundName !== undefined) + { + resolve({ + avatarName: foundName, + avatarKey: foundKey + }); + } + else + { + reject('Name not found') + } + }).catch((err) => + { + reject(err); + }); + }); + } + avatarName2Key(name: string): Promise { const check = name.split('.'); diff --git a/package-lock.json b/package-lock.json index d7569ec..7f40244 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@caspertech/node-metaverse", - "version": "0.5.1", + "version": "0.5.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -20,9 +20,9 @@ "dev": true }, "@types/caseless": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz", - "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", "dev": true }, "@types/events": { @@ -31,15 +31,6 @@ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", "dev": true }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", @@ -66,15 +57,28 @@ "integrity": "sha512-j6Sqt38ssdMKutXBUuAcmWF8QtHW1Fwz/mz4Y+Wd9mzpBiVFirjpNQf363hG5itkG+yGaD+oiLyb50HxJ36l9Q==" }, "@types/request": { - "version": "2.47.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.1.tgz", - "integrity": "sha512-TV3XLvDjQbIeVxJ1Z3oCTDk/KuYwwcNKVwz2YaT0F5u86Prgc4syDAp6P96rkTQQ4bIdh+VswQIC9zS6NjY7/g==", + "version": "2.48.3", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.3.tgz", + "integrity": "sha512-3Wo2jNYwqgXcIz/rrq18AdOZUQB8cQ34CXZo+LUwPJNpvRAL86+Kc2wwI8mqpz9Cr1V+enIox5v+WZhy/p3h8w==", "dev": true, "requires": { "@types/caseless": "*", - "@types/form-data": "*", "@types/node": "*", - "@types/tough-cookie": "*" + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + }, + "dependencies": { + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } } }, "@types/tape": { @@ -92,9 +96,9 @@ "dev": true }, "@types/tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", + "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", "dev": true }, "@types/uuid": { diff --git a/package.json b/package.json index 9393b8e..600f79d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@caspertech/node-metaverse", - "version": "0.5.2", + "version": "0.5.4", "description": "A node.js interface for Second Life.", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -23,16 +23,6 @@ "url": "git+https://github.com/CasperTech/node-metaverse.git" }, "devDependencies": { - "@types/micromatch": "^3.1.0", - "@types/mocha": "^5.2.5", - "@types/node": "^10.14.19", - "@types/request": "^2.47.1", - "@types/tiny-async-pool": "^1.0.0", - "@types/uuid": "^3.4.4", - "@types/validator": "^9.4.2", - "@types/xml": "^1.0.2", - "@types/xml2js": "^0.4.3", - "@types/xmlrpc": "^1.3.5", "mocha": "^5.2.0", "source-map-support": "^0.5.9", "ts-node": "^7.0.1", @@ -43,6 +33,16 @@ "dependencies": { "@caspertech/llsd": "^1.0.0", "@types/long": "^4.0.0", + "@types/request": "^2.48.3", + "@types/micromatch": "^3.1.0", + "@types/mocha": "^5.2.5", + "@types/node": "^10.14.19", + "@types/tiny-async-pool": "^1.0.0", + "@types/uuid": "^3.4.4", + "@types/validator": "^9.4.2", + "@types/xml": "^1.0.2", + "@types/xml2js": "^0.4.3", + "@types/xmlrpc": "^1.3.5", "ipaddr.js": "^1.8.1", "long": "^4.0.0", "micromatch": "^3.1.10",