@raytio/mcp-server 9.2.1 → 9.4.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 +12 -7
- package/config.env.example +10 -3
- package/dist/authorization.d.ts +12 -0
- package/dist/authorization.d.ts.map +1 -1
- package/dist/authorization.js +30 -0
- package/dist/authorization.js.map +1 -1
- package/dist/config.d.ts +21 -17
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -6
- package/dist/config.js.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/tools/_shared/finance-idempotency.d.ts +52 -0
- package/dist/tools/_shared/finance-idempotency.d.ts.map +1 -0
- package/dist/tools/_shared/finance-idempotency.js +79 -0
- package/dist/tools/_shared/finance-idempotency.js.map +1 -0
- package/dist/tools/_shared/money.d.ts +10 -0
- package/dist/tools/_shared/money.d.ts.map +1 -0
- package/dist/tools/_shared/money.js +90 -0
- package/dist/tools/_shared/money.js.map +1 -0
- package/dist/tools/_shared/soft-deactivate.d.ts +2 -1
- package/dist/tools/_shared/soft-deactivate.d.ts.map +1 -1
- package/dist/tools/_shared/soft-deactivate.js +2 -1
- package/dist/tools/_shared/soft-deactivate.js.map +1 -1
- package/dist/tools/domains.d.ts.map +1 -1
- package/dist/tools/domains.js +18 -0
- package/dist/tools/domains.js.map +1 -1
- package/dist/tools/dsm/index.d.ts.map +1 -1
- package/dist/tools/dsm/index.js +10 -2
- package/dist/tools/dsm/index.js.map +1 -1
- package/dist/tools/fap/fap-invoice-hold-place.d.ts +14 -0
- package/dist/tools/fap/fap-invoice-hold-place.d.ts.map +1 -0
- package/dist/tools/fap/fap-invoice-hold-place.js +62 -0
- package/dist/tools/fap/fap-invoice-hold-place.js.map +1 -0
- package/dist/tools/fap/fap-invoice-hold-release.d.ts +19 -0
- package/dist/tools/fap/fap-invoice-hold-release.d.ts.map +1 -0
- package/dist/tools/fap/fap-invoice-hold-release.js +65 -0
- package/dist/tools/fap/fap-invoice-hold-release.js.map +1 -0
- package/dist/tools/fap/fap-supplier-bill-create.d.ts +14 -0
- package/dist/tools/fap/fap-supplier-bill-create.d.ts.map +1 -0
- package/dist/tools/fap/fap-supplier-bill-create.js +90 -0
- package/dist/tools/fap/fap-supplier-bill-create.js.map +1 -0
- package/dist/tools/fap/fap-supplier-bill-line-add.d.ts +8 -0
- package/dist/tools/fap/fap-supplier-bill-line-add.d.ts.map +1 -0
- package/dist/tools/fap/fap-supplier-bill-line-add.js +75 -0
- package/dist/tools/fap/fap-supplier-bill-line-add.js.map +1 -0
- package/dist/tools/fap/fap-supplier-create.d.ts +9 -0
- package/dist/tools/fap/fap-supplier-create.d.ts.map +1 -0
- package/dist/tools/fap/fap-supplier-create.js +53 -0
- package/dist/tools/fap/fap-supplier-create.js.map +1 -0
- package/dist/tools/fap/fap-supplier-status-set.d.ts +8 -0
- package/dist/tools/fap/fap-supplier-status-set.d.ts.map +1 -0
- package/dist/tools/fap/fap-supplier-status-set.js +62 -0
- package/dist/tools/fap/fap-supplier-status-set.js.map +1 -0
- package/dist/tools/fap/fap-supplier-update.d.ts +8 -0
- package/dist/tools/fap/fap-supplier-update.d.ts.map +1 -0
- package/dist/tools/fap/fap-supplier-update.js +51 -0
- package/dist/tools/fap/fap-supplier-update.js.map +1 -0
- package/dist/tools/fap/generated-reads.d.ts +5 -0
- package/dist/tools/fap/generated-reads.d.ts.map +1 -0
- package/dist/tools/fap/generated-reads.js +19 -0
- package/dist/tools/fap/generated-reads.js.map +1 -0
- package/dist/tools/fap/index.d.ts +5 -0
- package/dist/tools/fap/index.d.ts.map +1 -0
- package/dist/tools/fap/index.js +21 -0
- package/dist/tools/fap/index.js.map +1 -0
- package/dist/tools/far/far-cash-receipt-record.d.ts +27 -0
- package/dist/tools/far/far-cash-receipt-record.d.ts.map +1 -0
- package/dist/tools/far/far-cash-receipt-record.js +101 -0
- package/dist/tools/far/far-cash-receipt-record.js.map +1 -0
- package/dist/tools/far/far-customer-create.d.ts +12 -0
- package/dist/tools/far/far-customer-create.d.ts.map +1 -0
- package/dist/tools/far/far-customer-create.js +54 -0
- package/dist/tools/far/far-customer-create.js.map +1 -0
- package/dist/tools/far/far-customer-invoice-create.d.ts +13 -0
- package/dist/tools/far/far-customer-invoice-create.d.ts.map +1 -0
- package/dist/tools/far/far-customer-invoice-create.js +76 -0
- package/dist/tools/far/far-customer-invoice-create.js.map +1 -0
- package/dist/tools/far/far-customer-invoice-line-add.d.ts +10 -0
- package/dist/tools/far/far-customer-invoice-line-add.d.ts.map +1 -0
- package/dist/tools/far/far-customer-invoice-line-add.js +77 -0
- package/dist/tools/far/far-customer-invoice-line-add.js.map +1 -0
- package/dist/tools/far/far-customer-status-set.d.ts +15 -0
- package/dist/tools/far/far-customer-status-set.d.ts.map +1 -0
- package/dist/tools/far/far-customer-status-set.js +70 -0
- package/dist/tools/far/far-customer-status-set.js.map +1 -0
- package/dist/tools/far/far-customer-update.d.ts +10 -0
- package/dist/tools/far/far-customer-update.d.ts.map +1 -0
- package/dist/tools/far/far-customer-update.js +51 -0
- package/dist/tools/far/far-customer-update.js.map +1 -0
- package/dist/tools/far/generated-reads.d.ts +5 -0
- package/dist/tools/far/generated-reads.d.ts.map +1 -0
- package/dist/tools/far/generated-reads.js +25 -0
- package/dist/tools/far/generated-reads.js.map +1 -0
- package/dist/tools/far/index.d.ts +5 -0
- package/dist/tools/far/index.d.ts.map +1 -0
- package/dist/tools/far/index.js +19 -0
- package/dist/tools/far/index.js.map +1 -0
- package/dist/tools/role-mapping.d.ts.map +1 -1
- package/dist/tools/role-mapping.js +12 -0
- package/dist/tools/role-mapping.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,15 +43,12 @@ RAYTIO_COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
43
43
|
RAYTIO_COGNITO_REGION=us-east-1
|
|
44
44
|
RAYTIO_AGENT_USERNAME=agent@example.com
|
|
45
45
|
RAYTIO_AGENT_PASSWORD=...
|
|
46
|
-
|
|
47
|
-
RAYTIO_AGENT_CUSTOMER_ID=00000000-0000-0000-0000-000000000000
|
|
48
|
-
RAYTIO_TARGET_USER_EMAIL=user@example.com
|
|
49
|
-
# Optional: static override for tool domains (see "Tool domain selection" below).
|
|
50
|
-
# If unset, domains are resolved dynamically from the user's backend roles.
|
|
51
|
-
# RAYTIO_TOOL_DOMAINS=ppm-readonly
|
|
46
|
+
RAYTIO_TOOL_DOMAINS=ppm,wrm
|
|
52
47
|
EOF
|
|
53
48
|
```
|
|
54
49
|
|
|
50
|
+
This is a minimal PPM/WRM-only configuration; the account must still have the corresponding backend permissions. To enable DSM, include `dsm` in the domain selection and supply both `RAYTIO_AGENT_CUSTOMER_ID` (UUID) and `RAYTIO_AGENT_ENCRYPTION_PASSWORD`. After role/domain resolution, startup fails if a selected DSM tool needs either missing variable, naming only the missing env vars. This also applies when domains are resolved dynamically. `RAYTIO_TARGET_USER_EMAIL` is optional and retained for compatibility; no tool uses it.
|
|
51
|
+
|
|
55
52
|
Then register the MCP server, passing only the pointer:
|
|
56
53
|
|
|
57
54
|
```bash
|
|
@@ -181,6 +178,14 @@ Set `RAYTIO_TOOL_DOMAINS` (comma-separated) to bypass dynamic resolution entirel
|
|
|
181
178
|
- **Restrict** an agent below its actual role (e.g. force `ppm-readonly` even though the account has `PROJECT_USER`).
|
|
182
179
|
- **Lock in** a known domain set regardless of backend role changes.
|
|
183
180
|
|
|
181
|
+
#### Tool allow-list with `RAYTIO_ENABLED_TOOLS`
|
|
182
|
+
|
|
183
|
+
Domains are the narrowest built-in filter, and `ppm` and `wrm` each hold many write tools. To expose specific tools, set `RAYTIO_ENABLED_TOOLS` to a comma-separated list of tool names, for example `RAYTIO_ENABLED_TOOLS=ppm_work_item_get,wrm_role_memory_list`.
|
|
184
|
+
|
|
185
|
+
The list is applied after the role-domain and capability filters, so it can only narrow what the user may access. A tool outside it is neither listed nor callable. If the variable is unset, there is no extra restriction. If it is set but blank, the server exposes no tools. Names the user can't access are skipped and logged to stderr.
|
|
186
|
+
|
|
187
|
+
raytio-auto sets this for each run from the agent's WRM tool bindings, which enforces them even when the MCP client runs with its own permission checks bypassed.
|
|
188
|
+
|
|
184
189
|
**Available domains** (source: `src/tools/domains.ts`, also listed at the top of `docs/tools.md`):
|
|
185
190
|
|
|
186
191
|
| Domain ID | Notes |
|
|
@@ -258,7 +263,7 @@ RAYTIO_AGENT_PASSWORD=your-agent-password
|
|
|
258
263
|
RAYTIO_AGENT_ENCRYPTION_PASSWORD=your-encryption-password
|
|
259
264
|
RAYTIO_AGENT_CUSTOMER_ID=00000000-0000-0000-0000-000000000000
|
|
260
265
|
|
|
261
|
-
#
|
|
266
|
+
# Optional legacy target user (unused by tools)
|
|
262
267
|
RAYTIO_TARGET_USER_EMAIL=user@example.com
|
|
263
268
|
|
|
264
269
|
# Optional: Embedding Settings for semantic memory tools. The API URL accepts
|
package/config.env.example
CHANGED
|
@@ -7,20 +7,27 @@ RAYTIO_COGNITO_REGION=us-east-1
|
|
|
7
7
|
# Agent User Credentials
|
|
8
8
|
RAYTIO_AGENT_USERNAME=agent-assistant@example.com
|
|
9
9
|
RAYTIO_AGENT_PASSWORD=your-agent-password-here
|
|
10
|
+
# DSM only: required when the resolved DSM tools need them; otherwise omit.
|
|
10
11
|
RAYTIO_AGENT_ENCRYPTION_PASSWORD=your-encryption-password-here
|
|
11
12
|
RAYTIO_AGENT_CUSTOMER_ID=00000000-0000-0000-0000-000000000000
|
|
12
13
|
|
|
13
|
-
#
|
|
14
|
+
# Optional legacy target user (unused by tools; may be omitted)
|
|
14
15
|
RAYTIO_TARGET_USER_EMAIL=user@example.com
|
|
15
16
|
|
|
16
17
|
# Optional: static override for which tool domains are exposed (comma-separated).
|
|
17
|
-
# If set,
|
|
18
|
+
# If set, restricts the domains allowed by the user's backend roles.
|
|
18
19
|
# If unset, the server queries the user's backend roles at startup and exposes
|
|
19
20
|
# only the domains the user has permissions for.
|
|
20
21
|
# Run `npm run docs:tools` to see available domain IDs.
|
|
21
|
-
#
|
|
22
|
+
# Minimal PPM/WRM setup: omit both DSM-only variables and target email.
|
|
23
|
+
# RAYTIO_TOOL_DOMAINS=ppm,wrm
|
|
22
24
|
# RAYTIO_TOOL_DOMAINS=dsm,ppm
|
|
23
25
|
|
|
26
|
+
# Optional: expose only these tools (comma-separated tool names). Applied after
|
|
27
|
+
# the domain and capability filters, so it can only narrow access. Unset means
|
|
28
|
+
# no extra restriction; set but blank exposes no tools.
|
|
29
|
+
# RAYTIO_ENABLED_TOOLS=ppm_work_item_get,wrm_role_memory_list
|
|
30
|
+
|
|
24
31
|
# Optional: Embedding Settings for semantic memory tools. The URL may be an
|
|
25
32
|
# API base (with or without /v1) or the full /v1/embeddings endpoint.
|
|
26
33
|
RAYTIO_EMBEDDING_API_KEY=your-embedding-api-key-here
|
package/dist/authorization.d.ts
CHANGED
|
@@ -50,5 +50,17 @@ export declare function resolveToolDomains(apiClient: RaytioApiClient, envSpec:
|
|
|
50
50
|
* explicit affirmation, not a fallthrough.
|
|
51
51
|
*/
|
|
52
52
|
export declare function filterToolsByCapabilities(tools: readonly Tool[], capabilities: EffectiveCapabilityIndex, logger?: StderrLogger): Tool[];
|
|
53
|
+
/**
|
|
54
|
+
* Restrict the tool surface to an explicit allow-list (`RAYTIO_ENABLED_TOOLS`,
|
|
55
|
+
* comma-separated wire tool names). Runners pass a role's WRM tool bindings
|
|
56
|
+
* here so the limit holds even for clients that bypass their own permission
|
|
57
|
+
* checks.
|
|
58
|
+
*
|
|
59
|
+
* Applied after the role-domain and capability filters, so it can only narrow
|
|
60
|
+
* the surface: a named tool those filters removed stays hidden. Unset means no
|
|
61
|
+
* restriction. Set but blank exposes nothing, because a caller that asked for
|
|
62
|
+
* a limit must not silently receive every tool.
|
|
63
|
+
*/
|
|
64
|
+
export declare function filterToolsByAllowlist(tools: readonly Tool[], spec: string | undefined, logger?: StderrLogger): Tool[];
|
|
53
65
|
export {};
|
|
54
66
|
//# sourceMappingURL=authorization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EAEzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,mHAAmH;IACnH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EAEzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,mHAAmH;IACnH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAsD3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,GAAE,YAAsB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,YAAY,EAAE,wBAAwB,EACtC,MAAM,GAAE,YAAsB,GAC7B,IAAI,EAAE,CA8BR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,MAAM,GAAE,YAAsB,GAC7B,IAAI,EAAE,CAkBR"}
|
package/dist/authorization.js
CHANGED
|
@@ -14,6 +14,8 @@ const READONLY_PARENTS = {
|
|
|
14
14
|
'fnd-readonly': 'fnd',
|
|
15
15
|
'fxm-readonly': 'fxm',
|
|
16
16
|
'cmm-readonly': 'cmm',
|
|
17
|
+
'far-readonly': 'far',
|
|
18
|
+
'fap-readonly': 'fap',
|
|
17
19
|
};
|
|
18
20
|
function parseSpec(spec) {
|
|
19
21
|
if (!spec)
|
|
@@ -151,4 +153,32 @@ export function filterToolsByCapabilities(tools, capabilities, logger = console)
|
|
|
151
153
|
}
|
|
152
154
|
return allowed;
|
|
153
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Restrict the tool surface to an explicit allow-list (`RAYTIO_ENABLED_TOOLS`,
|
|
158
|
+
* comma-separated wire tool names). Runners pass a role's WRM tool bindings
|
|
159
|
+
* here so the limit holds even for clients that bypass their own permission
|
|
160
|
+
* checks.
|
|
161
|
+
*
|
|
162
|
+
* Applied after the role-domain and capability filters, so it can only narrow
|
|
163
|
+
* the surface: a named tool those filters removed stays hidden. Unset means no
|
|
164
|
+
* restriction. Set but blank exposes nothing, because a caller that asked for
|
|
165
|
+
* a limit must not silently receive every tool.
|
|
166
|
+
*/
|
|
167
|
+
export function filterToolsByAllowlist(tools, spec, logger = console) {
|
|
168
|
+
if (spec === undefined) {
|
|
169
|
+
return [...tools];
|
|
170
|
+
}
|
|
171
|
+
const names = new Set(spec.split(',').map((s) => s.trim()).filter(Boolean));
|
|
172
|
+
if (names.size === 0) {
|
|
173
|
+
logger.error('Raytio MCP: RAYTIO_ENABLED_TOOLS is set but empty — exposing no tools');
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
const allowed = tools.filter((tool) => names.has(tool.name));
|
|
177
|
+
const exposed = new Set(allowed.map((tool) => tool.name));
|
|
178
|
+
const unavailable = [...names].filter((name) => !exposed.has(name));
|
|
179
|
+
if (unavailable.length > 0) {
|
|
180
|
+
logger.error(`Raytio MCP: RAYTIO_ENABLED_TOOLS names ${unavailable.length} tool(s) not available to this user: ${unavailable.join(', ')}`);
|
|
181
|
+
}
|
|
182
|
+
return allowed;
|
|
183
|
+
}
|
|
154
184
|
//# sourceMappingURL=authorization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.js","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"authorization.js","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -33,26 +33,26 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
33
33
|
agentUser: z.ZodObject<{
|
|
34
34
|
username: z.ZodString;
|
|
35
35
|
password: z.ZodString;
|
|
36
|
-
encryptionPassword: z.ZodString
|
|
37
|
-
customerId: z.ZodString
|
|
36
|
+
encryptionPassword: z.ZodOptional<z.ZodString>;
|
|
37
|
+
customerId: z.ZodOptional<z.ZodString>;
|
|
38
38
|
}, "strip", z.ZodTypeAny, {
|
|
39
39
|
username: string;
|
|
40
40
|
password: string;
|
|
41
|
-
encryptionPassword
|
|
42
|
-
customerId
|
|
41
|
+
encryptionPassword?: string | undefined;
|
|
42
|
+
customerId?: string | undefined;
|
|
43
43
|
}, {
|
|
44
44
|
username: string;
|
|
45
45
|
password: string;
|
|
46
|
-
encryptionPassword
|
|
47
|
-
customerId
|
|
46
|
+
encryptionPassword?: string | undefined;
|
|
47
|
+
customerId?: string | undefined;
|
|
48
48
|
}>;
|
|
49
|
-
targetUser: z.ZodObject<{
|
|
49
|
+
targetUser: z.ZodOptional<z.ZodObject<{
|
|
50
50
|
email: z.ZodString;
|
|
51
51
|
}, "strip", z.ZodTypeAny, {
|
|
52
52
|
email: string;
|
|
53
53
|
}, {
|
|
54
54
|
email: string;
|
|
55
|
-
}
|
|
55
|
+
}>>;
|
|
56
56
|
defaults: z.ZodDefault<z.ZodObject<{
|
|
57
57
|
requestTimeoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
58
58
|
pollIntervalSeconds: z.ZodDefault<z.ZodNumber>;
|
|
@@ -91,17 +91,17 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
91
91
|
agentUser: {
|
|
92
92
|
username: string;
|
|
93
93
|
password: string;
|
|
94
|
-
encryptionPassword
|
|
95
|
-
customerId
|
|
96
|
-
};
|
|
97
|
-
targetUser: {
|
|
98
|
-
email: string;
|
|
94
|
+
encryptionPassword?: string | undefined;
|
|
95
|
+
customerId?: string | undefined;
|
|
99
96
|
};
|
|
100
97
|
defaults: {
|
|
101
98
|
requestTimeoutSeconds: number;
|
|
102
99
|
pollIntervalSeconds: number;
|
|
103
100
|
requestExpiryMinutes: number;
|
|
104
101
|
};
|
|
102
|
+
targetUser?: {
|
|
103
|
+
email: string;
|
|
104
|
+
} | undefined;
|
|
105
105
|
embedding?: {
|
|
106
106
|
apiKey: string;
|
|
107
107
|
apiUrl: string;
|
|
@@ -119,12 +119,12 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
119
119
|
agentUser: {
|
|
120
120
|
username: string;
|
|
121
121
|
password: string;
|
|
122
|
-
encryptionPassword
|
|
123
|
-
customerId
|
|
122
|
+
encryptionPassword?: string | undefined;
|
|
123
|
+
customerId?: string | undefined;
|
|
124
124
|
};
|
|
125
|
-
targetUser
|
|
125
|
+
targetUser?: {
|
|
126
126
|
email: string;
|
|
127
|
-
};
|
|
127
|
+
} | undefined;
|
|
128
128
|
defaults?: {
|
|
129
129
|
requestTimeoutSeconds?: number | undefined;
|
|
130
130
|
pollIntervalSeconds?: number | undefined;
|
|
@@ -138,5 +138,9 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
138
138
|
}>;
|
|
139
139
|
export type Config = z.infer<typeof ConfigSchema>;
|
|
140
140
|
export declare function loadConfig(): Config;
|
|
141
|
+
/** Fail before advertising DSM tools that cannot run with this configuration. */
|
|
142
|
+
export declare function validateToolConfiguration(config: Config, tools: readonly {
|
|
143
|
+
name: string;
|
|
144
|
+
}[]): void;
|
|
141
145
|
export {};
|
|
142
146
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,IAAI,MAAM,CA2CnC;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACjC,IAAI,CAYN"}
|
package/dist/config.js
CHANGED
|
@@ -22,12 +22,13 @@ const ConfigSchema = z.object({
|
|
|
22
22
|
agentUser: z.object({
|
|
23
23
|
username: z.string().email(),
|
|
24
24
|
password: z.string().min(1),
|
|
25
|
-
encryptionPassword: z.string().min(1),
|
|
26
|
-
customerId: z.string().uuid(),
|
|
25
|
+
encryptionPassword: z.string().min(1).optional(),
|
|
26
|
+
customerId: z.string().uuid().optional(),
|
|
27
27
|
}),
|
|
28
|
+
// Retained for compatibility with existing config files; no tool uses it.
|
|
28
29
|
targetUser: z.object({
|
|
29
30
|
email: z.string().email(),
|
|
30
|
-
}),
|
|
31
|
+
}).optional(),
|
|
31
32
|
defaults: z.object({
|
|
32
33
|
requestTimeoutSeconds: z.number().default(600),
|
|
33
34
|
pollIntervalSeconds: z.number().default(5),
|
|
@@ -56,9 +57,9 @@ export function loadConfig() {
|
|
|
56
57
|
encryptionPassword: process.env.RAYTIO_AGENT_ENCRYPTION_PASSWORD,
|
|
57
58
|
customerId: process.env.RAYTIO_AGENT_CUSTOMER_ID,
|
|
58
59
|
},
|
|
59
|
-
targetUser:
|
|
60
|
-
email: process.env.RAYTIO_TARGET_USER_EMAIL
|
|
61
|
-
|
|
60
|
+
targetUser: process.env.RAYTIO_TARGET_USER_EMAIL !== undefined
|
|
61
|
+
? { email: process.env.RAYTIO_TARGET_USER_EMAIL }
|
|
62
|
+
: undefined,
|
|
62
63
|
defaults: {
|
|
63
64
|
requestTimeoutSeconds: parseInt(process.env.RAYTIO_REQUEST_TIMEOUT_SECONDS || '600'),
|
|
64
65
|
pollIntervalSeconds: parseInt(process.env.RAYTIO_POLL_INTERVAL_SECONDS || '5'),
|
|
@@ -83,4 +84,18 @@ export function loadConfig() {
|
|
|
83
84
|
throw error;
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
/** Fail before advertising DSM tools that cannot run with this configuration. */
|
|
88
|
+
export function validateToolConfiguration(config, tools) {
|
|
89
|
+
const names = new Set(tools.map(tool => tool.name));
|
|
90
|
+
const missing = [];
|
|
91
|
+
if (names.has('create_access_application') && !config.agentUser.customerId) {
|
|
92
|
+
missing.push('RAYTIO_AGENT_CUSTOMER_ID');
|
|
93
|
+
}
|
|
94
|
+
if (names.has('poll_and_retrieve') && !config.agentUser.encryptionPassword) {
|
|
95
|
+
missing.push('RAYTIO_AGENT_ENCRYPTION_PASSWORD');
|
|
96
|
+
}
|
|
97
|
+
if (missing.length) {
|
|
98
|
+
throw new Error(`DSM tools require missing configuration: ${missing.join(', ')}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
86
101
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,8EAA8E;AAC9E,6EAA6E;AAC7E,sEAAsE;AACtE,yDAAyD;AACzD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB;OAC5C,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAC5C,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAE7B,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;KACH,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;QAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,12 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
5
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
6
|
-
import { loadConfig } from './config.js';
|
|
6
|
+
import { loadConfig, validateToolConfiguration } from './config.js';
|
|
7
7
|
import { PersistContractError, loadPersistResourceContract, } from './contracts/persist-resource-contract.js';
|
|
8
8
|
import { CognitoAuth } from './raytio/auth.js';
|
|
9
9
|
import { RaytioApiClient } from './raytio/api-client.js';
|
|
10
10
|
import { resolveDomains } from './tools/domains.js';
|
|
11
|
-
import { filterToolsByCapabilities, resolveToolDomains } from './authorization.js';
|
|
11
|
+
import { filterToolsByAllowlist, filterToolsByCapabilities, resolveToolDomains, } from './authorization.js';
|
|
12
12
|
import { dispatchToolCall } from './tools/dispatch.js';
|
|
13
13
|
import { PACKAGE_VERSION } from './version.js';
|
|
14
14
|
// Load configuration
|
|
@@ -52,13 +52,19 @@ const authorization = await resolveToolDomains(apiClient, process.env.RAYTIO_TOO
|
|
|
52
52
|
const domainTools = authorization.authorized
|
|
53
53
|
? resolveDomains(authorization.domainSpec)
|
|
54
54
|
: [];
|
|
55
|
+
// Fail fast after domain resolution, before advertising any DSM tools.
|
|
56
|
+
validateToolConfiguration(config, domainTools);
|
|
55
57
|
// Layer the effective-capability filter on top of the role-domain filter.
|
|
56
58
|
// Tools without a declared `capabilities` field pass through unchanged —
|
|
57
59
|
// they remain gated by the role-domain filter until they are migrated
|
|
58
60
|
// onto the pinned Persist resource contract (WI-0003500 onward).
|
|
59
|
-
const
|
|
61
|
+
const capabilityTools = authorization.authorized && authorization.capabilities
|
|
60
62
|
? filterToolsByCapabilities(domainTools, authorization.capabilities)
|
|
61
63
|
: domainTools;
|
|
64
|
+
// Optional per-process allow-list, applied last so it can only narrow the
|
|
65
|
+
// surface. ListTools and CallTool both use allTools, so a tool outside the
|
|
66
|
+
// list can be neither discovered nor called.
|
|
67
|
+
const allTools = filterToolsByAllowlist(capabilityTools, process.env.RAYTIO_ENABLED_TOOLS);
|
|
62
68
|
console.error(`Raytio MCP: exposing ${allTools.length} tools` +
|
|
63
69
|
(authorization.domainSpec
|
|
64
70
|
? ` (domains: ${authorization.domainSpec})`
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Shared idempotency plumbing for financial (FAR/FAP) mutation tools
|
|
4
|
+
* (WI-0003504).
|
|
5
|
+
*
|
|
6
|
+
* Financial mutations (invoice creation, receipt recording, hold
|
|
7
|
+
* placement) MUST be safe to retry — model callers routinely re-send
|
|
8
|
+
* on transient network errors, and a duplicated receipt is a
|
|
9
|
+
* production incident. We express this two ways:
|
|
10
|
+
*
|
|
11
|
+
* - Tools that have a natural key (a unique index such as
|
|
12
|
+
* organisation + transaction_code, organisation + receipt_number,
|
|
13
|
+
* open hold per bill + hold_code) require it, document it in the
|
|
14
|
+
* tool description, and inherit `idempotency: 'natural_key'`. A
|
|
15
|
+
* retry then fails with a duplicate-key error instead of creating
|
|
16
|
+
* a second row.
|
|
17
|
+
* - Every side-effecting tool also accepts an OPTIONAL
|
|
18
|
+
* `idempotency_key`, forwarded as an `Idempotency-Key` header.
|
|
19
|
+
* Persist (PostgREST) ignores that header today (WI-0008817), so
|
|
20
|
+
* the key does not make a retry safe on its own.
|
|
21
|
+
*
|
|
22
|
+
* The MCP server does not maintain its own dedupe cache — the
|
|
23
|
+
* canonical answer lives in Persist. This module keeps the input
|
|
24
|
+
* schema and header-injection logic in one place so every FAR/FAP
|
|
25
|
+
* mutation surfaces the same contract.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Zod schema for the optional idempotency key input. Keeps the shape
|
|
29
|
+
* consistent so callers passing the same key across tools do not need
|
|
30
|
+
* to remember tool-specific spellings.
|
|
31
|
+
*/
|
|
32
|
+
export declare const idempotencyKeySchema: z.ZodOptional<z.ZodString>;
|
|
33
|
+
/**
|
|
34
|
+
* Build the request headers for a financial mutation. Passes through
|
|
35
|
+
* `Prefer: return=representation` (needed for PostgREST to echo the
|
|
36
|
+
* created/updated row) and adds `Idempotency-Key` when supplied.
|
|
37
|
+
*/
|
|
38
|
+
export declare function financeWriteHeaders(idempotencyKey: string | undefined): Record<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Zod schema for a caller-supplied confirmation flag. Used on
|
|
41
|
+
* consequential actions (cash receipt, hold release) where an
|
|
42
|
+
* explicit `confirm: true` is required in addition to the required
|
|
43
|
+
* business inputs.
|
|
44
|
+
*/
|
|
45
|
+
export declare const confirmFlagSchema: z.ZodLiteral<true>;
|
|
46
|
+
/**
|
|
47
|
+
* Zod schema for a caller-supplied reason string. Used on lifecycle
|
|
48
|
+
* transitions (invoice status change, hold release) so the audit log
|
|
49
|
+
* carries a human-readable justification.
|
|
50
|
+
*/
|
|
51
|
+
export declare const reasonSchema: z.ZodString;
|
|
52
|
+
//# sourceMappingURL=finance-idempotency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance-idempotency.d.ts","sourceRoot":"","sources":["../../../src/tools/_shared/finance-idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,4BAa9B,CAAC;AAEJ;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,oBAW3B,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,YAAY,aAG2B,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Shared idempotency plumbing for financial (FAR/FAP) mutation tools
|
|
4
|
+
* (WI-0003504).
|
|
5
|
+
*
|
|
6
|
+
* Financial mutations (invoice creation, receipt recording, hold
|
|
7
|
+
* placement) MUST be safe to retry — model callers routinely re-send
|
|
8
|
+
* on transient network errors, and a duplicated receipt is a
|
|
9
|
+
* production incident. We express this two ways:
|
|
10
|
+
*
|
|
11
|
+
* - Tools that have a natural key (a unique index such as
|
|
12
|
+
* organisation + transaction_code, organisation + receipt_number,
|
|
13
|
+
* open hold per bill + hold_code) require it, document it in the
|
|
14
|
+
* tool description, and inherit `idempotency: 'natural_key'`. A
|
|
15
|
+
* retry then fails with a duplicate-key error instead of creating
|
|
16
|
+
* a second row.
|
|
17
|
+
* - Every side-effecting tool also accepts an OPTIONAL
|
|
18
|
+
* `idempotency_key`, forwarded as an `Idempotency-Key` header.
|
|
19
|
+
* Persist (PostgREST) ignores that header today (WI-0008817), so
|
|
20
|
+
* the key does not make a retry safe on its own.
|
|
21
|
+
*
|
|
22
|
+
* The MCP server does not maintain its own dedupe cache — the
|
|
23
|
+
* canonical answer lives in Persist. This module keeps the input
|
|
24
|
+
* schema and header-injection logic in one place so every FAR/FAP
|
|
25
|
+
* mutation surfaces the same contract.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Zod schema for the optional idempotency key input. Keeps the shape
|
|
29
|
+
* consistent so callers passing the same key across tools do not need
|
|
30
|
+
* to remember tool-specific spellings.
|
|
31
|
+
*/
|
|
32
|
+
export const idempotencyKeySchema = z
|
|
33
|
+
.string()
|
|
34
|
+
.min(8)
|
|
35
|
+
.max(128)
|
|
36
|
+
.regex(/^[A-Za-z0-9._~:-]+$/, 'idempotency_key must be a URL-safe token (letters, digits, `.`, `_`, `~`, `:`, `-`)')
|
|
37
|
+
.optional()
|
|
38
|
+
.describe('Optional idempotency key, forwarded as an Idempotency-Key header. Persist does not ' +
|
|
39
|
+
'deduplicate on it yet, so it does not make a retry safe on its own; the unique key ' +
|
|
40
|
+
'named in the tool description does. Must be a URL-safe token of 8–128 characters.');
|
|
41
|
+
/**
|
|
42
|
+
* Build the request headers for a financial mutation. Passes through
|
|
43
|
+
* `Prefer: return=representation` (needed for PostgREST to echo the
|
|
44
|
+
* created/updated row) and adds `Idempotency-Key` when supplied.
|
|
45
|
+
*/
|
|
46
|
+
export function financeWriteHeaders(idempotencyKey) {
|
|
47
|
+
const headers = {
|
|
48
|
+
Prefer: 'return=representation',
|
|
49
|
+
};
|
|
50
|
+
if (idempotencyKey) {
|
|
51
|
+
headers['Idempotency-Key'] = idempotencyKey;
|
|
52
|
+
}
|
|
53
|
+
return headers;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Zod schema for a caller-supplied confirmation flag. Used on
|
|
57
|
+
* consequential actions (cash receipt, hold release) where an
|
|
58
|
+
* explicit `confirm: true` is required in addition to the required
|
|
59
|
+
* business inputs.
|
|
60
|
+
*/
|
|
61
|
+
export const confirmFlagSchema = z
|
|
62
|
+
.literal(true, {
|
|
63
|
+
errorMap: () => ({
|
|
64
|
+
message: 'confirm must be set to `true` to acknowledge that this is a financial action ' +
|
|
65
|
+
'affecting real balances.',
|
|
66
|
+
}),
|
|
67
|
+
})
|
|
68
|
+
.describe('Must be `true` to execute. Present so a model cannot accidentally record a receipt, ' +
|
|
69
|
+
'release a hold, or move money without an explicit confirmation step.');
|
|
70
|
+
/**
|
|
71
|
+
* Zod schema for a caller-supplied reason string. Used on lifecycle
|
|
72
|
+
* transitions (invoice status change, hold release) so the audit log
|
|
73
|
+
* carries a human-readable justification.
|
|
74
|
+
*/
|
|
75
|
+
export const reasonSchema = z
|
|
76
|
+
.string()
|
|
77
|
+
.min(4, 'reason must be at least 4 characters')
|
|
78
|
+
.max(500, 'reason must be at most 500 characters');
|
|
79
|
+
//# sourceMappingURL=finance-idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance-idempotency.js","sourceRoot":"","sources":["../../../src/tools/_shared/finance-idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CACJ,qBAAqB,EACrB,qFAAqF,CACtF;KACA,QAAQ,EAAE;KACV,QAAQ,CACP,qFAAqF;IACnF,qFAAqF;IACrF,mFAAmF,CACtF,CAAC;AAEJ;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,cAAkC;IAElC,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,uBAAuB;KAChC,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,iBAAiB,CAAC,GAAG,cAAc,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,OAAO,CAAC,IAAI,EAAE;IACb,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACf,OAAO,EACL,+EAA+E;YAC7E,0BAA0B;KAC/B,CAAC;CACH,CAAC;KACD,QAAQ,CACP,sFAAsF;IACpF,sEAAsE,CACzE,CAAC;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;KAC9C,GAAG,CAAC,GAAG,EAAE,uCAAuC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** ISO 4217 alphabetic currency code, uppercase — validated at the MCP boundary. */
|
|
3
|
+
export declare const currencyCodeSchema: z.ZodString;
|
|
4
|
+
/** Positive money amount (> 0, ≤ 4 dp, bounded magnitude). */
|
|
5
|
+
export declare const positiveMoneySchema: z.ZodEffects<z.ZodNumber, number, number>;
|
|
6
|
+
/** Non-negative money amount (≥ 0, ≤ 4 dp, bounded magnitude). */
|
|
7
|
+
export declare const nonNegativeMoneySchema: z.ZodEffects<z.ZodNumber, number, number>;
|
|
8
|
+
/** Signed money amount (any sign, ≤ 4 dp, bounded magnitude) — for adjustments. */
|
|
9
|
+
export declare const signedMoneySchema: z.ZodEffects<z.ZodNumber, number, number>;
|
|
10
|
+
//# sourceMappingURL=money.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../../../src/tools/_shared/money.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqBxB,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,aAK5B,CAAC;AAuCJ,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,2CAW5B,CAAC;AAEL,kEAAkE;AAClE,eAAO,MAAM,sBAAsB,2CAW/B,CAAC;AAEL,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,2CAEoC,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Shared money and currency validators for financial (FAR/FAP) tools
|
|
4
|
+
* (WI-0003504). Kept in one place so amount/currency semantics stay
|
|
5
|
+
* consistent across every AR/AP mutation surface.
|
|
6
|
+
*
|
|
7
|
+
* Money validation rules:
|
|
8
|
+
* - Currency codes must be a 3-letter ISO 4217 alphabetic code
|
|
9
|
+
* (uppercase). We do not validate against a live currency list —
|
|
10
|
+
* Persist owns that lookup — but reject the obviously malformed
|
|
11
|
+
* (empty string, wrong length, non-alphabetic) at the MCP boundary.
|
|
12
|
+
* - Amounts must be finite JSON numbers with at most 4 decimal
|
|
13
|
+
* fractional places (banker precision limit) and a magnitude that
|
|
14
|
+
* fits inside PostgREST's numeric range without silent truncation.
|
|
15
|
+
* - `nonNegativeMoney` allows zero (e.g. an adjustment line); use
|
|
16
|
+
* `positiveMoney` for a receipt/payment amount that must move value.
|
|
17
|
+
*/
|
|
18
|
+
const ISO_CURRENCY_RE = /^[A-Z]{3}$/;
|
|
19
|
+
/** ISO 4217 alphabetic currency code, uppercase — validated at the MCP boundary. */
|
|
20
|
+
export const currencyCodeSchema = z
|
|
21
|
+
.string()
|
|
22
|
+
.regex(ISO_CURRENCY_RE, 'currency_code must be a 3-letter uppercase ISO 4217 code (e.g. USD, EUR, AUD)');
|
|
23
|
+
// Max 4 decimal places, magnitude below 1e14 to stay well within Postgres
|
|
24
|
+
// numeric(20,4). Any amount larger is almost certainly a caller mistake.
|
|
25
|
+
const MAX_MAGNITUDE = 1e14;
|
|
26
|
+
const MAX_FRACTIONAL_DIGITS = 4;
|
|
27
|
+
function fractionalDigits(value) {
|
|
28
|
+
if (!Number.isFinite(value))
|
|
29
|
+
return Infinity;
|
|
30
|
+
const s = String(value);
|
|
31
|
+
const dot = s.indexOf('.');
|
|
32
|
+
if (dot < 0)
|
|
33
|
+
return 0;
|
|
34
|
+
const exp = s.toLowerCase().indexOf('e');
|
|
35
|
+
if (exp >= 0)
|
|
36
|
+
return Infinity;
|
|
37
|
+
return s.length - dot - 1;
|
|
38
|
+
}
|
|
39
|
+
function validateMoneyMagnitude(value, ctx) {
|
|
40
|
+
if (!Number.isFinite(value)) {
|
|
41
|
+
ctx.addIssue({
|
|
42
|
+
code: z.ZodIssueCode.custom,
|
|
43
|
+
message: 'amount must be a finite number',
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (Math.abs(value) >= MAX_MAGNITUDE) {
|
|
48
|
+
ctx.addIssue({
|
|
49
|
+
code: z.ZodIssueCode.custom,
|
|
50
|
+
message: `amount magnitude must be less than ${MAX_MAGNITUDE}`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (fractionalDigits(value) > MAX_FRACTIONAL_DIGITS) {
|
|
54
|
+
ctx.addIssue({
|
|
55
|
+
code: z.ZodIssueCode.custom,
|
|
56
|
+
message: `amount must have at most ${MAX_FRACTIONAL_DIGITS} decimal places`,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Positive money amount (> 0, ≤ 4 dp, bounded magnitude). */
|
|
61
|
+
export const positiveMoneySchema = z
|
|
62
|
+
.number()
|
|
63
|
+
.superRefine((value, ctx) => {
|
|
64
|
+
if (value <= 0) {
|
|
65
|
+
ctx.addIssue({
|
|
66
|
+
code: z.ZodIssueCode.custom,
|
|
67
|
+
message: 'amount must be greater than 0',
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
validateMoneyMagnitude(value, ctx);
|
|
72
|
+
});
|
|
73
|
+
/** Non-negative money amount (≥ 0, ≤ 4 dp, bounded magnitude). */
|
|
74
|
+
export const nonNegativeMoneySchema = z
|
|
75
|
+
.number()
|
|
76
|
+
.superRefine((value, ctx) => {
|
|
77
|
+
if (value < 0) {
|
|
78
|
+
ctx.addIssue({
|
|
79
|
+
code: z.ZodIssueCode.custom,
|
|
80
|
+
message: 'amount must be greater than or equal to 0',
|
|
81
|
+
});
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
validateMoneyMagnitude(value, ctx);
|
|
85
|
+
});
|
|
86
|
+
/** Signed money amount (any sign, ≤ 4 dp, bounded magnitude) — for adjustments. */
|
|
87
|
+
export const signedMoneySchema = z
|
|
88
|
+
.number()
|
|
89
|
+
.superRefine((value, ctx) => validateMoneyMagnitude(value, ctx));
|
|
90
|
+
//# sourceMappingURL=money.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money.js","sourceRoot":"","sources":["../../../src/tools/_shared/money.ts"],"names":[],"mappings":"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"}
|