@raytio/mcp-server 10.1.0 → 10.3.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/contracts/persist/mcp_resource_contract.json +4 -4
- package/dist/authorization.d.ts.map +1 -1
- package/dist/authorization.js +4 -0
- package/dist/authorization.js.map +1 -1
- package/dist/generated-reads/guardrails.js +1 -1
- package/dist/generated-reads/guardrails.js.map +1 -1
- package/dist/generated-reads/resource-tools.d.ts.map +1 -1
- package/dist/generated-reads/resource-tools.js +8 -5
- package/dist/generated-reads/resource-tools.js.map +1 -1
- package/dist/tools/_shared/side-effect.js +2 -2
- package/dist/tools/_shared/side-effect.js.map +1 -1
- package/dist/tools/_shared/soft-deactivate.d.ts +2 -0
- package/dist/tools/_shared/soft-deactivate.d.ts.map +1 -1
- package/dist/tools/_shared/soft-deactivate.js +3 -0
- package/dist/tools/_shared/soft-deactivate.js.map +1 -1
- package/dist/tools/domains.d.ts.map +1 -1
- package/dist/tools/domains.js +36 -0
- package/dist/tools/domains.js.map +1 -1
- package/dist/tools/imports/index.d.ts +6 -6
- package/dist/tools/ixn/generated-reads.d.ts +5 -0
- package/dist/tools/ixn/generated-reads.d.ts.map +1 -0
- package/dist/tools/ixn/generated-reads.js +29 -0
- package/dist/tools/ixn/generated-reads.js.map +1 -0
- package/dist/tools/ixn/index.d.ts +5 -0
- package/dist/tools/ixn/index.d.ts.map +1 -0
- package/dist/tools/ixn/index.js +8 -0
- package/dist/tools/ixn/index.js.map +1 -0
- package/dist/tools/ixn/ixn-conversation-start.d.ts +22 -0
- package/dist/tools/ixn/ixn-conversation-start.d.ts.map +1 -0
- package/dist/tools/ixn/ixn-conversation-start.js +98 -0
- package/dist/tools/ixn/ixn-conversation-start.js.map +1 -0
- package/dist/tools/ixn/ixn-message-send.d.ts +28 -0
- package/dist/tools/ixn/ixn-message-send.d.ts.map +1 -0
- package/dist/tools/ixn/ixn-message-send.js +92 -0
- package/dist/tools/ixn/ixn-message-send.js.map +1 -0
- package/dist/tools/pbm/generated-reads.d.ts +5 -0
- package/dist/tools/pbm/generated-reads.d.ts.map +1 -0
- package/dist/tools/pbm/generated-reads.js +32 -0
- package/dist/tools/pbm/generated-reads.js.map +1 -0
- package/dist/tools/pbm/index.d.ts +5 -0
- package/dist/tools/pbm/index.d.ts.map +1 -0
- package/dist/tools/pbm/index.js +17 -0
- package/dist/tools/pbm/index.js.map +1 -0
- package/dist/tools/pbm/pbm-customer-entitlement-override-set.d.ts +26 -0
- package/dist/tools/pbm/pbm-customer-entitlement-override-set.d.ts.map +1 -0
- package/dist/tools/pbm/pbm-customer-entitlement-override-set.js +78 -0
- package/dist/tools/pbm/pbm-customer-entitlement-override-set.js.map +1 -0
- package/dist/tools/pbm/pbm-subscription-cancel.d.ts +21 -0
- package/dist/tools/pbm/pbm-subscription-cancel.d.ts.map +1 -0
- package/dist/tools/pbm/pbm-subscription-cancel.js +86 -0
- package/dist/tools/pbm/pbm-subscription-cancel.js.map +1 -0
- package/dist/tools/pbm/pbm-subscription-create.d.ts +20 -0
- package/dist/tools/pbm/pbm-subscription-create.d.ts.map +1 -0
- package/dist/tools/pbm/pbm-subscription-create.js +90 -0
- package/dist/tools/pbm/pbm-subscription-create.js.map +1 -0
- package/dist/tools/pbm/pbm-subscription-line-add.d.ts +13 -0
- package/dist/tools/pbm/pbm-subscription-line-add.d.ts.map +1 -0
- package/dist/tools/pbm/pbm-subscription-line-add.js +65 -0
- package/dist/tools/pbm/pbm-subscription-line-add.js.map +1 -0
- package/dist/tools/pbm/pbm-subscription-line-end.d.ts +12 -0
- package/dist/tools/pbm/pbm-subscription-line-end.d.ts.map +1 -0
- package/dist/tools/pbm/pbm-subscription-line-end.js +49 -0
- package/dist/tools/pbm/pbm-subscription-line-end.js.map +1 -0
- package/dist/tools/qom/generated-reads.d.ts +5 -0
- package/dist/tools/qom/generated-reads.d.ts.map +1 -0
- package/dist/tools/qom/generated-reads.js +22 -0
- package/dist/tools/qom/generated-reads.js.map +1 -0
- package/dist/tools/qom/index.d.ts +5 -0
- package/dist/tools/qom/index.d.ts.map +1 -0
- package/dist/tools/qom/index.js +23 -0
- package/dist/tools/qom/index.js.map +1 -0
- package/dist/tools/qom/qom-order-cancel.d.ts +16 -0
- package/dist/tools/qom/qom-order-cancel.d.ts.map +1 -0
- package/dist/tools/qom/qom-order-cancel.js +56 -0
- package/dist/tools/qom/qom-order-cancel.js.map +1 -0
- package/dist/tools/qom/qom-order-create.d.ts +24 -0
- package/dist/tools/qom/qom-order-create.d.ts.map +1 -0
- package/dist/tools/qom/qom-order-create.js +133 -0
- package/dist/tools/qom/qom-order-create.js.map +1 -0
- package/dist/tools/qom/qom-order-hold-place.d.ts +11 -0
- package/dist/tools/qom/qom-order-hold-place.d.ts.map +1 -0
- package/dist/tools/qom/qom-order-hold-place.js +50 -0
- package/dist/tools/qom/qom-order-hold-place.js.map +1 -0
- package/dist/tools/qom/qom-order-hold-release.d.ts +8 -0
- package/dist/tools/qom/qom-order-hold-release.d.ts.map +1 -0
- package/dist/tools/qom/qom-order-hold-release.js +42 -0
- package/dist/tools/qom/qom-order-hold-release.js.map +1 -0
- package/dist/tools/qom/qom-order-line-add.d.ts +18 -0
- package/dist/tools/qom/qom-order-line-add.d.ts.map +1 -0
- package/dist/tools/qom/qom-order-line-add.js +101 -0
- package/dist/tools/qom/qom-order-line-add.js.map +1 -0
- package/dist/tools/qom/qom-quote-create.d.ts +20 -0
- package/dist/tools/qom/qom-quote-create.d.ts.map +1 -0
- package/dist/tools/qom/qom-quote-create.js +142 -0
- package/dist/tools/qom/qom-quote-create.js.map +1 -0
- package/dist/tools/qom/qom-quote-line-add.d.ts +13 -0
- package/dist/tools/qom/qom-quote-line-add.d.ts.map +1 -0
- package/dist/tools/qom/qom-quote-line-add.js +92 -0
- package/dist/tools/qom/qom-quote-line-add.js.map +1 -0
- package/dist/tools/qom/qom-quote-version-create.d.ts +10 -0
- package/dist/tools/qom/qom-quote-version-create.d.ts.map +1 -0
- package/dist/tools/qom/qom-quote-version-create.js +69 -0
- package/dist/tools/qom/qom-quote-version-create.js.map +1 -0
- package/dist/tools/role-mapping.d.ts.map +1 -1
- package/dist/tools/role-mapping.js +21 -8
- package/dist/tools/role-mapping.js.map +1 -1
- package/dist/tools/xrm/generated-reads.d.ts +5 -0
- package/dist/tools/xrm/generated-reads.d.ts.map +1 -0
- package/dist/tools/xrm/generated-reads.js +37 -0
- package/dist/tools/xrm/generated-reads.js.map +1 -0
- package/dist/tools/xrm/index.d.ts +5 -0
- package/dist/tools/xrm/index.d.ts.map +1 -0
- package/dist/tools/xrm/index.js +13 -0
- package/dist/tools/xrm/index.js.map +1 -0
- package/dist/tools/xrm/xrm-inbound-email-rule-create.d.ts +21 -0
- package/dist/tools/xrm/xrm-inbound-email-rule-create.d.ts.map +1 -0
- package/dist/tools/xrm/xrm-inbound-email-rule-create.js +85 -0
- package/dist/tools/xrm/xrm-inbound-email-rule-create.js.map +1 -0
- package/dist/tools/xrm/xrm-merchant-create.d.ts +22 -0
- package/dist/tools/xrm/xrm-merchant-create.d.ts.map +1 -0
- package/dist/tools/xrm/xrm-merchant-create.js +85 -0
- package/dist/tools/xrm/xrm-merchant-create.js.map +1 -0
- package/dist/tools/xrm/xrm-merchant-update.d.ts +14 -0
- package/dist/tools/xrm/xrm-merchant-update.d.ts.map +1 -0
- package/dist/tools/xrm/xrm-merchant-update.js +61 -0
- package/dist/tools/xrm/xrm-merchant-update.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-mapping.d.ts","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"role-mapping.d.ts","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAyDD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAuChE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,SAAS,EAAE,CAAC,CAEtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO7B"}
|
|
@@ -39,6 +39,18 @@ const ROLE_TO_DOMAINS = {
|
|
|
39
39
|
'Booking administrator': ['bkm'],
|
|
40
40
|
'Booking user': ['bkm'],
|
|
41
41
|
'Booking viewer': ['bkm-readonly'],
|
|
42
|
+
'Merchant administrator': ['xrm'],
|
|
43
|
+
'Merchant user': ['xrm'],
|
|
44
|
+
'Merchant viewer': ['xrm-readonly'],
|
|
45
|
+
'Interaction administrator': ['ixn'],
|
|
46
|
+
'Interaction user': ['ixn'],
|
|
47
|
+
'Interaction viewer': ['ixn-readonly'],
|
|
48
|
+
'Order administrator': ['qom'],
|
|
49
|
+
'Order user': ['qom'],
|
|
50
|
+
'Order viewer': ['qom-readonly'],
|
|
51
|
+
'Billing administrator': ['pbm'],
|
|
52
|
+
'Billing user': ['pbm'],
|
|
53
|
+
'Billing viewer': ['pbm-readonly'],
|
|
42
54
|
};
|
|
43
55
|
/**
|
|
44
56
|
* Given a list of user group names, resolve the set of tool domain IDs
|
|
@@ -57,14 +69,9 @@ export function mapRolesToDomains(groupNames) {
|
|
|
57
69
|
}
|
|
58
70
|
}
|
|
59
71
|
// Full access is a superset of readonly — drop readonly if full access is present
|
|
60
|
-
|
|
61
|
-
domains.
|
|
62
|
-
|
|
63
|
-
if (domains.has('wrm') && domains.has('wrm-readonly')) {
|
|
64
|
-
domains.delete('wrm-readonly');
|
|
65
|
-
}
|
|
66
|
-
if (domains.has('sfa') && domains.has('sfa-readonly')) {
|
|
67
|
-
domains.delete('sfa-readonly');
|
|
72
|
+
for (const parent of ['ppm', 'wrm', 'sfa', 'qom', 'pbm']) {
|
|
73
|
+
if (domains.has(parent))
|
|
74
|
+
domains.delete(`${parent}-readonly`);
|
|
68
75
|
}
|
|
69
76
|
if (domains.has('fxm') && domains.has('fxm-readonly')) {
|
|
70
77
|
domains.delete('fxm-readonly');
|
|
@@ -84,6 +91,12 @@ export function mapRolesToDomains(groupNames) {
|
|
|
84
91
|
if (domains.has('bkm') && domains.has('bkm-readonly')) {
|
|
85
92
|
domains.delete('bkm-readonly');
|
|
86
93
|
}
|
|
94
|
+
if (domains.has('xrm') && domains.has('xrm-readonly')) {
|
|
95
|
+
domains.delete('xrm-readonly');
|
|
96
|
+
}
|
|
97
|
+
if (domains.has('ixn') && domains.has('ixn-readonly')) {
|
|
98
|
+
domains.delete('ixn-readonly');
|
|
99
|
+
}
|
|
87
100
|
return [...domains];
|
|
88
101
|
}
|
|
89
102
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-mapping.js","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,MAAM,eAAe,GAA6B;IAChD,uBAAuB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAC9C,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IAC9B,gBAAgB,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;IAClD,4BAA4B,EAAE,CAAC,KAAK,CAAC;IACrC,mBAAmB,EAAE,CAAC,KAAK,CAAC;IAC5B,qBAAqB,EAAE,CAAC,KAAK,CAAC;IAC9B,sBAAsB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACtC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IAC7B,eAAe,EAAE,CAAC,cAAc,CAAC;IACjC,qBAAqB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACrC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IAC5B,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,yEAAyE;IACzE,2EAA2E;IAC3E,0EAA0E;IAC1E,uBAAuB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACvC,YAAY,EAAE,CAAC,KAAK,CAAC;IACrB,qBAAqB,EAAE,CAAC,KAAK,CAAC;IAC9B,YAAY,EAAE,CAAC,KAAK,CAAC;IACrB,cAAc,EAAE,CAAC,cAAc,CAAC;IAChC,4BAA4B,EAAE,CAAC,KAAK,CAAC;IACrC,mBAAmB,EAAE,CAAC,KAAK,CAAC;IAC5B,qBAAqB,EAAE,CAAC,cAAc,CAAC;IACvC,mCAAmC,EAAE,CAAC,KAAK,CAAC;IAC5C,0BAA0B,EAAE,CAAC,KAAK,CAAC;IACnC,4BAA4B,EAAE,CAAC,cAAc,CAAC;IAC9C,gCAAgC,EAAE,CAAC,KAAK,CAAC;IACzC,uBAAuB,EAAE,CAAC,KAAK,CAAC;IAChC,yBAAyB,EAAE,CAAC,cAAc,CAAC;IAC3C,sBAAsB,EAAE,CAAC,KAAK,CAAC;IAC/B,aAAa,EAAE,CAAC,KAAK,CAAC;IACtB,eAAe,EAAE,CAAC,cAAc,CAAC;IACjC,uBAAuB,EAAE,CAAC,KAAK,CAAC;IAChC,cAAc,EAAE,CAAC,KAAK,CAAC;IACvB,gBAAgB,EAAE,CAAC,cAAc,CAAC;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAoB;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,
|
|
1
|
+
{"version":3,"file":"role-mapping.js","sourceRoot":"","sources":["../../src/tools/role-mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tool } from '../registry.js';
|
|
2
|
+
import { CatalogueReport } from '../../generated-reads/index.js';
|
|
3
|
+
export declare const xrmGeneratedReadReport: CatalogueReport;
|
|
4
|
+
export declare const xrmGeneratedReadTools: Tool[];
|
|
5
|
+
//# sourceMappingURL=generated-reads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-reads.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/generated-reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAGL,eAAe,EAChB,MAAM,gCAAgC,CAAC;AAqCxC,eAAO,MAAM,sBAAsB,EAAE,eAC8B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,EAAE,IAAI,EAGvC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { buildGeneratedReadCatalogue, buildGeneratedReadCatalogueReport, } from '../../generated-reads/index.js';
|
|
2
|
+
import { loadPersistResourceContract } from '../../contracts/persist-resource-contract.js';
|
|
3
|
+
/**
|
|
4
|
+
* Bounded read tools for the XRM module (WI-0003508).
|
|
5
|
+
*
|
|
6
|
+
* The schema-driven catalogue (WI-0003500) emits describe/list/get for
|
|
7
|
+
* every `normal`-sensitivity XRM resource that declares a read
|
|
8
|
+
* operation and has no side effects. The pinned Persist contract
|
|
9
|
+
* already excludes credential material via the standard credentials
|
|
10
|
+
* guardrail — `xrm_merchant_authentication_configuration_details`
|
|
11
|
+
* and `xrm_merchant_payment_processor_credentials` are never surfaced
|
|
12
|
+
* — so this module gets bounded reads for the safe subset:
|
|
13
|
+
*
|
|
14
|
+
* - `xrm_merchants` — marketplace merchants (organisation records).
|
|
15
|
+
* - `xrm_merchant_classifications` — merchant-to-classification
|
|
16
|
+
* mapping used by marketplace faceting.
|
|
17
|
+
* - `xrm_merchant_countries` — countries a merchant operates in.
|
|
18
|
+
* - `xrm_merchant_items` — merchant-to-item catalogue mapping.
|
|
19
|
+
* - `xrm_inbound_domain_rules` / `xrm_inbound_email_addresses` /
|
|
20
|
+
* `xrm_inbound_email_rules` — inbound-email routing metadata used
|
|
21
|
+
* to configure how incoming messages are dispatched.
|
|
22
|
+
* - `xrm_inbound_email_quarantine_items` — the read side of the
|
|
23
|
+
* inbound-email quarantine so callers can inspect quarantined
|
|
24
|
+
* messages.
|
|
25
|
+
*
|
|
26
|
+
* The four inbound resources get `describe` only for now: their `list`
|
|
27
|
+
* and `get` tools need a SELECT capability that no role holds yet
|
|
28
|
+
* (WI-0009403), so they appear once Persist adds it.
|
|
29
|
+
*
|
|
30
|
+
* Every write on a merchant / rule row lives in a dedicated hand-
|
|
31
|
+
* written tool with explicit confirmation semantics (see
|
|
32
|
+
* `xrm-merchant-*`, `xrm-inbound-email-rule-*`).
|
|
33
|
+
*/
|
|
34
|
+
const contract = loadPersistResourceContract();
|
|
35
|
+
export const xrmGeneratedReadReport = buildGeneratedReadCatalogueReport(contract, { modules: ['xrm'] });
|
|
36
|
+
export const xrmGeneratedReadTools = buildGeneratedReadCatalogue(contract, { modules: ['xrm'] });
|
|
37
|
+
//# sourceMappingURL=generated-reads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-reads.js","sourceRoot":"","sources":["../../../src/tools/xrm/generated-reads.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAElC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GACjC,iCAAiC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,qBAAqB,GAAW,2BAA2B,CACtE,QAAQ,EACR,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAYtC,eAAO,MAAM,QAAQ,EAAE,IAAI,EAAiD,CAAC;AAE7E,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAA0B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { xrmGeneratedReadTools } from './generated-reads.js';
|
|
2
|
+
import { xrmMerchantCreateTool } from './xrm-merchant-create.js';
|
|
3
|
+
import { xrmMerchantUpdateTool } from './xrm-merchant-update.js';
|
|
4
|
+
import { xrmInboundEmailRuleCreateTool } from './xrm-inbound-email-rule-create.js';
|
|
5
|
+
const xrmWriteTools = [
|
|
6
|
+
xrmMerchantCreateTool,
|
|
7
|
+
xrmMerchantUpdateTool,
|
|
8
|
+
xrmInboundEmailRuleCreateTool,
|
|
9
|
+
];
|
|
10
|
+
export const xrmTools = [...xrmGeneratedReadTools, ...xrmWriteTools];
|
|
11
|
+
/** Read-only slice used by the `xrm-readonly` selectable sub-domain. */
|
|
12
|
+
export const xrmReadOnlyTools = xrmGeneratedReadTools;
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/xrm/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,MAAM,aAAa,GAAW;IAC5B,qBAAqB;IACrB,qBAAqB;IACrB,6BAA6B;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAW,CAAC,GAAG,qBAAqB,EAAE,GAAG,aAAa,CAAC,CAAC;AAE7E,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAW,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Tool } from '../registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* State-change semantic tool: create an inbound email routing rule
|
|
4
|
+
* (`xrm_inbound_email_rules`). Adding a rule changes how future
|
|
5
|
+
* incoming email is dispatched (or quarantined) for a given inbound
|
|
6
|
+
* email address, so the tool requires:
|
|
7
|
+
*
|
|
8
|
+
* - `confirm: true` to prevent a model wiring routing changes into
|
|
9
|
+
* live mail delivery accidentally;
|
|
10
|
+
* - the target `email_id`, the match rule, and the local-part
|
|
11
|
+
* pattern set. Persist validates the match type and the FK. It does
|
|
12
|
+
* not validate the match rule: IXN capture only recognises `DROP`
|
|
13
|
+
* (or `D`), so any other value is stored and has no effect there.
|
|
14
|
+
*
|
|
15
|
+
* Not deduplicated: the table's only unique key is its id, so a retry
|
|
16
|
+
* creates a second rule. Callers cannot check first through MCP yet,
|
|
17
|
+
* because no role holds SELECT on the inbound email tables, so the
|
|
18
|
+
* generated reads do not appear (WI-0009403). The description says so.
|
|
19
|
+
*/
|
|
20
|
+
export declare const xrmInboundEmailRuleCreateTool: Tool;
|
|
21
|
+
//# sourceMappingURL=xrm-inbound-email-rule-create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrm-inbound-email-rule-create.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-inbound-email-rule-create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAStC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,6BAA6B,EAAE,IAsE3C,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { API_ERROR, errorResponse, successResponse } from '../types.js';
|
|
3
|
+
import { cap } from '../../capabilities/tool-capability.js';
|
|
4
|
+
import { confirmFlagSchema, unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
|
|
5
|
+
/**
|
|
6
|
+
* State-change semantic tool: create an inbound email routing rule
|
|
7
|
+
* (`xrm_inbound_email_rules`). Adding a rule changes how future
|
|
8
|
+
* incoming email is dispatched (or quarantined) for a given inbound
|
|
9
|
+
* email address, so the tool requires:
|
|
10
|
+
*
|
|
11
|
+
* - `confirm: true` to prevent a model wiring routing changes into
|
|
12
|
+
* live mail delivery accidentally;
|
|
13
|
+
* - the target `email_id`, the match rule, and the local-part
|
|
14
|
+
* pattern set. Persist validates the match type and the FK. It does
|
|
15
|
+
* not validate the match rule: IXN capture only recognises `DROP`
|
|
16
|
+
* (or `D`), so any other value is stored and has no effect there.
|
|
17
|
+
*
|
|
18
|
+
* Not deduplicated: the table's only unique key is its id, so a retry
|
|
19
|
+
* creates a second rule. Callers cannot check first through MCP yet,
|
|
20
|
+
* because no role holds SELECT on the inbound email tables, so the
|
|
21
|
+
* generated reads do not appear (WI-0009403). The description says so.
|
|
22
|
+
*/
|
|
23
|
+
export const xrmInboundEmailRuleCreateTool = {
|
|
24
|
+
name: 'xrm_inbound_email_rule_create',
|
|
25
|
+
description: 'Create an inbound email routing rule (xrm_inbound_email_rules). Requires confirm=true, ' +
|
|
26
|
+
'the target email_id, a match rule, and the local-part patterns to match. Changes how ' +
|
|
27
|
+
'future incoming mail is dispatched. Not deduplicated: calling it again creates another ' +
|
|
28
|
+
'rule, and MCP cannot read existing rules or look up an email_id yet, so do not retry ' +
|
|
29
|
+
'after an unclear result: ask a person to check instead.',
|
|
30
|
+
inputSchema: z.object({
|
|
31
|
+
email_id: z
|
|
32
|
+
.string()
|
|
33
|
+
.min(1)
|
|
34
|
+
.describe('UUID of the xrm_inbound_email_addresses row this rule attaches to'),
|
|
35
|
+
inbound_sender_email_match_rule: z
|
|
36
|
+
.string()
|
|
37
|
+
.max(16)
|
|
38
|
+
.describe('Match rule. DROP (or D) stops matched mail being captured by IXN. Persist does not ' +
|
|
39
|
+
'validate this field, and IXN capture recognises no other value.'),
|
|
40
|
+
inbound_sender_email_local_part_matches_text: z
|
|
41
|
+
.array(z.string().min(1))
|
|
42
|
+
.min(1)
|
|
43
|
+
.describe('Local-part patterns the rule matches on'),
|
|
44
|
+
inbound_sender_email_match_type: z
|
|
45
|
+
.string()
|
|
46
|
+
.max(16)
|
|
47
|
+
.optional()
|
|
48
|
+
.describe('Match type from the XRM_SENDER_MATCH_TYPE lookup (EXACT, REGEX). Defaults to EXACT.'),
|
|
49
|
+
inbound_sender_email_match_destinations: z
|
|
50
|
+
.array(z.string().min(1))
|
|
51
|
+
.optional()
|
|
52
|
+
.describe('Optional set of destinations the matched mail is dispatched to'),
|
|
53
|
+
metadata: z.record(z.unknown()).optional(),
|
|
54
|
+
confirm: confirmFlagSchema,
|
|
55
|
+
idempotency_key: unenforcedIdempotencyKeySchema,
|
|
56
|
+
}),
|
|
57
|
+
capabilities: [cap('xrm_inbound_email_rules', 'INSERT')],
|
|
58
|
+
sideEffect: 'state_change',
|
|
59
|
+
confirmation: 'caller_confirms',
|
|
60
|
+
idempotency: 'not_idempotent',
|
|
61
|
+
handler: async (args, ctx) => {
|
|
62
|
+
const input = args;
|
|
63
|
+
const body = {
|
|
64
|
+
email_id: input.email_id,
|
|
65
|
+
inbound_sender_email_match_rule: input.inbound_sender_email_match_rule,
|
|
66
|
+
inbound_sender_email_local_part_matches_text: input.inbound_sender_email_local_part_matches_text,
|
|
67
|
+
};
|
|
68
|
+
for (const field of [
|
|
69
|
+
'inbound_sender_email_match_type',
|
|
70
|
+
'inbound_sender_email_match_destinations',
|
|
71
|
+
'metadata',
|
|
72
|
+
]) {
|
|
73
|
+
if (input[field] !== undefined)
|
|
74
|
+
body[field] = input[field];
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const rows = await ctx.apiClient.post(`${ctx.apiClient.dbBasePath}/xrm_inbound_email_rules?select=*`, body, { headers: writeHeadersWithIdempotency(input.idempotency_key) });
|
|
78
|
+
return successResponse(rows[0]);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return errorResponse(API_ERROR, `Failed to create XRM inbound email rule: ${error.message}`);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=xrm-inbound-email-rule-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrm-inbound-email-rule-create.js","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-inbound-email-rule-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Tool } from '../registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Provisioning semantic tool: create a new marketplace merchant
|
|
4
|
+
* (`xrm_merchants`) linked to an existing PRM party. Creating a
|
|
5
|
+
* merchant makes it discoverable to buyers and causes downstream
|
|
6
|
+
* provisioning (search indexing, listings), so the tool requires:
|
|
7
|
+
*
|
|
8
|
+
* - `confirm: true` to prevent accidental invocation;
|
|
9
|
+
* - a `party_id` (natural key — the merchant's owning PRM party).
|
|
10
|
+
* (party_id, tenant_id) is unique, so a retry fails with a
|
|
11
|
+
* duplicate-key error rather than provisioning a duplicate.
|
|
12
|
+
*
|
|
13
|
+
* `merchant_approval_status_code` is deliberately not an input:
|
|
14
|
+
* approving a merchant is a separate decision from creating one.
|
|
15
|
+
*
|
|
16
|
+
* Provider credentials (`xrm_merchant_authentication_configuration_details`
|
|
17
|
+
* and `xrm_merchant_payment_processor_credentials`) are EXCLUDED from
|
|
18
|
+
* the MCP surface by the credentials guardrail and are never written
|
|
19
|
+
* or returned by this tool.
|
|
20
|
+
*/
|
|
21
|
+
export declare const xrmMerchantCreateTool: Tool;
|
|
22
|
+
//# sourceMappingURL=xrm-merchant-create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrm-merchant-create.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAStC;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,IA+DnC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { API_ERROR, errorResponse, successResponse } from '../types.js';
|
|
3
|
+
import { cap } from '../../capabilities/tool-capability.js';
|
|
4
|
+
import { confirmFlagSchema, unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
|
|
5
|
+
/**
|
|
6
|
+
* Provisioning semantic tool: create a new marketplace merchant
|
|
7
|
+
* (`xrm_merchants`) linked to an existing PRM party. Creating a
|
|
8
|
+
* merchant makes it discoverable to buyers and causes downstream
|
|
9
|
+
* provisioning (search indexing, listings), so the tool requires:
|
|
10
|
+
*
|
|
11
|
+
* - `confirm: true` to prevent accidental invocation;
|
|
12
|
+
* - a `party_id` (natural key — the merchant's owning PRM party).
|
|
13
|
+
* (party_id, tenant_id) is unique, so a retry fails with a
|
|
14
|
+
* duplicate-key error rather than provisioning a duplicate.
|
|
15
|
+
*
|
|
16
|
+
* `merchant_approval_status_code` is deliberately not an input:
|
|
17
|
+
* approving a merchant is a separate decision from creating one.
|
|
18
|
+
*
|
|
19
|
+
* Provider credentials (`xrm_merchant_authentication_configuration_details`
|
|
20
|
+
* and `xrm_merchant_payment_processor_credentials`) are EXCLUDED from
|
|
21
|
+
* the MCP surface by the credentials guardrail and are never written
|
|
22
|
+
* or returned by this tool.
|
|
23
|
+
*/
|
|
24
|
+
export const xrmMerchantCreateTool = {
|
|
25
|
+
name: 'xrm_merchant_create',
|
|
26
|
+
description: 'Provision a new marketplace merchant (xrm_merchants). Requires confirm=true and a ' +
|
|
27
|
+
'party_id linking the merchant to its owning PRM party. Provider credentials are ' +
|
|
28
|
+
'never written through this tool. One merchant per party: a retry for the same party ' +
|
|
29
|
+
'fails with a duplicate-key error instead of creating a second merchant.',
|
|
30
|
+
inputSchema: z.object({
|
|
31
|
+
party_id: z
|
|
32
|
+
.string()
|
|
33
|
+
.min(1)
|
|
34
|
+
.describe('UUID of the prm_parties row this merchant is owned by. One merchant per party.'),
|
|
35
|
+
merchant_name: z.string().min(1).max(256).describe('Display name of the merchant'),
|
|
36
|
+
merchant_common_name: z
|
|
37
|
+
.string()
|
|
38
|
+
.max(256)
|
|
39
|
+
.optional()
|
|
40
|
+
.describe('Short / common name of the merchant'),
|
|
41
|
+
merchant_description: z.string().optional(),
|
|
42
|
+
merchant_type_code: z.string().max(32).optional(),
|
|
43
|
+
merchant_class_code: z.string().max(32).optional(),
|
|
44
|
+
merchant_status_code: z.string().max(32).optional(),
|
|
45
|
+
merchant_image_url_logo: z.string().url().optional(),
|
|
46
|
+
merchant_image_url_thumbnail: z.string().url().optional(),
|
|
47
|
+
display_order: z.number().int().optional(),
|
|
48
|
+
metadata: z.record(z.unknown()).optional(),
|
|
49
|
+
confirm: confirmFlagSchema,
|
|
50
|
+
idempotency_key: unenforcedIdempotencyKeySchema,
|
|
51
|
+
}),
|
|
52
|
+
capabilities: [cap('xrm_merchants', 'INSERT')],
|
|
53
|
+
sideEffect: 'provisioning',
|
|
54
|
+
confirmation: 'caller_confirms',
|
|
55
|
+
idempotency: 'natural_key',
|
|
56
|
+
handler: async (args, ctx) => {
|
|
57
|
+
const input = args;
|
|
58
|
+
const body = {
|
|
59
|
+
party_id: input.party_id,
|
|
60
|
+
merchant_name: input.merchant_name,
|
|
61
|
+
};
|
|
62
|
+
for (const field of [
|
|
63
|
+
'merchant_common_name',
|
|
64
|
+
'merchant_description',
|
|
65
|
+
'merchant_type_code',
|
|
66
|
+
'merchant_class_code',
|
|
67
|
+
'merchant_status_code',
|
|
68
|
+
'merchant_image_url_logo',
|
|
69
|
+
'merchant_image_url_thumbnail',
|
|
70
|
+
'display_order',
|
|
71
|
+
'metadata',
|
|
72
|
+
]) {
|
|
73
|
+
if (input[field] !== undefined)
|
|
74
|
+
body[field] = input[field];
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const rows = await ctx.apiClient.post(`${ctx.apiClient.dbBasePath}/xrm_merchants?select=*`, body, { headers: writeHeadersWithIdempotency(input.idempotency_key) });
|
|
78
|
+
return successResponse(rows[0]);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return errorResponse(API_ERROR, `Failed to create XRM merchant: ${error.message}`);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=xrm-merchant-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrm-merchant-create.js","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Tool } from '../registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Explicit-schema update for `xrm_merchants` — safe metadata fields
|
|
4
|
+
* only. `party_id` (natural key) is intentionally not writable through
|
|
5
|
+
* this tool; retargeting a merchant to a different party is not a
|
|
6
|
+
* rename operation. `merchant_approval_status_code` is not writable
|
|
7
|
+
* either: this tool needs no confirmation, so it must not be able to
|
|
8
|
+
* approve a merchant. Provider credentials are in an excluded table and
|
|
9
|
+
* are never touched.
|
|
10
|
+
*
|
|
11
|
+
* Retry-safe (converges on the same target state).
|
|
12
|
+
*/
|
|
13
|
+
export declare const xrmMerchantUpdateTool: Tool;
|
|
14
|
+
//# sourceMappingURL=xrm-merchant-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrm-merchant-update.d.ts","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAQtC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,IAqDnC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { API_ERROR, errorResponse, successResponse } from '../types.js';
|
|
3
|
+
import { cap } from '../../capabilities/tool-capability.js';
|
|
4
|
+
import { unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
|
|
5
|
+
/**
|
|
6
|
+
* Explicit-schema update for `xrm_merchants` — safe metadata fields
|
|
7
|
+
* only. `party_id` (natural key) is intentionally not writable through
|
|
8
|
+
* this tool; retargeting a merchant to a different party is not a
|
|
9
|
+
* rename operation. `merchant_approval_status_code` is not writable
|
|
10
|
+
* either: this tool needs no confirmation, so it must not be able to
|
|
11
|
+
* approve a merchant. Provider credentials are in an excluded table and
|
|
12
|
+
* are never touched.
|
|
13
|
+
*
|
|
14
|
+
* Retry-safe (converges on the same target state).
|
|
15
|
+
*/
|
|
16
|
+
export const xrmMerchantUpdateTool = {
|
|
17
|
+
name: 'xrm_merchant_update',
|
|
18
|
+
description: 'Update marketplace merchant metadata (xrm_merchants) with an explicit safe field set. ' +
|
|
19
|
+
'party_id and merchant_approval_status_code are not writable. Provider credentials live ' +
|
|
20
|
+
'in an excluded table and cannot be set through MCP. Retry-safe.',
|
|
21
|
+
inputSchema: z.object({
|
|
22
|
+
id: z.string().min(1).describe('UUID of the merchant'),
|
|
23
|
+
merchant_name: z.string().min(1).max(256).optional(),
|
|
24
|
+
merchant_common_name: z.string().max(256).nullable().optional(),
|
|
25
|
+
merchant_description: z.string().nullable().optional(),
|
|
26
|
+
merchant_type_code: z.string().max(32).nullable().optional(),
|
|
27
|
+
merchant_class_code: z.string().max(32).nullable().optional(),
|
|
28
|
+
merchant_status_code: z.string().max(32).nullable().optional(),
|
|
29
|
+
merchant_image_url_logo: z.string().url().nullable().optional(),
|
|
30
|
+
merchant_image_url_thumbnail: z.string().url().nullable().optional(),
|
|
31
|
+
display_order: z.number().int().nullable().optional(),
|
|
32
|
+
metadata: z.record(z.unknown()).nullable().optional(),
|
|
33
|
+
idempotency_key: unenforcedIdempotencyKeySchema,
|
|
34
|
+
}),
|
|
35
|
+
capabilities: [cap('xrm_merchants', 'UPDATE')],
|
|
36
|
+
sideEffect: 'state_change',
|
|
37
|
+
confirmation: 'none',
|
|
38
|
+
idempotency: 'natural_key',
|
|
39
|
+
handler: async (args, ctx) => {
|
|
40
|
+
const { id, idempotency_key, ...rest } = args;
|
|
41
|
+
const body = {};
|
|
42
|
+
for (const [k, v] of Object.entries(rest)) {
|
|
43
|
+
if (v !== undefined)
|
|
44
|
+
body[k] = v;
|
|
45
|
+
}
|
|
46
|
+
if (Object.keys(body).length === 0) {
|
|
47
|
+
return errorResponse(API_ERROR, 'Update payload is empty — supply at least one field to change.');
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const rows = await ctx.apiClient.patch(`${ctx.apiClient.dbBasePath}/xrm_merchants?id=eq.${id}&select=*`, body, { headers: writeHeadersWithIdempotency(idempotency_key) });
|
|
51
|
+
if (!rows || rows.length === 0) {
|
|
52
|
+
return errorResponse(API_ERROR, `XRM merchant ${id} not found or not accessible`);
|
|
53
|
+
}
|
|
54
|
+
return successResponse(rows[0]);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return errorResponse(API_ERROR, `Failed to update XRM merchant: ${error.message}`);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=xrm-merchant-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrm-merchant-update.js","sourceRoot":"","sources":["../../../src/tools/xrm/xrm-merchant-update.ts"],"names":[],"mappings":"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"}
|