@jbctechsolutions/mcp-office365 2.5.1 → 4.0.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/README.md +66 -57
- package/dist/approval/hash.d.ts +8 -8
- package/dist/approval/token-manager.d.ts +37 -19
- package/dist/approval/token-manager.d.ts.map +1 -1
- package/dist/approval/token-manager.js +133 -37
- package/dist/approval/token-manager.js.map +1 -1
- package/dist/approval/types.d.ts +7 -3
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/cli.d.ts +21 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +100 -2
- package/dist/cli.js.map +1 -1
- package/dist/database/repository.d.ts +48 -48
- package/dist/database/repository.d.ts.map +1 -1
- package/dist/database/repository.js.map +1 -1
- package/dist/delta/mirror.d.ts +67 -0
- package/dist/delta/mirror.d.ts.map +1 -0
- package/dist/delta/mirror.js +183 -0
- package/dist/delta/mirror.js.map +1 -0
- package/dist/graph/auth/account-id.d.ts +19 -0
- package/dist/graph/auth/account-id.d.ts.map +1 -0
- package/dist/graph/auth/account-id.js +55 -0
- package/dist/graph/auth/account-id.js.map +1 -0
- package/dist/graph/auth/config.d.ts +1 -1
- package/dist/graph/auth/config.d.ts.map +1 -1
- package/dist/graph/auth/config.js +13 -1
- package/dist/graph/auth/config.js.map +1 -1
- package/dist/graph/auth/device-code-flow.d.ts +3 -1
- package/dist/graph/auth/device-code-flow.d.ts.map +1 -1
- package/dist/graph/auth/device-code-flow.js +42 -14
- package/dist/graph/auth/device-code-flow.js.map +1 -1
- package/dist/graph/auth/index.d.ts +1 -0
- package/dist/graph/auth/index.d.ts.map +1 -1
- package/dist/graph/auth/index.js +1 -0
- package/dist/graph/auth/index.js.map +1 -1
- package/dist/graph/auth/token-cache.js +2 -2
- package/dist/graph/auth/token-cache.js.map +1 -1
- package/dist/graph/client/graph-client.d.ts +141 -8
- package/dist/graph/client/graph-client.d.ts.map +1 -1
- package/dist/graph/client/graph-client.js +536 -48
- package/dist/graph/client/graph-client.js.map +1 -1
- package/dist/graph/client/immutable-id-middleware.d.ts +50 -0
- package/dist/graph/client/immutable-id-middleware.d.ts.map +1 -0
- package/dist/graph/client/immutable-id-middleware.js +137 -0
- package/dist/graph/client/immutable-id-middleware.js.map +1 -0
- package/dist/graph/content-readers.d.ts +0 -12
- package/dist/graph/content-readers.d.ts.map +1 -1
- package/dist/graph/content-readers.js +0 -21
- package/dist/graph/content-readers.js.map +1 -1
- package/dist/graph/index.d.ts +5 -6
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/index.js +5 -6
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/mailbox-adapter.d.ts +15 -15
- package/dist/graph/mappers/contact-mapper.d.ts +4 -1
- package/dist/graph/mappers/contact-mapper.d.ts.map +1 -1
- package/dist/graph/mappers/contact-mapper.js +7 -3
- package/dist/graph/mappers/contact-mapper.js.map +1 -1
- package/dist/graph/mappers/email-mapper.d.ts.map +1 -1
- package/dist/graph/mappers/email-mapper.js +7 -4
- package/dist/graph/mappers/email-mapper.js.map +1 -1
- package/dist/graph/mappers/event-mapper.d.ts.map +1 -1
- package/dist/graph/mappers/event-mapper.js +6 -3
- package/dist/graph/mappers/event-mapper.js.map +1 -1
- package/dist/graph/mappers/folder-mapper.d.ts +0 -4
- package/dist/graph/mappers/folder-mapper.d.ts.map +1 -1
- package/dist/graph/mappers/folder-mapper.js +9 -19
- package/dist/graph/mappers/folder-mapper.js.map +1 -1
- package/dist/graph/mappers/index.d.ts +2 -2
- package/dist/graph/mappers/index.d.ts.map +1 -1
- package/dist/graph/mappers/index.js +2 -2
- package/dist/graph/mappers/index.js.map +1 -1
- package/dist/graph/mappers/task-mapper.d.ts +4 -2
- package/dist/graph/mappers/task-mapper.d.ts.map +1 -1
- package/dist/graph/mappers/task-mapper.js +7 -5
- package/dist/graph/mappers/task-mapper.js.map +1 -1
- package/dist/graph/mappers/utils.d.ts +0 -10
- package/dist/graph/mappers/utils.d.ts.map +1 -1
- package/dist/graph/mappers/utils.js +0 -19
- package/dist/graph/mappers/utils.js.map +1 -1
- package/dist/graph/repository.d.ts +409 -276
- package/dist/graph/repository.d.ts.map +1 -1
- package/dist/graph/repository.js +772 -1082
- package/dist/graph/repository.js.map +1 -1
- package/dist/ids/mint.d.ts +31 -0
- package/dist/ids/mint.d.ts.map +1 -0
- package/dist/ids/mint.js +36 -0
- package/dist/ids/mint.js.map +1 -0
- package/dist/ids/next-action.d.ts +29 -0
- package/dist/ids/next-action.d.ts.map +1 -0
- package/dist/ids/next-action.js +58 -0
- package/dist/ids/next-action.js.map +1 -0
- package/dist/ids/resolver.d.ts +31 -0
- package/dist/ids/resolver.d.ts.map +1 -0
- package/dist/ids/resolver.js +52 -0
- package/dist/ids/resolver.js.map +1 -0
- package/dist/ids/schema.d.ts +91 -0
- package/dist/ids/schema.d.ts.map +1 -0
- package/dist/ids/schema.js +131 -0
- package/dist/ids/schema.js.map +1 -0
- package/dist/ids/token.d.ts +62 -0
- package/dist/ids/token.d.ts.map +1 -0
- package/dist/ids/token.js +225 -0
- package/dist/ids/token.js.map +1 -0
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +255 -5925
- package/dist/index.js.map +1 -1
- package/dist/parsers/index.d.ts +0 -1
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +0 -1
- package/dist/parsers/index.js.map +1 -1
- package/dist/registry/all-tools.d.ts +14 -0
- package/dist/registry/all-tools.d.ts.map +1 -0
- package/dist/registry/all-tools.js +68 -0
- package/dist/registry/all-tools.js.map +1 -0
- package/dist/registry/context.d.ts +19 -0
- package/dist/registry/context.d.ts.map +1 -0
- package/dist/registry/context.js +20 -0
- package/dist/registry/context.js.map +1 -0
- package/dist/registry/define-tool.d.ts +15 -0
- package/dist/registry/define-tool.d.ts.map +1 -0
- package/dist/registry/define-tool.js +8 -0
- package/dist/registry/define-tool.js.map +1 -0
- package/dist/registry/elicit-links.d.ts +35 -0
- package/dist/registry/elicit-links.d.ts.map +1 -0
- package/dist/registry/elicit-links.js +102 -0
- package/dist/registry/elicit-links.js.map +1 -0
- package/dist/registry/elicitor.d.ts +24 -0
- package/dist/registry/elicitor.d.ts.map +1 -0
- package/dist/registry/elicitor.js +51 -0
- package/dist/registry/elicitor.js.map +1 -0
- package/dist/registry/index.d.ts +13 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/registry.d.ts +73 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +221 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/types.d.ts +146 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +6 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/search/compiler.d.ts +49 -0
- package/dist/search/compiler.d.ts.map +1 -0
- package/dist/search/compiler.js +168 -0
- package/dist/search/compiler.js.map +1 -0
- package/dist/signature.js +2 -2
- package/dist/signature.js.map +1 -1
- package/dist/state/delta-store.d.ts +85 -0
- package/dist/state/delta-store.d.ts.map +1 -0
- package/dist/state/delta-store.js +124 -0
- package/dist/state/delta-store.js.map +1 -0
- package/dist/state/migrate.d.ts +23 -0
- package/dist/state/migrate.d.ts.map +1 -0
- package/dist/state/migrate.js +81 -0
- package/dist/state/migrate.js.map +1 -0
- package/dist/state/schema.d.ts +26 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +77 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/store.d.ts +155 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +321 -0
- package/dist/state/store.js.map +1 -0
- package/dist/tools/calendar-graph.d.ts +41 -0
- package/dist/tools/calendar-graph.d.ts.map +1 -0
- package/dist/tools/calendar-graph.js +299 -0
- package/dist/tools/calendar-graph.js.map +1 -0
- package/dist/tools/calendar-permissions.d.ts +17 -7
- package/dist/tools/calendar-permissions.d.ts.map +1 -1
- package/dist/tools/calendar-permissions.js +60 -4
- package/dist/tools/calendar-permissions.js.map +1 -1
- package/dist/tools/calendar.d.ts +133 -82
- package/dist/tools/calendar.d.ts.map +1 -1
- package/dist/tools/calendar.js +249 -136
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/categories.d.ts +14 -4
- package/dist/tools/categories.d.ts.map +1 -1
- package/dist/tools/categories.js +59 -2
- package/dist/tools/categories.js.map +1 -1
- package/dist/tools/checklist-items.d.ts +19 -9
- package/dist/tools/checklist-items.d.ts.map +1 -1
- package/dist/tools/checklist-items.js +71 -5
- package/dist/tools/checklist-items.js.map +1 -1
- package/dist/tools/contact-folders.d.ts +50 -0
- package/dist/tools/contact-folders.d.ts.map +1 -0
- package/dist/tools/contact-folders.js +136 -0
- package/dist/tools/contact-folders.js.map +1 -0
- package/dist/tools/contacts-graph.d.ts +45 -0
- package/dist/tools/contacts-graph.d.ts.map +1 -0
- package/dist/tools/contacts-graph.js +174 -0
- package/dist/tools/contacts-graph.js.map +1 -0
- package/dist/tools/contacts.d.ts +61 -30
- package/dist/tools/contacts.d.ts.map +1 -1
- package/dist/tools/contacts.js +150 -93
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/excel.d.ts +20 -10
- package/dist/tools/excel.d.ts.map +1 -1
- package/dist/tools/excel.js +82 -6
- package/dist/tools/excel.js.map +1 -1
- package/dist/tools/focused-overrides.d.ts +14 -4
- package/dist/tools/focused-overrides.d.ts.map +1 -1
- package/dist/tools/focused-overrides.js +59 -2
- package/dist/tools/focused-overrides.js.map +1 -1
- package/dist/tools/index.d.ts +4 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -6
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/linked-resources.d.ts +17 -7
- package/dist/tools/linked-resources.d.ts.map +1 -1
- package/dist/tools/linked-resources.js +60 -4
- package/dist/tools/linked-resources.js.map +1 -1
- package/dist/tools/mail-graph.d.ts +38 -0
- package/dist/tools/mail-graph.d.ts.map +1 -0
- package/dist/tools/mail-graph.js +187 -0
- package/dist/tools/mail-graph.js.map +1 -0
- package/dist/tools/mail-rules.d.ts +20 -8
- package/dist/tools/mail-rules.d.ts.map +1 -1
- package/dist/tools/mail-rules.js +63 -7
- package/dist/tools/mail-rules.js.map +1 -1
- package/dist/tools/mail-send.d.ts +39 -27
- package/dist/tools/mail-send.d.ts.map +1 -1
- package/dist/tools/mail-send.js +249 -24
- package/dist/tools/mail-send.js.map +1 -1
- package/dist/tools/mail.d.ts +91 -68
- package/dist/tools/mail.d.ts.map +1 -1
- package/dist/tools/mail.js +232 -243
- package/dist/tools/mail.js.map +1 -1
- package/dist/tools/mailbox-organization.d.ts +51 -34
- package/dist/tools/mailbox-organization.d.ts.map +1 -1
- package/dist/tools/mailbox-organization.js +318 -35
- package/dist/tools/mailbox-organization.js.map +1 -1
- package/dist/tools/mailbox-settings.d.ts +59 -0
- package/dist/tools/mailbox-settings.d.ts.map +1 -0
- package/dist/tools/mailbox-settings.js +136 -0
- package/dist/tools/mailbox-settings.js.map +1 -0
- package/dist/tools/meetings.d.ts +24 -14
- package/dist/tools/meetings.d.ts.map +1 -1
- package/dist/tools/meetings.js +82 -6
- package/dist/tools/meetings.js.map +1 -1
- package/dist/tools/onedrive.d.ts +26 -16
- package/dist/tools/onedrive.d.ts.map +1 -1
- package/dist/tools/onedrive.js +140 -11
- package/dist/tools/onedrive.js.map +1 -1
- package/dist/tools/onenote.d.ts +63 -0
- package/dist/tools/onenote.d.ts.map +1 -0
- package/dist/tools/onenote.js +221 -0
- package/dist/tools/onenote.js.map +1 -0
- package/dist/tools/people.d.ts +10 -0
- package/dist/tools/people.d.ts.map +1 -1
- package/dist/tools/people.js +94 -0
- package/dist/tools/people.js.map +1 -1
- package/dist/tools/planner-visualization.d.ts +15 -5
- package/dist/tools/planner-visualization.d.ts.map +1 -1
- package/dist/tools/planner-visualization.js +58 -4
- package/dist/tools/planner-visualization.js.map +1 -1
- package/dist/tools/planner.d.ts +69 -39
- package/dist/tools/planner.d.ts.map +1 -1
- package/dist/tools/planner.js +231 -23
- package/dist/tools/planner.js.map +1 -1
- package/dist/tools/scheduling.d.ts +12 -0
- package/dist/tools/scheduling.d.ts.map +1 -1
- package/dist/tools/scheduling.js +38 -0
- package/dist/tools/scheduling.js.map +1 -1
- package/dist/tools/shared-mailbox.d.ts +164 -0
- package/dist/tools/shared-mailbox.d.ts.map +1 -0
- package/dist/tools/shared-mailbox.js +318 -0
- package/dist/tools/shared-mailbox.js.map +1 -0
- package/dist/tools/sharepoint-lists.d.ts +131 -0
- package/dist/tools/sharepoint-lists.d.ts.map +1 -0
- package/dist/tools/sharepoint-lists.js +246 -0
- package/dist/tools/sharepoint-lists.js.map +1 -0
- package/dist/tools/sharepoint.d.ts +24 -14
- package/dist/tools/sharepoint.d.ts.map +1 -1
- package/dist/tools/sharepoint.js +85 -9
- package/dist/tools/sharepoint.js.map +1 -1
- package/dist/tools/task-attachments.d.ts +17 -7
- package/dist/tools/task-attachments.d.ts.map +1 -1
- package/dist/tools/task-attachments.js +60 -4
- package/dist/tools/task-attachments.js.map +1 -1
- package/dist/tools/task-lists.d.ts +56 -0
- package/dist/tools/task-lists.d.ts.map +1 -0
- package/dist/tools/task-lists.js +155 -0
- package/dist/tools/task-lists.js.map +1 -0
- package/dist/tools/tasks-graph.d.ts +49 -0
- package/dist/tools/tasks-graph.d.ts.map +1 -0
- package/dist/tools/tasks-graph.js +193 -0
- package/dist/tools/tasks-graph.js.map +1 -0
- package/dist/tools/tasks.d.ts +121 -29
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +136 -84
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/teams.d.ts +57 -46
- package/dist/tools/teams.d.ts.map +1 -1
- package/dist/tools/teams.js +288 -26
- package/dist/tools/teams.js.map +1 -1
- package/dist/tools/what-changed.d.ts +48 -0
- package/dist/tools/what-changed.d.ts.map +1 -0
- package/dist/tools/what-changed.js +149 -0
- package/dist/tools/what-changed.js.map +1 -0
- package/dist/types/calendar.d.ts +1 -1
- package/dist/types/calendar.d.ts.map +1 -1
- package/dist/types/calendar.js.map +1 -1
- package/dist/types/contacts.d.ts +1 -1
- package/dist/types/contacts.d.ts.map +1 -1
- package/dist/types/contacts.js.map +1 -1
- package/dist/types/mail.d.ts +1 -1
- package/dist/types/mail.d.ts.map +1 -1
- package/dist/types/mail.js.map +1 -1
- package/dist/utils/errors.d.ts +110 -38
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +239 -56
- package/dist/utils/errors.js.map +1 -1
- package/dist/visualization/types.d.ts +4 -4
- package/package.json +2 -3
- package/dist/applescript/account-repository.d.ts +0 -30
- package/dist/applescript/account-repository.d.ts.map +0 -1
- package/dist/applescript/account-repository.js +0 -38
- package/dist/applescript/account-repository.js.map +0 -1
- package/dist/applescript/account-scripts.d.ts +0 -21
- package/dist/applescript/account-scripts.d.ts.map +0 -1
- package/dist/applescript/account-scripts.js +0 -180
- package/dist/applescript/account-scripts.js.map +0 -1
- package/dist/applescript/calendar-manager.d.ts +0 -44
- package/dist/applescript/calendar-manager.d.ts.map +0 -1
- package/dist/applescript/calendar-manager.js +0 -92
- package/dist/applescript/calendar-manager.js.map +0 -1
- package/dist/applescript/calendar-writer.d.ts +0 -36
- package/dist/applescript/calendar-writer.d.ts.map +0 -1
- package/dist/applescript/calendar-writer.js +0 -94
- package/dist/applescript/calendar-writer.js.map +0 -1
- package/dist/applescript/content-readers.d.ts +0 -114
- package/dist/applescript/content-readers.d.ts.map +0 -1
- package/dist/applescript/content-readers.js +0 -328
- package/dist/applescript/content-readers.js.map +0 -1
- package/dist/applescript/executor.d.ts +0 -60
- package/dist/applescript/executor.d.ts.map +0 -1
- package/dist/applescript/executor.js +0 -173
- package/dist/applescript/executor.js.map +0 -1
- package/dist/applescript/index.d.ts +0 -20
- package/dist/applescript/index.d.ts.map +0 -1
- package/dist/applescript/index.js +0 -29
- package/dist/applescript/index.js.map +0 -1
- package/dist/applescript/mail-sender.d.ts +0 -38
- package/dist/applescript/mail-sender.d.ts.map +0 -1
- package/dist/applescript/mail-sender.js +0 -67
- package/dist/applescript/mail-sender.js.map +0 -1
- package/dist/applescript/parser.d.ts +0 -235
- package/dist/applescript/parser.d.ts.map +0 -1
- package/dist/applescript/parser.js +0 -496
- package/dist/applescript/parser.js.map +0 -1
- package/dist/applescript/repository.d.ts +0 -64
- package/dist/applescript/repository.d.ts.map +0 -1
- package/dist/applescript/repository.js +0 -444
- package/dist/applescript/repository.js.map +0 -1
- package/dist/applescript/scripts.d.ts +0 -265
- package/dist/applescript/scripts.d.ts.map +0 -1
- package/dist/applescript/scripts.js +0 -1483
- package/dist/applescript/scripts.js.map +0 -1
- package/dist/parsers/olk15.d.ts +0 -87
- package/dist/parsers/olk15.d.ts.map +0 -1
- package/dist/parsers/olk15.js +0 -368
- package/dist/parsers/olk15.js.map +0 -1
- package/dist/tools/notes.d.ts +0 -74
- package/dist/tools/notes.d.ts.map +0 -1
- package/dist/tools/notes.js +0 -136
- package/dist/tools/notes.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Tool registry types (v3 registry-driven architecture, U1).
|
|
7
|
+
*
|
|
8
|
+
* A tool definition is the single source of truth for what the four
|
|
9
|
+
* previously hand-maintained lists carried independently: the JSON-schema
|
|
10
|
+
* `TOOLS` array, per-module Zod schemas, the dispatch switch, and
|
|
11
|
+
* `GRAPH_ONLY_TOOL_NAMES`. Definitions register their static metadata
|
|
12
|
+
* eagerly (before any backend is initialized, so ListTools works without
|
|
13
|
+
* auth) and resolve their live handler dependencies lazily via ToolContext.
|
|
14
|
+
*/
|
|
15
|
+
import type { z } from 'zod';
|
|
16
|
+
import type { ApprovalTokenManager } from '../approval/index.js';
|
|
17
|
+
/** Which backend(s) expose a tool. Graph is the only backend (AppleScript was removed). */
|
|
18
|
+
export type Backend = 'graph';
|
|
19
|
+
/** Preset groups a client can select with --preset to shrink the surface. */
|
|
20
|
+
export type Preset = 'mail' | 'calendar' | 'contacts' | 'tasks' | 'notes' | 'teams' | 'planner' | 'files' | 'sharepoint' | 'excel' | 'people' | 'meetings' | 'shared';
|
|
21
|
+
/**
|
|
22
|
+
* MCP tool annotations (spec 2025-03-26+). Clients use these to auto-approve
|
|
23
|
+
* safe reads and gate destructive calls.
|
|
24
|
+
*/
|
|
25
|
+
export interface ToolAnnotations {
|
|
26
|
+
readonly title?: string;
|
|
27
|
+
readonly readOnlyHint?: boolean;
|
|
28
|
+
readonly destructiveHint?: boolean;
|
|
29
|
+
readonly idempotentHint?: boolean;
|
|
30
|
+
readonly openWorldHint?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** The MCP text-content result shape every tool returns. */
|
|
33
|
+
export interface ToolResult {
|
|
34
|
+
content: Array<{
|
|
35
|
+
type: 'text';
|
|
36
|
+
text: string;
|
|
37
|
+
}>;
|
|
38
|
+
isError?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Bag of initialized Graph-backend tool instances, resolved after the backend
|
|
42
|
+
* is lazily initialized.
|
|
43
|
+
*
|
|
44
|
+
* This is an augmentation target: each domain module declares its own field
|
|
45
|
+
* via `declare module '../registry/types.js'`, so migrating a domain never
|
|
46
|
+
* edits this file — avoiding a 25-domain merge-conflict hotspot. Handlers read
|
|
47
|
+
* their instance through `requireGraphToolset(ctx, key)`.
|
|
48
|
+
*/
|
|
49
|
+
export interface GraphToolsets {
|
|
50
|
+
}
|
|
51
|
+
/** How a destructive `prepare_*` step seeks confirmation (U11). */
|
|
52
|
+
export type ConfirmMode = 'token' | 'elicit';
|
|
53
|
+
/** Outcome of an inline elicitation (U11). */
|
|
54
|
+
export type ElicitOutcome =
|
|
55
|
+
/** The user explicitly confirmed — execute now. */
|
|
56
|
+
'accept'
|
|
57
|
+
/** The user explicitly said no — abort AND invalidate the token. */
|
|
58
|
+
| 'decline'
|
|
59
|
+
/** Cancelled, timed out, or the client can't elicit — fall back to the token flow. */
|
|
60
|
+
| 'degrade';
|
|
61
|
+
/** A yes/no confirmation request sent to the client (U11). */
|
|
62
|
+
export interface ElicitRequest {
|
|
63
|
+
/** Human-readable description of the action being confirmed. */
|
|
64
|
+
readonly message: string;
|
|
65
|
+
}
|
|
66
|
+
/** Sends an inline confirmation to the client, resolving to its outcome (U11). */
|
|
67
|
+
export type Elicitor = (request: ElicitRequest) => Promise<ElicitOutcome>;
|
|
68
|
+
/**
|
|
69
|
+
* Runtime context passed to a tool handler. Built once per call after the
|
|
70
|
+
* backend is initialized; carries the live toolset instances so handlers no
|
|
71
|
+
* longer need the 23-positional-parameter dispatch signature.
|
|
72
|
+
*/
|
|
73
|
+
export interface ToolContext {
|
|
74
|
+
readonly backend: Backend;
|
|
75
|
+
readonly tokenManager: ApprovalTokenManager;
|
|
76
|
+
readonly graph: GraphToolsets | null;
|
|
77
|
+
/** Confirmation mode for destructive prepares (default 'token' when absent). */
|
|
78
|
+
readonly confirmMode?: ConfirmMode;
|
|
79
|
+
/** Inline elicitor, present only when the client advertised the capability. */
|
|
80
|
+
readonly elicit?: Elicitor;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Links a `prepare_*` tool to its `confirm_*` counterpart so the dispatch-level
|
|
84
|
+
* elicitation interceptor (U11) can execute inline on an accepted confirmation.
|
|
85
|
+
* Declarative on purpose: no handler body changes, and the confirm tool's exact
|
|
86
|
+
* validation + execution is reused.
|
|
87
|
+
*
|
|
88
|
+
* @typeParam S - the prepare tool's Zod input schema.
|
|
89
|
+
*/
|
|
90
|
+
export interface ElicitLink<S extends z.ZodType = z.ZodType> {
|
|
91
|
+
/** Name of the paired confirm tool (e.g. 'confirm_delete_channel'). */
|
|
92
|
+
readonly confirmTool: string;
|
|
93
|
+
/**
|
|
94
|
+
* Builds the confirm tool's params from the prepare params + the prepare
|
|
95
|
+
* result (which carries the freshly minted token(s)). Handles heterogeneous
|
|
96
|
+
* confirm shapes: plain `approval_token`, `token_id` + target id, and the
|
|
97
|
+
* batch confirm that takes an array of `{ token_id, email_id }` pairs.
|
|
98
|
+
*/
|
|
99
|
+
readonly buildParams: (prepareParams: z.infer<S>, prepareResult: ToolResult) => unknown;
|
|
100
|
+
/**
|
|
101
|
+
* Token ids minted by this prepare, so a declined action can invalidate them.
|
|
102
|
+
* Empty means "no token in the result" — dispatch then degrades without
|
|
103
|
+
* eliciting.
|
|
104
|
+
*/
|
|
105
|
+
readonly collectTokenIds: (prepareResult: ToolResult) => string[];
|
|
106
|
+
/** Optional custom confirmation prompt; a generic one is derived when absent. */
|
|
107
|
+
readonly message?: (prepareParams: z.infer<S>) => string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* A single tool definition — static metadata plus a lazily-bound handler.
|
|
111
|
+
*
|
|
112
|
+
* @typeParam S - the Zod input schema; the handler receives its parsed output.
|
|
113
|
+
*/
|
|
114
|
+
export interface ToolDefinition<S extends z.ZodType = z.ZodType> {
|
|
115
|
+
/** Tool name exposed over MCP (snake_case). */
|
|
116
|
+
readonly name: string;
|
|
117
|
+
/** One-line description shown to the model. */
|
|
118
|
+
readonly description: string;
|
|
119
|
+
/** Zod input schema; the advertised JSON Schema is derived from it. */
|
|
120
|
+
readonly input: S;
|
|
121
|
+
/** MCP annotations surfaced in ListTools. */
|
|
122
|
+
readonly annotations: ToolAnnotations;
|
|
123
|
+
/**
|
|
124
|
+
* True when the tool participates in a destructive flow (delete/send/upload,
|
|
125
|
+
* including the prepare_/confirm_ halves). Drives --read-only filtering.
|
|
126
|
+
*/
|
|
127
|
+
readonly destructive: boolean;
|
|
128
|
+
/** Presets that include this tool. Empty means "always exposed". */
|
|
129
|
+
readonly presets: readonly Preset[];
|
|
130
|
+
/** Backends that expose this tool. */
|
|
131
|
+
readonly backends: readonly Backend[];
|
|
132
|
+
/** Handler invoked with the runtime context and validated params. */
|
|
133
|
+
readonly handler: (ctx: ToolContext, params: z.infer<S>) => Promise<ToolResult> | ToolResult;
|
|
134
|
+
/**
|
|
135
|
+
* Present on `prepare_*` tools to opt into inline elicitation (U11). When the
|
|
136
|
+
* server runs with `--confirm elicit` and the client can elicit, dispatch
|
|
137
|
+
* runs the prepare, asks the user inline, and on accept executes the linked
|
|
138
|
+
* confirm tool — otherwise it degrades to the normal token response.
|
|
139
|
+
*
|
|
140
|
+
* `NoInfer` keeps this field out of `S` inference so the generic is fixed by
|
|
141
|
+
* `input` alone — otherwise a helper returning the default `ElicitLink` would
|
|
142
|
+
* widen `S` and collapse the handler's `params` to `unknown`.
|
|
143
|
+
*/
|
|
144
|
+
readonly onElicit?: ElicitLink<NoInfer<S>>;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Structured, typed email-search criteria (replaces the raw `query` KQL). Fields
|
|
7
|
+
* are `| undefined`-tolerant so a zod-parsed input object (which carries explicit
|
|
8
|
+
* `undefined` for absent optionals under exactOptionalPropertyTypes) passes
|
|
9
|
+
* directly; every field is guarded with `!= null` before use.
|
|
10
|
+
*/
|
|
11
|
+
export interface EmailSearchParams {
|
|
12
|
+
/** Sender address (exact). Property → `$filter`. */
|
|
13
|
+
from?: string | undefined;
|
|
14
|
+
/** Recipient address (exact). Property → `$filter`. */
|
|
15
|
+
to?: string | undefined;
|
|
16
|
+
/** Received on/after this ISO date/datetime. Property → `$filter`. */
|
|
17
|
+
received_after?: string | undefined;
|
|
18
|
+
/** Received on/before this ISO date/datetime. Property → `$filter`. */
|
|
19
|
+
received_before?: string | undefined;
|
|
20
|
+
/** Only messages with attachments. Property → `$filter`. */
|
|
21
|
+
has_attachments?: boolean | undefined;
|
|
22
|
+
/** Only unread messages. Property → `$filter`. */
|
|
23
|
+
is_unread?: boolean | undefined;
|
|
24
|
+
/** Importance level. Property → `$filter`. */
|
|
25
|
+
importance?: 'low' | 'normal' | 'high' | undefined;
|
|
26
|
+
/** Subject contains (free-text — Graph `$filter` has no `contains` here). */
|
|
27
|
+
subject_contains?: string | undefined;
|
|
28
|
+
/** Body contains (free-text). */
|
|
29
|
+
body_contains?: string | undefined;
|
|
30
|
+
/** Free-text across the message. */
|
|
31
|
+
text?: string | undefined;
|
|
32
|
+
}
|
|
33
|
+
/** The compiled query and which Graph mechanism executes it. */
|
|
34
|
+
export type CompiledSearch = {
|
|
35
|
+
mechanism: 'filter';
|
|
36
|
+
filter: string;
|
|
37
|
+
} | {
|
|
38
|
+
mechanism: 'search';
|
|
39
|
+
search: string;
|
|
40
|
+
} | {
|
|
41
|
+
mechanism: 'searchQuery';
|
|
42
|
+
kql: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Compiles structured params into the correct Graph mechanism + query string.
|
|
46
|
+
* Throws {@link ValidationError} when no criterion is given or a date is malformed.
|
|
47
|
+
*/
|
|
48
|
+
export declare function compileEmailSearch(params: EmailSearchParams): CompiledSearch;
|
|
49
|
+
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/search/compiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,8CAA8C;IAC9C,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,gEAAgE;AAChE,MAAM,MAAM,cAAc,GACtB;IAAE,SAAS,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,SAAS,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,SAAS,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAI9C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,cAAc,CAiB5E"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Structured email-search compiler (U7 / D9). Replaces raw KQL — the #1 observed
|
|
7
|
+
* failure class — with typed params compiled server-side, so correct operator
|
|
8
|
+
* syntax, quoting, and date formatting are code, not model guesswork.
|
|
9
|
+
*
|
|
10
|
+
* Graph makes `$filter` and `$search` mutually exclusive on messages, so:
|
|
11
|
+
* - property-only criteria → `$filter`
|
|
12
|
+
* - free-text-only criteria → quoted `$search`
|
|
13
|
+
* - mixed → server-built KQL for `POST /search/query`
|
|
14
|
+
* (the only single-request path for both at once).
|
|
15
|
+
*
|
|
16
|
+
* Field → mechanism classification below is the documented default; per D9's
|
|
17
|
+
* execution note it is confirmed/refined by a live-mailbox spike before release
|
|
18
|
+
* (Graph's `$filter` has no `contains` on message subject/body, so those are
|
|
19
|
+
* treated as free-text here).
|
|
20
|
+
*/
|
|
21
|
+
import { ValidationError } from '../utils/errors.js';
|
|
22
|
+
const ISO_DATE = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$/;
|
|
23
|
+
/**
|
|
24
|
+
* Compiles structured params into the correct Graph mechanism + query string.
|
|
25
|
+
* Throws {@link ValidationError} when no criterion is given or a date is malformed.
|
|
26
|
+
*/
|
|
27
|
+
export function compileEmailSearch(params) {
|
|
28
|
+
const filters = buildFilters(params);
|
|
29
|
+
const terms = buildSearchTerms(params);
|
|
30
|
+
if (filters.length === 0 && terms.length === 0) {
|
|
31
|
+
throw new ValidationError('Provide at least one search criterion (e.g. from, subject_contains, received_after, text).');
|
|
32
|
+
}
|
|
33
|
+
if (terms.length === 0) {
|
|
34
|
+
return { mechanism: 'filter', filter: filters.join(' and ') };
|
|
35
|
+
}
|
|
36
|
+
if (filters.length === 0) {
|
|
37
|
+
return { mechanism: 'search', search: quoteSearch(terms) };
|
|
38
|
+
}
|
|
39
|
+
return { mechanism: 'searchQuery', kql: buildKql(params) };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Property criteria → OData `$filter` clauses (order is stable for snapshots).
|
|
43
|
+
* Addressing fields (`from`/`to`) are deliberately NOT here: the D9 live spike
|
|
44
|
+
* showed Graph rejects a recipient `any()` lambda (`ErrorInvalidUrlQueryFilter`)
|
|
45
|
+
* and returns `InefficientFilter` when a sender/flag `$filter` is combined with
|
|
46
|
+
* `$orderby`. So `from`/`to` are handled as `from:`/`to:` in the $search/KQL
|
|
47
|
+
* layer instead, where both work reliably.
|
|
48
|
+
*/
|
|
49
|
+
function buildFilters(p) {
|
|
50
|
+
const out = [];
|
|
51
|
+
if (p.received_after != null) {
|
|
52
|
+
out.push(`receivedDateTime ge ${requireIsoDate(p.received_after, 'received_after')}`);
|
|
53
|
+
}
|
|
54
|
+
if (p.received_before != null) {
|
|
55
|
+
out.push(`receivedDateTime le ${requireIsoDate(p.received_before, 'received_before')}`);
|
|
56
|
+
}
|
|
57
|
+
if (p.has_attachments != null) {
|
|
58
|
+
out.push(`hasAttachments eq ${p.has_attachments ? 'true' : 'false'}`);
|
|
59
|
+
}
|
|
60
|
+
if (p.is_unread != null) {
|
|
61
|
+
out.push(`isRead eq ${p.is_unread ? 'false' : 'true'}`);
|
|
62
|
+
}
|
|
63
|
+
if (p.importance != null) {
|
|
64
|
+
out.push(`importance eq '${p.importance}'`);
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* `$search`/KQL terms. Includes the addressing fields (`from`/`to`) — Graph's
|
|
70
|
+
* `$filter` can't reliably express them (see buildFilters) but the `from:`/`to:`
|
|
71
|
+
* KQL operators work in `$search` and `/search/query` (D9 spike). Order is stable
|
|
72
|
+
* for snapshots.
|
|
73
|
+
*/
|
|
74
|
+
function buildSearchTerms(p) {
|
|
75
|
+
const out = [];
|
|
76
|
+
if (p.from != null && p.from.trim().length > 0) {
|
|
77
|
+
out.push(`from:${p.from.trim()}`);
|
|
78
|
+
}
|
|
79
|
+
if (p.to != null && p.to.trim().length > 0) {
|
|
80
|
+
out.push(`to:${p.to.trim()}`);
|
|
81
|
+
}
|
|
82
|
+
if (p.subject_contains != null && p.subject_contains.trim().length > 0) {
|
|
83
|
+
out.push(`subject:${p.subject_contains.trim()}`);
|
|
84
|
+
}
|
|
85
|
+
if (p.body_contains != null && p.body_contains.trim().length > 0) {
|
|
86
|
+
out.push(`body:${p.body_contains.trim()}`);
|
|
87
|
+
}
|
|
88
|
+
if (p.text != null && p.text.trim().length > 0) {
|
|
89
|
+
out.push(p.text.trim());
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Builds the `$search` value: each term wrapped in a quoted phrase, AND-joined.
|
|
95
|
+
* Embedded double quotes are STRIPPED (not backslash-escaped): Graph's $search
|
|
96
|
+
* has no documented in-phrase escape, so a `"` in a value could otherwise close
|
|
97
|
+
* the phrase early and inject a boolean/property clause.
|
|
98
|
+
*/
|
|
99
|
+
function quoteSearch(terms) {
|
|
100
|
+
return terms.map((t) => kqlPhrase(t)).join(' AND ');
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Builds a KQL string for `POST /search/query` combining property and free-text
|
|
104
|
+
* criteria (the only single-request path when both are present). EVERY free
|
|
105
|
+
* value — including from/to — is wrapped as a quoted phrase so a value with
|
|
106
|
+
* whitespace or KQL operators (e.g. `alice@x.com AND body:secret`) cannot inject
|
|
107
|
+
* extra clauses. Dates are day-granular here (KQL range syntax); the $filter
|
|
108
|
+
* path preserves time-of-day, so mixed-mode queries are intentionally
|
|
109
|
+
* day-granular on dates (documented on the tool in U7b).
|
|
110
|
+
*/
|
|
111
|
+
function buildKql(p) {
|
|
112
|
+
const clauses = [];
|
|
113
|
+
if (p.from != null && p.from.length > 0)
|
|
114
|
+
clauses.push(`from:${kqlPhrase(p.from)}`);
|
|
115
|
+
if (p.to != null && p.to.length > 0)
|
|
116
|
+
clauses.push(`to:${kqlPhrase(p.to)}`);
|
|
117
|
+
if (p.received_after != null)
|
|
118
|
+
clauses.push(`received>=${toKqlDate(p.received_after, 'received_after')}`);
|
|
119
|
+
if (p.received_before != null)
|
|
120
|
+
clauses.push(`received<=${toKqlDate(p.received_before, 'received_before')}`);
|
|
121
|
+
if (p.has_attachments != null)
|
|
122
|
+
clauses.push(`hasattachment:${p.has_attachments ? 'true' : 'false'}`);
|
|
123
|
+
if (p.is_unread === true)
|
|
124
|
+
clauses.push('isread:false');
|
|
125
|
+
else if (p.is_unread === false)
|
|
126
|
+
clauses.push('isread:true');
|
|
127
|
+
if (p.importance != null)
|
|
128
|
+
clauses.push(`importance:${p.importance}`);
|
|
129
|
+
if (p.subject_contains != null && p.subject_contains.trim().length > 0) {
|
|
130
|
+
clauses.push(`subject:${kqlPhrase(p.subject_contains.trim())}`);
|
|
131
|
+
}
|
|
132
|
+
if (p.body_contains != null && p.body_contains.trim().length > 0) {
|
|
133
|
+
clauses.push(`body:${kqlPhrase(p.body_contains.trim())}`);
|
|
134
|
+
}
|
|
135
|
+
if (p.text != null && p.text.trim().length > 0) {
|
|
136
|
+
clauses.push(kqlPhrase(p.text.trim()));
|
|
137
|
+
}
|
|
138
|
+
return clauses.join(' AND ');
|
|
139
|
+
}
|
|
140
|
+
function requireIsoDate(value, field) {
|
|
141
|
+
if (!ISO_DATE.test(value) || Number.isNaN(Date.parse(value))) {
|
|
142
|
+
throw invalidDate(field, value);
|
|
143
|
+
}
|
|
144
|
+
// Reject rollover-invalid calendar dates: Date.parse('2026-02-30') is NOT NaN
|
|
145
|
+
// (it rolls to Mar 2), so re-serialize the date part and require an exact
|
|
146
|
+
// match to catch day/month overflow.
|
|
147
|
+
const datePart = value.slice(0, 10);
|
|
148
|
+
if (new Date(`${datePart}T00:00:00Z`).toISOString().slice(0, 10) !== datePart) {
|
|
149
|
+
throw invalidDate(field, value);
|
|
150
|
+
}
|
|
151
|
+
// A bare date becomes midnight UTC so `ge`/`le` compare against a full instant.
|
|
152
|
+
return value.includes('T') ? value : `${value}T00:00:00Z`;
|
|
153
|
+
}
|
|
154
|
+
function invalidDate(field, value) {
|
|
155
|
+
return new ValidationError(`${field} must be a valid ISO date (YYYY-MM-DD) or datetime; got "${value}".`);
|
|
156
|
+
}
|
|
157
|
+
function toKqlDate(value, field) {
|
|
158
|
+
requireIsoDate(value, field);
|
|
159
|
+
return value.slice(0, 10);
|
|
160
|
+
}
|
|
161
|
+
/** Wraps a value as a quoted KQL phrase, stripping embedded double quotes. */
|
|
162
|
+
function kqlPhrase(value) {
|
|
163
|
+
return `"${stripQuotes(value)}"`;
|
|
164
|
+
}
|
|
165
|
+
function stripQuotes(value) {
|
|
166
|
+
return value.replace(/"/g, '');
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/search/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/signature.js
CHANGED
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* Email signature storage and auto-append logic.
|
|
7
7
|
*
|
|
8
|
-
* Signatures are stored as HTML at ~/.
|
|
8
|
+
* Signatures are stored as HTML at ~/.mcp-office365/signature.html
|
|
9
9
|
* and auto-appended to email bodies when creating/sending emails.
|
|
10
10
|
*/
|
|
11
11
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
12
12
|
import { homedir } from 'node:os';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
|
-
const SIGNATURE_DIR = join(homedir(), '.
|
|
14
|
+
const SIGNATURE_DIR = join(homedir(), '.mcp-office365');
|
|
15
15
|
const SIGNATURE_FILE = join(SIGNATURE_DIR, 'signature.html');
|
|
16
16
|
/**
|
|
17
17
|
* Ensures the signature directory exists.
|
package/dist/signature.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACxD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAE7D;;GAEG;AACH,SAAS,SAAS;IAChB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAC7B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,cAA+B,MAAM;IACnF,SAAS,EAAE,CAAC;IACZ,MAAM,IAAI,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACpF,IAAI,CAAC;QACH,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,QAAyB,EACzB,gBAAyB;IAEzB,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,GAAG,IAAI,WAAW,SAAS,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,GAAG,IAAI,WAAW,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Delta-sync mirror storage (U12). Persists, per account + resource:
|
|
7
|
+
* - a Graph `@odata.deltaLink` cursor (`delta_links`), and
|
|
8
|
+
* - a light snapshot of every item seen so far (`delta_items`).
|
|
9
|
+
*
|
|
10
|
+
* The item mirror is what lets a subsequent delta round classify a returned
|
|
11
|
+
* entry as *added* vs *updated*: Graph delta returns both as a plain `value`
|
|
12
|
+
* entry, distinguishable only by whether we have seen the id before. Deletes
|
|
13
|
+
* arrive as `@removed` entries and drop the mirror row.
|
|
14
|
+
*
|
|
15
|
+
* This is the storage layer only; the sync orchestration and change
|
|
16
|
+
* classification live in {@link ../delta/mirror.ts}. It is a thin companion to
|
|
17
|
+
* {@link StateStore} (sharing its single better-sqlite3 connection), kept in its
|
|
18
|
+
* own module so the mirror's SQL does not bloat the core store.
|
|
19
|
+
*/
|
|
20
|
+
import type Database from 'better-sqlite3';
|
|
21
|
+
type DB = Database.Database;
|
|
22
|
+
/** A mirrored item's stored snapshot. */
|
|
23
|
+
export interface MirrorItem {
|
|
24
|
+
graphId: string;
|
|
25
|
+
/** Durable self-encoding token (e.g. `em_`, `ev_`) for the item. */
|
|
26
|
+
token: string;
|
|
27
|
+
/** Short human label (subject / title); never null (defaults to ''). */
|
|
28
|
+
summary: string;
|
|
29
|
+
/** Optional JSON blob of light display fields. */
|
|
30
|
+
snapshot?: string | null;
|
|
31
|
+
}
|
|
32
|
+
/** A committed sync round for one resource. */
|
|
33
|
+
export interface DeltaCommit {
|
|
34
|
+
accountId: string;
|
|
35
|
+
resource: string;
|
|
36
|
+
/** New cursor to persist; when empty the cursor row is cleared (re-baseline). */
|
|
37
|
+
deltaLink: string;
|
|
38
|
+
syncedAt: number;
|
|
39
|
+
/** Items to insert or refresh in the mirror. */
|
|
40
|
+
upserts: readonly MirrorItem[];
|
|
41
|
+
/** Graph ids to drop from the mirror. */
|
|
42
|
+
deletes: readonly string[];
|
|
43
|
+
/**
|
|
44
|
+
* When true, the fetch was a full baseline: the mirror is replaced by
|
|
45
|
+
* `upserts` (existing rows for the resource are wiped first) so it exactly
|
|
46
|
+
* reflects current state and no stale rows survive. `deletes` is ignored.
|
|
47
|
+
*/
|
|
48
|
+
replaceMirror?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** A stored delta cursor with its last-sync timestamp. */
|
|
51
|
+
export interface DeltaCursor {
|
|
52
|
+
deltaLink: string;
|
|
53
|
+
syncedAt: number;
|
|
54
|
+
}
|
|
55
|
+
export declare class DeltaStore {
|
|
56
|
+
private readonly db;
|
|
57
|
+
private readonly now;
|
|
58
|
+
constructor(db: DB, now: () => number);
|
|
59
|
+
/** Returns the stored delta cursor for a resource, or null when un-synced. */
|
|
60
|
+
getDeltaLink(accountId: string, resource: string): string | null;
|
|
61
|
+
/** Returns the cursor plus its last-sync time (for age-based re-baseline), or null. */
|
|
62
|
+
getCursor(accountId: string, resource: string): DeltaCursor | null;
|
|
63
|
+
/** Returns the set of graph ids already mirrored for a resource. */
|
|
64
|
+
getSeenIds(accountId: string, resource: string): Set<string>;
|
|
65
|
+
/** Looks up a single mirrored item (for labelling a delete), or null. */
|
|
66
|
+
getItem(accountId: string, resource: string, graphId: string): MirrorItem | null;
|
|
67
|
+
/** Number of items mirrored for a resource (baseline / status reporting). */
|
|
68
|
+
countItems(accountId: string, resource: string): number;
|
|
69
|
+
/**
|
|
70
|
+
* Applies a completed sync round atomically: refresh the cursor and apply all
|
|
71
|
+
* upserts/deletes in one transaction, so a crash mid-write never leaves the
|
|
72
|
+
* mirror ahead of (or behind) its cursor. An empty `deltaLink` clears the
|
|
73
|
+
* cursor row, forcing the next call to re-baseline (used when Graph returns no
|
|
74
|
+
* usable deltaLink).
|
|
75
|
+
*/
|
|
76
|
+
commit(commit: DeltaCommit): void;
|
|
77
|
+
/**
|
|
78
|
+
* Clears the cursor and mirror for a resource (or every resource for the
|
|
79
|
+
* account when `resource` is omitted), forcing a fresh baseline on the next
|
|
80
|
+
* sync. Local-only; never touches the user's Graph data.
|
|
81
|
+
*/
|
|
82
|
+
reset(accountId: string, resource?: string): void;
|
|
83
|
+
}
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=delta-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta-store.d.ts","sourceRoot":"","sources":["../../src/state/delta-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,KAAK,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAE5B,yCAAyC;AACzC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,yCAAyC;IACzC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AASD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,MAAM;IAKrC,8EAA8E;IAC9E,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOhE,uFAAuF;IACvF,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAQlE,oEAAoE;IACpE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAO5D,yEAAyE;IACzE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAUhF,6EAA6E;IAC7E,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOvD;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAwDjC;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAYlD"}
|