@gwigz/homunculus-core
Version:
A third-party framework for interacting with Linden Lab's virtual world "Second Life"
260 lines (259 loc) • 10.7 kB
TypeScript
import { AsyncEventEmitter } from "@vladfrangu/async_event_emitter";
import { type AuthenticatorOptions, type ProxyOptions, Vector3 } from "./network";
import { Friends, Nearby, Region } from "./structures";
import { InstantMessages } from "./structures/instant-messages";
import { Regions } from "./structures/regions";
import { Self } from "./structures/self";
import { Constants } from "./utilities";
interface DebugHandlers {
debug?: (message: string) => void;
warn?: (warn: string) => void;
error?: (error: Error) => void;
}
export interface ClientEvents {
[Constants.ClientEvents.READY]: [];
[Constants.ClientEvents.DEBUG]: [message: string];
[Constants.ClientEvents.ERROR]: [error: Error];
[Constants.ClientEvents.WARN]: [warning: string];
[Constants.ClientEvents.CONNECTING]: [];
[Constants.ClientEvents.RECONNECTING]: [];
[Constants.ClientEvents.DISCONNECTING]: [];
[Constants.ClientEvents.DISCONNECTED]: [];
}
/**
* The starting point for the Homunculus client.
*/
export declare class Client extends AsyncEventEmitter<ClientEvents> {
/**
* Contains values relating to your own avatar.
*/
get self(): Self;
set self(value: Self);
/**
* Regions we are currently connected to, or recently have been.
*/
readonly regions: Regions;
/**
* Friends interface.
*/
readonly friends: Friends;
/**
* Instant messaging interface.
*/
readonly instantMessages: InstantMessages;
/**
* Local communication interface.
*/
readonly nearby: Nearby;
/**
* The Region representing the current region, as in the region that this
* agent is standing within.
*
* @note Once teleporting is functional this value will be overwritten with a
* new object. Always use `client.region` rather than storing a reference to
* this value.
*/
get region(): Region;
/**
* The Parcel representing the current parcel, as in the parcel that this
* agent is standing within.
*
* @note This value changes with movement or parcel updates. Always use
* `client.parcel` rather than storing a reference to this value.
*/
get parcel(): import("./types").Parcel | undefined;
get status(): number;
private readonly _core;
private _self?;
constructor(options?: {
logger?: DebugHandlers | false;
proxy?: ProxyOptions;
} | undefined);
/**
* The Parcel representing the current parcel, as in the parcel that this
* agent is standing within.
*/
/**
* @param [options.login.start] `home`, `last`, or alternatively use `uri:Region Name&x&y&z`.
*/
connect(options?: AuthenticatorOptions): Promise<{
login: true;
circuitCode: number;
simIp: string;
simPort: number;
regionX: number;
regionY: number;
agentId: string;
sessionId: string;
firstName: string;
lastName: string;
agentAccess?: string | undefined;
message?: string | undefined;
maxAgentGroups?: number | undefined;
openidUrl?: string | undefined;
openidToken?: string | undefined;
cofVersion?: number | undefined;
agentAppearanceService?: string | undefined;
inventoryRoot?: {
folderId?: string | undefined;
}[] | undefined;
inventorySkeleton?: {
name?: string | undefined;
folderId?: string | undefined;
parentId?: string | undefined;
typeDefault?: number | undefined;
version?: number | undefined;
}[] | undefined;
agentAccessMax?: string | undefined;
agentRegionAccess?: string | undefined;
premiumPackages?: Record<string, {
benefits: {
animatedObjectLimit?: number | undefined;
animationUploadCost?: number | undefined;
attachmentLimit?: number | undefined;
betaGridLand?: number | undefined;
createGroupCost?: number | undefined;
createRepeatingEvents?: number | undefined;
estateAccessToken?: string | undefined;
gridwideExperienceLimit?: number | undefined;
groupMembershipLimit?: number | undefined;
landAuctionsAllowed?: number | undefined;
lastnameChangeAllowed?: number | undefined;
lastnameChangeCost?: number | undefined;
lastnameChangeRate?: number | undefined;
lindenBuyFee?: number | undefined;
lindenHomes?: string[] | undefined;
liveChat?: number | undefined;
localExperiences?: number | undefined;
mainlandTier?: number | undefined;
marketplaceConciergeSupport?: number | undefined;
marketplaceListingLimit?: number | undefined;
marketplacePleLimit?: number | undefined;
meshUploadCost?: number | undefined;
objectAccountLevel?: number | undefined;
oneTimeEventAllowed?: number | undefined;
oneTimeEventCost?: number | undefined;
partnerFee?: number | undefined;
phoneSupport?: number | undefined;
picksLimit?: number | undefined;
placePages?: {
additionalListingCost?: number | undefined;
numFreeListings?: number | undefined;
} | undefined;
premiumAccess?: number | undefined;
premiumAlts?: number | undefined;
premiumGifts?: number | undefined;
priorityEntry?: number | undefined;
repeatingEventsCost?: number | undefined;
scriptLimit?: number | undefined;
signupBonus?: number | undefined;
soundUploadCost?: number | undefined;
stipend?: number | undefined;
storedImLimit?: number | undefined;
largeTextureUploadCost?: number[] | undefined;
textureUploadCost?: number | undefined;
transactionHistoryLimit?: number | undefined;
unpartnerFee?: number | undefined;
useAnimesh?: number | undefined;
voiceMorphing?: number | undefined;
};
description: {
name?: Record<string, string> | undefined;
};
}> | undefined;
buddyList?: {
buddyId?: string | undefined;
buddyRightsHas?: number | undefined;
buddyRightsGiven?: number | undefined;
}[] | undefined;
mapServerUrl?: string | undefined;
loginFlags?: {
stipendSinceLogin?: string | undefined;
everLoggedIn?: string | undefined;
gendered?: string | undefined;
daylightSavings?: string | undefined;
}[] | undefined;
udpBlacklist?: string[] | undefined;
accountLevelBenefits?: {
animatedObjectLimit?: number | undefined;
animationUploadCost?: number | undefined;
attachmentLimit?: number | undefined;
betaGridLand?: number | undefined;
createGroupCost?: number | undefined;
createRepeatingEvents?: number | undefined;
estateAccessToken?: string | undefined;
gridwideExperienceLimit?: number | undefined;
groupMembershipLimit?: number | undefined;
landAuctionsAllowed?: number | undefined;
lastnameChangeAllowed?: number | undefined;
lastnameChangeCost?: number | undefined;
lastnameChangeRate?: number | undefined;
lindenBuyFee?: number | undefined;
lindenHomes?: string[] | undefined;
liveChat?: number | undefined;
localExperiences?: number | undefined;
mainlandTier?: number | undefined;
marketplaceConciergeSupport?: number | undefined;
marketplaceListingLimit?: number | undefined;
marketplacePleLimit?: number | undefined;
meshUploadCost?: number | undefined;
objectAccountLevel?: number | undefined;
oneTimeEventAllowed?: number | undefined;
oneTimeEventCost?: number | undefined;
partnerFee?: number | undefined;
phoneSupport?: number | undefined;
picksLimit?: number | undefined;
placePages?: {
additionalListingCost?: number | undefined;
numFreeListings?: number | undefined;
} | undefined;
premiumAccess?: number | undefined;
premiumAlts?: number | undefined;
premiumGifts?: number | undefined;
priorityEntry?: number | undefined;
repeatingEventsCost?: number | undefined;
scriptLimit?: number | undefined;
signupBonus?: number | undefined;
soundUploadCost?: number | undefined;
stipend?: number | undefined;
storedImLimit?: number | undefined;
largeTextureUploadCost?: number[] | undefined;
textureUploadCost?: number | undefined;
transactionHistoryLimit?: number | undefined;
unpartnerFee?: number | undefined;
useAnimesh?: number | undefined;
voiceMorphing?: number | undefined;
} | undefined;
accountType?: string | undefined;
lindenStatusCode?: string | undefined;
agentFlags?: number | undefined;
maxGodLevel?: number | undefined;
godLevel?: number | undefined;
lookAt?: Vector3 | undefined;
homeInfo?: {
regionHandle?: string | undefined;
position?: Vector3 | undefined;
lookAt?: Vector3 | undefined;
} | undefined;
home?: string | undefined;
secondsSinceEpoch?: number | undefined;
secureSessionId?: string | undefined;
seedCapability?: string | undefined;
startLocation?: string | undefined;
}>;
/**
* Sends Packet (or multiple) to currently active Circuit.
*
* @param packets Packets to send
*/
send(...args: Parameters<NonNullable<typeof this._core.circuit>["send"]>): void;
/**
* Sends Packet (or multiple) to currently active Circuit.
*
* @param packets Packets to send
* @param timeout Timeout for reliable packets
*/
sendReliable(...args: Parameters<NonNullable<typeof this._core.circuit>["sendReliable"]>): Promise<void[]>;
disconnect(): Promise<void>;
}
export {};