@basicbit/vrchat-mcp 0.1.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/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +266 -0
- package/assets/logo.svg +39 -0
- package/dist/bin/cli.js +4 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/package.json +109 -0
- package/dist/src/auth/cookieStore.js +136 -0
- package/dist/src/auth/cookieStore.js.map +1 -0
- package/dist/src/auth/index.js +398 -0
- package/dist/src/auth/index.js.map +1 -0
- package/dist/src/config/defaults.json +58 -0
- package/dist/src/config/index.js +405 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/core/client.js +262 -0
- package/dist/src/core/client.js.map +1 -0
- package/dist/src/core/generatedToolOverrides.js +104 -0
- package/dist/src/core/generatedToolOverrides.js.map +1 -0
- package/dist/src/core/generatedToolSkips.js +28 -0
- package/dist/src/core/generatedToolSkips.js.map +1 -0
- package/dist/src/core/operationSchemas.js +102 -0
- package/dist/src/core/operationSchemas.js.map +1 -0
- package/dist/src/core/readToolRegistry.js +93 -0
- package/dist/src/core/readToolRegistry.js.map +1 -0
- package/dist/src/core/readTools.js +197 -0
- package/dist/src/core/readTools.js.map +1 -0
- package/dist/src/core/spec.js +137 -0
- package/dist/src/core/spec.js.map +1 -0
- package/dist/src/core/writeToolRegistry.js +113 -0
- package/dist/src/core/writeToolRegistry.js.map +1 -0
- package/dist/src/generated/vrchat-schemas.js +3326 -0
- package/dist/src/generated/vrchat-schemas.js.map +1 -0
- package/dist/src/index.js +31 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/infra/logger.js +26 -0
- package/dist/src/infra/logger.js.map +1 -0
- package/dist/src/models/avatars.js +22 -0
- package/dist/src/models/avatars.js.map +1 -0
- package/dist/src/models/events.js +115 -0
- package/dist/src/models/events.js.map +1 -0
- package/dist/src/models/friends.js +148 -0
- package/dist/src/models/friends.js.map +1 -0
- package/dist/src/models/groups.js +228 -0
- package/dist/src/models/groups.js.map +1 -0
- package/dist/src/models/instances.js +56 -0
- package/dist/src/models/instances.js.map +1 -0
- package/dist/src/models/invites.js +34 -0
- package/dist/src/models/invites.js.map +1 -0
- package/dist/src/models/notifications.js +62 -0
- package/dist/src/models/notifications.js.map +1 -0
- package/dist/src/models/status.js +50 -0
- package/dist/src/models/status.js.map +1 -0
- package/dist/src/models/statusPage.js +84 -0
- package/dist/src/models/statusPage.js.map +1 -0
- package/dist/src/models/users.js +113 -0
- package/dist/src/models/users.js.map +1 -0
- package/dist/src/models/vrcx.js +144 -0
- package/dist/src/models/vrcx.js.map +1 -0
- package/dist/src/models/worlds.js +150 -0
- package/dist/src/models/worlds.js.map +1 -0
- package/dist/src/resources/friendsChanges.js +44 -0
- package/dist/src/resources/friendsChanges.js.map +1 -0
- package/dist/src/resources/friendsSnapshot.js +69 -0
- package/dist/src/resources/friendsSnapshot.js.map +1 -0
- package/dist/src/resources/index.js +9 -0
- package/dist/src/resources/index.js.map +1 -0
- package/dist/src/resources/subscriptions.js +39 -0
- package/dist/src/resources/subscriptions.js.map +1 -0
- package/dist/src/schemas/auth.js +3 -0
- package/dist/src/schemas/auth.js.map +1 -0
- package/dist/src/schemas/call.js +13 -0
- package/dist/src/schemas/call.js.map +1 -0
- package/dist/src/schemas/read.js +58 -0
- package/dist/src/schemas/read.js.map +1 -0
- package/dist/src/schemas/write.js +18 -0
- package/dist/src/schemas/write.js.map +1 -0
- package/dist/src/services/api/client.js +66 -0
- package/dist/src/services/api/client.js.map +1 -0
- package/dist/src/services/api/index.js +2 -0
- package/dist/src/services/api/index.js.map +1 -0
- package/dist/src/services/avatars/index.js +24 -0
- package/dist/src/services/avatars/index.js.map +1 -0
- package/dist/src/services/cache.js +158 -0
- package/dist/src/services/cache.js.map +1 -0
- package/dist/src/services/events/curated.js +229 -0
- package/dist/src/services/events/curated.js.map +1 -0
- package/dist/src/services/events/index.js +3 -0
- package/dist/src/services/events/index.js.map +1 -0
- package/dist/src/services/events/utils.js +75 -0
- package/dist/src/services/events/utils.js.map +1 -0
- package/dist/src/services/friends/changes.js +246 -0
- package/dist/src/services/friends/changes.js.map +1 -0
- package/dist/src/services/friends/curated.js +497 -0
- package/dist/src/services/friends/curated.js.map +1 -0
- package/dist/src/services/friends/fetch.js +69 -0
- package/dist/src/services/friends/fetch.js.map +1 -0
- package/dist/src/services/friends/index.js +5 -0
- package/dist/src/services/friends/index.js.map +1 -0
- package/dist/src/services/friends/match.js +98 -0
- package/dist/src/services/friends/match.js.map +1 -0
- package/dist/src/services/groups/allowlist.js +19 -0
- package/dist/src/services/groups/allowlist.js.map +1 -0
- package/dist/src/services/groups/curated.js +343 -0
- package/dist/src/services/groups/curated.js.map +1 -0
- package/dist/src/services/groups/index.js +3 -0
- package/dist/src/services/groups/index.js.map +1 -0
- package/dist/src/services/instances/curated.js +80 -0
- package/dist/src/services/instances/curated.js.map +1 -0
- package/dist/src/services/instances/index.js +3 -0
- package/dist/src/services/instances/index.js.map +1 -0
- package/dist/src/services/instances/read.js +14 -0
- package/dist/src/services/instances/read.js.map +1 -0
- package/dist/src/services/invites/curated.js +90 -0
- package/dist/src/services/invites/curated.js.map +1 -0
- package/dist/src/services/invites/index.js +2 -0
- package/dist/src/services/invites/index.js.map +1 -0
- package/dist/src/services/notifications/curated.js +54 -0
- package/dist/src/services/notifications/curated.js.map +1 -0
- package/dist/src/services/notifications/index.js +2 -0
- package/dist/src/services/notifications/index.js.map +1 -0
- package/dist/src/services/pipeline/events.js +40 -0
- package/dist/src/services/pipeline/events.js.map +1 -0
- package/dist/src/services/pipeline/handlers.js +21 -0
- package/dist/src/services/pipeline/handlers.js.map +1 -0
- package/dist/src/services/pipeline/index.js +4 -0
- package/dist/src/services/pipeline/index.js.map +1 -0
- package/dist/src/services/pipeline/manager.js +143 -0
- package/dist/src/services/pipeline/manager.js.map +1 -0
- package/dist/src/services/status/curated.js +53 -0
- package/dist/src/services/status/curated.js.map +1 -0
- package/dist/src/services/status/index.js +2 -0
- package/dist/src/services/status/index.js.map +1 -0
- package/dist/src/services/statusPage/curated.js +397 -0
- package/dist/src/services/statusPage/curated.js.map +1 -0
- package/dist/src/services/statusPage/index.js +2 -0
- package/dist/src/services/statusPage/index.js.map +1 -0
- package/dist/src/services/users/curated.js +124 -0
- package/dist/src/services/users/curated.js.map +1 -0
- package/dist/src/services/users/groups.js +54 -0
- package/dist/src/services/users/groups.js.map +1 -0
- package/dist/src/services/users/index.js +3 -0
- package/dist/src/services/users/index.js.map +1 -0
- package/dist/src/services/vrcx/db.js +13 -0
- package/dist/src/services/vrcx/db.js.map +1 -0
- package/dist/src/services/vrcx/gamelog.js +125 -0
- package/dist/src/services/vrcx/gamelog.js.map +1 -0
- package/dist/src/services/vrcx/index.js +5 -0
- package/dist/src/services/vrcx/index.js.map +1 -0
- package/dist/src/services/vrcx/memos.js +51 -0
- package/dist/src/services/vrcx/memos.js.map +1 -0
- package/dist/src/services/vrcx/paths.js +133 -0
- package/dist/src/services/vrcx/paths.js.map +1 -0
- package/dist/src/services/vrcx/relationships.js +138 -0
- package/dist/src/services/vrcx/relationships.js.map +1 -0
- package/dist/src/services/vrcx/shared.js +173 -0
- package/dist/src/services/vrcx/shared.js.map +1 -0
- package/dist/src/services/vrcx/status.js +54 -0
- package/dist/src/services/vrcx/status.js.map +1 -0
- package/dist/src/services/worlds/index.js +256 -0
- package/dist/src/services/worlds/index.js.map +1 -0
- package/dist/src/tools/auth.js +44 -0
- package/dist/src/tools/auth.js.map +1 -0
- package/dist/src/tools/cache.js +61 -0
- package/dist/src/tools/cache.js.map +1 -0
- package/dist/src/tools/curated/avatars.js +57 -0
- package/dist/src/tools/curated/avatars.js.map +1 -0
- package/dist/src/tools/curated/events.js +212 -0
- package/dist/src/tools/curated/events.js.map +1 -0
- package/dist/src/tools/curated/friends.js +168 -0
- package/dist/src/tools/curated/friends.js.map +1 -0
- package/dist/src/tools/curated/groups.js +368 -0
- package/dist/src/tools/curated/groups.js.map +1 -0
- package/dist/src/tools/curated/instances.js +35 -0
- package/dist/src/tools/curated/instances.js.map +1 -0
- package/dist/src/tools/curated/invites.js +78 -0
- package/dist/src/tools/curated/invites.js.map +1 -0
- package/dist/src/tools/curated/notifications.js +35 -0
- package/dist/src/tools/curated/notifications.js.map +1 -0
- package/dist/src/tools/curated/status.js +44 -0
- package/dist/src/tools/curated/status.js.map +1 -0
- package/dist/src/tools/curated/statusPage.js +27 -0
- package/dist/src/tools/curated/statusPage.js.map +1 -0
- package/dist/src/tools/curated/users.js +201 -0
- package/dist/src/tools/curated/users.js.map +1 -0
- package/dist/src/tools/curated/vrcx/gamelog.js +80 -0
- package/dist/src/tools/curated/vrcx/gamelog.js.map +1 -0
- package/dist/src/tools/curated/vrcx/index.js +11 -0
- package/dist/src/tools/curated/vrcx/index.js.map +1 -0
- package/dist/src/tools/curated/vrcx/memos.js +105 -0
- package/dist/src/tools/curated/vrcx/memos.js.map +1 -0
- package/dist/src/tools/curated/vrcx/relationships.js +86 -0
- package/dist/src/tools/curated/vrcx/relationships.js.map +1 -0
- package/dist/src/tools/curated/vrcx/status.js +43 -0
- package/dist/src/tools/curated/vrcx/status.js.map +1 -0
- package/dist/src/tools/curated/worlds.js +162 -0
- package/dist/src/tools/curated/worlds.js.map +1 -0
- package/dist/src/tools/generated.js +19 -0
- package/dist/src/tools/generated.js.map +1 -0
- package/dist/src/tools/raw.js +49 -0
- package/dist/src/tools/raw.js.map +1 -0
- package/dist/src/tools/read/common.js +58 -0
- package/dist/src/tools/read/common.js.map +1 -0
- package/dist/src/tools/read/system.js +19 -0
- package/dist/src/tools/read/system.js.map +1 -0
- package/dist/src/tools/registerAllTools.js +41 -0
- package/dist/src/tools/registerAllTools.js.map +1 -0
- package/dist/src/tools/write/common.js +10 -0
- package/dist/src/tools/write/common.js.map +1 -0
- package/dist/src/utils/json.js +53 -0
- package/dist/src/utils/json.js.map +1 -0
- package/dist/src/utils/schema.js +14 -0
- package/dist/src/utils/schema.js.map +1 -0
- package/dist/src/utils/stableStringify.js +36 -0
- package/dist/src/utils/stableStringify.js.map +1 -0
- package/dist/src/utils/strings.js +7 -0
- package/dist/src/utils/strings.js.map +1 -0
- package/dist/src/utils/toolAnnotations.js +17 -0
- package/dist/src/utils/toolAnnotations.js.map +1 -0
- package/dist/src/utils/toolNames.js +13 -0
- package/dist/src/utils/toolNames.js.map +1 -0
- package/dist/src/utils/toolResponses.js +12 -0
- package/dist/src/utils/toolResponses.js.map +1 -0
- package/docs/architecture.md +46 -0
- package/docs/curated-tools.md +132 -0
- package/docs/design-notes.md +48 -0
- package/docs/evals.md +129 -0
- package/docs/tools-guide.md +27 -0
- package/docs/tools.md +13849 -0
- package/docs/vrcx.md +69 -0
- package/package.json +109 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const StatusPageOverviewInputSchema = z.object({
|
|
3
|
+
recentHours: z.number().int().min(1).max(720).optional(),
|
|
4
|
+
maxItems: z.number().int().min(1).max(20).optional(),
|
|
5
|
+
includeGraphs: z.boolean().optional(),
|
|
6
|
+
});
|
|
7
|
+
export const StatusPageInfoSchema = z.object({
|
|
8
|
+
id: z.string().optional(),
|
|
9
|
+
name: z.string().optional(),
|
|
10
|
+
url: z.string().optional(),
|
|
11
|
+
timeZone: z.string().optional(),
|
|
12
|
+
updatedAt: z.string().optional(),
|
|
13
|
+
});
|
|
14
|
+
export const StatusPageOverallStatusSchema = z.object({
|
|
15
|
+
up: z.boolean(),
|
|
16
|
+
indicator: z.string().optional(),
|
|
17
|
+
description: z.string().optional(),
|
|
18
|
+
});
|
|
19
|
+
export const StatusPageComponentSchema = z.object({
|
|
20
|
+
id: z.string(),
|
|
21
|
+
name: z.string(),
|
|
22
|
+
status: z.string(),
|
|
23
|
+
});
|
|
24
|
+
export const StatusPageMetricSchema = z.object({
|
|
25
|
+
key: z.string(),
|
|
26
|
+
title: z.string(),
|
|
27
|
+
unit: z.string(),
|
|
28
|
+
current: z.number().nullable(),
|
|
29
|
+
min: z.number().nullable(),
|
|
30
|
+
max: z.number().nullable(),
|
|
31
|
+
samples: z.number().int().min(0),
|
|
32
|
+
windowStart: z.string().optional(),
|
|
33
|
+
windowEnd: z.string().optional(),
|
|
34
|
+
overlayCurrent: z.number().nullable().optional(),
|
|
35
|
+
overlayMin: z.number().nullable().optional(),
|
|
36
|
+
overlayMax: z.number().nullable().optional(),
|
|
37
|
+
});
|
|
38
|
+
export const StatusPageIncidentSchema = z.object({
|
|
39
|
+
id: z.string(),
|
|
40
|
+
name: z.string(),
|
|
41
|
+
status: z.string().optional(),
|
|
42
|
+
impact: z.string().optional(),
|
|
43
|
+
shortlink: z.string().optional(),
|
|
44
|
+
startedAt: z.string().optional(),
|
|
45
|
+
updatedAt: z.string().optional(),
|
|
46
|
+
resolvedAt: z.string().optional(),
|
|
47
|
+
});
|
|
48
|
+
export const StatusPageMaintenanceSchema = z.object({
|
|
49
|
+
id: z.string(),
|
|
50
|
+
name: z.string(),
|
|
51
|
+
status: z.string().optional(),
|
|
52
|
+
impact: z.string().optional(),
|
|
53
|
+
shortlink: z.string().optional(),
|
|
54
|
+
scheduledFor: z.string().optional(),
|
|
55
|
+
scheduledUntil: z.string().optional(),
|
|
56
|
+
updatedAt: z.string().optional(),
|
|
57
|
+
});
|
|
58
|
+
export const StatusPageOverviewOutputSchema = z.object({
|
|
59
|
+
checkedAt: z.string(),
|
|
60
|
+
recentHours: z.number().int().min(1),
|
|
61
|
+
maxItems: z.number().int().min(1),
|
|
62
|
+
page: StatusPageInfoSchema,
|
|
63
|
+
status: StatusPageOverallStatusSchema,
|
|
64
|
+
components: z.object({
|
|
65
|
+
total: z.number().int().min(0),
|
|
66
|
+
nonOperational: z.number().int().min(0),
|
|
67
|
+
nonOperationalItems: z.array(StatusPageComponentSchema),
|
|
68
|
+
}),
|
|
69
|
+
graphs: z.array(StatusPageMetricSchema),
|
|
70
|
+
incidents: z.object({
|
|
71
|
+
unresolvedCount: z.number().int().min(0),
|
|
72
|
+
unresolved: z.array(StatusPageIncidentSchema),
|
|
73
|
+
recentCount: z.number().int().min(0),
|
|
74
|
+
recent: z.array(StatusPageIncidentSchema),
|
|
75
|
+
}),
|
|
76
|
+
maintenances: z.object({
|
|
77
|
+
activeCount: z.number().int().min(0),
|
|
78
|
+
active: z.array(StatusPageMaintenanceSchema),
|
|
79
|
+
upcomingCount: z.number().int().min(0),
|
|
80
|
+
upcoming: z.array(StatusPageMaintenanceSchema),
|
|
81
|
+
}),
|
|
82
|
+
notes: z.array(z.string()),
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=statusPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusPage.js","sourceRoot":"","sources":["../../../src/models/statusPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { schemas } from '../generated/vrchat-schemas.js';
|
|
3
|
+
import { GroupPageSchema, GroupSummarySchema } from './groups.js';
|
|
4
|
+
export const UserShapeSchema = z.object({
|
|
5
|
+
fields: z.array(z.string()).optional(),
|
|
6
|
+
compact: z.boolean().optional(),
|
|
7
|
+
maxArrayLength: z.number().int().positive().optional(),
|
|
8
|
+
});
|
|
9
|
+
export const SelfProfileViewSchema = z.enum(['summary', 'presence', 'profile']);
|
|
10
|
+
export const CurrentUserProfileInputSchema = UserShapeSchema.extend({
|
|
11
|
+
view: SelfProfileViewSchema.optional(),
|
|
12
|
+
includeGroups: z.boolean().optional(),
|
|
13
|
+
groupPageSize: z.number().int().min(1).max(100).optional(),
|
|
14
|
+
groupMaxPages: z.number().int().min(1).max(50).optional(),
|
|
15
|
+
groupOffset: z.number().int().min(0).optional(),
|
|
16
|
+
});
|
|
17
|
+
export const DEFAULT_SELF_FIELDS = [
|
|
18
|
+
'id',
|
|
19
|
+
'displayName',
|
|
20
|
+
'username',
|
|
21
|
+
'status',
|
|
22
|
+
'statusDescription',
|
|
23
|
+
'statusEmoji',
|
|
24
|
+
'location',
|
|
25
|
+
'last_login',
|
|
26
|
+
'last_platform',
|
|
27
|
+
'userIcon',
|
|
28
|
+
'profilePicOverride',
|
|
29
|
+
'currentAvatarImageUrl',
|
|
30
|
+
'currentAvatarThumbnailImageUrl',
|
|
31
|
+
'bio',
|
|
32
|
+
'bioLinks',
|
|
33
|
+
'tags',
|
|
34
|
+
'developerType',
|
|
35
|
+
'state',
|
|
36
|
+
'twoFactorAuthEnabled',
|
|
37
|
+
];
|
|
38
|
+
export const SUMMARY_SELF_FIELDS = [
|
|
39
|
+
'id',
|
|
40
|
+
'displayName',
|
|
41
|
+
'username',
|
|
42
|
+
'status',
|
|
43
|
+
'statusDescription',
|
|
44
|
+
'location',
|
|
45
|
+
'last_login',
|
|
46
|
+
'last_platform',
|
|
47
|
+
'userIcon',
|
|
48
|
+
'currentAvatarThumbnailImageUrl',
|
|
49
|
+
];
|
|
50
|
+
export const PRESENCE_SELF_FIELDS = [
|
|
51
|
+
'id',
|
|
52
|
+
'displayName',
|
|
53
|
+
'status',
|
|
54
|
+
'statusDescription',
|
|
55
|
+
'statusEmoji',
|
|
56
|
+
'location',
|
|
57
|
+
'last_login',
|
|
58
|
+
'last_platform',
|
|
59
|
+
];
|
|
60
|
+
export const UserGroupsOutputSchema = z.object({
|
|
61
|
+
userId: schemas.UserID,
|
|
62
|
+
pageSize: z.number().int().min(1),
|
|
63
|
+
maxPages: z.number().int().min(1),
|
|
64
|
+
totalGroups: z.number().int().min(0),
|
|
65
|
+
truncated: z.boolean(),
|
|
66
|
+
stale: z.boolean(),
|
|
67
|
+
page: GroupPageSchema,
|
|
68
|
+
groups: z.array(GroupSummarySchema),
|
|
69
|
+
});
|
|
70
|
+
export const UserProfileInputSchema = UserShapeSchema.extend({
|
|
71
|
+
userId: schemas.UserID.optional(),
|
|
72
|
+
username: z.string().optional(),
|
|
73
|
+
includeGroups: z.boolean().optional(),
|
|
74
|
+
groupPageSize: z.number().int().min(1).max(100).optional(),
|
|
75
|
+
groupMaxPages: z.number().int().min(1).max(50).optional(),
|
|
76
|
+
groupOffset: z.number().int().min(0).optional(),
|
|
77
|
+
});
|
|
78
|
+
export const VrcxMemoSchema = z.object({
|
|
79
|
+
editedAt: z.string().nullable(),
|
|
80
|
+
memo: z.string().nullable(),
|
|
81
|
+
});
|
|
82
|
+
export const UserProfileOutputSchema = z.object({
|
|
83
|
+
userId: schemas.UserID,
|
|
84
|
+
user: schemas.User.partial(),
|
|
85
|
+
groups: UserGroupsOutputSchema.optional(),
|
|
86
|
+
vrcxMemo: VrcxMemoSchema.optional(),
|
|
87
|
+
});
|
|
88
|
+
export const ProfileUpdateInputSchema = schemas.UpdateUserRequest.pick({
|
|
89
|
+
bio: true,
|
|
90
|
+
bioLinks: true,
|
|
91
|
+
pronouns: true,
|
|
92
|
+
userIcon: true,
|
|
93
|
+
isBoopingEnabled: true,
|
|
94
|
+
contentFilters: true,
|
|
95
|
+
}).strict();
|
|
96
|
+
export const PROFILE_UPDATE_FIELDS = [
|
|
97
|
+
...DEFAULT_SELF_FIELDS,
|
|
98
|
+
'pronouns',
|
|
99
|
+
'isBoopingEnabled',
|
|
100
|
+
'contentFilters',
|
|
101
|
+
];
|
|
102
|
+
export const ProfileUpdateOutputSchema = z.object({
|
|
103
|
+
userId: schemas.UserID,
|
|
104
|
+
user: schemas.CurrentUser.partial(),
|
|
105
|
+
});
|
|
106
|
+
export const UserGroupsInputSchema = z.object({
|
|
107
|
+
userId: schemas.UserID.optional(),
|
|
108
|
+
username: z.string().optional(),
|
|
109
|
+
pageSize: z.number().int().min(1).max(100).optional(),
|
|
110
|
+
maxPages: z.number().int().min(1).max(50).optional(),
|
|
111
|
+
offset: z.number().int().min(0).optional(),
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/models/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,6BAA6B,GAAG,eAAe,CAAC,MAAM,CAAC;IAClE,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACtC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACrC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC1D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI;IACJ,aAAa;IACb,UAAU;IACV,QAAQ;IACR,mBAAmB;IACnB,aAAa;IACb,UAAU;IACV,YAAY;IACZ,eAAe;IACf,UAAU;IACV,oBAAoB;IACpB,uBAAuB;IACvB,gCAAgC;IAChC,KAAK;IACL,UAAU;IACV,MAAM;IACN,eAAe;IACf,OAAO;IACP,sBAAsB;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI;IACJ,aAAa;IACb,UAAU;IACV,QAAQ;IACR,mBAAmB;IACnB,UAAU;IACV,YAAY;IACZ,eAAe;IACf,UAAU;IACV,gCAAgC;CACxB,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI;IACJ,aAAa;IACb,QAAQ;IACR,mBAAmB;IACnB,aAAa;IACb,UAAU;IACV,YAAY;IACZ,eAAe;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACrC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC1D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;IAC5B,MAAM,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACzC,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrE,GAAG,EAAE,IAAI;IACT,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,IAAI;CACrB,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,mBAAmB;IACtB,UAAU;IACV,kBAAkB;IAClB,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { schemas } from '../generated/vrchat-schemas.js';
|
|
3
|
+
export const VrcxPathSourceSchema = z.enum(['config', 'vrcx_json', 'default', 'unknown']);
|
|
4
|
+
export const VrcxPathInfoSchema = z.object({
|
|
5
|
+
path: z.string().nullable(),
|
|
6
|
+
exists: z.boolean(),
|
|
7
|
+
source: VrcxPathSourceSchema,
|
|
8
|
+
});
|
|
9
|
+
export const VrcxStatusInputSchema = z.object({});
|
|
10
|
+
export const VrcxStatusOutputSchema = z.object({
|
|
11
|
+
enabled: z.boolean(),
|
|
12
|
+
available: z.boolean(),
|
|
13
|
+
db: VrcxPathInfoSchema,
|
|
14
|
+
worldDb: VrcxPathInfoSchema,
|
|
15
|
+
vrcxJson: z.object({
|
|
16
|
+
path: z.string().nullable(),
|
|
17
|
+
exists: z.boolean(),
|
|
18
|
+
}),
|
|
19
|
+
activeUserId: schemas.UserID.nullable(),
|
|
20
|
+
userPrefix: z.string().nullable(),
|
|
21
|
+
databaseVersion: z.number().int().nullable(),
|
|
22
|
+
warnings: z.array(z.string()).optional(),
|
|
23
|
+
});
|
|
24
|
+
export const VrcxUserMemoInputSchema = z.object({
|
|
25
|
+
userId: schemas.UserID,
|
|
26
|
+
});
|
|
27
|
+
export const VrcxUserMemoOutputSchema = z.object({
|
|
28
|
+
userId: schemas.UserID,
|
|
29
|
+
editedAt: z.string().nullable(),
|
|
30
|
+
memo: z.string().nullable(),
|
|
31
|
+
});
|
|
32
|
+
export const VrcxWorldMemoInputSchema = z.object({
|
|
33
|
+
worldId: schemas.WorldID,
|
|
34
|
+
});
|
|
35
|
+
export const VrcxWorldMemoOutputSchema = z.object({
|
|
36
|
+
worldId: schemas.WorldID,
|
|
37
|
+
editedAt: z.string().nullable(),
|
|
38
|
+
memo: z.string().nullable(),
|
|
39
|
+
});
|
|
40
|
+
export const VrcxAvatarMemoInputSchema = z.object({
|
|
41
|
+
avatarId: schemas.AvatarID,
|
|
42
|
+
});
|
|
43
|
+
export const VrcxAvatarMemoOutputSchema = z.object({
|
|
44
|
+
avatarId: schemas.AvatarID,
|
|
45
|
+
editedAt: z.string().nullable(),
|
|
46
|
+
memo: z.string().nullable(),
|
|
47
|
+
});
|
|
48
|
+
export const VrcxRecentWorldVisitsInputSchema = z.object({
|
|
49
|
+
daysBack: z.number().int().min(1).max(365).optional(),
|
|
50
|
+
limit: z.number().int().min(1).max(1000).optional(),
|
|
51
|
+
});
|
|
52
|
+
export const VrcxWorldVisitSchema = z.object({
|
|
53
|
+
rowId: z.number().int(),
|
|
54
|
+
createdAt: z.string(),
|
|
55
|
+
location: z.string(),
|
|
56
|
+
worldId: schemas.WorldID.optional(),
|
|
57
|
+
worldName: z.string().optional(),
|
|
58
|
+
groupName: z.string().nullable().optional(),
|
|
59
|
+
groupId: schemas.GroupID.optional(),
|
|
60
|
+
accessType: z.string().optional(),
|
|
61
|
+
region: z.string().optional(),
|
|
62
|
+
timeMs: z.number().int().min(0).optional(),
|
|
63
|
+
});
|
|
64
|
+
export const VrcxRecentWorldVisitsOutputSchema = z.object({
|
|
65
|
+
from: z.string(),
|
|
66
|
+
limit: z.number().int().min(1),
|
|
67
|
+
total: z.number().int().min(0),
|
|
68
|
+
truncated: z.boolean(),
|
|
69
|
+
visits: z.array(VrcxWorldVisitSchema),
|
|
70
|
+
});
|
|
71
|
+
export const VrcxRecentInstanceSessionsInputSchema = z.object({
|
|
72
|
+
daysBack: z.number().int().min(1).max(365).optional(),
|
|
73
|
+
limit: z.number().int().min(1).max(1000).optional(),
|
|
74
|
+
});
|
|
75
|
+
export const VrcxInstanceSessionSchema = z.object({
|
|
76
|
+
rowId: z.number().int(),
|
|
77
|
+
location: z.string(),
|
|
78
|
+
joinTime: z.string().nullable(),
|
|
79
|
+
leaveTime: z.string(),
|
|
80
|
+
durationMs: z.number().int().min(0),
|
|
81
|
+
worldId: schemas.WorldID.optional(),
|
|
82
|
+
worldName: z.string().optional(),
|
|
83
|
+
groupName: z.string().nullable().optional(),
|
|
84
|
+
groupId: schemas.GroupID.optional(),
|
|
85
|
+
accessType: z.string().optional(),
|
|
86
|
+
region: z.string().optional(),
|
|
87
|
+
});
|
|
88
|
+
export const VrcxRecentInstanceSessionsOutputSchema = z.object({
|
|
89
|
+
from: z.string(),
|
|
90
|
+
limit: z.number().int().min(1),
|
|
91
|
+
total: z.number().int().min(0),
|
|
92
|
+
truncated: z.boolean(),
|
|
93
|
+
activeUserId: schemas.UserID.optional(),
|
|
94
|
+
sessions: z.array(VrcxInstanceSessionSchema),
|
|
95
|
+
});
|
|
96
|
+
export const VrcxUserRelationshipSummaryInputSchema = z.object({
|
|
97
|
+
userId: schemas.UserID.optional(),
|
|
98
|
+
displayName: z.string().min(1).optional(),
|
|
99
|
+
});
|
|
100
|
+
export const VrcxUserRelationshipSummaryOutputSchema = z.object({
|
|
101
|
+
query: z.object({
|
|
102
|
+
userId: schemas.UserID.optional(),
|
|
103
|
+
displayName: z.string().optional(),
|
|
104
|
+
}),
|
|
105
|
+
resolvedBy: z.enum(['userId', 'displayName', 'none']),
|
|
106
|
+
resolvedUserId: schemas.UserID.nullable(),
|
|
107
|
+
displayName: z.string().nullable(),
|
|
108
|
+
lastSeen: z.string().nullable(),
|
|
109
|
+
joinCount: z.number().int().min(0),
|
|
110
|
+
timeSpentMs: z.number().int().min(0),
|
|
111
|
+
timeSpentHours: z.number().min(0),
|
|
112
|
+
hasData: z.boolean(),
|
|
113
|
+
});
|
|
114
|
+
export const VrcxUserRelationshipSessionsInputSchema = z.object({
|
|
115
|
+
userId: schemas.UserID.optional(),
|
|
116
|
+
displayName: z.string().min(1).optional(),
|
|
117
|
+
limit: z.number().int().min(1).max(500).optional(),
|
|
118
|
+
});
|
|
119
|
+
export const VrcxUserRelationshipSessionsOutputSchema = z.object({
|
|
120
|
+
query: z.object({
|
|
121
|
+
userId: schemas.UserID.optional(),
|
|
122
|
+
displayName: z.string().optional(),
|
|
123
|
+
}),
|
|
124
|
+
resolvedBy: z.enum(['userId', 'displayName', 'none']),
|
|
125
|
+
resolvedUserId: schemas.UserID.nullable(),
|
|
126
|
+
total: z.number().int().min(0),
|
|
127
|
+
limit: z.number().int().min(1),
|
|
128
|
+
truncated: z.boolean(),
|
|
129
|
+
sessions: z.array(z.object({
|
|
130
|
+
rowId: z.number().int(),
|
|
131
|
+
location: z.string(),
|
|
132
|
+
joinTime: z.string().nullable(),
|
|
133
|
+
leaveTime: z.string(),
|
|
134
|
+
durationMs: z.number().int().min(0),
|
|
135
|
+
worldId: schemas.WorldID.optional(),
|
|
136
|
+
worldName: z.string().optional(),
|
|
137
|
+
groupName: z.string().nullable().optional(),
|
|
138
|
+
groupId: schemas.GroupID.optional(),
|
|
139
|
+
accessType: z.string().optional(),
|
|
140
|
+
region: z.string().optional(),
|
|
141
|
+
displayName: z.string().optional(),
|
|
142
|
+
})),
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=vrcx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vrcx.js","sourceRoot":"","sources":["../../../src/models/vrcx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,MAAM,EAAE,oBAAoB;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,EAAE,EAAE,kBAAkB;IACtB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC,OAAO;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,QAAQ,EAAE,OAAO,CAAC,QAAQ;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;QACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;IACF,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACrD,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;QACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;IACF,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACrD,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;QACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;QACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC,CACH;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { schemas } from '../generated/vrchat-schemas.js';
|
|
3
|
+
export const WorldShapeSchema = z.object({
|
|
4
|
+
fields: z.array(z.string()).optional(),
|
|
5
|
+
compact: z.boolean().optional(),
|
|
6
|
+
maxArrayLength: z.number().int().positive().optional(),
|
|
7
|
+
});
|
|
8
|
+
export const WorldSummarySchema = z.object({
|
|
9
|
+
worldId: schemas.WorldID,
|
|
10
|
+
name: z.string(),
|
|
11
|
+
authorId: schemas.UserID.optional(),
|
|
12
|
+
authorName: z.string().optional(),
|
|
13
|
+
capacity: z.number().int().optional(),
|
|
14
|
+
visits: z.number().int().optional(),
|
|
15
|
+
favorites: z.number().int().optional(),
|
|
16
|
+
heat: z.number().int().optional(),
|
|
17
|
+
popularity: z.number().int().optional(),
|
|
18
|
+
releaseStatus: z.string().optional(),
|
|
19
|
+
updatedAt: z.string().optional(),
|
|
20
|
+
tags: z.array(z.string()).optional(),
|
|
21
|
+
favoriteGroup: schemas.FavoriteGroupID.optional(),
|
|
22
|
+
favoriteId: schemas.FavoriteID.optional(),
|
|
23
|
+
});
|
|
24
|
+
export const WorldInstancesSummarySchema = z.object({
|
|
25
|
+
totalInstances: z.number().int().min(0),
|
|
26
|
+
totalOccupants: z.number().int().min(0),
|
|
27
|
+
countsByAccess: z.record(z.string(), z.number().int().min(0)),
|
|
28
|
+
countsByRegion: z.record(z.string(), z.number().int().min(0)),
|
|
29
|
+
});
|
|
30
|
+
export const WorldPageSchema = z.object({
|
|
31
|
+
pages: z.number().int().min(0),
|
|
32
|
+
items: z.number().int().min(0),
|
|
33
|
+
pageSize: z.number().int().min(1),
|
|
34
|
+
offsetStart: z.number().int().min(0),
|
|
35
|
+
truncated: z.boolean(),
|
|
36
|
+
});
|
|
37
|
+
export const WorldSearchInputSchema = z.object({
|
|
38
|
+
query: z.string(),
|
|
39
|
+
pageSize: z.number().int().min(1).max(100).optional(),
|
|
40
|
+
maxPages: z.number().int().min(1).max(50).optional(),
|
|
41
|
+
maxItems: z.number().int().min(1).optional(),
|
|
42
|
+
offset: z.number().int().min(0).optional(),
|
|
43
|
+
featured: z.boolean().optional(),
|
|
44
|
+
sort: z.string().optional(),
|
|
45
|
+
order: z.string().optional(),
|
|
46
|
+
tag: z.string().optional(),
|
|
47
|
+
notag: z.string().optional(),
|
|
48
|
+
releaseStatus: z.string().optional(),
|
|
49
|
+
maxUnityVersion: z.string().optional(),
|
|
50
|
+
minUnityVersion: z.string().optional(),
|
|
51
|
+
platform: z.string().optional(),
|
|
52
|
+
includeTags: z.boolean().optional(),
|
|
53
|
+
});
|
|
54
|
+
export const WorldFavoritesInputSchema = z.object({
|
|
55
|
+
query: z.string().optional(),
|
|
56
|
+
pageSize: z.number().int().min(1).max(100).optional(),
|
|
57
|
+
maxPages: z.number().int().min(1).max(50).optional(),
|
|
58
|
+
maxItems: z.number().int().min(1).optional(),
|
|
59
|
+
offset: z.number().int().min(0).optional(),
|
|
60
|
+
featured: z.boolean().optional(),
|
|
61
|
+
sort: z.string().optional(),
|
|
62
|
+
order: z.string().optional(),
|
|
63
|
+
tag: z.string().optional(),
|
|
64
|
+
notag: z.string().optional(),
|
|
65
|
+
releaseStatus: z.string().optional(),
|
|
66
|
+
maxUnityVersion: z.string().optional(),
|
|
67
|
+
minUnityVersion: z.string().optional(),
|
|
68
|
+
platform: z.string().optional(),
|
|
69
|
+
userId: schemas.UserID.optional(),
|
|
70
|
+
includeTags: z.boolean().optional(),
|
|
71
|
+
});
|
|
72
|
+
export const WorldProfileInputSchema = WorldShapeSchema.extend({
|
|
73
|
+
worldId: schemas.WorldID.optional(),
|
|
74
|
+
name: z.string().optional(),
|
|
75
|
+
});
|
|
76
|
+
export const WorldInstancesInputSchema = z.object({
|
|
77
|
+
worldId: schemas.WorldID.optional(),
|
|
78
|
+
name: z.string().optional(),
|
|
79
|
+
});
|
|
80
|
+
export const WorldSearchOutputSchema = z.object({
|
|
81
|
+
query: z.string(),
|
|
82
|
+
total: z.number().int().min(0),
|
|
83
|
+
stale: z.boolean(),
|
|
84
|
+
page: WorldPageSchema.optional(),
|
|
85
|
+
worlds: z.array(WorldSummarySchema),
|
|
86
|
+
notes: z.array(z.string()).optional(),
|
|
87
|
+
});
|
|
88
|
+
export const WorldFavoritesOutputSchema = z.object({
|
|
89
|
+
total: z.number().int().min(0),
|
|
90
|
+
stale: z.boolean(),
|
|
91
|
+
page: WorldPageSchema.optional(),
|
|
92
|
+
worlds: z.array(WorldSummarySchema),
|
|
93
|
+
notes: z.array(z.string()).optional(),
|
|
94
|
+
});
|
|
95
|
+
export const WorldProfileOutputSchema = z.object({
|
|
96
|
+
worldId: schemas.WorldID,
|
|
97
|
+
resolvedBy: z.enum(['id', 'name']),
|
|
98
|
+
stale: z.boolean(),
|
|
99
|
+
world: schemas.World.partial(),
|
|
100
|
+
vrcxMemo: z
|
|
101
|
+
.object({
|
|
102
|
+
editedAt: z.string().nullable(),
|
|
103
|
+
memo: z.string().nullable(),
|
|
104
|
+
})
|
|
105
|
+
.optional(),
|
|
106
|
+
});
|
|
107
|
+
export const WorldInstancesOverviewOutputSchema = z.object({
|
|
108
|
+
worldId: schemas.WorldID,
|
|
109
|
+
resolvedBy: z.enum(['id', 'name']),
|
|
110
|
+
stale: z.boolean(),
|
|
111
|
+
instances: WorldInstancesSummarySchema,
|
|
112
|
+
});
|
|
113
|
+
export function normalizeWorldName(value) {
|
|
114
|
+
return value.trim().toLowerCase();
|
|
115
|
+
}
|
|
116
|
+
function toOptionalInt(value) {
|
|
117
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
118
|
+
return undefined;
|
|
119
|
+
return Math.floor(value);
|
|
120
|
+
}
|
|
121
|
+
function toOptionalStringArray(value) {
|
|
122
|
+
if (!Array.isArray(value))
|
|
123
|
+
return undefined;
|
|
124
|
+
const tags = value.filter((entry) => typeof entry === 'string' && entry.length > 0);
|
|
125
|
+
return tags.length > 0 ? tags : undefined;
|
|
126
|
+
}
|
|
127
|
+
export function buildWorldSummary(world) {
|
|
128
|
+
const worldId = world.id ?? undefined;
|
|
129
|
+
const name = world.name ?? undefined;
|
|
130
|
+
if (!worldId || !name)
|
|
131
|
+
return null;
|
|
132
|
+
const tags = toOptionalStringArray(world.tags);
|
|
133
|
+
return {
|
|
134
|
+
worldId,
|
|
135
|
+
name,
|
|
136
|
+
authorId: world.authorId ?? undefined,
|
|
137
|
+
authorName: world.authorName ?? undefined,
|
|
138
|
+
capacity: toOptionalInt(world.capacity),
|
|
139
|
+
visits: toOptionalInt(world.visits),
|
|
140
|
+
favorites: toOptionalInt(world.favorites),
|
|
141
|
+
heat: toOptionalInt(world.heat),
|
|
142
|
+
popularity: toOptionalInt(world.popularity),
|
|
143
|
+
releaseStatus: world.releaseStatus ?? undefined,
|
|
144
|
+
updatedAt: world.updated_at ?? undefined,
|
|
145
|
+
tags,
|
|
146
|
+
favoriteGroup: world.favoriteGroup ?? undefined,
|
|
147
|
+
favoriteId: world.favoriteId ?? undefined,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=worlds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worlds.js","sourceRoot":"","sources":["../../../src/models/worlds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { friendsChangeStore } from '../services/friends/changes.js';
|
|
3
|
+
export const FRIENDS_CHANGES_URI = 'vrchat://friends/changes';
|
|
4
|
+
function parseNumber(value, fallback) {
|
|
5
|
+
if (Array.isArray(value))
|
|
6
|
+
return parseNumber(value[0], fallback);
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
const parsed = Number(value);
|
|
9
|
+
if (Number.isFinite(parsed) && parsed >= 0)
|
|
10
|
+
return Math.floor(parsed);
|
|
11
|
+
}
|
|
12
|
+
return fallback;
|
|
13
|
+
}
|
|
14
|
+
export function registerFriendsChangesResource(server) {
|
|
15
|
+
const template = new ResourceTemplate(`${FRIENDS_CHANGES_URI}{?after,limit}`, {
|
|
16
|
+
list: undefined,
|
|
17
|
+
});
|
|
18
|
+
server.registerResource('vrchat_friends_changes', template, {
|
|
19
|
+
title: 'VRChat friend change feed',
|
|
20
|
+
description: 'Delta feed for friend changes (online/offline/location/add/remove). Use resources/subscribe for updates.',
|
|
21
|
+
}, (uri, variables) => {
|
|
22
|
+
const after = parseNumber(variables.after ?? uri.searchParams.get('after'), 0);
|
|
23
|
+
const limit = parseNumber(variables.limit ?? uri.searchParams.get('limit'), 200);
|
|
24
|
+
const snapshot = friendsChangeStore.snapshot(after, limit);
|
|
25
|
+
const payload = {
|
|
26
|
+
resource: 'friends_changes',
|
|
27
|
+
after: snapshot.after,
|
|
28
|
+
nextAfter: snapshot.nextAfter,
|
|
29
|
+
truncated: snapshot.truncated,
|
|
30
|
+
changedIds: snapshot.changedIds,
|
|
31
|
+
events: snapshot.events,
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
contents: [
|
|
35
|
+
{
|
|
36
|
+
uri: uri.toString(),
|
|
37
|
+
mimeType: 'application/json',
|
|
38
|
+
text: JSON.stringify(payload, null, 2),
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=friendsChanges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friendsChanges.js","sourceRoot":"","sources":["../../../src/resources/friendsChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAE9D,SAAS,WAAW,CAAC,KAAc,EAAE,QAAgB;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAiB;IAC9D,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,mBAAmB,gBAAgB,EAAE;QAC5E,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IAEH,MAAM,CAAC,gBAAgB,CACrB,wBAAwB,EACxB,QAAQ,EACR;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,0GAA0G;KAC7G,EACD,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;QACF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;oBACnB,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { fetchFriendsWithMeta } from '../services/friends/fetch.js';
|
|
3
|
+
export const FRIENDS_SNAPSHOT_URI = 'vrchat://friends/snapshot';
|
|
4
|
+
function parseNumber(value, fallback) {
|
|
5
|
+
if (Array.isArray(value))
|
|
6
|
+
return parseNumber(value[0], fallback);
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
const parsed = Number(value);
|
|
9
|
+
if (Number.isFinite(parsed) && parsed >= 0)
|
|
10
|
+
return Math.floor(parsed);
|
|
11
|
+
}
|
|
12
|
+
return fallback;
|
|
13
|
+
}
|
|
14
|
+
function parseBoolean(value, fallback) {
|
|
15
|
+
if (Array.isArray(value))
|
|
16
|
+
return parseBoolean(value[0], fallback);
|
|
17
|
+
if (typeof value === 'boolean')
|
|
18
|
+
return value;
|
|
19
|
+
if (typeof value === 'string') {
|
|
20
|
+
const normalized = value.toLowerCase();
|
|
21
|
+
if (['true', '1', 'yes', 'on'].includes(normalized))
|
|
22
|
+
return true;
|
|
23
|
+
if (['false', '0', 'no', 'off'].includes(normalized))
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return fallback;
|
|
27
|
+
}
|
|
28
|
+
function clamp(value, min, max) {
|
|
29
|
+
return Math.min(Math.max(value, min), max);
|
|
30
|
+
}
|
|
31
|
+
export function registerFriendsSnapshotResource(server) {
|
|
32
|
+
const template = new ResourceTemplate(`${FRIENDS_SNAPSHOT_URI}{?includeOffline,pageSize,maxPages}`, {
|
|
33
|
+
list: undefined,
|
|
34
|
+
});
|
|
35
|
+
server.registerResource('vrchat_friends_snapshot', template, {
|
|
36
|
+
title: 'VRChat friends snapshot',
|
|
37
|
+
description: 'Snapshot of the friends list (cache-backed). Subscribe to receive update notifications.',
|
|
38
|
+
}, async (uri, variables) => {
|
|
39
|
+
const includeOffline = parseBoolean(variables.includeOffline ?? uri.searchParams.get('includeOffline'), true);
|
|
40
|
+
const pageSize = clamp(parseNumber(variables.pageSize ?? uri.searchParams.get('pageSize'), 100), 1, 100);
|
|
41
|
+
const maxPages = clamp(parseNumber(variables.maxPages ?? uri.searchParams.get('maxPages'), 200), 1, 500);
|
|
42
|
+
const { friends, meta } = await fetchFriendsWithMeta({
|
|
43
|
+
includeOffline,
|
|
44
|
+
pageSize,
|
|
45
|
+
maxPages,
|
|
46
|
+
});
|
|
47
|
+
const payload = {
|
|
48
|
+
resource: 'friends_snapshot',
|
|
49
|
+
includeOffline,
|
|
50
|
+
pageSize,
|
|
51
|
+
maxPages,
|
|
52
|
+
totalFriends: friends.length,
|
|
53
|
+
truncated: meta.truncated,
|
|
54
|
+
stale: meta.stale,
|
|
55
|
+
segments: meta.segments,
|
|
56
|
+
friends,
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
contents: [
|
|
60
|
+
{
|
|
61
|
+
uri: uri.toString(),
|
|
62
|
+
mimeType: 'application/json',
|
|
63
|
+
text: JSON.stringify(payload, null, 2),
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=friendsSnapshot.js.map
|