honeybook-mcp 0.4.2 → 0.4.3
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/bundle.js +203 -20
- package/dist/index.js +1 -1
- package/package.json +4 -4
- package/server.json +2 -2
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "HoneyBook client-portal tools for Claude Code",
|
|
10
|
-
"version": "0.4.
|
|
10
|
+
"version": "0.4.3"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "HoneyBook",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "HoneyBook client-portal MCP for Claude — view wedding-vendor contracts and invoices via MCP",
|
|
18
|
-
"version": "0.4.
|
|
18
|
+
"version": "0.4.3",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Chall"
|
|
21
21
|
},
|
package/dist/bundle.js
CHANGED
|
@@ -35069,7 +35069,8 @@ var KNOWN_CAPABILITIES = /* @__PURE__ */ new Set([
|
|
|
35069
35069
|
"capture_redirect",
|
|
35070
35070
|
"read_indexed_db",
|
|
35071
35071
|
"read_dom",
|
|
35072
|
-
"download"
|
|
35072
|
+
"download",
|
|
35073
|
+
"graphql"
|
|
35073
35074
|
]);
|
|
35074
35075
|
|
|
35075
35076
|
// node_modules/@fetchproxy/protocol/dist/mcp-id.js
|
|
@@ -35372,6 +35373,7 @@ function assertIndexedDbScopesArray(value, label) {
|
|
|
35372
35373
|
}
|
|
35373
35374
|
var DOM_SELECTOR_RE = /^[^-]{1,512}$/;
|
|
35374
35375
|
var DOM_ATTRIBUTE_RE = /^[A-Za-z_:][A-Za-z0-9_:.\-]{0,127}$/;
|
|
35376
|
+
var GRAPHQL_OP_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]{0,127}$/;
|
|
35375
35377
|
function assertDomSelectorsArray(value, label) {
|
|
35376
35378
|
if (!Array.isArray(value)) {
|
|
35377
35379
|
throw new ProtocolError(`${label}: expected array, got ${typeof value}`);
|
|
@@ -35408,6 +35410,37 @@ function assertDomSelectorsArray(value, label) {
|
|
|
35408
35410
|
}
|
|
35409
35411
|
}
|
|
35410
35412
|
}
|
|
35413
|
+
function assertGraphqlOpsArray(value, label) {
|
|
35414
|
+
if (!Array.isArray(value)) {
|
|
35415
|
+
throw new ProtocolError(`${label}: expected array, got ${typeof value}`);
|
|
35416
|
+
}
|
|
35417
|
+
const seen = /* @__PURE__ */ new Set();
|
|
35418
|
+
for (let i = 0; i < value.length; i++) {
|
|
35419
|
+
const entry = value[i];
|
|
35420
|
+
assertObject(entry, `${label}[${i}]`);
|
|
35421
|
+
if (entry.name === void 0) {
|
|
35422
|
+
throw new ProtocolError(`${label}[${i}].name: missing`);
|
|
35423
|
+
}
|
|
35424
|
+
if (entry.operationName === void 0) {
|
|
35425
|
+
throw new ProtocolError(`${label}[${i}].operationName: missing`);
|
|
35426
|
+
}
|
|
35427
|
+
if (typeof entry.name !== "string" || !SCOPE_KEY_RE.test(entry.name)) {
|
|
35428
|
+
throw new ProtocolError(`${label}[${i}].name: invalid ${JSON.stringify(entry.name)}`);
|
|
35429
|
+
}
|
|
35430
|
+
if (typeof entry.operationName !== "string" || !GRAPHQL_OP_NAME_RE.test(entry.operationName)) {
|
|
35431
|
+
throw new ProtocolError(`${label}[${i}].operationName: invalid ${JSON.stringify(entry.operationName)}`);
|
|
35432
|
+
}
|
|
35433
|
+
if (seen.has(entry.name)) {
|
|
35434
|
+
throw new ProtocolError(`${label}: duplicate name ${JSON.stringify(entry.name)}`);
|
|
35435
|
+
}
|
|
35436
|
+
seen.add(entry.name);
|
|
35437
|
+
for (const k of Object.keys(entry)) {
|
|
35438
|
+
if (k !== "name" && k !== "operationName") {
|
|
35439
|
+
throw new ProtocolError(`${label}[${i}]: unexpected field ${JSON.stringify(k)}`);
|
|
35440
|
+
}
|
|
35441
|
+
}
|
|
35442
|
+
}
|
|
35443
|
+
}
|
|
35411
35444
|
function validateFrame(raw) {
|
|
35412
35445
|
assertObject(raw, "frame");
|
|
35413
35446
|
const t = raw.type;
|
|
@@ -35486,6 +35519,9 @@ function validateHello(raw) {
|
|
|
35486
35519
|
if (raw.domSelectors !== void 0) {
|
|
35487
35520
|
assertDomSelectorsArray(raw.domSelectors, "hello.domSelectors");
|
|
35488
35521
|
}
|
|
35522
|
+
if (raw.graphqlOps !== void 0) {
|
|
35523
|
+
assertGraphqlOpsArray(raw.graphqlOps, "hello.graphqlOps");
|
|
35524
|
+
}
|
|
35489
35525
|
assertBase64(raw.identityX25519Pub, "hello.identityX25519Pub");
|
|
35490
35526
|
assertBase64(raw.identityEd25519Pub, "hello.identityEd25519Pub");
|
|
35491
35527
|
assertBase64(raw.sessionNonce, "hello.sessionNonce");
|
|
@@ -35735,6 +35771,28 @@ function validateInnerRequest(raw) {
|
|
|
35735
35771
|
}
|
|
35736
35772
|
return raw;
|
|
35737
35773
|
}
|
|
35774
|
+
if (raw.op === "graphql_query") {
|
|
35775
|
+
assertObject(raw.init, "inner.init");
|
|
35776
|
+
if (raw.init.name === void 0)
|
|
35777
|
+
throw new ProtocolError("inner.init.name: missing");
|
|
35778
|
+
if (raw.init.variables === void 0) {
|
|
35779
|
+
throw new ProtocolError("inner.init.variables: missing");
|
|
35780
|
+
}
|
|
35781
|
+
assertString(raw.init.name, "inner.init.name");
|
|
35782
|
+
if (raw.init.name.length === 0) {
|
|
35783
|
+
throw new ProtocolError("inner.init.name: must be non-empty");
|
|
35784
|
+
}
|
|
35785
|
+
assertObject(raw.init.variables, "inner.init.variables");
|
|
35786
|
+
if (raw.init.tabUrl !== void 0) {
|
|
35787
|
+
assertString(raw.init.tabUrl, "inner.init.tabUrl");
|
|
35788
|
+
}
|
|
35789
|
+
for (const k of Object.keys(raw.init)) {
|
|
35790
|
+
if (k !== "name" && k !== "variables" && k !== "tabUrl") {
|
|
35791
|
+
throw new ProtocolError(`inner.init: unexpected field ${JSON.stringify(k)} on graphql_query`);
|
|
35792
|
+
}
|
|
35793
|
+
}
|
|
35794
|
+
return raw;
|
|
35795
|
+
}
|
|
35738
35796
|
if (raw.op === "download") {
|
|
35739
35797
|
assertObject(raw.init, "inner.init");
|
|
35740
35798
|
if (raw.init.url === void 0) {
|
|
@@ -35760,7 +35818,7 @@ function validateInnerRequest(raw) {
|
|
|
35760
35818
|
}
|
|
35761
35819
|
return raw;
|
|
35762
35820
|
}
|
|
35763
|
-
throw new ProtocolError(`inner.op: must be one of "fetch", "read_cookies", "read_local_storage", "read_session_storage", "capture_request_header", "capture_redirect", "read_indexed_db", "read_dom", "download"; got ${JSON.stringify(raw.op)}`);
|
|
35821
|
+
throw new ProtocolError(`inner.op: must be one of "fetch", "read_cookies", "read_local_storage", "read_session_storage", "capture_request_header", "capture_redirect", "read_indexed_db", "read_dom", "download", "graphql_query"; got ${JSON.stringify(raw.op)}`);
|
|
35764
35822
|
}
|
|
35765
35823
|
function assertNonEmptyKeyArray(value, label) {
|
|
35766
35824
|
if (!Array.isArray(value)) {
|
|
@@ -35791,6 +35849,10 @@ function assertStringMap(value, label) {
|
|
|
35791
35849
|
}
|
|
35792
35850
|
}
|
|
35793
35851
|
}
|
|
35852
|
+
var KNOWN_RESPONSE_OPS = /* @__PURE__ */ new Set([
|
|
35853
|
+
...KNOWN_CAPABILITIES,
|
|
35854
|
+
"graphql_query"
|
|
35855
|
+
]);
|
|
35794
35856
|
function validateInnerResponse(raw) {
|
|
35795
35857
|
assertPositiveInt(raw.id, "inner.id");
|
|
35796
35858
|
if (raw.ok === true) {
|
|
@@ -35852,6 +35914,13 @@ function validateInnerResponse(raw) {
|
|
|
35852
35914
|
assertStringMap(raw.values, "inner.values");
|
|
35853
35915
|
return raw;
|
|
35854
35916
|
}
|
|
35917
|
+
if (op === "graphql_query") {
|
|
35918
|
+
if (raw.data === void 0) {
|
|
35919
|
+
throw new ProtocolError("inner.data: missing on graphql_query response");
|
|
35920
|
+
}
|
|
35921
|
+
assertObject(raw.data, "inner.data");
|
|
35922
|
+
return raw;
|
|
35923
|
+
}
|
|
35855
35924
|
if (op === "download") {
|
|
35856
35925
|
assertObject(raw.value, "inner.value");
|
|
35857
35926
|
assertString(raw.value.path, "inner.value.path");
|
|
@@ -35876,7 +35945,7 @@ function validateInnerResponse(raw) {
|
|
|
35876
35945
|
if (raw.ok === false) {
|
|
35877
35946
|
assertString(raw.error, "inner.error");
|
|
35878
35947
|
if (raw.op !== void 0) {
|
|
35879
|
-
if (typeof raw.op !== "string" || !
|
|
35948
|
+
if (typeof raw.op !== "string" || !KNOWN_RESPONSE_OPS.has(raw.op)) {
|
|
35880
35949
|
throw new ProtocolError(`inner.op: unknown response op ${JSON.stringify(raw.op)}`);
|
|
35881
35950
|
}
|
|
35882
35951
|
}
|
|
@@ -36068,11 +36137,33 @@ async function sealInnerFrame(sessionKey, mcpId, seq, inner) {
|
|
|
36068
36137
|
};
|
|
36069
36138
|
}
|
|
36070
36139
|
async function openEncryptedFrame(sessionKey, frame) {
|
|
36071
|
-
const
|
|
36072
|
-
|
|
36073
|
-
|
|
36074
|
-
|
|
36075
|
-
|
|
36140
|
+
const result = await openEncryptedFrameDetailed(sessionKey, frame);
|
|
36141
|
+
if (result.stage === "ok")
|
|
36142
|
+
return result.inner;
|
|
36143
|
+
throw result.error instanceof Error ? result.error : new Error(String(result.error));
|
|
36144
|
+
}
|
|
36145
|
+
async function openEncryptedFrameDetailed(sessionKey, frame) {
|
|
36146
|
+
let pt;
|
|
36147
|
+
try {
|
|
36148
|
+
const iv = fromB64(frame.iv);
|
|
36149
|
+
const ct = fromB64(frame.ciphertext);
|
|
36150
|
+
pt = await aesGcmOpen(sessionKey, iv, ct);
|
|
36151
|
+
} catch (error51) {
|
|
36152
|
+
return { stage: "decrypt-failed", error: error51 };
|
|
36153
|
+
}
|
|
36154
|
+
let parsed;
|
|
36155
|
+
try {
|
|
36156
|
+
parsed = JSON.parse(dec.decode(pt));
|
|
36157
|
+
} catch (error51) {
|
|
36158
|
+
return { stage: "validation-failed", error: error51, recoveredId: void 0 };
|
|
36159
|
+
}
|
|
36160
|
+
try {
|
|
36161
|
+
const inner = validateInnerFrame(parsed);
|
|
36162
|
+
return { stage: "ok", inner };
|
|
36163
|
+
} catch (error51) {
|
|
36164
|
+
const recoveredId = parsed !== null && typeof parsed === "object" && !Array.isArray(parsed) && typeof parsed.id === "number" && Number.isInteger(parsed.id) && parsed.id > 0 ? parsed.id : void 0;
|
|
36165
|
+
return { stage: "validation-failed", error: error51, recoveredId };
|
|
36166
|
+
}
|
|
36076
36167
|
}
|
|
36077
36168
|
|
|
36078
36169
|
// node_modules/@fetchproxy/server/dist/election.js
|
|
@@ -36198,6 +36289,12 @@ async function buildServerHello(opts) {
|
|
|
36198
36289
|
...d.attribute !== void 0 ? { attribute: d.attribute } : {}
|
|
36199
36290
|
}));
|
|
36200
36291
|
}
|
|
36292
|
+
if (opts.graphqlOps && opts.graphqlOps.length > 0) {
|
|
36293
|
+
hello.graphqlOps = opts.graphqlOps.map((d) => ({
|
|
36294
|
+
name: d.name,
|
|
36295
|
+
operationName: d.operationName
|
|
36296
|
+
}));
|
|
36297
|
+
}
|
|
36201
36298
|
return hello;
|
|
36202
36299
|
}
|
|
36203
36300
|
|
|
@@ -36288,7 +36385,8 @@ async function startHost(opts) {
|
|
|
36288
36385
|
indexedDbScopes: opts.ownIndexedDbScopes,
|
|
36289
36386
|
localStoragePointers: opts.ownLocalStoragePointers,
|
|
36290
36387
|
sessionStoragePointers: opts.ownSessionStoragePointers,
|
|
36291
|
-
domSelectors: opts.ownDomSelectors
|
|
36388
|
+
domSelectors: opts.ownDomSelectors,
|
|
36389
|
+
graphqlOps: opts.ownGraphqlOps
|
|
36292
36390
|
});
|
|
36293
36391
|
const ownSessionNonce = fromB64(ownHello.sessionNonce);
|
|
36294
36392
|
let extensionWs = null;
|
|
@@ -36525,7 +36623,8 @@ async function startPeer(opts) {
|
|
|
36525
36623
|
indexedDbScopes: opts.indexedDbScopes,
|
|
36526
36624
|
domSelectors: opts.domSelectors,
|
|
36527
36625
|
localStoragePointers: opts.localStoragePointers,
|
|
36528
|
-
sessionStoragePointers: opts.sessionStoragePointers
|
|
36626
|
+
sessionStoragePointers: opts.sessionStoragePointers,
|
|
36627
|
+
graphqlOps: opts.graphqlOps
|
|
36529
36628
|
});
|
|
36530
36629
|
const sessionNonce = fromB64(hello.sessionNonce);
|
|
36531
36630
|
ws.send(JSON.stringify(hello));
|
|
@@ -36569,10 +36668,20 @@ async function startPeer(opts) {
|
|
|
36569
36668
|
return;
|
|
36570
36669
|
if (!session.acceptInboundSeq(frame.seq))
|
|
36571
36670
|
return;
|
|
36572
|
-
|
|
36573
|
-
|
|
36574
|
-
innerListeners.forEach((cb) => cb(inner));
|
|
36575
|
-
}
|
|
36671
|
+
const result = await openEncryptedFrameDetailed(session.sessionKey, frame);
|
|
36672
|
+
if (result.stage === "ok") {
|
|
36673
|
+
innerListeners.forEach((cb) => cb(result.inner));
|
|
36674
|
+
} else if (result.stage === "decrypt-failed") {
|
|
36675
|
+
} else {
|
|
36676
|
+
console.error("[fetchproxy] peer: received a frame that decrypted OK but failed validation:", result.error);
|
|
36677
|
+
if (result.recoveredId !== void 0) {
|
|
36678
|
+
innerListeners.forEach((cb) => cb({
|
|
36679
|
+
type: "response",
|
|
36680
|
+
id: result.recoveredId,
|
|
36681
|
+
ok: false,
|
|
36682
|
+
error: `malformed response failed protocol validation: ${String(result.error)}`
|
|
36683
|
+
}));
|
|
36684
|
+
}
|
|
36576
36685
|
}
|
|
36577
36686
|
}
|
|
36578
36687
|
} catch (e) {
|
|
@@ -36849,6 +36958,10 @@ var FetchproxyServer = class {
|
|
|
36849
36958
|
pendingIdb = /* @__PURE__ */ new Map();
|
|
36850
36959
|
// download awaiters resolve the saved-file metadata (path + size + mime).
|
|
36851
36960
|
pendingDownload = /* @__PURE__ */ new Map();
|
|
36961
|
+
// 1.x+: graphql_query awaiters resolve the GraphQL `data` object. Its
|
|
36962
|
+
// shape is operation-specific, so the awaiter resolves `unknown` and the
|
|
36963
|
+
// caller narrows.
|
|
36964
|
+
pendingGraphql = /* @__PURE__ */ new Map();
|
|
36852
36965
|
mcpId = null;
|
|
36853
36966
|
identity = null;
|
|
36854
36967
|
// 0.5.3+: in-flight role-election / handle-start promise. Set the
|
|
@@ -36936,6 +37049,10 @@ var FetchproxyServer = class {
|
|
|
36936
37049
|
selector: d.selector,
|
|
36937
37050
|
...d.attribute !== void 0 ? { attribute: d.attribute } : {}
|
|
36938
37051
|
})),
|
|
37052
|
+
graphqlOps: (opts.graphqlOps ?? []).map((d) => ({
|
|
37053
|
+
name: d.name,
|
|
37054
|
+
operationName: d.operationName
|
|
37055
|
+
})),
|
|
36939
37056
|
// 0.8.0+: timer + lazy-revive default to ON. Every realty MCP
|
|
36940
37057
|
// adapter was about to set these to the same numbers anyway; the
|
|
36941
37058
|
// back-door is `0` (explicit opt-out) if a caller genuinely wants
|
|
@@ -37057,6 +37174,7 @@ var FetchproxyServer = class {
|
|
|
37057
37174
|
ownLocalStoragePointers: this.opts.localStoragePointers,
|
|
37058
37175
|
ownSessionStoragePointers: this.opts.sessionStoragePointers,
|
|
37059
37176
|
ownDomSelectors: this.opts.domSelectors,
|
|
37177
|
+
ownGraphqlOps: this.opts.graphqlOps,
|
|
37060
37178
|
onPairCode: this.opts.onPairCode
|
|
37061
37179
|
});
|
|
37062
37180
|
this.hostHandle.onOwnInner((inner) => this.onInner(inner));
|
|
@@ -37085,7 +37203,8 @@ var FetchproxyServer = class {
|
|
|
37085
37203
|
indexedDbScopes: this.opts.indexedDbScopes,
|
|
37086
37204
|
localStoragePointers: this.opts.localStoragePointers,
|
|
37087
37205
|
sessionStoragePointers: this.opts.sessionStoragePointers,
|
|
37088
|
-
domSelectors: this.opts.domSelectors
|
|
37206
|
+
domSelectors: this.opts.domSelectors,
|
|
37207
|
+
graphqlOps: this.opts.graphqlOps
|
|
37089
37208
|
});
|
|
37090
37209
|
this.peerHandle.onInner((inner) => this.onInner(inner));
|
|
37091
37210
|
this.peerHandle.onRenegotiate(() => {
|
|
@@ -37291,6 +37410,7 @@ var FetchproxyServer = class {
|
|
|
37291
37410
|
this.pendingRedirect.delete(id);
|
|
37292
37411
|
this.pendingDownload.delete(id);
|
|
37293
37412
|
this.pendingIdb.delete(id);
|
|
37413
|
+
this.pendingGraphql.delete(id);
|
|
37294
37414
|
}
|
|
37295
37415
|
throw err;
|
|
37296
37416
|
}
|
|
@@ -38100,6 +38220,52 @@ var FetchproxyServer = class {
|
|
|
38100
38220
|
await this.sendInnerFrame(inner);
|
|
38101
38221
|
return this._withVerbTimeout(pending, this.pendingStorage, id, origin);
|
|
38102
38222
|
}
|
|
38223
|
+
/**
|
|
38224
|
+
* 1.x+: run a declared GraphQL operation through the page's own Apollo
|
|
38225
|
+
* client (`window.__APOLLO_CLIENT__`) in the signed-in tab's MAIN world.
|
|
38226
|
+
* Requires `'graphql'` in capabilities AND `name` to match a declared
|
|
38227
|
+
* `graphqlOps` entry. The extension resolves `name` → `operationName` →
|
|
38228
|
+
* the live DocumentNode the page already observed, then invokes
|
|
38229
|
+
* `client.query({ query, variables })` — the site's own request path, so
|
|
38230
|
+
* per-request bot telemetry (Akamai etc.) runs automatically.
|
|
38231
|
+
*
|
|
38232
|
+
* Returns the GraphQL `data` object on success (shape is
|
|
38233
|
+
* operation-specific; the caller narrows). Throws a plain `Error` on
|
|
38234
|
+
* developer mistakes (undeclared capability, undeclared name) and a
|
|
38235
|
+
* descriptive `Error` on the `ok:false` bridge path — which includes the
|
|
38236
|
+
* typed "operation not yet observed on this tab" case (open the site's
|
|
38237
|
+
* page and retry).
|
|
38238
|
+
*/
|
|
38239
|
+
async graphqlQuery(opts) {
|
|
38240
|
+
if (!this.opts.capabilities.includes("graphql")) {
|
|
38241
|
+
throw new Error('FetchproxyServer.graphqlQuery(): MCP did not declare "graphql" in capabilities');
|
|
38242
|
+
}
|
|
38243
|
+
if (typeof opts.name !== "string" || opts.name.length === 0) {
|
|
38244
|
+
throw new Error("FetchproxyServer.graphqlQuery: opts.name must be a non-empty string");
|
|
38245
|
+
}
|
|
38246
|
+
const declaredNames = this.opts.graphqlOps.map((d) => d.name);
|
|
38247
|
+
if (!declaredNames.includes(opts.name)) {
|
|
38248
|
+
throw new Error(`FetchproxyServer.graphqlQuery: operation ${JSON.stringify(opts.name)} not in declared graphqlOps [${declaredNames.map((n) => JSON.stringify(n)).join(", ")}]`);
|
|
38249
|
+
}
|
|
38250
|
+
await this.ensureConnected();
|
|
38251
|
+
this.throwIfPendingPair();
|
|
38252
|
+
const id = this.nextRequestId++;
|
|
38253
|
+
const inner = {
|
|
38254
|
+
type: "request",
|
|
38255
|
+
id,
|
|
38256
|
+
op: "graphql_query",
|
|
38257
|
+
init: {
|
|
38258
|
+
name: opts.name,
|
|
38259
|
+
variables: opts.variables,
|
|
38260
|
+
...opts.tabUrl !== void 0 ? { tabUrl: opts.tabUrl } : {}
|
|
38261
|
+
}
|
|
38262
|
+
};
|
|
38263
|
+
const pending = new Promise((resolve, reject) => {
|
|
38264
|
+
this.pendingGraphql.set(id, { resolve, reject });
|
|
38265
|
+
});
|
|
38266
|
+
await this.sendInnerFrame(inner);
|
|
38267
|
+
return this._withVerbTimeout(pending, this.pendingGraphql, id, opts.name);
|
|
38268
|
+
}
|
|
38103
38269
|
assertScopeSubset(requested, declared, label) {
|
|
38104
38270
|
const undeclared = undeclaredKeys(requested, declared);
|
|
38105
38271
|
if (undeclared.length > 0) {
|
|
@@ -38237,6 +38403,20 @@ var FetchproxyServer = class {
|
|
|
38237
38403
|
}
|
|
38238
38404
|
return;
|
|
38239
38405
|
}
|
|
38406
|
+
const graphqlCb = this.pendingGraphql.get(inner.id);
|
|
38407
|
+
if (graphqlCb) {
|
|
38408
|
+
this.pendingGraphql.delete(inner.id);
|
|
38409
|
+
if (inner.ok) {
|
|
38410
|
+
if (inner.op === "graphql_query") {
|
|
38411
|
+
graphqlCb.resolve(inner.data);
|
|
38412
|
+
} else {
|
|
38413
|
+
graphqlCb.reject(new FetchproxyProtocolError(`unexpected ${String(inner.op)} response on graphql_query awaiter`));
|
|
38414
|
+
}
|
|
38415
|
+
} else {
|
|
38416
|
+
graphqlCb.reject(new FetchproxyProtocolError(inner.error));
|
|
38417
|
+
}
|
|
38418
|
+
return;
|
|
38419
|
+
}
|
|
38240
38420
|
const cookiesCb = this.pendingReadCookies.get(inner.id);
|
|
38241
38421
|
if (cookiesCb) {
|
|
38242
38422
|
this.pendingReadCookies.delete(inner.id);
|
|
@@ -38288,6 +38468,9 @@ var FetchproxyServer = class {
|
|
|
38288
38468
|
for (const { reject } of this.pendingDownload.values())
|
|
38289
38469
|
reject(err);
|
|
38290
38470
|
this.pendingDownload.clear();
|
|
38471
|
+
for (const { reject } of this.pendingGraphql.values())
|
|
38472
|
+
reject(err);
|
|
38473
|
+
this.pendingGraphql.clear();
|
|
38291
38474
|
}
|
|
38292
38475
|
/**
|
|
38293
38476
|
* 0.5.2+: read the current pair-pending pair code from whichever handle
|
|
@@ -38529,7 +38712,7 @@ function bridgeErrorInfo(err) {
|
|
|
38529
38712
|
// package.json
|
|
38530
38713
|
var package_default = {
|
|
38531
38714
|
name: "honeybook-mcp",
|
|
38532
|
-
version: "0.4.
|
|
38715
|
+
version: "0.4.3",
|
|
38533
38716
|
mcpName: "io.github.chrischall/honeybook-mcp",
|
|
38534
38717
|
description: "HoneyBook client-portal MCP server for Claude",
|
|
38535
38718
|
author: "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -38569,9 +38752,9 @@ var package_default = {
|
|
|
38569
38752
|
"test:watch": "vitest"
|
|
38570
38753
|
},
|
|
38571
38754
|
dependencies: {
|
|
38572
|
-
"@chrischall/mcp-utils": "^0.
|
|
38573
|
-
"@fetchproxy/bootstrap": "^1.
|
|
38574
|
-
"@fetchproxy/server": "^1.
|
|
38755
|
+
"@chrischall/mcp-utils": "^0.14.0",
|
|
38756
|
+
"@fetchproxy/bootstrap": "^1.7.0",
|
|
38757
|
+
"@fetchproxy/server": "^1.7.0",
|
|
38575
38758
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
38576
38759
|
dotenv: "^17.4.2",
|
|
38577
38760
|
zod: "^4.4.3"
|
|
@@ -39166,7 +39349,7 @@ var __dirname = dirname2(fileURLToPath(import.meta.url));
|
|
|
39166
39349
|
await loadDotenvSafely({ path: join3(__dirname, "..", ".env"), override: false });
|
|
39167
39350
|
await runMcp({
|
|
39168
39351
|
name: "honeybook-mcp",
|
|
39169
|
-
version: "0.4.
|
|
39352
|
+
version: "0.4.3",
|
|
39170
39353
|
// x-release-please-version
|
|
39171
39354
|
tools: [
|
|
39172
39355
|
registerSessionTools,
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import { registerContractTools } from './tools/contracts.js';
|
|
|
11
11
|
import { registerInvoiceTools } from './tools/invoices.js';
|
|
12
12
|
await runMcp({
|
|
13
13
|
name: 'honeybook-mcp',
|
|
14
|
-
version: '0.4.
|
|
14
|
+
version: '0.4.3', // x-release-please-version
|
|
15
15
|
tools: [
|
|
16
16
|
registerSessionTools,
|
|
17
17
|
registerWorkspaceFileTools,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "honeybook-mcp",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"mcpName": "io.github.chrischall/honeybook-mcp",
|
|
5
5
|
"description": "HoneyBook client-portal MCP server for Claude",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"test:watch": "vitest"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@chrischall/mcp-utils": "^0.
|
|
44
|
-
"@fetchproxy/bootstrap": "^1.
|
|
45
|
-
"@fetchproxy/server": "^1.
|
|
43
|
+
"@chrischall/mcp-utils": "^0.14.0",
|
|
44
|
+
"@fetchproxy/bootstrap": "^1.7.0",
|
|
45
|
+
"@fetchproxy/server": "^1.7.0",
|
|
46
46
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
47
47
|
"dotenv": "^17.4.2",
|
|
48
48
|
"zod": "^4.4.3"
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/chrischall/honeybook-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.4.
|
|
9
|
+
"version": "0.4.3",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "honeybook-mcp",
|
|
14
|
-
"version": "0.4.
|
|
14
|
+
"version": "0.4.3",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|