infinitecampus-mcp 3.1.2 → 3.1.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/dist/bundle.js CHANGED
@@ -4858,7 +4858,7 @@ var require_memoizer = __commonJS({
4858
4858
  var NONE2 = 0;
4859
4859
  var ASSUMED2 = 1;
4860
4860
  var PROVEN2 = 2;
4861
- function isRecursive2(inst, stack, resolve2) {
4861
+ function isRecursive2(inst, stack, resolve3) {
4862
4862
  const cached2 = recursive2.get(inst);
4863
4863
  if (cached2 !== void 0)
4864
4864
  return cached2 ? PROVEN2 : NONE2;
@@ -4868,7 +4868,7 @@ var require_memoizer = __commonJS({
4868
4868
  let result = NONE2;
4869
4869
  const check2 = (child) => {
4870
4870
  if (result !== PROVEN2 && child?._zod) {
4871
- const answer = isRecursive2(child, stack, resolve2);
4871
+ const answer = isRecursive2(child, stack, resolve3);
4872
4872
  if (answer > result)
4873
4873
  result = answer;
4874
4874
  }
@@ -4879,7 +4879,7 @@ var require_memoizer = __commonJS({
4879
4879
  const desc = Object.getOwnPropertyDescriptor(sh, key);
4880
4880
  if (spread && !desc.enumerable)
4881
4881
  continue;
4882
- const child = desc.get ? ASSUMED2 : desc.value?._zod ? isRecursive2(desc.value, stack, resolve2) : NONE2;
4882
+ const child = desc.get ? ASSUMED2 : desc.value?._zod ? isRecursive2(desc.value, stack, resolve3) : NONE2;
4883
4883
  if (child > answer)
4884
4884
  answer = child;
4885
4885
  }
@@ -4943,7 +4943,7 @@ var require_memoizer = __commonJS({
4943
4943
  break;
4944
4944
  // `$ZodLazy` caches its inner on the def, so a resolved edge is followed exactly
4945
4945
  case "lazy": {
4946
- const inner = def._cachedInner ?? (resolve2 ? inst._zod.innerType : void 0);
4946
+ const inner = def._cachedInner ?? (resolve3 ? inst._zod.innerType : void 0);
4947
4947
  merge2(inner ? isRecursive2(inner, stack, false) : ASSUMED2);
4948
4948
  break;
4949
4949
  }
@@ -5007,7 +5007,7 @@ var require_memoizer = __commonJS({
5007
5007
  return bucket;
5008
5008
  }
5009
5009
  var handoff2;
5010
- var open2 = [];
5010
+ var open3 = [];
5011
5011
  var memo3 = {
5012
5012
  alloc(_inst, payload, empty) {
5013
5013
  const bucket = handoff2;
@@ -5016,7 +5016,7 @@ var require_memoizer = __commonJS({
5016
5016
  handoff2 = void 0;
5017
5017
  const entry = { value: empty, issues: null };
5018
5018
  bucket.set(payload.value, entry);
5019
- open2.push(entry);
5019
+ open3.push(entry);
5020
5020
  return empty;
5021
5021
  },
5022
5022
  guard(inst) {
@@ -5087,10 +5087,10 @@ var require_memoizer = __commonJS({
5087
5087
  return payload;
5088
5088
  }
5089
5089
  handoff2 = bucket;
5090
- const depth = open2.length;
5090
+ const depth = open3.length;
5091
5091
  const result = base(payload, ctx);
5092
5092
  handoff2 = void 0;
5093
- const entry = open2.length > depth ? open2.pop() : void 0;
5093
+ const entry = open3.length > depth ? open3.pop() : void 0;
5094
5094
  if (result instanceof Promise) {
5095
5095
  return result.then((r) => {
5096
5096
  if (entry)
@@ -26497,7 +26497,7 @@ var require_stream = __commonJS({
26497
26497
  };
26498
26498
  duplex._final = function(callback) {
26499
26499
  if (ws.readyState === ws.CONNECTING) {
26500
- ws.once("open", function open2() {
26500
+ ws.once("open", function open3() {
26501
26501
  duplex._final(callback);
26502
26502
  });
26503
26503
  return;
@@ -26518,7 +26518,7 @@ var require_stream = __commonJS({
26518
26518
  };
26519
26519
  duplex._write = function(chunk2, encoding, callback) {
26520
26520
  if (ws.readyState === ws.CONNECTING) {
26521
- ws.once("open", function open2() {
26521
+ ws.once("open", function open3() {
26522
26522
  duplex._write(chunk2, encoding, callback);
26523
26523
  });
26524
26524
  return;
@@ -26980,7 +26980,7 @@ var require_websocket_server = __commonJS({
26980
26980
  });
26981
26981
 
26982
26982
  // src/index.ts
26983
- import { dirname as dirname3, join as join4 } from "path";
26983
+ import { dirname as dirname3, join as join6 } from "path";
26984
26984
  import { fileURLToPath } from "url";
26985
26985
 
26986
26986
  // node_modules/@chrischall/mcp-utils/dist/cancel/index.js
@@ -31399,14 +31399,14 @@ function inputRequiredRoundsExceededMessage(method, maxRounds) {
31399
31399
  return `Multi-round-trip request '${method}' still required input after ${maxRounds} rounds (inputRequired.maxRounds)`;
31400
31400
  }
31401
31401
  function sleep(ms, signal) {
31402
- return new Promise((resolve2, reject) => {
31402
+ return new Promise((resolve3, reject) => {
31403
31403
  if (signal?.aborted) {
31404
31404
  reject(signal.reason instanceof SdkError ? signal.reason : new SdkError(SdkErrorCode.RequestTimeout, String(signal.reason)));
31405
31405
  return;
31406
31406
  }
31407
31407
  const timer = setTimeout(() => {
31408
31408
  signal?.removeEventListener("abort", onAbort);
31409
- resolve2();
31409
+ resolve3();
31410
31410
  }, ms);
31411
31411
  const onAbort = () => {
31412
31412
  clearTimeout(timer);
@@ -32200,7 +32200,7 @@ var Protocol = class {
32200
32200
  const flowStartedAt = Date.now();
32201
32201
  let onAbort;
32202
32202
  let cleanupMessageId;
32203
- return new Promise((resolve2, reject) => {
32203
+ return new Promise((resolve3, reject) => {
32204
32204
  const earlyReject = (error62) => {
32205
32205
  reject(error62);
32206
32206
  };
@@ -32268,7 +32268,7 @@ var Protocol = class {
32268
32268
  }
32269
32269
  if (decoded.kind === "invalid") return reject(decoded.error);
32270
32270
  if (decoded.kind === "input_required") {
32271
- if (options?.allowInputRequired === true) return resolve2(manualInputRequiredValue(decoded));
32271
+ if (options?.allowInputRequired === true) return resolve3(manualInputRequiredValue(decoded));
32272
32272
  const flow = {
32273
32273
  codec: codec2,
32274
32274
  request,
@@ -32280,11 +32280,11 @@ var Protocol = class {
32280
32280
  params
32281
32281
  }, resultSchema, legOptions)
32282
32282
  };
32283
- return resolve2(this._resolveNonCompleteResult(decoded, flow));
32283
+ return resolve3(this._resolveNonCompleteResult(decoded, flow));
32284
32284
  }
32285
32285
  const result = decoded.result;
32286
32286
  validateStandardSchema(resultSchema, result).then((parseResult) => {
32287
- if (parseResult.success) resolve2(parseResult.data);
32287
+ if (parseResult.success) resolve3(parseResult.data);
32288
32288
  else reject(new SdkError(SdkErrorCode.InvalidResult, `Invalid result for ${request.method}: ${parseResult.error}`));
32289
32289
  }, reject);
32290
32290
  });
@@ -35196,7 +35196,7 @@ var require_compile2 = /* @__PURE__ */ __commonJSMin(((exports) => {
35196
35196
  ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);
35197
35197
  const schOrFunc = root.refs[ref];
35198
35198
  if (schOrFunc) return schOrFunc;
35199
- let _sch = resolve2.call(this, root, ref);
35199
+ let _sch = resolve3.call(this, root, ref);
35200
35200
  if (_sch === void 0) {
35201
35201
  const schema = (_a3 = root.localRefs) === null || _a3 === void 0 ? void 0 : _a3[ref];
35202
35202
  const { schemaId } = this.opts;
@@ -35222,7 +35222,7 @@ var require_compile2 = /* @__PURE__ */ __commonJSMin(((exports) => {
35222
35222
  function sameSchemaEnv(s1, s2) {
35223
35223
  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
35224
35224
  }
35225
- function resolve2(root, ref) {
35225
+ function resolve3(root, ref) {
35226
35226
  let sch;
35227
35227
  while (typeof (sch = this.refs[ref]) == "string") ref = sch;
35228
35228
  return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);
@@ -35672,47 +35672,47 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35672
35672
  else if (typeof uri === "object") uri = parse3(serialize(uri, options), options);
35673
35673
  return uri;
35674
35674
  }
35675
- function resolve2(baseURI, relativeURI, options) {
35675
+ function resolve3(baseURI, relativeURI, options) {
35676
35676
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
35677
35677
  const resolved = resolveComponent(parse3(baseURI, schemelessOptions), parse3(relativeURI, schemelessOptions), schemelessOptions, true);
35678
35678
  schemelessOptions.skipEscape = true;
35679
35679
  return serialize(resolved, schemelessOptions);
35680
35680
  }
35681
- function resolveComponent(base, relative, options, skipNormalization) {
35681
+ function resolveComponent(base, relative2, options, skipNormalization) {
35682
35682
  const target = {};
35683
35683
  if (!skipNormalization) {
35684
35684
  base = parse3(serialize(base, options), options);
35685
- relative = parse3(serialize(relative, options), options);
35685
+ relative2 = parse3(serialize(relative2, options), options);
35686
35686
  }
35687
35687
  options = options || {};
35688
- if (!options.tolerant && relative.scheme) {
35689
- target.scheme = relative.scheme;
35690
- target.userinfo = relative.userinfo;
35691
- target.host = relative.host;
35692
- target.port = relative.port;
35693
- target.path = removeDotSegments(relative.path || "");
35694
- target.query = relative.query;
35688
+ if (!options.tolerant && relative2.scheme) {
35689
+ target.scheme = relative2.scheme;
35690
+ target.userinfo = relative2.userinfo;
35691
+ target.host = relative2.host;
35692
+ target.port = relative2.port;
35693
+ target.path = removeDotSegments(relative2.path || "");
35694
+ target.query = relative2.query;
35695
35695
  } else {
35696
- if (relative.userinfo !== void 0 || relative.host !== void 0 || relative.port !== void 0) {
35697
- target.userinfo = relative.userinfo;
35698
- target.host = relative.host;
35699
- target.port = relative.port;
35700
- target.path = removeDotSegments(relative.path || "");
35701
- target.query = relative.query;
35696
+ if (relative2.userinfo !== void 0 || relative2.host !== void 0 || relative2.port !== void 0) {
35697
+ target.userinfo = relative2.userinfo;
35698
+ target.host = relative2.host;
35699
+ target.port = relative2.port;
35700
+ target.path = removeDotSegments(relative2.path || "");
35701
+ target.query = relative2.query;
35702
35702
  } else {
35703
- if (!relative.path) {
35703
+ if (!relative2.path) {
35704
35704
  target.path = base.path;
35705
- if (relative.query !== void 0) target.query = relative.query;
35705
+ if (relative2.query !== void 0) target.query = relative2.query;
35706
35706
  else target.query = base.query;
35707
35707
  } else {
35708
- if (relative.path[0] === "/") target.path = removeDotSegments(relative.path);
35708
+ if (relative2.path[0] === "/") target.path = removeDotSegments(relative2.path);
35709
35709
  else {
35710
- if ((base.userinfo !== void 0 || base.host !== void 0 || base.port !== void 0) && !base.path) target.path = "/" + relative.path;
35711
- else if (!base.path) target.path = relative.path;
35712
- else target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path;
35710
+ if ((base.userinfo !== void 0 || base.host !== void 0 || base.port !== void 0) && !base.path) target.path = "/" + relative2.path;
35711
+ else if (!base.path) target.path = relative2.path;
35712
+ else target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative2.path;
35713
35713
  target.path = removeDotSegments(target.path);
35714
35714
  }
35715
- target.query = relative.query;
35715
+ target.query = relative2.query;
35716
35716
  }
35717
35717
  target.userinfo = base.userinfo;
35718
35718
  target.host = base.host;
@@ -35720,7 +35720,7 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35720
35720
  }
35721
35721
  target.scheme = base.scheme;
35722
35722
  }
35723
- target.fragment = relative.fragment;
35723
+ target.fragment = relative2.fragment;
35724
35724
  return target;
35725
35725
  }
35726
35726
  function equal(uriA, uriB, options) {
@@ -35846,7 +35846,7 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35846
35846
  const fastUri = {
35847
35847
  SCHEMES,
35848
35848
  normalize,
35849
- resolve: resolve2,
35849
+ resolve: resolve3,
35850
35850
  resolveComponent,
35851
35851
  equal,
35852
35852
  serialize,
@@ -41219,7 +41219,7 @@ var StdioServerTransport = class {
41219
41219
  }
41220
41220
  send(message) {
41221
41221
  if (this._closed) return Promise.reject(/* @__PURE__ */ new Error("StdioServerTransport is closed"));
41222
- return new Promise((resolve2, reject) => {
41222
+ return new Promise((resolve3, reject) => {
41223
41223
  const json2 = serializeMessage(message);
41224
41224
  let settled = false;
41225
41225
  const onError = (error62) => {
@@ -41234,14 +41234,14 @@ var StdioServerTransport = class {
41234
41234
  settled = true;
41235
41235
  this._stdout.off("error", onError);
41236
41236
  this._stdout.off("drain", onDrain);
41237
- resolve2();
41237
+ resolve3();
41238
41238
  };
41239
41239
  this._stdout.once("error", onError);
41240
41240
  if (this._stdout.write(json2)) {
41241
41241
  if (settled) return;
41242
41242
  settled = true;
41243
41243
  this._stdout.off("error", onError);
41244
- resolve2();
41244
+ resolve3();
41245
41245
  } else if (!settled) this._stdout.once("drain", onDrain);
41246
41246
  });
41247
41247
  }
@@ -41295,14 +41295,14 @@ var StdioConnectionChannel = class {
41295
41295
  */
41296
41296
  async whenRequestsAnswered(timeoutMs) {
41297
41297
  if (this._closed || this._pendingRequests.size === 0) return true;
41298
- return await new Promise((resolve2) => {
41298
+ return await new Promise((resolve3) => {
41299
41299
  const waiter = () => {
41300
41300
  clearTimeout(timer);
41301
- resolve2(true);
41301
+ resolve3(true);
41302
41302
  };
41303
41303
  const timer = setTimeout(() => {
41304
41304
  this._drainWaiters = this._drainWaiters.filter((pending) => pending !== waiter);
41305
- resolve2(false);
41305
+ resolve3(false);
41306
41306
  }, timeoutMs);
41307
41307
  this._drainWaiters.push(waiter);
41308
41308
  });
@@ -46735,7 +46735,7 @@ var recursive = /* @__PURE__ */ new WeakMap();
46735
46735
  var NONE = 0;
46736
46736
  var ASSUMED = 1;
46737
46737
  var PROVEN = 2;
46738
- function isRecursive(inst, stack, resolve2) {
46738
+ function isRecursive(inst, stack, resolve3) {
46739
46739
  const cached2 = recursive.get(inst);
46740
46740
  if (cached2 !== void 0)
46741
46741
  return cached2 ? PROVEN : NONE;
@@ -46745,7 +46745,7 @@ function isRecursive(inst, stack, resolve2) {
46745
46745
  let result = NONE;
46746
46746
  const check2 = (child) => {
46747
46747
  if (result !== PROVEN && child?._zod) {
46748
- const answer = isRecursive(child, stack, resolve2);
46748
+ const answer = isRecursive(child, stack, resolve3);
46749
46749
  if (answer > result)
46750
46750
  result = answer;
46751
46751
  }
@@ -46756,7 +46756,7 @@ function isRecursive(inst, stack, resolve2) {
46756
46756
  const desc = Object.getOwnPropertyDescriptor(sh, key);
46757
46757
  if (spread && !desc.enumerable)
46758
46758
  continue;
46759
- const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack, resolve2) : NONE;
46759
+ const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack, resolve3) : NONE;
46760
46760
  if (child > answer)
46761
46761
  answer = child;
46762
46762
  }
@@ -46820,7 +46820,7 @@ function isRecursive(inst, stack, resolve2) {
46820
46820
  break;
46821
46821
  // `$ZodLazy` caches its inner on the def, so a resolved edge is followed exactly
46822
46822
  case "lazy": {
46823
- const inner = def._cachedInner ?? (resolve2 ? inst._zod.innerType : void 0);
46823
+ const inner = def._cachedInner ?? (resolve3 ? inst._zod.innerType : void 0);
46824
46824
  merge2(inner ? isRecursive(inner, stack, false) : ASSUMED);
46825
46825
  break;
46826
46826
  }
@@ -63317,7 +63317,7 @@ var DEFAULT_BIND_TIMEOUT_MS = 5e3;
63317
63317
  async function electRole(opts) {
63318
63318
  const server = createServer();
63319
63319
  const bindTimeoutMs = opts.bindTimeoutMs ?? DEFAULT_BIND_TIMEOUT_MS;
63320
- return new Promise((resolve2, reject) => {
63320
+ return new Promise((resolve3, reject) => {
63321
63321
  let timer;
63322
63322
  const clearBindTimer = () => {
63323
63323
  if (timer) {
@@ -63333,7 +63333,7 @@ async function electRole(opts) {
63333
63333
  server.close();
63334
63334
  } catch {
63335
63335
  }
63336
- resolve2({ role: "peer" });
63336
+ resolve3({ role: "peer" });
63337
63337
  } else {
63338
63338
  reject(e);
63339
63339
  }
@@ -63341,7 +63341,7 @@ async function electRole(opts) {
63341
63341
  const onListening = () => {
63342
63342
  clearBindTimer();
63343
63343
  server.removeListener("error", onError);
63344
- resolve2({ role: "host", server });
63344
+ resolve3({ role: "host", server });
63345
63345
  };
63346
63346
  server.once("error", onError);
63347
63347
  server.once("listening", onListening);
@@ -63990,8 +63990,8 @@ async function startHost(opts) {
63990
63990
  let rejectOwnSession;
63991
63991
  let ownSessionReady;
63992
63992
  function resetSessionPromise() {
63993
- ownSessionReady = new Promise((resolve2, reject) => {
63994
- resolveOwnSession = resolve2;
63993
+ ownSessionReady = new Promise((resolve3, reject) => {
63994
+ resolveOwnSession = resolve3;
63995
63995
  rejectOwnSession = reject;
63996
63996
  });
63997
63997
  ownSessionReady.catch(() => {
@@ -64393,7 +64393,7 @@ async function startHost(opts) {
64393
64393
  });
64394
64394
  });
64395
64395
  return {
64396
- close: () => new Promise((resolve2) => {
64396
+ close: () => new Promise((resolve3) => {
64397
64397
  for (const client of wss.clients) {
64398
64398
  try {
64399
64399
  client.terminate();
@@ -64401,7 +64401,7 @@ async function startHost(opts) {
64401
64401
  }
64402
64402
  }
64403
64403
  wss.close(() => {
64404
- opts.httpServer.close(() => resolve2());
64404
+ opts.httpServer.close(() => resolve3());
64405
64405
  });
64406
64406
  }),
64407
64407
  sendOwnInner: async (inner) => {
@@ -64441,11 +64441,11 @@ async function startPeer(opts) {
64441
64441
  maxPayload: opts.maxPayloadBytes ?? MAX_PAYLOAD_BYTES
64442
64442
  });
64443
64443
  const dialTimeoutMs = opts.dialTimeoutMs ?? PEER_DIAL_TIMEOUT_MS;
64444
- await new Promise((resolve2, reject) => {
64444
+ await new Promise((resolve3, reject) => {
64445
64445
  let timer;
64446
64446
  const onOpen = () => {
64447
64447
  cleanup();
64448
- resolve2();
64448
+ resolve3();
64449
64449
  };
64450
64450
  const onError = (e) => {
64451
64451
  cleanup();
@@ -64533,10 +64533,10 @@ async function startPeer(opts) {
64533
64533
  let sessionPromiseSettled = false;
64534
64534
  function resetSessionPromise() {
64535
64535
  sessionPromiseSettled = false;
64536
- sessionPromise = new Promise((resolve2, reject) => {
64536
+ sessionPromise = new Promise((resolve3, reject) => {
64537
64537
  resolveFirstReady = (st) => {
64538
64538
  sessionPromiseSettled = true;
64539
- resolve2(st);
64539
+ resolve3(st);
64540
64540
  };
64541
64541
  rejectFirstReady = (e) => {
64542
64542
  sessionPromiseSettled = true;
@@ -65686,8 +65686,8 @@ var FetchproxyServer = class {
65686
65686
  async _fetchOnceWithTimeout(init, fetchOpts = {}) {
65687
65687
  const id = this.nextRequestId++;
65688
65688
  const inner = { type: "request", id, op: "fetch", init };
65689
- const pending = this.guardPending(new Promise((resolve2) => {
65690
- this.pending.set(id, resolve2);
65689
+ const pending = this.guardPending(new Promise((resolve3) => {
65690
+ this.pending.set(id, resolve3);
65691
65691
  }));
65692
65692
  try {
65693
65693
  await this.sendInnerFrame(inner, {
@@ -65710,12 +65710,12 @@ var FetchproxyServer = class {
65710
65710
  try {
65711
65711
  return await Promise.race([
65712
65712
  pending,
65713
- new Promise((resolve2) => {
65713
+ new Promise((resolve3) => {
65714
65714
  timer = setTimeout(() => {
65715
65715
  this.pending.delete(id);
65716
65716
  const elapsedMs = Date.now() - start;
65717
65717
  const error62 = `fetchproxy: ${init.url} did not respond within ${timeoutMs}ms`;
65718
- resolve2({
65718
+ resolve3({
65719
65719
  ok: false,
65720
65720
  error: error62,
65721
65721
  kind: "timeout",
@@ -65859,9 +65859,9 @@ var FetchproxyServer = class {
65859
65859
  if (opts.subdomain !== void 0)
65860
65860
  assertSubdomainLabel(opts.subdomain);
65861
65861
  const baseDomain = this.resolveBaseDomain(opts.domain);
65862
- const isAbsolute3 = path.startsWith("http://") || path.startsWith("https://");
65862
+ const isAbsolute5 = path.startsWith("http://") || path.startsWith("https://");
65863
65863
  let host;
65864
- if (isAbsolute3) {
65864
+ if (isAbsolute5) {
65865
65865
  try {
65866
65866
  host = new URL(path).host;
65867
65867
  } catch {
@@ -65870,7 +65870,7 @@ var FetchproxyServer = class {
65870
65870
  } else {
65871
65871
  host = opts.subdomain ? `${opts.subdomain}.${baseDomain}` : baseDomain;
65872
65872
  }
65873
- const url4 = isAbsolute3 ? path : `https://${host}${path}`;
65873
+ const url4 = isAbsolute5 ? path : `https://${host}${path}`;
65874
65874
  assertUrlInDomains("request url", url4, this.opts.domains);
65875
65875
  let tabUrl = `https://${host}/`;
65876
65876
  if (opts.viaTab !== void 0) {
@@ -66135,8 +66135,8 @@ var FetchproxyServer = class {
66135
66135
  const tabUrl = `https://${host}/`;
66136
66136
  inner = { type: "request", id, op: "read_cookies", init: { tabUrl } };
66137
66137
  }
66138
- const pending = this.guardPending(new Promise((resolve2) => {
66139
- this.pendingReadCookies.set(id, resolve2);
66138
+ const pending = this.guardPending(new Promise((resolve3) => {
66139
+ this.pendingReadCookies.set(id, resolve3);
66140
66140
  }));
66141
66141
  await this.sendInnerFrame(inner);
66142
66142
  const result = await this._withVerbTimeout(pending, this.pendingReadCookies, id, `https://${host}`);
@@ -66194,8 +66194,8 @@ var FetchproxyServer = class {
66194
66194
  ...cookiePath !== void 0 ? { path: cookiePath } : {}
66195
66195
  }
66196
66196
  };
66197
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66198
- this.pendingWriteCookies.set(id, { resolve: resolve2, reject });
66197
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66198
+ this.pendingWriteCookies.set(id, { resolve: resolve3, reject });
66199
66199
  }));
66200
66200
  await this.sendInnerFrame(inner);
66201
66201
  return this._withVerbTimeout(
@@ -66265,8 +66265,8 @@ var FetchproxyServer = class {
66265
66265
  ...opts.pointers ? { pointers: { ...opts.pointers } } : {}
66266
66266
  }
66267
66267
  };
66268
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66269
- this.pendingStorage.set(id, { resolve: resolve2, reject });
66268
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66269
+ this.pendingStorage.set(id, { resolve: resolve3, reject });
66270
66270
  }));
66271
66271
  await this.sendInnerFrame(inner);
66272
66272
  return this._withVerbTimeout(pending, this.pendingStorage, id, `https://${host}`);
@@ -66324,8 +66324,8 @@ var FetchproxyServer = class {
66324
66324
  ...opts.timeoutMs !== void 0 ? { timeoutMs: opts.timeoutMs } : {}
66325
66325
  }
66326
66326
  };
66327
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66328
- this.pendingCapture.set(id, { resolve: resolve2, reject });
66327
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66328
+ this.pendingCapture.set(id, { resolve: resolve3, reject });
66329
66329
  }));
66330
66330
  await this.sendInnerFrame(inner);
66331
66331
  return this._withVerbTimeout(
@@ -66372,8 +66372,8 @@ var FetchproxyServer = class {
66372
66372
  ...opts.timeoutMs !== void 0 ? { timeoutMs: opts.timeoutMs } : {}
66373
66373
  }
66374
66374
  };
66375
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66376
- this.pendingRedirect.set(id, { resolve: resolve2, reject });
66375
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66376
+ this.pendingRedirect.set(id, { resolve: resolve3, reject });
66377
66377
  }));
66378
66378
  await this.sendInnerFrame(inner);
66379
66379
  return this._withVerbTimeout(
@@ -66468,8 +66468,8 @@ var FetchproxyServer = class {
66468
66468
  ...opts.timeoutMs !== void 0 ? { timeoutMs: opts.timeoutMs } : {}
66469
66469
  }
66470
66470
  };
66471
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66472
- this.pendingDownload.set(id, { resolve: resolve2, reject });
66471
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66472
+ this.pendingDownload.set(id, { resolve: resolve3, reject });
66473
66473
  }));
66474
66474
  await this.sendInnerFrame(inner);
66475
66475
  return this._withVerbTimeout(
@@ -66529,8 +66529,8 @@ var FetchproxyServer = class {
66529
66529
  keys: [...opts.keys]
66530
66530
  }
66531
66531
  };
66532
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66533
- this.pendingIdb.set(id, { resolve: resolve2, reject });
66532
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66533
+ this.pendingIdb.set(id, { resolve: resolve3, reject });
66534
66534
  }));
66535
66535
  await this.sendInnerFrame(inner);
66536
66536
  return this._withVerbTimeout(pending, this.pendingIdb, id, origin);
@@ -66569,8 +66569,8 @@ var FetchproxyServer = class {
66569
66569
  op: "read_dom",
66570
66570
  init: { origin, names: [...opts.names] }
66571
66571
  };
66572
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66573
- this.pendingStorage.set(id, { resolve: resolve2, reject });
66572
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66573
+ this.pendingStorage.set(id, { resolve: resolve3, reject });
66574
66574
  }));
66575
66575
  await this.sendInnerFrame(inner);
66576
66576
  return this._withVerbTimeout(pending, this.pendingStorage, id, origin);
@@ -66615,8 +66615,8 @@ var FetchproxyServer = class {
66615
66615
  op: "read_dom_list",
66616
66616
  init: { origin, name: opts.name }
66617
66617
  };
66618
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66619
- this.pendingDomList.set(id, { resolve: resolve2, reject });
66618
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66619
+ this.pendingDomList.set(id, { resolve: resolve3, reject });
66620
66620
  }));
66621
66621
  await this.sendInnerFrame(inner);
66622
66622
  return this._withVerbTimeout(pending, this.pendingDomList, id, origin);
@@ -66661,8 +66661,8 @@ var FetchproxyServer = class {
66661
66661
  ...opts.tabUrl !== void 0 ? { tabUrl: opts.tabUrl } : {}
66662
66662
  }
66663
66663
  };
66664
- const pending = this.guardPending(new Promise((resolve2, reject) => {
66665
- this.pendingGraphql.set(id, { resolve: resolve2, reject });
66664
+ const pending = this.guardPending(new Promise((resolve3, reject) => {
66665
+ this.pendingGraphql.set(id, { resolve: resolve3, reject });
66666
66666
  }));
66667
66667
  const retrySafe = opts.retryOnTimeout === true;
66668
66668
  await this.sendInnerFrame(inner, { resendable: retrySafe });
@@ -67422,6 +67422,8 @@ function registerCredentialHealthcheckTool(args) {
67422
67422
  }
67423
67423
 
67424
67424
  // src/config.ts
67425
+ import { homedir as homedir2 } from "node:os";
67426
+ import { isAbsolute as isAbsolute3, join as join3 } from "node:path";
67425
67427
  function readVar(env, key) {
67426
67428
  return readEnvVar(key, { env });
67427
67429
  }
@@ -67458,11 +67460,18 @@ function loadAccount(env = process.env) {
67458
67460
  password: password ?? ""
67459
67461
  };
67460
67462
  }
67463
+ function resolveDownloadDir(env = process.env) {
67464
+ const dir = readVar(env, "IC_DOWNLOAD_DIR") ?? join3(homedir2(), "Downloads");
67465
+ if (!isAbsolute3(dir)) {
67466
+ throw new Error(`IC_DOWNLOAD_DIR must be an absolute path, got: '${dir}'`);
67467
+ }
67468
+ return dir;
67469
+ }
67461
67470
 
67462
67471
  // package.json
67463
67472
  var package_default = {
67464
67473
  name: "infinitecampus-mcp",
67465
- version: "3.1.2",
67474
+ version: "3.1.3",
67466
67475
  mcpName: "io.github.chrischall/infinitecampus-mcp",
67467
67476
  description: "Infinite Campus (Campus Parent) MCP server \u2014 multi-district read + message/document write",
67468
67477
  author: "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -67618,13 +67627,14 @@ async function liftBrowserSession(account2) {
67618
67627
  }
67619
67628
 
67620
67629
  // src/client.ts
67621
- import { writeFile as writeFile3, stat } from "fs/promises";
67622
- import { dirname as dirname2 } from "path";
67630
+ import { open as open2, lstat as lstat2, realpath } from "fs/promises";
67631
+ import { constants as fsConstants } from "fs";
67632
+ import { basename, dirname as dirname2, isAbsolute as isAbsolute4, join as join5, relative, resolve as resolve2, sep } from "path";
67623
67633
 
67624
67634
  // node_modules/@chrischall/mcp-utils/dist/session/index.js
67625
67635
  import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync, renameSync, unlinkSync } from "node:fs";
67626
- import { dirname, join as join3, resolve } from "node:path";
67627
- import { homedir as homedir2 } from "node:os";
67636
+ import { dirname, join as join4, resolve } from "node:path";
67637
+ import { homedir as homedir3 } from "node:os";
67628
67638
  import { randomBytes as randomBytes3, createHmac } from "node:crypto";
67629
67639
  function bindingDigest(secret, salt) {
67630
67640
  return createHmac("sha256", salt).update(secret).digest("hex").slice(0, 32);
@@ -67712,11 +67722,11 @@ function createFileStatePersistence(opts) {
67712
67722
  };
67713
67723
  }
67714
67724
  function homeOf(env) {
67715
- return readEnvVar("HOME", { env }) ?? homedir2();
67725
+ return readEnvVar("HOME", { env }) ?? homedir3();
67716
67726
  }
67717
67727
  function resolveStateDir(opts = {}) {
67718
67728
  const env = opts.env;
67719
- return join3(readEnvVar("MCP_DATA_DIR", { env }) ?? homeOf(env), opts.subdir ?? "");
67729
+ return join4(readEnvVar("MCP_DATA_DIR", { env }) ?? homeOf(env), opts.subdir ?? "");
67720
67730
  }
67721
67731
  function resolveStateFile(opts) {
67722
67732
  const override = opts.envVar !== void 0 ? readEnvVar(opts.envVar, { env: opts.env }) : void 0;
@@ -67724,13 +67734,13 @@ function resolveStateFile(opts) {
67724
67734
  if (override === "~")
67725
67735
  return homeOf(opts.env);
67726
67736
  if (override.startsWith("~/"))
67727
- return join3(homeOf(opts.env), override.slice(2));
67737
+ return join4(homeOf(opts.env), override.slice(2));
67728
67738
  return resolve(override);
67729
67739
  }
67730
67740
  const dirOpts = { env: opts.env };
67731
67741
  if (opts.subdir !== void 0)
67732
67742
  dirOpts.subdir = opts.subdir;
67733
- return join3(resolveStateDir(dirOpts), opts.fileName);
67743
+ return join4(resolveStateDir(dirOpts), opts.fileName);
67734
67744
  }
67735
67745
  var TOKEN_REFRESH_SKEW_MS = 5 * 60 * 1e3;
67736
67746
  function isPersistedCookieSession(raw) {
@@ -68194,14 +68204,28 @@ var ICClient = class {
68194
68204
  return data;
68195
68205
  }
68196
68206
  async request(district, path, opts = {}) {
68207
+ const account2 = await this.resolveAccount(district);
68208
+ await this.managers.get(account2.name).ensure();
68209
+ return this.doRequest(account2, path, opts);
68210
+ }
68211
+ /**
68212
+ * The account for `district`, running CUPS discovery once on a miss.
68213
+ *
68214
+ * Cold-start: linked districts are only added to the accounts map after
68215
+ * primary login + CUPS discovery. If the caller asks for a linked district
68216
+ * before any other request triggered login, we'd otherwise throw
68217
+ * UnknownDistrictError despite the district being valid. Shared by request()
68218
+ * and download() — download() once looked the map up directly, so a linked
68219
+ * district's document failed on a cold start (fleet-audit#142).
68220
+ */
68221
+ async resolveAccount(district) {
68197
68222
  let account2 = this.accounts.get(district);
68198
68223
  if (!account2) {
68199
68224
  await this.ensureDiscovery();
68200
68225
  account2 = this.accounts.get(district);
68201
68226
  if (!account2) throw new UnknownDistrictError(district, [...this.accounts.keys()]);
68202
68227
  }
68203
- await this.managers.get(account2.name).ensure();
68204
- return this.doRequest(account2, path, opts);
68228
+ return account2;
68205
68229
  }
68206
68230
  async login(account2) {
68207
68231
  const primaryName = this.linkedTo.get(account2.name);
@@ -68374,34 +68398,31 @@ var ICClient = class {
68374
68398
  }
68375
68399
  }
68376
68400
  async download(district, path, destinationPath, opts = {}) {
68401
+ const target = await confinedDestination(destinationPath);
68377
68402
  let destStat = null;
68378
68403
  try {
68379
- destStat = await stat(destinationPath);
68404
+ destStat = await lstat2(target.real);
68380
68405
  } catch {
68381
68406
  }
68407
+ if (destStat?.isSymbolicLink()) throw new InvalidPathError(destinationPath, "is a symlink");
68382
68408
  if (destStat?.isDirectory()) throw new InvalidPathError(destinationPath);
68383
68409
  if (destStat && !opts.overwrite) throw new FileExistsError(destinationPath);
68384
- const parent = dirname2(destinationPath);
68385
- try {
68386
- await stat(parent);
68387
- } catch {
68388
- throw new ParentDirectoryMissingError(parent);
68389
- }
68390
- const account2 = this.accounts.get(district);
68391
- if (!account2) throw new UnknownDistrictError(district, [...this.accounts.keys()]);
68392
- const session = await this.managers.get(account2.name).ensure();
68393
- const url4 = /^https?:\/\//i.test(path) ? path : `${account2.baseUrl}${path}`;
68394
- const res = await fetch(url4, {
68395
- headers: {
68396
- Cookie: session.cookieHeader,
68397
- ...session.xsrfToken ? { "X-XSRF-TOKEN": session.xsrfToken } : {}
68398
- }
68399
- });
68410
+ const account2 = await this.resolveAccount(district);
68411
+ const url4 = documentUrl(account2, path);
68412
+ const res = await this.managers.get(account2.name).withSession(
68413
+ async (session) => fetch(url4, {
68414
+ headers: {
68415
+ Cookie: session.cookieHeader,
68416
+ ...session.xsrfToken ? { "X-XSRF-TOKEN": session.xsrfToken } : {}
68417
+ }
68418
+ })
68419
+ );
68420
+ if (res.status === 401) throw new SessionExpiredError(account2.name);
68400
68421
  if (!res.ok) throw new Error(`IC download ${res.status} for ${path}`);
68401
68422
  const buf = new Uint8Array(await res.arrayBuffer());
68402
- await writeFile3(destinationPath, buf);
68423
+ await writeConfined(target.real, destinationPath, buf, !!opts.overwrite);
68403
68424
  return {
68404
- path: destinationPath,
68425
+ path: target.requested,
68405
68426
  bytes: buf.byteLength,
68406
68427
  contentType: res.headers.get("content-type") ?? "application/octet-stream"
68407
68428
  };
@@ -68433,6 +68454,60 @@ var ICClient = class {
68433
68454
  return text ? JSON.parse(text) : null;
68434
68455
  }
68435
68456
  };
68457
+ async function writeConfined(real, requested, buf, overwrite) {
68458
+ const { O_WRONLY, O_CREAT, O_TRUNC, O_EXCL, O_NOFOLLOW } = fsConstants;
68459
+ const flags = O_WRONLY | O_CREAT | O_NOFOLLOW | (overwrite ? O_TRUNC : O_EXCL);
68460
+ let handle;
68461
+ try {
68462
+ handle = await open2(real, flags, 438);
68463
+ } catch (e) {
68464
+ const code = e.code;
68465
+ if (code === "ELOOP") throw new InvalidPathError(requested, "is a symlink");
68466
+ if (code === "EEXIST") throw new FileExistsError(requested);
68467
+ throw e;
68468
+ }
68469
+ try {
68470
+ await handle.writeFile(buf);
68471
+ } finally {
68472
+ await handle.close();
68473
+ }
68474
+ }
68475
+ async function confinedDestination(destinationPath) {
68476
+ const root = resolveDownloadDir();
68477
+ let rootReal;
68478
+ try {
68479
+ rootReal = await realpath(root);
68480
+ } catch {
68481
+ throw new DownloadDirMissingError(root);
68482
+ }
68483
+ const requested = resolve2(root, destinationPath);
68484
+ const parent = dirname2(requested);
68485
+ let parentReal;
68486
+ try {
68487
+ parentReal = await realpath(parent);
68488
+ } catch {
68489
+ throw new ParentDirectoryMissingError(parent);
68490
+ }
68491
+ const real = join5(parentReal, basename(requested));
68492
+ const rel = relative(rootReal, real);
68493
+ if (isAbsolute4(rel) || rel.split(sep)[0] === "..") {
68494
+ throw new PathOutsideDownloadDirError(destinationPath, root);
68495
+ }
68496
+ return { requested, real };
68497
+ }
68498
+ function documentUrl(account2, path) {
68499
+ const raw = /^[a-z][a-z0-9+.-]*:/i.test(path) ? path : `${account2.baseUrl}${path}`;
68500
+ let parsed = null;
68501
+ try {
68502
+ parsed = new URL(raw);
68503
+ } catch {
68504
+ }
68505
+ const allowed = new URL(account2.baseUrl).origin;
68506
+ if (!parsed || parsed.protocol !== "https:" || parsed.origin !== allowed) {
68507
+ throw new DocumentOriginNotAllowedError(path, allowed);
68508
+ }
68509
+ return parsed.href;
68510
+ }
68436
68511
  function parseSetCookies(headers) {
68437
68512
  const raw = headers.getSetCookie?.() ?? [];
68438
68513
  const { cookies, cookieHeader } = parseCookieJar(
@@ -68495,14 +68570,46 @@ var SessionExpiredError = class extends Error {
68495
68570
  }
68496
68571
  district;
68497
68572
  };
68573
+ var DocumentOriginNotAllowedError = class extends Error {
68574
+ constructor(documentId, allowedOrigin) {
68575
+ super(
68576
+ `DocumentOriginNotAllowed: refusing to send the IC session to '${documentId}'. Documents are only downloaded over https from ${allowedOrigin} \u2014 pass the url field from ic_list_documents for this district.`
68577
+ );
68578
+ this.documentId = documentId;
68579
+ this.allowedOrigin = allowedOrigin;
68580
+ this.name = "DocumentOriginNotAllowedError";
68581
+ }
68582
+ documentId;
68583
+ allowedOrigin;
68584
+ };
68498
68585
  var InvalidPathError = class extends Error {
68499
- constructor(path) {
68500
- super(`InvalidPath: destinationPath must be a filename, not a directory: ${path}`);
68586
+ constructor(path, reason = "is a directory") {
68587
+ super(`InvalidPath: destinationPath must be a regular filename, but ${path} ${reason}`);
68501
68588
  this.path = path;
68502
68589
  this.name = "InvalidPathError";
68503
68590
  }
68504
68591
  path;
68505
68592
  };
68593
+ var PathOutsideDownloadDirError = class extends Error {
68594
+ constructor(path, downloadDir) {
68595
+ super(
68596
+ `PathOutsideDownloadDir: ${path} is outside the download directory ${downloadDir}. Documents are only written inside it \u2014 pass a path under it (or a relative one), or set IC_DOWNLOAD_DIR to change it.`
68597
+ );
68598
+ this.path = path;
68599
+ this.downloadDir = downloadDir;
68600
+ this.name = "PathOutsideDownloadDirError";
68601
+ }
68602
+ path;
68603
+ downloadDir;
68604
+ };
68605
+ var DownloadDirMissingError = class extends Error {
68606
+ constructor(path) {
68607
+ super(`DownloadDirMissing: the download directory ${path} does not exist. Create it or set IC_DOWNLOAD_DIR.`);
68608
+ this.path = path;
68609
+ this.name = "DownloadDirMissingError";
68610
+ }
68611
+ path;
68612
+ };
68506
68613
  var ParentDirectoryMissingError = class extends Error {
68507
68614
  constructor(path) {
68508
68615
  super(`ParentDirectoryMissing: ${path}`);
@@ -68607,13 +68714,11 @@ function registerStudentTools(server, client) {
68607
68714
  // src/tools/schedule.ts
68608
68715
  var argsSchema2 = external_exports.object({
68609
68716
  district: external_exports.string().describe("District name from ic_list_districts"),
68610
- studentId: external_exports.string().describe("Student personID from ic_list_students"),
68611
- date: external_exports.string().describe("YYYY-MM-DD; defaults to today").optional(),
68612
- termFilter: external_exports.string().describe("Term name or ID; optional").optional()
68717
+ studentId: external_exports.string().describe("Student personID from ic_list_students")
68613
68718
  });
68614
68719
  function registerScheduleTools(server, client) {
68615
68720
  server.registerTool("ic_get_schedule", {
68616
- description: "Get a student's class schedule for a given date (default: today).",
68721
+ description: "Get a student's class roster: every course with its section placements, across every term of the current enrollment. Not filtered by date or term \u2014 each placement carries its own term, so narrow the result yourself.",
68617
68722
  annotations: { readOnlyHint: true },
68618
68723
  inputSchema: external_exports.object({ ...argsSchema2.shape, view: viewArg() })
68619
68724
  }, async (rawArgs) => {
@@ -68880,24 +68985,24 @@ function extractPlainTextFromHtml(html) {
68880
68985
  }
68881
68986
  function stripElementContent(html, tag) {
68882
68987
  const lower = asciiLower(html);
68883
- const open2 = `<${tag}`;
68988
+ const open3 = `<${tag}`;
68884
68989
  const close = `</${tag}>`;
68885
68990
  let out = "";
68886
68991
  let i = 0;
68887
68992
  for (; ; ) {
68888
- const start = lower.indexOf(open2, i);
68993
+ const start = lower.indexOf(open3, i);
68889
68994
  if (start < 0) {
68890
68995
  out += html.slice(i);
68891
68996
  return out;
68892
68997
  }
68893
- const after = lower[start + open2.length];
68998
+ const after = lower[start + open3.length];
68894
68999
  if (after !== void 0 && after !== ">" && after !== " " && after !== " " && after !== "\n" && after !== "\r" && after !== "\f" && after !== "/") {
68895
- out += html.slice(i, start + open2.length);
68896
- i = start + open2.length;
69000
+ out += html.slice(i, start + open3.length);
69001
+ i = start + open3.length;
68897
69002
  continue;
68898
69003
  }
68899
69004
  out += html.slice(i, start) + " ";
68900
- const closeAt = lower.indexOf(close, start + open2.length);
69005
+ const closeAt = lower.indexOf(close, start + open3.length);
68901
69006
  if (closeAt < 0)
68902
69007
  return out;
68903
69008
  i = closeAt + close.length;
@@ -69029,7 +69134,9 @@ var listArgs2 = external_exports.object({
69029
69134
  var downloadArgs = external_exports.object({
69030
69135
  district: external_exports.string(),
69031
69136
  documentId: external_exports.string().describe("The url field returned by ic_list_documents"),
69032
- destinationPath: external_exports.string().describe("Absolute path where the PDF should be written"),
69137
+ destinationPath: external_exports.string().describe(
69138
+ "Where to write the PDF. Must be inside the download directory (IC_DOWNLOAD_DIR, default ~/Downloads); a relative path resolves against it."
69139
+ ),
69033
69140
  overwrite: external_exports.boolean().optional()
69034
69141
  });
69035
69142
  function registerDocumentTools(server, client) {
@@ -69064,7 +69171,7 @@ function registerDocumentTools(server, client) {
69064
69171
  }
69065
69172
  });
69066
69173
  server.registerTool("ic_download_document", {
69067
- description: "Download a student's document (PDF) to disk. documentId is the url field returned by ic_list_documents. Returns FeatureDisabled if the district has the module turned off.",
69174
+ description: "Download a student's document (PDF) to disk, inside the download directory (IC_DOWNLOAD_DIR, default ~/Downloads). documentId is the url field returned by ic_list_documents. Will not overwrite an existing file unless overwrite is true. Returns FeatureDisabled if the district has the module turned off.",
69068
69175
  annotations: { destructiveHint: true },
69069
69176
  inputSchema: downloadArgs
69070
69177
  }, async (rawArgs) => {
@@ -69463,7 +69570,7 @@ function registerFeaturesTools(server, client) {
69463
69570
 
69464
69571
  // src/index.ts
69465
69572
  await loadDotenvSafely({
69466
- path: join4(dirname3(fileURLToPath(import.meta.url)), "..", ".env"),
69573
+ path: join6(dirname3(fileURLToPath(import.meta.url)), "..", ".env"),
69467
69574
  override: false
69468
69575
  });
69469
69576
  var AI_NOTICE = "[infinitecampus-mcp] Developed and maintained by AI (Claude). Use at your own discretion.";
@@ -69481,7 +69588,7 @@ try {
69481
69588
  }
69482
69589
  var COMMON = {
69483
69590
  name: "infinitecampus",
69484
- version: "3.1.2"
69591
+ version: "3.1.3"
69485
69592
  // x-release-please-version
69486
69593
  };
69487
69594
  var healthState = { account, source, configError, client: null };