@daeda/mcp-pro 0.1.47 → 0.1.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +69 -48
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -82957,20 +82957,23 @@ var withProcessMutex = async (key2, fn9) => {
82957
82957
  }
82958
82958
  }
82959
82959
  };
82960
- var ensureLockTarget = (filePath) => {
82961
- const lockTarget = `${filePath}.lock-target`;
82962
- fs5.mkdirSync(path2.dirname(filePath), { recursive: true });
82963
- const fd2 = fs5.openSync(lockTarget, "a");
82964
- fs5.closeSync(fd2);
82965
- return lockTarget;
82966
- };
82967
82960
  var withFileLock = async (filePath, fn9) => {
82968
- const lockTarget = ensureLockTarget(filePath);
82969
- const release = await loadProperLockfileModule().lock(lockTarget, {
82961
+ const dirPath = path2.dirname(filePath);
82962
+ fs5.mkdirSync(dirPath, { recursive: true });
82963
+ const legacyLockTarget = `${filePath}.lock-target`;
82964
+ try {
82965
+ fs5.rmSync(legacyLockTarget, { force: true });
82966
+ } catch {
82967
+ }
82968
+ const release = await loadProperLockfileModule().lock(dirPath, {
82969
+ lockfilePath: `${filePath}.lock`,
82970
82970
  retries: WRITE_LOCK_RETRIES,
82971
82971
  stale: WRITE_LOCK_STALE_MS,
82972
82972
  update: WRITE_LOCK_UPDATE_MS,
82973
- realpath: true
82973
+ realpath: true,
82974
+ onCompromised: (error) => {
82975
+ console.error(`[state-file] Lock compromised for ${filePath}: ${error.message}`);
82976
+ }
82974
82977
  });
82975
82978
  try {
82976
82979
  return await fn9();
@@ -87440,10 +87443,10 @@ var handleRegisterResponse = (payload, ctx) => !payload.success || !payload.targ
87440
87443
  ),
87441
87444
  Effect43.flatMap(() => Ref4.get(ctx.handlersRef)),
87442
87445
  Effect43.flatMap(
87443
- (handlers) => Effect43.sync(() => {
87446
+ (handlers) => Effect43.promise(async () => {
87444
87447
  const portals = payload.target_portals;
87445
- handlers?.autoSelectSinglePortal(portals);
87446
- handlers?.onRegisterSuccess(portals);
87448
+ await handlers?.autoSelectSinglePortal(portals);
87449
+ await handlers?.onRegisterSuccess(portals);
87447
87450
  })
87448
87451
  )
87449
87452
  );
@@ -87457,7 +87460,7 @@ var handleSyncFullResponse = (payload, ctx) => !payload.success ? Effect44.sync(
87457
87460
  return pipe32(
87458
87461
  Ref5.get(ctx.handlersRef),
87459
87462
  Effect44.flatMap(
87460
- (handlers) => handlers?.onSyncArtifacts ? Effect44.sync(() => handlers.onSyncArtifacts(payload.target_portal, artifacts)) : Effect44.void
87463
+ (handlers) => handlers?.onSyncArtifacts ? Effect44.promise(() => handlers.onSyncArtifacts(payload.target_portal, artifacts)) : Effect44.void
87461
87464
  )
87462
87465
  );
87463
87466
  })
@@ -87487,7 +87490,7 @@ var handleNewArtifacts = (payload, ctx) => pipe34(
87487
87490
  ),
87488
87491
  Effect46.flatMap(() => Ref7.get(ctx.handlersRef)),
87489
87492
  Effect46.flatMap(
87490
- (handlers) => handlers?.onNewArtifacts ? Effect46.sync(() => handlers.onNewArtifacts(payload.target_portal, payload.artifacts)) : Effect46.void
87493
+ (handlers) => handlers?.onNewArtifacts ? Effect46.promise(() => handlers.onNewArtifacts(payload.target_portal, payload.artifacts)) : Effect46.void
87491
87494
  )
87492
87495
  );
87493
87496
 
@@ -88210,8 +88213,8 @@ var getClientState = (config) => Effect59.runSync(config.load());
88210
88213
  function getSelectedPortalId(config) {
88211
88214
  return getClientState(config).selectedPortalId;
88212
88215
  }
88213
- function setSelectedPortalId(config, portalId) {
88214
- Effect59.runSync(
88216
+ async function setSelectedPortalIdAsync(config, portalId) {
88217
+ await Effect59.runPromise(
88215
88218
  config.update((state) => ({
88216
88219
  ...state,
88217
88220
  selectedPortalId: portalId
@@ -88282,13 +88285,19 @@ Other tools accept an optional portalIds parameter to target specific portals re
88282
88285
  };
88283
88286
  }
88284
88287
  const state = getClientState(config);
88285
- const syncMode = handoffSelectedPortal ? handoffSelectedPortal(portalId) : (() => {
88286
- setSelectedPortalId(config, portalId);
88287
- if (!getPortalSyncControl(state, portalId).enabled) {
88288
- return "stale_local_only";
88289
- }
88290
- Effect59.runFork(pipe47(ws6.sendSyncFull(portalId), Effect59.catchAll(() => Effect59.void)));
88291
- return "syncing";
88288
+ const syncMode = handoffSelectedPortal ? await handoffSelectedPortal(portalId) : (() => {
88289
+ return Effect59.runPromise(
88290
+ config.update((state2) => ({
88291
+ ...state2,
88292
+ selectedPortalId: portalId
88293
+ }))
88294
+ ).then(() => {
88295
+ if (!getPortalSyncControl(state, portalId).enabled) {
88296
+ return "stale_local_only";
88297
+ }
88298
+ Effect59.runFork(pipe47(ws6.sendSyncFull(portalId), Effect59.catchAll(() => Effect59.void)));
88299
+ return "syncing";
88300
+ });
88292
88301
  })();
88293
88302
  if (syncMode === "stale_local_only") {
88294
88303
  return {
@@ -88307,10 +88316,10 @@ Other tools accept an optional portalIds parameter to target specific portals re
88307
88316
  }
88308
88317
  );
88309
88318
  }
88310
- function autoSelectSinglePortal(config, portals) {
88319
+ async function autoSelectSinglePortal(config, portals) {
88311
88320
  if (portals.length === 1 && portals[0]) {
88312
88321
  const portal = portals[0];
88313
- setSelectedPortalId(config, portal.target_portal);
88322
+ await setSelectedPortalIdAsync(config, portal.target_portal);
88314
88323
  console.error(`Auto-selected single portal: ${portal.target_name ?? "Unnamed"} (${portal.target_portal})`);
88315
88324
  return portal.target_portal;
88316
88325
  }
@@ -88360,7 +88369,7 @@ Disabled portals remain selectable, but only stale local data is available if it
88360
88369
  isError: true
88361
88370
  };
88362
88371
  }
88363
- const { previous, next } = Effect60.runSync(
88372
+ const { previous, next } = await Effect60.runPromise(
88364
88373
  deps.config.update((state) => {
88365
88374
  let nextState2 = seedMissingPortalSyncControls(
88366
88375
  state,
@@ -134488,7 +134497,7 @@ var mainProgram = Effect143.gen(function* () {
134488
134497
  const portalFileState = yield* PortalFileStateService;
134489
134498
  const getPortalId = () => getSelectedPortalId(config);
134490
134499
  const getClientState2 = () => Effect143.runSync(config.load());
134491
- const saveClientState = (updater) => Effect143.runSync(
134500
+ const saveClientState = async (updater) => Effect143.runPromise(
134492
134501
  pipe119(
134493
134502
  config.update(updater),
134494
134503
  Effect143.map(({ next }) => next)
@@ -134516,7 +134525,7 @@ var mainProgram = Effect143.gen(function* () {
134516
134525
  portalData,
134517
134526
  portalFileState
134518
134527
  });
134519
- const handoffSelectedPortal = (nextPortalId) => {
134528
+ const handoffSelectedPortal = async (nextPortalId) => {
134520
134529
  const previousPortalId = getSelectedPortalId(config);
134521
134530
  if (previousPortalId !== null && previousPortalId !== nextPortalId) {
134522
134531
  Effect143.runSync(
@@ -134527,7 +134536,7 @@ var mainProgram = Effect143.gen(function* () {
134527
134536
  );
134528
134537
  }
134529
134538
  setSelectedPortal(nextPortalId);
134530
- const nextState = saveClientState((state2) => ({
134539
+ const nextState = await saveClientState((state2) => ({
134531
134540
  ...state2,
134532
134541
  selectedPortalId: nextPortalId
134533
134542
  }));
@@ -134961,21 +134970,27 @@ var mainProgram = Effect143.gen(function* () {
134961
134970
  )
134962
134971
  );
134963
134972
  yield* ws6.registerHandlers({
134964
- onSyncArtifacts: (portalId, artifacts) => {
134973
+ onSyncArtifacts: async (portalId, artifacts) => {
134965
134974
  if (!isMasterClient()) {
134966
134975
  logReadOnlySkip("full artifact sync", portalId);
134967
134976
  return;
134968
134977
  }
134969
134978
  const incomingWithStatus = artifacts.map((a4) => ({ ...a4, status: "NOT_STARTED", error: null }));
134970
- const updated = pipe119(
134971
- portalFileState.setArtifacts(portalId, incomingWithStatus),
134972
- Effect143.tap(
134973
- (s) => Effect143.sync(
134974
- () => console.error(`[sync:full] Saved ${s.artifacts.length} artifacts for portal ${portalId}`)
134979
+ const updated = await Effect143.runPromise(
134980
+ pipe119(
134981
+ portalFileState.setArtifacts(portalId, incomingWithStatus),
134982
+ Effect143.tap(
134983
+ (s) => Effect143.sync(
134984
+ () => console.error(`[sync:full] Saved ${s.artifacts.length} artifacts for portal ${portalId}`)
134985
+ )
134986
+ ),
134987
+ Effect143.catchAll(
134988
+ (error) => Effect143.sync(() => {
134989
+ console.error(`[sync:full] Failed to persist artifact manifest for portal ${portalId}:`, error);
134990
+ return null;
134991
+ })
134975
134992
  )
134976
- ),
134977
- Effect143.catchAll(() => Effect143.succeed(null)),
134978
- Effect143.runSync
134993
+ )
134979
134994
  );
134980
134995
  if (!updated) return;
134981
134996
  const enabledArtifacts = filterEnabledArtifacts(getClientState2(), portalId, incomingWithStatus);
@@ -134995,7 +135010,7 @@ var mainProgram = Effect143.gen(function* () {
134995
135010
  schedulePortalFollowUpAfterDrain(portalId, "sync:full");
134996
135011
  }
134997
135012
  },
134998
- onNewArtifacts: (portalId, artifacts) => {
135013
+ onNewArtifacts: async (portalId, artifacts) => {
134999
135014
  if (!isMasterClient()) {
135000
135015
  logReadOnlySkip("new artifact handling", portalId);
135001
135016
  return;
@@ -135004,10 +135019,16 @@ var mainProgram = Effect143.gen(function* () {
135004
135019
  const newWithStatus = artifacts.map((a4) => ({ ...a4, status: "NOT_STARTED", error: null }));
135005
135020
  const enabledArtifacts = filterEnabledArtifacts(getClientState2(), portalId, newWithStatus);
135006
135021
  const objectTypesToSync = enabledArtifacts.map((a4) => a4.object_type);
135007
- const merged = pipe119(
135008
- portalFileState.mergeArtifacts(portalId, newWithStatus),
135009
- Effect143.catchAll(() => Effect143.succeed(null)),
135010
- Effect143.runSync
135022
+ const merged = await Effect143.runPromise(
135023
+ pipe119(
135024
+ portalFileState.mergeArtifacts(portalId, newWithStatus),
135025
+ Effect143.catchAll(
135026
+ (error) => Effect143.sync(() => {
135027
+ console.error(`[sync:new-artifacts] Failed to persist artifact update for portal ${portalId}:`, error);
135028
+ return null;
135029
+ })
135030
+ )
135031
+ )
135011
135032
  );
135012
135033
  if (!merged) return;
135013
135034
  const toSync = filterUnsyncedArtifacts(merged.artifacts, new Set(objectTypesToSync));
@@ -135173,15 +135194,15 @@ var mainProgram = Effect143.gen(function* () {
135173
135194
  )
135174
135195
  );
135175
135196
  },
135176
- autoSelectSinglePortal: (portals) => {
135177
- const autoSelected = autoSelectSinglePortal(config, portals);
135197
+ autoSelectSinglePortal: async (portals) => {
135198
+ const autoSelected = await autoSelectSinglePortal(config, portals);
135178
135199
  if (autoSelected !== null) {
135179
135200
  setSelectedPortal(autoSelected);
135180
135201
  }
135181
135202
  return autoSelected;
135182
135203
  },
135183
- onRegisterSuccess: (portals) => {
135184
- const nextState = saveClientState(
135204
+ onRegisterSuccess: async (portals) => {
135205
+ const nextState = await saveClientState(
135185
135206
  (state2) => seedMissingPortalSyncControls(state2, portals.map((portal) => portal.target_portal))
135186
135207
  );
135187
135208
  const selectedPortalId2 = getSelectedPortalId(config);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daeda/mcp-pro",
3
- "version": "0.1.47",
3
+ "version": "0.1.48",
4
4
  "description": "MCP server for HubSpot CRM — sync, query, and manage your portal data",
5
5
  "type": "module",
6
6
  "bin": {