Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/solitarju/vrchat-api-library
🔥🔥 Your All-in-One Node.js API Solution for Seamless Interaction with VRChat's REST API and real-time events using Websockets! ✅✅
https://github.com/solitarju/vrchat-api-library
api api-wrapper authentication client http integration javascript library nodejs rest vrchat websocket
Last synced: 2 months ago
JSON representation
🔥🔥 Your All-in-One Node.js API Solution for Seamless Interaction with VRChat's REST API and real-time events using Websockets! ✅✅
- Host: GitHub
- URL: https://github.com/solitarju/vrchat-api-library
- Owner: Solitarju
- License: mit
- Created: 2023-04-09T17:33:09.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-03-12T15:57:46.000Z (10 months ago)
- Last Synced: 2024-04-14T06:47:05.265Z (8 months ago)
- Topics: api, api-wrapper, authentication, client, http, integration, javascript, library, nodejs, rest, vrchat, websocket
- Language: JavaScript
- Homepage:
- Size: 215 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# VRChat API Library
VRChat API Library is a Node.js library that allows easy integration of the VRChat API into your applications.
It provides real-time event handling through WebSockets, all endpoints and API sections are built according to the **community driven** [VRChat API Docs](https://vrchatapi.github.io/docs/api/).
Feel free to reach out on the Discord server below for support or inquiries.
All dates in this document are formatted as YYYY-MM-DD (ISO 8601).
## Table of Contents
- [Disclaimer](#disclaimer)
- [Installation](#installation)
- [Getting Started](#getting-started)
- [Classes/API Coverage](#classesapi-coverage)
- [License Change](#license-change-2024-03-12--v200)
- [TODO](#todo)
- [Changelog](#changelog)## Disclaimer
**Official Disclaimer from VRChat (Tupper):**
Use of the VRChat API using applications other than the approved methods (website, VRChat application) is not officially supported. When using the API, please adhere to the following guidelines:- We do not provide documentation or support for the API.
- Do not make queries to the API more than once per 60 seconds.
- Abuse of the API may result in account termination.
- Access to API endpoints may break at any given time, with no warning.## Introduction
VRChat API Library is a Node.js module that streamlines integration with the VRChat platform.
It allows you to interact with VRChat's APIs, enabling essential features and offering QOL utilities & improvements, such as:
1. Setting & retrieving user information.
2. Real-time events.
3. Custom implemented user-online / user-offline events.
4. QOL duplicate event prevention.Each API section and endpoints are mostly built in reference to the **community-driven** [**VRChat API Docs**](https://vrchatapi.github.io/docs/api/), with exception to the real-time EventsApi.
## Installation
Install the library via **NPM**:
```shell
npm install vrchat-api-library
```## Getting Started
1. Install the library using the [above command](#installation).
2. Include the necessary classes in your application.```javascript
const { VRChat, Enums } = require('vrchat-api-library');
```3. Authenticate your application using a VRChat account and start using the library.
```javascript
const { VRChat, Enums } = require('vrchat-api-library');
const { stdin, stdout } = require('process');
const readline = require('readline');const vrchat = new VRChat();
// Promise based console input function.
// Any promise-based input will work assuming it returns the two-factor authentication code.
function Prompt(query) {
const question = readline.createInterface({
input: stdin,
output: stdout,
});return new Promise(resolve => question.question(query, res => {
question.close();
resolve(res);
}));
}// Main asynchronous method.
const asyncMethod = async () => {
const auth = await vrchat.Authenticate({
username: "username",
password: "password",
authCookie: "",
twoFactorAuth: ""
}, async (type) => {
return await Prompt(`Please input ${type} two factor code:\n`);
});console.log(auth); // Logs authentication information as a JSON object to console.
// Method ignoring errors.
const friendsArray = await vrchat.FriendsApi.ListFriends({ n: 100, offline: true }); // Get an Array of LimitedUser objects as documented on the Community-driven API Docs.
for(let i = 0; i < friendsArray.length; i++) {
console.log(friendsArray[i].displayName); // Log display names of all offline friends to console returned from the API function call above.
}// Method catching & handling errors. (I recommend catching & handling your errors, otherwise you could run into catastrophic errors that break your applications at runtime)
// Get an Array of LimitedUser objects as documented on the Community-driven API Docs and only log names if there was no error, otherwise log the error.
await vrchat.FriendsApi.ListFriends({ n: 100, offline: true }).then(res => {
for(let i = 0; i < res.length; i++) {
console.log(res[i].displayName); // Log display names of all offline friends to console returned from the API function call above.
}
}).catch(err => console.log(err));// Basic EventsApi usage, making use of the VRChat class.
vrchat.EventsApi.Connect();// Usage of custom undocumented event type, this isn't valid, just for demonstration purposes.
// Upon getting an undocumented event type, the library will warn you in the console and ask you to report it. (Please do this!!)
vrchat.EventsApi.on("undocumented event", (data) => {
console.log("Undocumented Event");
console.log(data);
});vrchat.EventsApi.on(Enums.EventType.error, (err) => {
console.log("Error: " + err.message);
});vrchat.EventsApi.on(Enums.EventType.userOnline, (data) => {
console.log("User online");
console.log(data);
});vrchat.EventsApi.on(Enums.EventType.userOffline, (data) => {
console.log("User offline");
console.log(data);
});// vrchat.EventsApi.Disconnect(); -- Optionally disconnect from the API
}asyncMethod(); // run asynchronous code from a synchronous context.
```## **Classes/API Coverage**
Here's a comprehensive overview of the classes and APIs available in the library:
All APIs can also be found at the **community-driven** [VRChat API Docs](https://vrchatapi.github.io/docs/api/), with exception to the EventsApi.All API's excluding the VRChat class, EventsApi & AuthenticationApi now use constructed response objects as documented in the community-driven VRChat Docs, such as the `GetOwnAvatar` function returning a constructed `Avatar` object.
### **VRChat**
- **Description**: The VRChat class is designed to simplify authentication and automatically manage the library for you. It's the central component that connects you to each of VRChat's APIs.
### **EventsApi**
- **Description**: The EventsApi class offers a highly stable WebSocket connection for real-time events related to users and friends.
- **Features**:
- Custom "user-online" and "user-offline" events to monitor user presence.
- Event type modularity, allowing undocumented event types to work flawlessly.
- Smart event de-duplication, making sure identical events don't repeat/spam while letting authentic & valid events pass.### **AuthenticationApi**
- **Description**: The AuthenticationApi class focuses on handling authentication and user-related features, allowing you to securely log in and interact with VRChat's APIs.
### **AvatarsApi**
- **Description**: The AvatarsApi class enables interactions with user avatars, providing functionalities to work with avatars effectively.
### **EconomyApi**
- **Description**: The EconomyApi class is responsible for managing economic aspects in VRChat, such as transactions and VRC+ subscriptions.
### **FavouritesApi**
- **Description**: The FavouritesApi class offers features related to managing your favourited content in VRChat, including friends, worlds and avatars.
### **FilesApi**
- **Description**: The FilesApi class allows you to interact with files and their associated operations within VRChat.
### **FriendsApi**
- **Description**: The FriendsApi class provides methods to manage your friends list, retrieve information about friends, and monitor friend-related activities.
### **GroupsApi**
- **Description**: The GroupsApi class allows you to create and manage groups in VRChat, enabling collaboration and social interaction within these groups.
### **InvitesApi**
- **Description**: The InvitesApi class handles the process of inviting users to events or groups in VRChat, facilitating social connections and collaboration.
### **InstancesApi**
- **Description**: The InstancesApi class provides functionalities related to specific instances of VRChat worlds, including getting information about a particular instance.
### **NotificationsApi**
- **Description**: The NotificationsApi class manages notifications and alerts for users in VRChat, ensuring that users stay informed about relevant events.
### **PermissionsApi**
- **Description**: The PermissionsApi class allows you to retrieve information about user permissions in VRChat, enabling you to manage access and interactions effectively.
### **PlayerModerationApi**
- **Description**: The PlayerModerationApi class offers features for moderating user behavior and interactions in VRChat, ensuring a safe and enjoyable environment.
### **SystemApi**
- **Description**: The SystemApi class provides access to system-related information in VRChat. While it doesn't require authentication, it remains accessible within the library.
### **UsersApi**
- **Description**: The UsersApi class focuses on interactions with user profiles, allowing you to retrieve user information and manage user-related operations.
### **WorldsApi**
- **Description**: The WorldsApi class enables interactions with VRChat worlds, including features to retrieve world information and manage world-related activities.
### **Enums**
- **Description**: The Enums class consolidates various enumerations, including event types, for better organization and ease of use in the VRChat library.
## **License Change (2024-03-12 / v2.0.0)**
As of v2.0.0, this package no longer uses the [GPLv3](https://choosealicense.com/licenses/gpl-3.0/) license and now uses the permissive [MIT](https://choosealicense.com/licenses/mit/#) license, which as the sole developer of this project, I feel is more suitable for this project considering it is an NPM package that could be a dependency to other projects.
This will allow you to use this package as a dependency without having to source the original work or use the same license.
**THIS DOES NOT APPLY TO VERSIONS PRIOR TO v2.0.0**
## TODO
- Wiki/Documentation.
- Code Consistency and General improvements.
- Potentially adding support for OSC (Open Sound Control).## **Changelog**
All dates in this document are formatted as YYYY-MM-DD (ISO 8601).
- v2.0.0 (2024-03-12)
- Implemented all documented structured response classes for all API's (excluding the Authentication API & Events API), making for an improved developer experience when handling API responses rather than using raw JSON with no intellisense.
- Implemented constructed error objects and better error handling.
- Added JSDoc to most functions.
- Switch to a more permissive license that is more suitable for an NPM package. ([MIT](https://choosealicense.com/licenses/mit/#))
- Updated User Agent parameters & contact information and made header version update automatically using version from package.json, as it's impractical to manually change the hard code each time.
- Fixed SystemApi.
- Slight README improvements & updates in accordance to the new response classes.
- Bump to v2.0.0- v1.2.5 (2023-10-16)
- Fixed missing Enums import for GenerateParamater function in Util class.
- Reformatted and updated README for improved clarity and more comprehensive general information.
- Changed Discord support server.- v1.2.4
- Added missing v1.2.3 changelog.
- Fixed any falsey arguments being completely omitted. (See [issues#1](https://github.com/Solitarju/vrchat-api-library/issues/1))- v1.2.3
- I'm going to be honest, I forgot to add the changelog last push and I don't remember what I did.- v1.2.2
- Singular markdown change.- v1.2.1
- Sorted each API section into their own modules for better organization.- v1.2.0
- Finally completed 100% API coverage!
- Renamed "Vrchat" manager class to "VRChat".- v1.1.0
- Simple fix for major authentication bug on "Vrchat" manager class.- v1.0.9
- Added functionality for FriendsApi, WorldsApi & AvatarsApi to an extent.
- Renamed classes to include 'Api' such as 'AuthenticationApi' including managed classes under the 'Vrchat' class.
- Moved all Enums to a single class for better organization, the EventType class is now under Enums class and not usable in the same way as before.
- Markdown changes.- v1.0.8
- Added the last changelog version.
- Removed typescript declarations as it creates critical issues.
- Reverted exports change.- v1.0.7
- Markdown changes.- v1.0.6
- Updated & more re-usable header generation and removed the apiKey parameter as it is no longer required.
- Added typescript declarations file.
- README markdown updates. (TODO, Changelogs, Disclamers).License: [MIT](https://choosealicense.com/licenses/mit/#)