foundryvtt-mcp 1.5.0 → 1.5.2

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.
Files changed (58) hide show
  1. package/README.md +23 -12
  2. package/dist/diagnostics/client.d.ts +8 -4
  3. package/dist/diagnostics/client.d.ts.map +1 -1
  4. package/dist/diagnostics/client.js +8 -3
  5. package/dist/diagnostics/client.js.map +1 -1
  6. package/dist/foundry/auth.d.ts +15 -0
  7. package/dist/foundry/auth.d.ts.map +1 -1
  8. package/dist/foundry/auth.js +33 -8
  9. package/dist/foundry/auth.js.map +1 -1
  10. package/dist/foundry/client.d.ts +127 -6
  11. package/dist/foundry/client.d.ts.map +1 -1
  12. package/dist/foundry/client.js +263 -43
  13. package/dist/foundry/client.js.map +1 -1
  14. package/dist/foundry/dice-formula.d.ts +79 -0
  15. package/dist/foundry/dice-formula.d.ts.map +1 -0
  16. package/dist/foundry/dice-formula.js +154 -0
  17. package/dist/foundry/dice-formula.js.map +1 -0
  18. package/dist/foundry/types.d.ts +11 -1
  19. package/dist/foundry/types.d.ts.map +1 -1
  20. package/dist/foundry/world-cache.d.ts +22 -0
  21. package/dist/foundry/world-cache.d.ts.map +1 -1
  22. package/dist/foundry/world-cache.js +56 -0
  23. package/dist/foundry/world-cache.js.map +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -3
  27. package/dist/index.js.map +1 -1
  28. package/dist/load-env.d.ts +13 -0
  29. package/dist/load-env.d.ts.map +1 -0
  30. package/dist/load-env.js +14 -0
  31. package/dist/load-env.js.map +1 -0
  32. package/dist/tools/definitions.d.ts +9 -0
  33. package/dist/tools/definitions.d.ts.map +1 -1
  34. package/dist/tools/definitions.js +77 -54
  35. package/dist/tools/definitions.js.map +1 -1
  36. package/dist/tools/handlers/combat-mutations.d.ts +14 -0
  37. package/dist/tools/handlers/combat-mutations.d.ts.map +1 -1
  38. package/dist/tools/handlers/combat-mutations.js +33 -4
  39. package/dist/tools/handlers/combat-mutations.js.map +1 -1
  40. package/dist/tools/handlers/combat-order.d.ts +69 -0
  41. package/dist/tools/handlers/combat-order.d.ts.map +1 -0
  42. package/dist/tools/handlers/combat-order.js +94 -0
  43. package/dist/tools/handlers/combat-order.js.map +1 -0
  44. package/dist/tools/handlers/combat.d.ts.map +1 -1
  45. package/dist/tools/handlers/combat.js +5 -2
  46. package/dist/tools/handlers/combat.js.map +1 -1
  47. package/dist/tools/handlers/diagnostics.d.ts +25 -0
  48. package/dist/tools/handlers/diagnostics.d.ts.map +1 -1
  49. package/dist/tools/handlers/diagnostics.js +152 -38
  50. package/dist/tools/handlers/diagnostics.js.map +1 -1
  51. package/dist/tools/handlers/dice.d.ts +1 -1
  52. package/dist/tools/handlers/dice.d.ts.map +1 -1
  53. package/dist/tools/handlers/dice.js +2 -1
  54. package/dist/tools/handlers/dice.js.map +1 -1
  55. package/dist/tools/handlers/resources.d.ts.map +1 -1
  56. package/dist/tools/handlers/resources.js +16 -1
  57. package/dist/tools/handlers/resources.js.map +1 -1
  58. package/package.json +2 -1
package/README.md CHANGED
@@ -144,7 +144,7 @@ Ask your AI assistant things like:
144
144
  - `get_scene_info` — current scene details
145
145
  - `search_journals` — search notes and handouts
146
146
  - `get_journal` — retrieve a specific journal entry
147
- - `get_users` — list online users and their status
147
+ - `get_users` — list users, roles, and live online status
148
148
  - `get_combat_state` — combat state and initiative order
149
149
  - `get_chat_messages` — recent chat history
150
150
 
@@ -154,9 +154,13 @@ Game-state mutations are **disabled by default**. They use the Socket.IO
154
154
  `modifyDocument` protocol over an authenticated session, and the connected user
155
155
  needs GM/owner permission. Set `FOUNDRY_WRITE_ENABLED=true` to enable them.
156
156
 
157
+ - `start_combat` — begin a new encounter, seeding combatants from tokens (does
158
+ not check for an existing combat — calling it during an active one creates a
159
+ second encounter)
157
160
  - `next_turn` — advance the active combat to the next turn (wraps to the next round)
158
161
  - `end_combat` — end (delete) the active combat encounter
159
- - `set_initiative` — set a combatant's initiative in the active combat
162
+ - `set_initiative` — set a combatant's initiative in the active combat, moving the
163
+ turn marker with the acting combatant if the reorder shifts them
160
164
  - `move_token` — move a token to new x/y coordinates on its scene
161
165
  - `apply_status_effect` — apply or remove a status condition (e.g. prone, stunned) on a token's actor
162
166
  - `update_actor_attributes` — patch an actor's `system` attributes (HP, currency, spell slots, …)
@@ -170,25 +174,31 @@ needs GM/owner permission. Set `FOUNDRY_WRITE_ENABLED=true` to enable them.
170
174
 
171
175
  - `search_world` — full-text search across all game entities
172
176
  - `get_world_summary` — overview of the current world state
173
- - `refresh_world_data` — reload world data from FoundryVTT
177
+ - `refresh_world_data` — reload world data from FoundryVTT; needed after a dropped
178
+ connection, whose missed updates are never replayed into the cache
174
179
 
175
180
  ### Game Mechanics
176
181
 
177
- - `roll_dice` — roll dice with any formula
178
- - `lookup_rule` — game rules and spell descriptions
182
+ - `roll_dice` — roll dice; dice terms (`NdS`) and whole numbers joined by `+`/`-`, with
183
+ unsupported notation (`4d6kh3`, `1d20r1`, `*`) rejected rather than dropped.
184
+ Parentheses are the one transport difference: FoundryVTT evaluates them when
185
+ `FOUNDRY_API_KEY` is set, the local roller rejects them otherwise
186
+ - `lookup_rule` — **stub**: returns a templated placeholder, consults no rules source
179
187
 
180
188
  ### Content Generation
181
189
 
182
- - `generate_npc` — create random NPCs
183
- - `generate_loot` — create treasure appropriate for level
190
+ - `generate_npc` — generate NPC text (not written to the world)
191
+ - `generate_loot` — generate treasure text for a level (not written to the world)
184
192
 
185
193
  ### Diagnostics (requires REST API module)
186
194
 
187
195
  - `get_recent_logs` — retrieve filtered FoundryVTT logs
188
- - `search_logs` — search logs with regex patterns
189
- - `get_system_health` — server performance and health metrics
190
- - `diagnose_errors` — analyze errors with troubleshooting suggestions
191
- - `get_health_status` — comprehensive health diagnostics
196
+ - `search_logs` — search logs by pattern, listing the matching entries
197
+ - `get_system_health` — server health status with versions, user/module counts, memory
198
+ and log error counts (no CPU or disk metrics)
199
+ - `diagnose_errors` — **stub**: returns a fixed "no errors detected" summary
200
+ - `get_health_status` — comprehensive health diagnostics; flags the world snapshot when
201
+ the cache has stopped following live changes
192
202
 
193
203
  ## Available Resources
194
204
 
@@ -198,7 +208,8 @@ needs GM/owner permission. Set `FOUNDRY_WRITE_ENABLED=true` to enable them.
198
208
  - `foundry://scenes/current` — current active scene
199
209
  - `foundry://journals` — all journal entries
200
210
  - `foundry://users` — online users
201
- - `foundry://combat` — active combat state
211
+ - `foundry://combat` — active combat state; `combatants` are in initiative order, so
212
+ `combat.turn` indexes them directly
202
213
  - `foundry://world/settings` — world and campaign settings
203
214
  - `foundry://system/diagnostics` — system diagnostics (requires REST API module)
204
215
 
@@ -110,7 +110,6 @@ export declare class DiagnosticsClient {
110
110
  * console.log(`Server status: ${health.status}`);
111
111
  * console.log(`Active users: ${health.users.active}/${health.users.total}`);
112
112
  * console.log(`Recent errors: ${health.logs.recentErrors}`);
113
- * console.log(`Health score: ${health.healthScore}%`);
114
113
  *
115
114
  * if (health.status === 'critical') {
116
115
  * console.warn('Server requires immediate attention!');
@@ -162,17 +161,22 @@ export declare class DiagnosticsClient {
162
161
  /**
163
162
  * Monitor system health and return status summary
164
163
  *
165
- * @returns Promise resolving to simplified health status
164
+ * Only the overall status: there is no numeric score behind it. The
165
+ * signature used to declare an optional `score` and the example used to show
166
+ * one, but nothing ever set it and {@link SystemHealth} has no such field —
167
+ * so a caller that read it got `undefined` from a documented field.
168
+ *
169
+ * @returns Promise resolving to the overall status, `'critical'` if health
170
+ * could not be retrieved at all
166
171
  *
167
172
  * @example
168
173
  * ```typescript
169
174
  * const status = await diagnostics.getHealthStatus();
170
- * // Returns: { status: 'healthy' | 'warning' | 'critical', score: number }
175
+ * // Returns: { status: 'healthy' | 'warning' | 'critical' }
171
176
  * ```
172
177
  */
173
178
  getHealthStatus(): Promise<{
174
179
  status: SystemHealth['status'];
175
- score?: number;
176
180
  }>;
177
181
  /**
178
182
  * Check if diagnostics API is available
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/diagnostics/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC/C,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACrD,KAAK,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACjE,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACvD,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAiB;IAMhB,OAAO,CAAC,aAAa;IALjC;;;;OAIG;gBACiB,aAAa,EAAE,aAAa;IAEhD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,aAAa,CAAC,MAAM,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0CvE;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,UAAU,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmC5E;;;;;;;;;;;;;;;;;;OAkBG;IACG,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAsB9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,cAAc,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA0BvE;;;;;;;;;;;;;;;OAeG;IACG,aAAa,CACjB,SAAS,GAAE,MAAa,EACxB,KAAK,GAAE,QAAQ,CAAC,OAAO,CAAW,GACjC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBtB;;;;;;;;;;OAUG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAYpF;;;;;;;;;;;;OAYG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAStC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/diagnostics/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC/C,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACrD,KAAK,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACjE,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACvD,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAiB;IAMhB,OAAO,CAAC,aAAa;IALjC;;;;OAIG;gBACiB,aAAa,EAAE,aAAa;IAEhD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,aAAa,CAAC,MAAM,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0CvE;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,UAAU,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmC5E;;;;;;;;;;;;;;;;;OAiBG;IACG,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAsB9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,cAAc,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA0BvE;;;;;;;;;;;;;;;OAeG;IACG,aAAa,CACjB,SAAS,GAAE,MAAa,EACxB,KAAK,GAAE,QAAQ,CAAC,OAAO,CAAW,GACjC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBtB;;;;;;;;;;;;;;;;OAgBG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAC;IAYpE;;;;;;;;;;;;OAYG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAStC"}
@@ -165,7 +165,6 @@ export class DiagnosticsClient {
165
165
  * console.log(`Server status: ${health.status}`);
166
166
  * console.log(`Active users: ${health.users.active}/${health.users.total}`);
167
167
  * console.log(`Recent errors: ${health.logs.recentErrors}`);
168
- * console.log(`Health score: ${health.healthScore}%`);
169
168
  *
170
169
  * if (health.status === 'critical') {
171
170
  * console.warn('Server requires immediate attention!');
@@ -267,12 +266,18 @@ export class DiagnosticsClient {
267
266
  /**
268
267
  * Monitor system health and return status summary
269
268
  *
270
- * @returns Promise resolving to simplified health status
269
+ * Only the overall status: there is no numeric score behind it. The
270
+ * signature used to declare an optional `score` and the example used to show
271
+ * one, but nothing ever set it and {@link SystemHealth} has no such field —
272
+ * so a caller that read it got `undefined` from a documented field.
273
+ *
274
+ * @returns Promise resolving to the overall status, `'critical'` if health
275
+ * could not be retrieved at all
271
276
  *
272
277
  * @example
273
278
  * ```typescript
274
279
  * const status = await diagnostics.getHealthStatus();
275
- * // Returns: { status: 'healthy' | 'warning' | 'critical', score: number }
280
+ * // Returns: { status: 'healthy' | 'warning' | 'critical' }
276
281
  * ```
277
282
  */
278
283
  async getHealthStatus() {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/diagnostics/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/diagnostics/client.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,21 @@
7
7
  * 3. POST /join as JSON with document _id → authenticated session
8
8
  * 4. Socket.IO reconnect with session → full game state access
9
9
  */
10
+ import type { ManagerOptions, SocketOptions } from 'socket.io-client';
11
+ /**
12
+ * Socket.IO connection options carrying a FoundryVTT session.
13
+ *
14
+ * FoundryVTT resolves the session from the `session` **cookie** on the
15
+ * handshake request; the `session` query parameter alone leaves the socket
16
+ * anonymous. An anonymous socket still connects at the transport level — it
17
+ * simply never answers `getJoinData` and emits `session` as `null` — so the
18
+ * only symptom is a bare timeout with no `connect_error` (#206).
19
+ *
20
+ * `extraHeaders` is honoured by socket.io-client in Node.js for both the
21
+ * WebSocket and polling handshakes; the query parameter is kept for servers
22
+ * that read it.
23
+ */
24
+ export declare function sessionSocketOptions(session: string): Partial<ManagerOptions & SocketOptions>;
10
25
  /**
11
26
  * Authenticates with FoundryVTT using the proven 4-step flow.
12
27
  *
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/foundry/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkGH;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAmD9C"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/foundry/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItE;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAM7F;AA2FD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA4D9C"}
@@ -10,6 +10,26 @@
10
10
  import axios from 'axios';
11
11
  import { io } from 'socket.io-client';
12
12
  import { logger } from '../utils/logger.js';
13
+ /**
14
+ * Socket.IO connection options carrying a FoundryVTT session.
15
+ *
16
+ * FoundryVTT resolves the session from the `session` **cookie** on the
17
+ * handshake request; the `session` query parameter alone leaves the socket
18
+ * anonymous. An anonymous socket still connects at the transport level — it
19
+ * simply never answers `getJoinData` and emits `session` as `null` — so the
20
+ * only symptom is a bare timeout with no `connect_error` (#206).
21
+ *
22
+ * `extraHeaders` is honoured by socket.io-client in Node.js for both the
23
+ * WebSocket and polling handshakes; the query parameter is kept for servers
24
+ * that read it.
25
+ */
26
+ export function sessionSocketOptions(session) {
27
+ return {
28
+ transports: ['websocket'],
29
+ query: { session },
30
+ extraHeaders: { Cookie: `session=${session}` },
31
+ };
32
+ }
13
33
  /**
14
34
  * Extracts the session cookie value from a GET /join response.
15
35
  */
@@ -46,10 +66,7 @@ async function resolveUserId(baseUrl, user, session) {
46
66
  }
47
67
  logger.debug('Resolving display name to document _id', { displayName: user });
48
68
  return new Promise((resolve, reject) => {
49
- const socket = io(baseUrl, {
50
- transports: ['websocket'],
51
- query: { session },
52
- });
69
+ const socket = io(baseUrl, sessionSocketOptions(session));
53
70
  const cleanup = () => {
54
71
  socket.off('session', onSession);
55
72
  socket.off('connect_error', onConnectError);
@@ -123,12 +140,20 @@ export async function authenticateFoundry(baseUrl, user, password) {
123
140
  'Content-Type': 'application/json',
124
141
  Cookie: `session=${session}`,
125
142
  },
126
- // Accept 200 (success JSON) and 302 (redirect to /game on success)
127
- validateStatus: (status) => status === 200 || status === 302,
143
+ // Accept 200 (success JSON), 302 (redirect to /game on success) and 401
144
+ // (bad password). 401 carries FoundryVTT's own explanation in the body;
145
+ // letting axios throw on it would surface a bare
146
+ // "Request failed with status code 401" instead (#206).
147
+ validateStatus: (status) => status === 200 || status === 302 || status === 401,
128
148
  });
129
149
  if (joinRes.data?.status !== 'success' && joinRes.data?.redirect !== '/game') {
130
- const msg = joinRes.data?.message || joinRes.data?.error || 'Unknown error';
131
- throw new Error(`FoundryVTT authentication failed: ${msg}`);
150
+ // FoundryVTT v13+ answers a rejected /join with a plain-text i18n key
151
+ // (e.g. "JOIN.ErrorInvalidPassword") rather than a JSON error object.
152
+ const msg = (typeof joinRes.data === 'string' && joinRes.data.trim()) ||
153
+ joinRes.data?.message ||
154
+ joinRes.data?.error ||
155
+ 'Unknown error';
156
+ throw new Error(`FoundryVTT authentication failed (HTTP ${joinRes.status}): ${msg}`);
132
157
  }
133
158
  logger.info('FoundryVTT authentication successful', { userId });
134
159
  return { session, userId };
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/foundry/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/foundry/auth.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,13 @@ export declare class FoundryClient {
55
55
  private config;
56
56
  private _isConnected;
57
57
  private worldData;
58
+ /** Set when the socket drops with a cache still loaded (#217). */
59
+ private worldDataStale;
60
+ /**
61
+ * Last observed outcome of a REST request: false once one failed to reach
62
+ * FoundryVTT at all (#217). Unused in Socket.IO mode.
63
+ */
64
+ private restLinkLive;
58
65
  constructor(config: FoundryClientConfig);
59
66
  /**
60
67
  * Connects to FoundryVTT.
@@ -74,8 +81,89 @@ export declare class FoundryClient {
74
81
  * leaves the cache untouched (and stale) rather than taking the connection down.
75
82
  */
76
83
  private onDocumentBroadcast;
84
+ /**
85
+ * Applies a FoundryVTT `userActivity` broadcast to cached presence (#218).
86
+ *
87
+ * Foundry emits this on login, on logout, and on ordinary activity, and it is
88
+ * the only signal that moves `worldData.activeUsers` — that field is a
89
+ * top-level `WorldData` entry, not a document collection, so the
90
+ * `modifyDocument` path never touches it and `get_users` would otherwise
91
+ * answer "who is connected?" from the connect-time snapshot forever.
92
+ *
93
+ * Bound field rather than a method so the same reference reaches `socket.off()`.
94
+ * Never throws: an unrecognized payload leaves presence as it was.
95
+ */
96
+ private onUserActivity;
97
+ /**
98
+ * Reacts to the socket dropping on its own — server restart, network loss,
99
+ * an idle timeout (#217).
100
+ *
101
+ * Clears the connected flag so `isConnected()` and `get_health_status` stop
102
+ * claiming a live link, and marks the cached snapshot stale: nothing is
103
+ * applying `modifyDocument` broadcasts while the socket is down, so whatever
104
+ * is in `worldData` from here on is a point-in-time copy, not live state.
105
+ * The cache is deliberately *kept* rather than dropped — a stale answer with
106
+ * an honest connection line beats no answer at all — and Socket.IO's own
107
+ * reconnect logic may bring the link back, at which point `refreshWorldData()`
108
+ * resyncs it.
109
+ *
110
+ * Bound field rather than a method so the same reference reaches `socket.off()`.
111
+ */
112
+ /**
113
+ * Reacts to socket.io bringing the link back up on its own (#217).
114
+ *
115
+ * `sessionSocketOptions` leaves socket.io-client's default
116
+ * `reconnection: true` in place, so after a transient drop the manager
117
+ * re-handshakes the SAME socket instance (the session cookie rides along in
118
+ * `extraHeaders`) and the persistent `modifyDocument`/`userActivity`
119
+ * listeners resume firing. Without this the connected flag would stay
120
+ * latched off for the rest of the process while writes and broadcasts were
121
+ * demonstrably working again.
122
+ *
123
+ * `worldDataStale` is deliberately *not* cleared: broadcasts emitted while
124
+ * the socket was down were never delivered and are not replayed, so the
125
+ * cache stays flagged until an explicit `refreshWorldData()`.
126
+ *
127
+ * Bound field rather than a method so the same reference reaches `socket.off()`.
128
+ */
129
+ private onSocketConnect;
130
+ private onSocketDisconnect;
131
+ /**
132
+ * Closes the current socket and removes every persistent listener bound to
133
+ * it. Used both by `disconnect()` and before a socket is replaced: a
134
+ * superseded socket that kept its `disconnect` handler would otherwise clear
135
+ * the connected flag of the live socket that replaced it when it finally
136
+ * closed (`DiagnosticsClient.testAuthentication()` re-connects a live
137
+ * client, so this is reachable in-repo).
138
+ */
139
+ private detachSocket;
77
140
  disconnect(): Promise<void>;
141
+ /**
142
+ * Reports whether the client currently has a live link to FoundryVTT (#217).
143
+ *
144
+ * Socket.IO mode answers from the socket itself rather than from a latched
145
+ * flag, so a link that dropped without an explicit `disconnect()` — server
146
+ * restart, network loss — reads as disconnected immediately, even if the
147
+ * `disconnect` event has not been delivered yet. It tracks the socket in both
148
+ * directions: an automatic reconnect (`onSocketConnect`) reads as connected
149
+ * again rather than staying latched off.
150
+ *
151
+ * REST API mode (`FOUNDRY_API_KEY`) has no socket to ask, so it answers from
152
+ * the last REST request that actually happened: a request that failed to
153
+ * reach FoundryVTT (connection refused, reset, timed out) reads as
154
+ * disconnected from then on, and the next request that gets through reads as
155
+ * connected again. An HTTP error status does not count as a drop — the
156
+ * server answered. This is a *last observed outcome*, not a live probe: it
157
+ * cannot notice a server that went away between requests, and it never does
158
+ * I/O of its own, because this accessor is synchronous and widely called.
159
+ */
78
160
  isConnected(): boolean;
161
+ /**
162
+ * True when the cached snapshot is no longer being kept live by broadcasts —
163
+ * i.e. the socket dropped after a world load (#217). Reads still answer from
164
+ * the cache; this flags that the answer is a point-in-time copy.
165
+ */
166
+ isWorldDataStale(): boolean;
79
167
  /**
80
168
  * Returns true if worldData is available (Socket.IO mode connected).
81
169
  */
@@ -96,20 +184,21 @@ export declare class FoundryClient {
96
184
  */
97
185
  getRawActor(actorId: string): WorldActor | undefined;
98
186
  /**
99
- * Patches attributes on an actor's `system` object (#143). WRITE — REST required.
187
+ * Patches attributes on an actor's `system` object (#143). WRITE — Socket.IO.
100
188
  *
101
189
  * `patch` keys are dot-paths into `actor.system` (e.g. `attributes.hp.value`,
102
- * `currency.gp`, `spells.spell1.value`, `attributes.exhaustion`). The patch is
103
- * expanded into a nested object and sent as `PUT /api/actors/:actorId` with the
104
- * body `{ system: <expanded patch> }` — matching FoundryVTT's own document model
105
- * (`Actor#update`).
190
+ * `currency.gp`, `spells.spell1.value`, `attributes.exhaustion`). Each key is
191
+ * prefixed with `system.` and sent through the Socket.IO `modifyDocument`
192
+ * write protocol as an `Actor` `update` — matching FoundryVTT's own document
193
+ * model (`Actor#update`). No REST call and no `apiKey` are involved.
106
194
  *
107
195
  * Client-side validation, using the actor's current data, rejects:
108
196
  * - HP value exceeding `max + temp`,
109
197
  * - spell-slot value exceeding its `max`,
110
198
  * - exhaustion outside `0–10` (2024 rules) or `0–6` (2014 rules).
111
199
  *
112
- * @throws if `apiKey` is unset, the id is malformed, the actor/path is missing,
200
+ * @throws via `assertWriteable()` if `writeEnabled` is false or the socket
201
+ * is not connected; also if the id is malformed, the actor/path is missing,
113
202
  * or a validation rule is violated.
114
203
  */
115
204
  updateActorAttribute(actorId: string, patch: AttributePatch): Promise<ActorAttributeUpdateResult>;
@@ -337,7 +426,39 @@ export declare class FoundryClient {
337
426
  journals: WorldJournal[];
338
427
  };
339
428
  getWorldSummary(): Record<string, number>;
429
+ /**
430
+ * Rolls a dice formula.
431
+ *
432
+ * Validation is deliberately **per transport**, because the two transports
433
+ * are not equally capable (#219):
434
+ *
435
+ * - **REST (`FOUNDRY_API_KEY`)** posts the formula to `/api/dice/roll`,
436
+ * where FoundryVTT's own `Roll` engine evaluates it. That engine
437
+ * understands more than this module does — parentheses, for one — so only
438
+ * the `DICE_FORMULA_ALPHABET` check applies here. Imposing the local
439
+ * parser's narrower grammar would take away a capability the transport
440
+ * has. What the alphabet does refuse is refused by name and position
441
+ * (`unexpected "k" at position 3`, via `alphabetViolation`), so the
442
+ * two transports are equally specific about what they would not evaluate.
443
+ * - **Socket.IO / no API key** has no remote evaluator: `fallbackDiceRoll`
444
+ * is the roller, so the grammar its parser can represent is the grammar
445
+ * accepted, and that parser is the *only* gate. No alphabet pre-check runs
446
+ * ahead of it, so its specific message (`unexpected "k" at position 3`)
447
+ * reaches the caller instead of a generic `Invalid dice formula: 4d6kh3`.
448
+ * Nothing is ever dropped from a total in silence.
449
+ *
450
+ * The length cap is common to both. A REST roll that cannot reach FoundryVTT
451
+ * falls through to the local roller, which then applies the strict grammar —
452
+ * a formula only Foundry could evaluate errors out rather than being
453
+ * mis-totalled locally.
454
+ */
340
455
  rollDice(formula: string, reason?: string): Promise<DiceRoll>;
456
+ /**
457
+ * Rolls locally, when FoundryVTT is not doing it for us.
458
+ *
459
+ * Delegates the whole formula to {@link evaluateDiceFormula}, which consumes
460
+ * the input end to end and throws on any leftover it cannot represent (#219).
461
+ */
341
462
  private fallbackDiceRoll;
342
463
  testConnection(): Promise<boolean>;
343
464
  private executeWithRetry;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/foundry/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAAsB,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAK/F,OAAO,KAAK,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,SAAS,EACV,MAAM,YAAY,CAAC;AA2CpB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAWD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEvE,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAA0B;gBAE/B,MAAM,EAAE,mBAAmB;IA2CvC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqD3B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB,CAwBzB;IAEI,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,YAAY,IAAI,OAAO;IAQvB;;;;;;OAMG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCvC,YAAY,IAAI,SAAS,GAAG,IAAI;IAQ1B,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA8BpE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBtD;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIpD;;;;;;;;;;;;;;;;OAgBG;IACG,oBAAoB,CACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,0BAA0B,CAAC;IA6ChC,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2DvE;;;;;;;;;OASG;IACG,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkCvF;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAavB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAmBnB;;;;;;;;;;;OAWG;YACW,cAAc;IAuB5B;;;;;;;;;;OAUG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkB3F;;;;;;;;;;;OAWG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,WAAW,CAAC;IAiBvB;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrE;;;;;;;;;OASG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAahG;;;;OAIG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD;;;;;;;;;;OAUG;IACG,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAoBnB;;;;;;;;;;;;;;;;;OAiBG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,GACpF,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAkCxD;;;;;;;;;;OAUG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAgB/D;;;;;;;;;;;;;OAaG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBzF;;;;;;;;;;;;;;;;OAgBG;IACG,uBAAuB,CAC3B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAO,GAC5C,OAAO,CAAC,WAAW,CAAC;IAsBvB;;;;;;;OAOG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BxD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAItD,SAAS,IAAI,UAAU,EAAE;IAQnB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IA2C3C,cAAc,IAAI,WAAW,GAAG,IAAI;IAWpC,eAAe,CAAC,KAAK,SAAK,GAAG,YAAY,EAAE;IAW3C,QAAQ,IAAI;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE;IAczD,WAAW,IAAI,YAAY,EAAE;IAI7B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAe7C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAQvD;;;;;;;;;;;;;;;OAeG;IACG,kBAAkB,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,uBAAuB,EAAE,EAChC,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,kBAAkB,GAC9B,OAAO,CAAC,YAAY,CAAC;IA2CxB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG;QAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;QACrB,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,MAAM,EAAE,UAAU,EAAE,CAAC;QACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;KAC1B;IAmBD,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAuBnC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkCnE,OAAO,CAAC,gBAAgB;IAuClB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;YAoB1B,gBAAgB;IA+BxB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAIrF,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAItB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAItB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAG/F"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/foundry/client.ts"],"names":[],"mappings":"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"}