babylitics-mcp 0.5.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,21 +31,6 @@ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_
31
31
  claude mcp add babylitics -- npx babylitics-mcp
32
32
  ```
33
33
 
34
- ### ChatGPT Desktop
35
-
36
- Add to your ChatGPT Desktop config (`%APPDATA%\ChatGPT\config.json` on Windows or `~/Library/Application Support/ChatGPT/config.json` on macOS):
37
-
38
- ```json
39
- {
40
- "mcpServers": {
41
- "babylitics": {
42
- "command": "npx",
43
- "args": ["babylitics-mcp"]
44
- }
45
- }
46
- }
47
- ```
48
-
49
34
  ### Cursor
50
35
 
51
36
  Add to your Cursor MCP settings:
@@ -1,4 +1,14 @@
1
- export declare function authenticate(): Promise<string>;
1
+ export declare class AuthRequiredError extends Error {
2
+ readonly verificationUri: string;
3
+ readonly userCode: string;
4
+ constructor(verificationUri: string, userCode: string);
5
+ }
6
+ /**
7
+ * Get a valid access token. If cached tokens exist and are valid, returns immediately.
8
+ * If refresh is needed, refreshes silently. If device flow is needed, starts background
9
+ * polling and throws AuthRequiredError with the URL and code so the agent can present
10
+ * them to the user.
11
+ */
2
12
  export declare function getAccessToken(): Promise<string>;
3
13
  export declare function getScope(): string;
4
14
  //# sourceMappingURL=device-flow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device-flow.d.ts","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":"AAsHA,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAwDpD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAYtD;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAGjC"}
1
+ {"version":3,"file":"device-flow.d.ts","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":"AA8BA,qBAAa,iBAAkB,SAAQ,KAAK;aAExB,eAAe,EAAE,MAAM;aACvB,QAAQ,EAAE,MAAM;gBADhB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM;CAOnC;AAsGD;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAqEtD;AAMD,wBAAgB,QAAQ,IAAI,MAAM,CAGjC"}
@@ -1,12 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.authenticate = authenticate;
3
+ exports.AuthRequiredError = void 0;
4
4
  exports.getAccessToken = getAccessToken;
5
5
  exports.getScope = getScope;
6
6
  const config_js_1 = require("../config.js");
7
7
  const token_store_js_1 = require("./token-store.js");
8
+ class AuthRequiredError extends Error {
9
+ verificationUri;
10
+ userCode;
11
+ constructor(verificationUri, userCode) {
12
+ super(`Authentication required. Visit ${verificationUri} and enter code: ${userCode}`);
13
+ this.verificationUri = verificationUri;
14
+ this.userCode = userCode;
15
+ this.name = "AuthRequiredError";
16
+ }
17
+ }
18
+ exports.AuthRequiredError = AuthRequiredError;
8
19
  function log(message) {
9
- // MCP servers communicate via stdout, so logs go to stderr
10
20
  process.stderr.write(`[babylitics-mcp] ${message}\n`);
11
21
  }
12
22
  async function requestDeviceCode() {
@@ -72,40 +82,9 @@ async function refreshAccessToken(refreshToken) {
72
82
  return null;
73
83
  }
74
84
  }
75
- async function authenticate() {
76
- // Try cached tokens first
77
- const cached = (0, token_store_js_1.loadTokens)();
78
- if (cached) {
79
- if (!(0, token_store_js_1.isTokenExpired)(cached)) {
80
- return cached.access_token;
81
- }
82
- // Try to refresh
83
- log("Access token expired, refreshing...");
84
- const refreshed = await refreshAccessToken(cached.refresh_token);
85
- if (refreshed) {
86
- const tokens = {
87
- access_token: refreshed.access_token,
88
- refresh_token: refreshed.refresh_token,
89
- expires_at: Math.floor(Date.now() / 1000) + refreshed.expires_in,
90
- scope: refreshed.scope,
91
- };
92
- (0, token_store_js_1.saveTokens)(tokens);
93
- log("Token refreshed successfully.");
94
- return tokens.access_token;
95
- }
96
- // Refresh failed — clear and re-auth
97
- log("Refresh token expired or revoked. Re-authorizing...");
98
- (0, token_store_js_1.clearTokens)();
99
- }
100
- // Start device flow
101
- log("Authorization required.");
102
- const device = await requestDeviceCode();
103
- log("");
104
- log(` Visit: ${device.verification_uri}`);
105
- log(` Enter code: ${device.user_code}`);
106
- log("");
107
- log("Waiting for authorization...");
108
- const tokenResponse = await pollForToken(device.device_code, device.interval || config_js_1.CONFIG.deviceFlow.pollIntervalMs / 1000);
85
+ // Background polling state
86
+ let pendingAuthPromise = null;
87
+ function saveTokenResponse(tokenResponse) {
109
88
  const tokens = {
110
89
  access_token: tokenResponse.access_token,
111
90
  refresh_token: tokenResponse.refresh_token,
@@ -113,19 +92,70 @@ async function authenticate() {
113
92
  scope: tokenResponse.scope,
114
93
  };
115
94
  (0, token_store_js_1.saveTokens)(tokens);
116
- log("Authorized successfully!");
117
- return tokens.access_token;
118
95
  }
96
+ /**
97
+ * Get a valid access token. If cached tokens exist and are valid, returns immediately.
98
+ * If refresh is needed, refreshes silently. If device flow is needed, starts background
99
+ * polling and throws AuthRequiredError with the URL and code so the agent can present
100
+ * them to the user.
101
+ */
119
102
  async function getAccessToken() {
103
+ // 1. Try cached tokens
120
104
  const cached = (0, token_store_js_1.loadTokens)();
121
- if (!cached) {
122
- return authenticate();
105
+ if (cached && !(0, token_store_js_1.isTokenExpired)(cached)) {
106
+ return cached.access_token;
123
107
  }
124
- if ((0, token_store_js_1.isTokenExpired)(cached)) {
125
- return authenticate();
108
+ // 2. Try refresh
109
+ if (cached) {
110
+ log("Access token expired, refreshing...");
111
+ const refreshed = await refreshAccessToken(cached.refresh_token);
112
+ if (refreshed) {
113
+ saveTokenResponse(refreshed);
114
+ log("Token refreshed successfully.");
115
+ return refreshed.access_token;
116
+ }
117
+ log("Refresh token expired or revoked. Re-authorizing...");
118
+ (0, token_store_js_1.clearTokens)();
119
+ }
120
+ // 3. Check if background auth already completed
121
+ if (pendingAuthPromise) {
122
+ // Wait briefly for a pending auth to complete
123
+ const raceResult = await Promise.race([
124
+ pendingAuthPromise.then(() => "done"),
125
+ new Promise((resolve) => setTimeout(() => resolve("timeout"), 500)),
126
+ ]);
127
+ if (raceResult === "done") {
128
+ pendingAuthPromise = null;
129
+ const freshTokens = (0, token_store_js_1.loadTokens)();
130
+ if (freshTokens && !(0, token_store_js_1.isTokenExpired)(freshTokens)) {
131
+ return freshTokens.access_token;
132
+ }
133
+ }
134
+ // Still pending — throw auth required again so the agent can remind the user
135
+ throw new AuthRequiredError(pendingVerificationUri, pendingUserCode);
126
136
  }
127
- return cached.access_token;
137
+ // 4. Start device flow — return instructions immediately, poll in background
138
+ log("Authorization required. Starting device flow...");
139
+ const device = await requestDeviceCode();
140
+ pendingVerificationUri = device.verification_uri;
141
+ pendingUserCode = device.user_code;
142
+ // Poll in the background — when user approves, tokens are saved automatically
143
+ pendingAuthPromise = pollForToken(device.device_code, device.interval || config_js_1.CONFIG.deviceFlow.pollIntervalMs / 1000)
144
+ .then((tokenResponse) => {
145
+ saveTokenResponse(tokenResponse);
146
+ log("Authorized successfully!");
147
+ pendingAuthPromise = null;
148
+ })
149
+ .catch((err) => {
150
+ log(`Authorization failed: ${err.message}`);
151
+ pendingAuthPromise = null;
152
+ });
153
+ // Throw so the agent can present the URL and code to the user
154
+ throw new AuthRequiredError(device.verification_uri, device.user_code);
128
155
  }
156
+ // Store pending auth details so we can re-throw them
157
+ let pendingVerificationUri;
158
+ let pendingUserCode;
129
159
  function getScope() {
130
160
  const cached = (0, token_store_js_1.loadTokens)();
131
161
  return cached?.scope || "read";
@@ -1 +1 @@
1
- {"version":3,"file":"device-flow.js","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":";;AAsHA,oCAwDC;AAED,wCAYC;AAED,4BAGC;AAjMD,4CAAsC;AACtC,qDAM0B;AAuB1B,SAAS,GAAG,CAAC,OAAe;IAC1B,2DAA2D;IAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,GAAG,GAAG,GAAG,kBAAM,CAAC,MAAM,GAAG,kBAAM,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,kCAAkC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,QAAgB;IAC9D,MAAM,GAAG,GAAG,GAAG,kBAAM,CAAC,MAAM,GAAG,kBAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IAE7D,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,WAAW,EAAE,UAAU;gBACvB,UAAU,EAAE,8CAA8C;aAC3D,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;QAClD,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;QAE5D,IAAI,KAAK,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAChC,QAAQ,IAAI,CAAC,CAAC;YACd,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,iBAAiB,IAAI,EAAE,EAAE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,YAAoB;IACpD,MAAM,GAAG,GAAG,GAAG,kBAAM,CAAC,MAAM,GAAG,kBAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,eAAe;gBAC3B,aAAa,EAAE,YAAY;aAC5B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,0BAA0B;IAC1B,MAAM,MAAM,GAAG,IAAA,2BAAU,GAAE,CAAC;IAE5B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,IAAA,+BAAc,EAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,YAAY,CAAC;QAC7B,CAAC;QAED,iBAAiB;QACjB,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEjE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAiB;gBAC3B,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,aAAa,EAAE,SAAS,CAAC,aAAa;gBACtC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC,UAAU;gBAChE,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,CAAC;YACF,IAAA,2BAAU,EAAC,MAAM,CAAC,CAAC;YACnB,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,YAAY,CAAC;QAC7B,CAAC;QAED,qCAAqC;QACrC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAC3D,IAAA,4BAAW,GAAE,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEzC,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,YAAY,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAEpC,MAAM,aAAa,GAAG,MAAM,YAAY,CACtC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,QAAQ,IAAI,kBAAM,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAC3D,CAAC;IAEF,MAAM,MAAM,GAAiB;QAC3B,YAAY,EAAE,aAAa,CAAC,YAAY;QACxC,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC,UAAU;QACpE,KAAK,EAAE,aAAa,CAAC,KAAK;KAC3B,CAAC;IAEF,IAAA,2BAAU,EAAC,MAAM,CAAC,CAAC;IACnB,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAEhC,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,IAAA,2BAAU,GAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,IAAA,+BAAc,EAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAED,SAAgB,QAAQ;IACtB,MAAM,MAAM,GAAG,IAAA,2BAAU,GAAE,CAAC;IAC5B,OAAO,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"device-flow.js","sourceRoot":"","sources":["../../src/auth/device-flow.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { AuthRequiredError } from "../auth/device-flow.js";
1
2
  export interface GraphQLResponse<T = unknown> {
2
3
  data?: T;
3
4
  errors?: Array<{
@@ -6,4 +7,5 @@ export interface GraphQLResponse<T = unknown> {
6
7
  }>;
7
8
  }
8
9
  export declare function graphqlRequest<T = unknown>(query: string, variables?: Record<string, unknown>): Promise<T>;
10
+ export { AuthRequiredError };
9
11
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/graphql/client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,CAAC,CAAC,CA+BZ"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/graphql/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3E,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,CAAC,CAAC,CAgCZ;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthRequiredError = void 0;
3
4
  exports.graphqlRequest = graphqlRequest;
4
5
  const config_js_1 = require("../config.js");
5
6
  const device_flow_js_1 = require("../auth/device-flow.js");
7
+ Object.defineProperty(exports, "AuthRequiredError", { enumerable: true, get: function () { return device_flow_js_1.AuthRequiredError; } });
6
8
  async function graphqlRequest(query, variables) {
9
+ // Let AuthRequiredError propagate — tool handlers will catch it
7
10
  const token = await (0, device_flow_js_1.getAccessToken)();
8
11
  const url = `${config_js_1.CONFIG.apiUrl}${config_js_1.CONFIG.graphqlPath}`;
9
12
  const response = await fetch(url, {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/graphql/client.ts"],"names":[],"mappings":";;AAQA,wCAkCC;AA1CD,4CAAsC;AACtC,2DAAwD;AAOjD,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,SAAmC;IAEnC,MAAM,KAAK,GAAG,MAAM,IAAA,+BAAc,GAAE,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,kBAAM,CAAC,MAAM,GAAG,kBAAM,CAAC,WAAW,EAAE,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC3C,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IAE7D,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/graphql/client.ts"],"names":[],"mappings":";;;AAQA,wCAmCC;AA3CD,4CAAsC;AACtC,2DAA2E;AA4ClE,kGA5CgB,kCAAiB,OA4ChB;AArCnB,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,SAAmC;IAEnC,gEAAgE;IAChE,MAAM,KAAK,GAAG,MAAM,IAAA,+BAAc,GAAE,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,kBAAM,CAAC,MAAM,GAAG,kBAAM,CAAC,WAAW,EAAE,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC3C,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IAE7D,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -1,13 +1,13 @@
1
1
  export declare const LIST_BABIES = "\n query ListBabies {\n babies {\n edges {\n node {\n id\n name\n dateOfBirth\n gender\n birthWeight\n birthWeightUnit\n birthHeight\n birthHeightUnit\n ageInDays\n ageInWeeks\n ageDisplay\n }\n }\n }\n }\n";
2
- export declare const DASHBOARD_STATS = "\n query DashboardStats($babyId: ID!) {\n dashboardStats(babyId: $babyId) {\n today {\n totalFeedings\n totalAmount\n }\n lastFeeding {\n feedingType\n fedAt\n amount\n foodName\n }\n lastSleep {\n sleepType\n startedAt\n endedAt\n durationMinutes\n }\n inProgressSleep {\n sleepType\n startedAt\n }\n weeklyAverage {\n averageDailyFeedings\n averageDailyAmount\n }\n todayBreakdown {\n formula\n breast\n solid\n }\n }\n }\n";
3
- export declare const GET_FEEDINGS = "\n query GetFeedings($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n feedings(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n id\n feedingType\n amount\n durationMinutes\n side\n foodName\n reaction\n notes\n fedAt\n }\n }\n";
4
- export declare const FEEDING_STATISTICS = "\n query FeedingStatistics($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n feedingStatistics(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n totalFeedingCount\n averageFeedingsPerDay\n formulaFeedingCount\n totalFormulaAmount\n totalFormulaUnit\n breastfeedingCount\n totalBreastfeedingMinutes\n solidsCount\n uniqueFoodsCount\n lastFeedingAt\n timeSinceLastFeeding\n }\n }\n";
5
- export declare const GET_SLEEPS = "\n query GetSleeps($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n sleeps(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n id\n sleepType\n startedAt\n endedAt\n durationMinutes\n notes\n }\n }\n";
6
- export declare const SLEEP_STATISTICS = "\n query SleepStatistics($babyId: ID!) {\n sleepStatistics(babyId: $babyId) {\n totalSleepMinutesToday\n totalNapMinutesToday\n totalNightMinutesToday\n averageSleepMinutesPerDay\n averageNapDuration\n averageNightDuration\n longestSleepMinutes\n sleepCountToday\n }\n }\n";
7
- export declare const GET_WEIGHTS = "\n query GetWeights($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n weights(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n id\n weight\n unit\n measuredAt\n notes\n }\n }\n";
8
- export declare const WEIGHT_VS_GUIDELINE = "\n query WeightVsGuideline($babyId: ID!) {\n weightVsGuideline(babyId: $babyId) {\n latestWeight\n guidelineMedian\n guidelineSd1Neg\n guidelineSd1Pos\n guidelineSd2Neg\n guidelineSd2Pos\n percentile\n }\n }\n";
9
- export declare const GET_LENGTHS = "\n query GetLengths($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n lengths(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n id\n length\n unit\n measuredAt\n notes\n }\n }\n";
10
- export declare const GET_TEMPERATURES = "\n query GetTemperatures($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n temperatures(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n id\n temperature\n unit\n feverStatus\n measuredAt\n notes\n }\n }\n";
2
+ export declare const DASHBOARD_STATS = "\n query DashboardStats($babyId: ID!, $date: ISO8601Date) {\n dashboardStats(babyId: $babyId, date: $date) {\n today {\n totalFormulaVolume\n totalFormulaUnit\n totalBreastfeedingMinutes\n feedingCount\n totalSleepMinutes\n sleepCount\n solidsCount\n }\n lastFeeding {\n feedingType\n fedAt\n amount\n foodName\n }\n lastSleep {\n sleepType\n startedAt\n endedAt\n durationMinutes\n }\n inProgressSleep {\n sleepType\n startedAt\n }\n weeklyAverage {\n avgFormulaVolume\n avgFormulaUnit\n avgBreastfeedingMinutes\n avgFeedingCount\n avgSleepMinutes\n }\n todayBreakdown {\n formulaCount\n breastfeedingCount\n solidsCount\n }\n }\n }\n";
3
+ export declare const GET_FEEDINGS = "\n query GetFeedings($babyId: ID!, $date: ISO8601Date, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n feedings(babyId: $babyId, date: $date, startDate: $startDate, endDate: $endDate) {\n nodes {\n id\n feedingType\n amount\n durationMinutes\n side\n foodName\n reaction\n notes\n fedAt\n }\n }\n }\n";
4
+ export declare const FEEDING_STATISTICS = "\n query FeedingStatistics($babyId: ID!, $date: ISO8601Date, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n feedingStatistics(babyId: $babyId, date: $date, startDate: $startDate, endDate: $endDate) {\n totalFeedingCount\n averageFeedingsPerDay\n formulaFeedingCount\n totalFormulaAmount\n totalFormulaUnit\n breastfeedingCount\n totalBreastfeedingMinutes\n solidsCount\n uniqueFoodsCount\n lastFeedingAt\n timeSinceLastFeeding\n }\n }\n";
5
+ export declare const GET_SLEEPS = "\n query GetSleeps($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n sleeps(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n nodes {\n id\n sleepType\n startedAt\n endedAt\n durationMinutes\n notes\n }\n }\n }\n";
6
+ export declare const SLEEP_STATISTICS = "\n query SleepStatistics($babyId: ID!, $date: ISO8601Date, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n sleepStatistics(babyId: $babyId, date: $date, startDate: $startDate, endDate: $endDate) {\n totalSleepMinutesToday\n totalNapMinutesToday\n totalNightMinutesToday\n averageSleepMinutesPerDay\n averageNapDuration\n averageNightDuration\n longestSleepMinutes\n sleepCountToday\n }\n }\n";
7
+ export declare const GET_WEIGHTS = "\n query GetWeights($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n weights(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n nodes {\n id\n weight\n unit\n measuredAt\n notes\n }\n }\n }\n";
8
+ export declare const WEIGHT_VS_GUIDELINE = "\n query WeightVsGuideline($babyId: ID!) {\n weightVsGuideline(babyId: $babyId) {\n guidelines {\n ageMonth\n sd3Neg\n sd2Neg\n sd1Neg\n median\n sd1\n sd2\n sd3\n actualWeight\n unit\n source\n genderNote\n }\n measurements {\n ageMonths\n value\n measuredAt\n isBirthValue\n }\n }\n }\n";
9
+ export declare const GET_LENGTHS = "\n query GetLengths($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n lengths(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n nodes {\n id\n length\n unit\n measuredAt\n notes\n }\n }\n }\n";
10
+ export declare const GET_TEMPERATURES = "\n query GetTemperatures($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {\n temperatures(babyId: $babyId, startDate: $startDate, endDate: $endDate) {\n nodes {\n id\n temperature\n unit\n feverStatus\n measuredAt\n notes\n }\n }\n }\n";
11
11
  export declare const CREATE_FEEDING = "\n mutation CreateFeeding(\n $babyId: ID!,\n $feedingType: FeedingTypeEnum!,\n $amount: Float,\n $unit: UnitEnum,\n $durationMinutes: Int,\n $side: SideEnum,\n $foodName: String,\n $reaction: ReactionEnum,\n $notes: String,\n $fedAt: ISO8601DateTime\n ) {\n createFeeding(\n babyId: $babyId,\n feedingType: $feedingType,\n amount: $amount,\n unit: $unit,\n durationMinutes: $durationMinutes,\n side: $side,\n foodName: $foodName,\n reaction: $reaction,\n notes: $notes,\n fedAt: $fedAt\n ) {\n feeding {\n id\n feedingType\n amount\n fedAt\n }\n errors\n }\n }\n";
12
12
  export declare const CREATE_SLEEP = "\n mutation CreateSleep(\n $babyId: ID!,\n $sleepType: SleepTypeEnum!,\n $startedAt: ISO8601DateTime!,\n $endedAt: ISO8601DateTime,\n $notes: String\n ) {\n createSleep(\n babyId: $babyId,\n sleepType: $sleepType,\n startedAt: $startedAt,\n endedAt: $endedAt,\n notes: $notes\n ) {\n sleep {\n id\n sleepType\n startedAt\n endedAt\n }\n errors\n }\n }\n";
13
13
  export declare const CREATE_WEIGHT = "\n mutation CreateWeight(\n $babyId: ID!,\n $weight: Float!,\n $unit: WeightUnitEnum!,\n $measuredAt: ISO8601Date!,\n $notes: String\n ) {\n createWeight(\n babyId: $babyId,\n weight: $weight,\n unit: $unit,\n measuredAt: $measuredAt,\n notes: $notes\n ) {\n weight {\n id\n weight\n unit\n measuredAt\n }\n errors\n }\n }\n";
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/graphql/queries.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,sVAoBvB,CAAC;AAEF,eAAO,MAAM,eAAe,ymBAkC3B,CAAC;AAGF,eAAO,MAAM,YAAY,2TAcxB,CAAC;AAEF,eAAO,MAAM,kBAAkB,4dAgB9B,CAAC;AAGF,eAAO,MAAM,UAAU,8QAWtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,qUAa5B,CAAC;AAGF,eAAO,MAAM,WAAW,oPAUvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,iQAY/B,CAAC;AAGF,eAAO,MAAM,WAAW,oPAUvB,CAAC;AAGF,eAAO,MAAM,gBAAgB,sRAW5B,CAAC;AAGF,eAAO,MAAM,cAAc,8rBAkC1B,CAAC;AAEF,eAAO,MAAM,YAAY,qcAwBxB,CAAC;AAEF,eAAO,MAAM,aAAa,waAwBzB,CAAC;AAEF,eAAO,MAAM,aAAa,waAwBzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,odAwB9B,CAAC;AAGF,eAAO,MAAM,iBAAiB,oOAY7B,CAAC"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/graphql/queries.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,sVAoBvB,CAAC;AAEF,eAAO,MAAM,eAAe,m3BA0C3B,CAAC;AAGF,eAAO,MAAM,YAAY,sYAgBxB,CAAC;AAEF,eAAO,MAAM,kBAAkB,6fAgB9B,CAAC;AAGF,eAAO,MAAM,UAAU,kTAatB,CAAC;AAEF,eAAO,MAAM,gBAAgB,gcAa5B,CAAC;AAGF,eAAO,MAAM,WAAW,sRAYvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,ibAyB/B,CAAC;AAGF,eAAO,MAAM,WAAW,sRAYvB,CAAC;AAGF,eAAO,MAAM,gBAAgB,0TAa5B,CAAC;AAGF,eAAO,MAAM,cAAc,8rBAkC1B,CAAC;AAEF,eAAO,MAAM,YAAY,qcAwBxB,CAAC;AAEF,eAAO,MAAM,aAAa,waAwBzB,CAAC;AAEF,eAAO,MAAM,aAAa,waAwBzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,odAwB9B,CAAC;AAGF,eAAO,MAAM,iBAAiB,oOAY7B,CAAC"}
@@ -24,11 +24,16 @@ exports.LIST_BABIES = `
24
24
  }
25
25
  `;
26
26
  exports.DASHBOARD_STATS = `
27
- query DashboardStats($babyId: ID!) {
28
- dashboardStats(babyId: $babyId) {
27
+ query DashboardStats($babyId: ID!, $date: ISO8601Date) {
28
+ dashboardStats(babyId: $babyId, date: $date) {
29
29
  today {
30
- totalFeedings
31
- totalAmount
30
+ totalFormulaVolume
31
+ totalFormulaUnit
32
+ totalBreastfeedingMinutes
33
+ feedingCount
34
+ totalSleepMinutes
35
+ sleepCount
36
+ solidsCount
32
37
  }
33
38
  lastFeeding {
34
39
  feedingType
@@ -47,36 +52,41 @@ exports.DASHBOARD_STATS = `
47
52
  startedAt
48
53
  }
49
54
  weeklyAverage {
50
- averageDailyFeedings
51
- averageDailyAmount
55
+ avgFormulaVolume
56
+ avgFormulaUnit
57
+ avgBreastfeedingMinutes
58
+ avgFeedingCount
59
+ avgSleepMinutes
52
60
  }
53
61
  todayBreakdown {
54
- formula
55
- breast
56
- solid
62
+ formulaCount
63
+ breastfeedingCount
64
+ solidsCount
57
65
  }
58
66
  }
59
67
  }
60
68
  `;
61
69
  // Feeding queries
62
70
  exports.GET_FEEDINGS = `
63
- query GetFeedings($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {
64
- feedings(babyId: $babyId, startDate: $startDate, endDate: $endDate) {
65
- id
66
- feedingType
67
- amount
68
- durationMinutes
69
- side
70
- foodName
71
- reaction
72
- notes
73
- fedAt
71
+ query GetFeedings($babyId: ID!, $date: ISO8601Date, $startDate: ISO8601Date, $endDate: ISO8601Date) {
72
+ feedings(babyId: $babyId, date: $date, startDate: $startDate, endDate: $endDate) {
73
+ nodes {
74
+ id
75
+ feedingType
76
+ amount
77
+ durationMinutes
78
+ side
79
+ foodName
80
+ reaction
81
+ notes
82
+ fedAt
83
+ }
74
84
  }
75
85
  }
76
86
  `;
77
87
  exports.FEEDING_STATISTICS = `
78
- query FeedingStatistics($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {
79
- feedingStatistics(babyId: $babyId, startDate: $startDate, endDate: $endDate) {
88
+ query FeedingStatistics($babyId: ID!, $date: ISO8601Date, $startDate: ISO8601Date, $endDate: ISO8601Date) {
89
+ feedingStatistics(babyId: $babyId, date: $date, startDate: $startDate, endDate: $endDate) {
80
90
  totalFeedingCount
81
91
  averageFeedingsPerDay
82
92
  formulaFeedingCount
@@ -95,18 +105,20 @@ exports.FEEDING_STATISTICS = `
95
105
  exports.GET_SLEEPS = `
96
106
  query GetSleeps($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {
97
107
  sleeps(babyId: $babyId, startDate: $startDate, endDate: $endDate) {
98
- id
99
- sleepType
100
- startedAt
101
- endedAt
102
- durationMinutes
103
- notes
108
+ nodes {
109
+ id
110
+ sleepType
111
+ startedAt
112
+ endedAt
113
+ durationMinutes
114
+ notes
115
+ }
104
116
  }
105
117
  }
106
118
  `;
107
119
  exports.SLEEP_STATISTICS = `
108
- query SleepStatistics($babyId: ID!) {
109
- sleepStatistics(babyId: $babyId) {
120
+ query SleepStatistics($babyId: ID!, $date: ISO8601Date, $startDate: ISO8601Date, $endDate: ISO8601Date) {
121
+ sleepStatistics(babyId: $babyId, date: $date, startDate: $startDate, endDate: $endDate) {
110
122
  totalSleepMinutesToday
111
123
  totalNapMinutesToday
112
124
  totalNightMinutesToday
@@ -122,24 +134,39 @@ exports.SLEEP_STATISTICS = `
122
134
  exports.GET_WEIGHTS = `
123
135
  query GetWeights($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {
124
136
  weights(babyId: $babyId, startDate: $startDate, endDate: $endDate) {
125
- id
126
- weight
127
- unit
128
- measuredAt
129
- notes
137
+ nodes {
138
+ id
139
+ weight
140
+ unit
141
+ measuredAt
142
+ notes
143
+ }
130
144
  }
131
145
  }
132
146
  `;
133
147
  exports.WEIGHT_VS_GUIDELINE = `
134
148
  query WeightVsGuideline($babyId: ID!) {
135
149
  weightVsGuideline(babyId: $babyId) {
136
- latestWeight
137
- guidelineMedian
138
- guidelineSd1Neg
139
- guidelineSd1Pos
140
- guidelineSd2Neg
141
- guidelineSd2Pos
142
- percentile
150
+ guidelines {
151
+ ageMonth
152
+ sd3Neg
153
+ sd2Neg
154
+ sd1Neg
155
+ median
156
+ sd1
157
+ sd2
158
+ sd3
159
+ actualWeight
160
+ unit
161
+ source
162
+ genderNote
163
+ }
164
+ measurements {
165
+ ageMonths
166
+ value
167
+ measuredAt
168
+ isBirthValue
169
+ }
143
170
  }
144
171
  }
145
172
  `;
@@ -147,11 +174,13 @@ exports.WEIGHT_VS_GUIDELINE = `
147
174
  exports.GET_LENGTHS = `
148
175
  query GetLengths($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {
149
176
  lengths(babyId: $babyId, startDate: $startDate, endDate: $endDate) {
150
- id
151
- length
152
- unit
153
- measuredAt
154
- notes
177
+ nodes {
178
+ id
179
+ length
180
+ unit
181
+ measuredAt
182
+ notes
183
+ }
155
184
  }
156
185
  }
157
186
  `;
@@ -159,12 +188,14 @@ exports.GET_LENGTHS = `
159
188
  exports.GET_TEMPERATURES = `
160
189
  query GetTemperatures($babyId: ID!, $startDate: ISO8601Date, $endDate: ISO8601Date) {
161
190
  temperatures(babyId: $babyId, startDate: $startDate, endDate: $endDate) {
162
- id
163
- temperature
164
- unit
165
- feverStatus
166
- measuredAt
167
- notes
191
+ nodes {
192
+ id
193
+ temperature
194
+ unit
195
+ feverStatus
196
+ measuredAt
197
+ notes
198
+ }
168
199
  }
169
200
  }
170
201
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/graphql/queries.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACF,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;AAEW,QAAA,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC9B,CAAC;AAEF,kBAAkB;AACL,QAAA,YAAY,GAAG;;;;;;;;;;;;;;CAc3B,CAAC;AAEW,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;CAgBjC,CAAC;AAEF,gBAAgB;AACH,QAAA,UAAU,GAAG;;;;;;;;;;;CAWzB,CAAC;AAEW,QAAA,gBAAgB,GAAG;;;;;;;;;;;;;CAa/B,CAAC;AAEF,iBAAiB;AACJ,QAAA,WAAW,GAAG;;;;;;;;;;CAU1B,CAAC;AAEW,QAAA,mBAAmB,GAAG;;;;;;;;;;;;CAYlC,CAAC;AAEF,iBAAiB;AACJ,QAAA,WAAW,GAAG;;;;;;;;;;CAU1B,CAAC;AAEF,sBAAsB;AACT,QAAA,gBAAgB,GAAG;;;;;;;;;;;CAW/B,CAAC;AAEF,qDAAqD;AACxC,QAAA,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC7B,CAAC;AAEW,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB3B,CAAC;AAEW,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB5B,CAAC;AAEW,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB5B,CAAC;AAEW,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBjC,CAAC;AAEF,gBAAgB;AACH,QAAA,iBAAiB,GAAG;;;;;;;;;;;;CAYhC,CAAC"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/graphql/queries.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACF,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;AAEW,QAAA,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0C9B,CAAC;AAEF,kBAAkB;AACL,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;CAgB3B,CAAC;AAEW,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;CAgBjC,CAAC;AAEF,gBAAgB;AACH,QAAA,UAAU,GAAG;;;;;;;;;;;;;CAazB,CAAC;AAEW,QAAA,gBAAgB,GAAG;;;;;;;;;;;;;CAa/B,CAAC;AAEF,iBAAiB;AACJ,QAAA,WAAW,GAAG;;;;;;;;;;;;CAY1B,CAAC;AAEW,QAAA,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBlC,CAAC;AAEF,iBAAiB;AACJ,QAAA,WAAW,GAAG;;;;;;;;;;;;CAY1B,CAAC;AAEF,sBAAsB;AACT,QAAA,gBAAgB,GAAG;;;;;;;;;;;;;CAa/B,CAAC;AAEF,qDAAqD;AACxC,QAAA,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC7B,CAAC;AAEW,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB3B,CAAC;AAEW,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB5B,CAAC;AAEW,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB5B,CAAC;AAEW,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBjC,CAAC;AAEF,gBAAgB;AACH,QAAA,iBAAiB,GAAG;;;;;;;;;;;;CAYhC,CAAC"}
package/dist/index.js CHANGED
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
5
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
- const device_flow_js_1 = require("./auth/device-flow.js");
7
6
  const babies_js_1 = require("./tools/babies.js");
8
7
  const dashboard_js_1 = require("./tools/dashboard.js");
9
8
  const feedings_js_1 = require("./tools/feedings.js");
@@ -12,13 +11,12 @@ const weights_js_1 = require("./tools/weights.js");
12
11
  const lengths_js_1 = require("./tools/lengths.js");
13
12
  const temperatures_js_1 = require("./tools/temperatures.js");
14
13
  async function main() {
15
- // Authenticate before starting the server
16
- await (0, device_flow_js_1.authenticate)();
17
14
  const server = new mcp_js_1.McpServer({
18
15
  name: "babylitics",
19
- version: "0.5.0",
16
+ version: "0.9.0",
20
17
  });
21
- // Register read tools (always available)
18
+ // Register all tools auth happens lazily on first tool call.
19
+ // If auth is needed, the tool returns login instructions for the user.
22
20
  (0, babies_js_1.registerBabyTools)(server);
23
21
  (0, dashboard_js_1.registerDashboardTools)(server);
24
22
  (0, feedings_js_1.registerFeedingReadTools)(server);
@@ -26,15 +24,12 @@ async function main() {
26
24
  (0, weights_js_1.registerWeightReadTools)(server);
27
25
  (0, lengths_js_1.registerLengthReadTools)(server);
28
26
  (0, temperatures_js_1.registerTemperatureReadTools)(server);
29
- // Register write tools only if scope allows
30
- const scope = (0, device_flow_js_1.getScope)();
31
- if (scope.includes("write")) {
32
- (0, feedings_js_1.registerFeedingWriteTools)(server);
33
- (0, sleep_js_1.registerSleepWriteTools)(server);
34
- (0, weights_js_1.registerWeightWriteTools)(server);
35
- (0, lengths_js_1.registerLengthWriteTools)(server);
36
- (0, temperatures_js_1.registerTemperatureWriteTools)(server);
37
- }
27
+ // Register write tools unconditionally scope is checked at auth time
28
+ (0, feedings_js_1.registerFeedingWriteTools)(server);
29
+ (0, sleep_js_1.registerSleepWriteTools)(server);
30
+ (0, weights_js_1.registerWeightWriteTools)(server);
31
+ (0, lengths_js_1.registerLengthWriteTools)(server);
32
+ (0, temperatures_js_1.registerTemperatureWriteTools)(server);
38
33
  // Connect via stdio transport
39
34
  const transport = new stdio_js_1.StdioServerTransport();
40
35
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,oEAAoE;AACpE,wEAAiF;AACjF,0DAA+D;AAC/D,iDAAsD;AACtD,uDAA8D;AAC9D,qDAG6B;AAC7B,+CAG0B;AAC1B,mDAG4B;AAC5B,mDAG4B;AAC5B,6DAGiC;AAEjC,KAAK,UAAU,IAAI;IACjB,0CAA0C;IAC1C,MAAM,IAAA,6BAAY,GAAE,CAAC;IAErB,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,yCAAyC;IACzC,IAAA,6BAAiB,EAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,qCAAsB,EAAC,MAAM,CAAC,CAAC;IAC/B,IAAA,sCAAwB,EAAC,MAAM,CAAC,CAAC;IACjC,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAC;IAC/B,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;IAChC,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;IAChC,IAAA,8CAA4B,EAAC,MAAM,CAAC,CAAC;IAErC,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAA,yBAAQ,GAAE,CAAC;IACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAA,uCAAyB,EAAC,MAAM,CAAC,CAAC;QAClC,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAC;QAChC,IAAA,qCAAwB,EAAC,MAAM,CAAC,CAAC;QACjC,IAAA,qCAAwB,EAAC,MAAM,CAAC,CAAC;QACjC,IAAA,+CAA6B,EAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAC7D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,oEAAoE;AACpE,wEAAiF;AACjF,iDAAsD;AACtD,uDAA8D;AAC9D,qDAG6B;AAC7B,+CAG0B;AAC1B,mDAG4B;AAC5B,mDAG4B;AAC5B,6DAGiC;AAEjC,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,+DAA+D;IAC/D,uEAAuE;IACvE,IAAA,6BAAiB,EAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,qCAAsB,EAAC,MAAM,CAAC,CAAC;IAC/B,IAAA,sCAAwB,EAAC,MAAM,CAAC,CAAC;IACjC,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAC;IAC/B,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;IAChC,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;IAChC,IAAA,8CAA4B,EAAC,MAAM,CAAC,CAAC;IAErC,uEAAuE;IACvE,IAAA,uCAAyB,EAAC,MAAM,CAAC,CAAC;IAClC,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAC;IAChC,IAAA,qCAAwB,EAAC,MAAM,CAAC,CAAC;IACjC,IAAA,qCAAwB,EAAC,MAAM,CAAC,CAAC;IACjC,IAAA,+CAA6B,EAAC,MAAM,CAAC,CAAC;IAEtC,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAC7D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -7,11 +7,11 @@ function registerBabyTools(server) {
7
7
  title: "List Babies",
8
8
  description: "List all babies being tracked in the user's Babylitics account. Returns name, date of birth, age, and birth measurements.",
9
9
  annotations: { readOnlyHint: true },
10
- }, async () => {
10
+ }, (0, helpers_js_1.withAuth)(async () => {
11
11
  const babies = await (0, helpers_js_1.fetchBabies)();
12
12
  return {
13
13
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(babies) }],
14
14
  };
15
- });
15
+ }));
16
16
  }
17
17
  //# sourceMappingURL=babies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"babies.js","sourceRoot":"","sources":["../../src/tools/babies.ts"],"names":[],"mappings":";;AAIA,8CAYC;AAdD,6CAA6D;AAE7D,SAAgB,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,2HAA2H;QAC7H,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAW,GAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"babies.js","sourceRoot":"","sources":["../../src/tools/babies.ts"],"names":[],"mappings":";;AAIA,8CAYC;AAdD,6CAAuE;AAEvE,SAAgB,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,2HAA2H;QAC7H,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,IAAA,qBAAQ,EAAC,KAAK,IAAI,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAW,GAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgB9D"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiB9D"}
@@ -8,17 +8,18 @@ const helpers_js_1 = require("./helpers.js");
8
8
  function registerDashboardTools(server) {
9
9
  server.registerTool("get_dashboard", {
10
10
  title: "Get Dashboard",
11
- description: "Get today's dashboard summary for a baby, including the last feeding, last sleep, current sleep status, and weekly averages.",
11
+ description: "Get a dashboard summary for a baby, including feeding totals, sleep totals, current sleep status, and weekly averages. Defaults to today; pass a date to get a past day's summary.",
12
12
  inputSchema: {
13
13
  baby_name: zod_1.z.string().describe("The baby's name"),
14
+ date: zod_1.z.string().optional().describe("Date to get the summary for (ISO 8601, e.g. 2026-03-27). Defaults to today."),
14
15
  },
15
16
  annotations: { readOnlyHint: true },
16
- }, async ({ baby_name }) => {
17
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, date }) => {
17
18
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
18
- const data = await (0, client_js_1.graphqlRequest)(queries_js_1.DASHBOARD_STATS, { babyId });
19
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.DASHBOARD_STATS, { babyId, date });
19
20
  return {
20
21
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
21
22
  };
22
- });
23
+ }));
23
24
  }
24
25
  //# sourceMappingURL=dashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":";;AAMA,wDAgBC;AAtBD,6BAAwB;AAExB,oDAAsD;AACtD,sDAAwD;AACxD,6CAA+D;AAE/D,SAAgB,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;QACnC,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAClD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,4BAAe,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":";;AAMA,wDAiBC;AAvBD,6BAAwB;AAExB,oDAAsD;AACtD,sDAAwD;AACxD,6CAAyE;AAEzE,SAAgB,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;QACnC,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,oLAAoL;QACtL,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;SACpH;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,IAAA,qBAAQ,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,4BAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"feedings.d.ts","sourceRoot":"","sources":["../../src/tools/feedings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4ChE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2CjE"}
1
+ {"version":3,"file":"feedings.d.ts","sourceRoot":"","sources":["../../src/tools/feedings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgDhE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2CjE"}
@@ -9,44 +9,48 @@ const helpers_js_1 = require("./helpers.js");
9
9
  function registerFeedingReadTools(server) {
10
10
  server.registerTool("get_feedings", {
11
11
  title: "Get Feedings",
12
- description: "Get feeding records for a baby. Optionally filter by date range.",
12
+ description: "Get feeding records for a baby. Optionally filter by a specific date or date range.",
13
13
  inputSchema: {
14
14
  baby_name: zod_1.z.string().describe("The baby's name"),
15
- start_date: zod_1.z.string().optional().describe("Start date (ISO 8601, e.g. 2026-03-01)"),
16
- end_date: zod_1.z.string().optional().describe("End date (ISO 8601, e.g. 2026-03-27)"),
15
+ date: zod_1.z.string().optional().describe("Specific date (ISO 8601, e.g. 2026-03-27). Cannot be combined with start_date/end_date."),
16
+ start_date: zod_1.z.string().optional().describe("Start date (ISO 8601). Cannot be combined with date."),
17
+ end_date: zod_1.z.string().optional().describe("End date (ISO 8601). Cannot be combined with date."),
17
18
  },
18
19
  annotations: { readOnlyHint: true },
19
- }, async ({ baby_name, start_date, end_date }) => {
20
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, date, start_date, end_date }) => {
20
21
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
22
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_FEEDINGS, {
22
23
  babyId,
24
+ date,
23
25
  startDate: start_date,
24
26
  endDate: end_date,
25
27
  });
26
28
  return {
27
29
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
30
  };
29
- });
31
+ }));
30
32
  server.registerTool("get_feeding_stats", {
31
33
  title: "Get Feeding Statistics",
32
- description: "Get feeding statistics for a baby, including totals and averages by feeding type. Optionally filter by date range.",
34
+ description: "Get feeding statistics for a baby, including totals and averages by feeding type. Optionally filter by a specific date or date range.",
33
35
  inputSchema: {
34
36
  baby_name: zod_1.z.string().describe("The baby's name"),
35
- start_date: zod_1.z.string().optional().describe("Start date (ISO 8601)"),
36
- end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
37
+ date: zod_1.z.string().optional().describe("Specific date (ISO 8601, e.g. 2026-03-27). Cannot be combined with start_date/end_date."),
38
+ start_date: zod_1.z.string().optional().describe("Start date (ISO 8601). Cannot be combined with date."),
39
+ end_date: zod_1.z.string().optional().describe("End date (ISO 8601). Cannot be combined with date."),
37
40
  },
38
41
  annotations: { readOnlyHint: true },
39
- }, async ({ baby_name, start_date, end_date }) => {
42
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, date, start_date, end_date }) => {
40
43
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
41
44
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.FEEDING_STATISTICS, {
42
45
  babyId,
46
+ date,
43
47
  startDate: start_date,
44
48
  endDate: end_date,
45
49
  });
46
50
  return {
47
51
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
48
52
  };
49
- });
53
+ }));
50
54
  }
51
55
  function registerFeedingWriteTools(server) {
52
56
  server.registerTool("log_feeding", {
@@ -76,7 +80,7 @@ function registerFeedingWriteTools(server) {
76
80
  .describe("When the feeding occurred (ISO 8601 datetime). Defaults to now."),
77
81
  },
78
82
  annotations: { readOnlyHint: false },
79
- }, async ({ baby_name, feeding_type, duration_minutes, food_name, fed_at, ...args }) => {
83
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, feeding_type, duration_minutes, food_name, fed_at, ...args }) => {
80
84
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
81
85
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_FEEDING, {
82
86
  babyId,
@@ -89,6 +93,6 @@ function registerFeedingWriteTools(server) {
89
93
  return {
90
94
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
91
95
  };
92
- });
96
+ }));
93
97
  }
94
98
  //# sourceMappingURL=feedings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedings.js","sourceRoot":"","sources":["../../src/tools/feedings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feedings.js","sourceRoot":"","sources":["../../src/tools/feedings.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
1
2
  interface BabyNode {
2
3
  id: string;
3
4
  name: string;
@@ -15,5 +16,11 @@ export declare function fetchBabies(): Promise<BabyNode[]>;
15
16
  export declare function clearBabyCache(): void;
16
17
  export declare function resolveBabyId(babyName: string): Promise<string>;
17
18
  export declare function formatToolResult(data: unknown): string;
19
+ /**
20
+ * Wraps a tool handler to catch AuthRequiredError and return user-friendly
21
+ * login instructions instead of crashing. The agent receives these instructions
22
+ * and can present the URL and code to the user.
23
+ */
24
+ export declare function withAuth<T extends Record<string, unknown>>(handler: (args: T) => Promise<CallToolResult>): (args: T) => Promise<CallToolResult>;
18
25
  export {};
19
26
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAGA,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMvD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BrE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEtD"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMvD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BrE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,GAC5C,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAyBtC"}
@@ -4,6 +4,7 @@ exports.fetchBabies = fetchBabies;
4
4
  exports.clearBabyCache = clearBabyCache;
5
5
  exports.resolveBabyId = resolveBabyId;
6
6
  exports.formatToolResult = formatToolResult;
7
+ exports.withAuth = withAuth;
7
8
  const client_js_1 = require("../graphql/client.js");
8
9
  const queries_js_1 = require("../graphql/queries.js");
9
10
  let cachedBabies = null;
@@ -37,4 +38,36 @@ async function resolveBabyId(babyName) {
37
38
  function formatToolResult(data) {
38
39
  return JSON.stringify(data, null, 2);
39
40
  }
41
+ /**
42
+ * Wraps a tool handler to catch AuthRequiredError and return user-friendly
43
+ * login instructions instead of crashing. The agent receives these instructions
44
+ * and can present the URL and code to the user.
45
+ */
46
+ function withAuth(handler) {
47
+ return async (args) => {
48
+ try {
49
+ return await handler(args);
50
+ }
51
+ catch (error) {
52
+ if (error instanceof client_js_1.AuthRequiredError) {
53
+ return {
54
+ content: [
55
+ {
56
+ type: "text",
57
+ text: [
58
+ "🔐 Authentication required to access Babylitics.",
59
+ "",
60
+ `Please visit: ${error.verificationUri}`,
61
+ `Enter this code: **${error.userCode}**`,
62
+ "",
63
+ "Once you've approved access, try your request again.",
64
+ ].join("\n"),
65
+ },
66
+ ],
67
+ };
68
+ }
69
+ throw error;
70
+ }
71
+ };
72
+ }
40
73
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":";;AAyBA,kCAMC;AAED,wCAEC;AAED,sCA2BC;AAED,4CAEC;AApED,oDAAsD;AACtD,sDAAoD;AAsBpD,IAAI,YAAY,GAAsB,IAAI,CAAC;AAEpC,KAAK,UAAU,WAAW;IAC/B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAiB,wBAAW,CAAC,CAAC;IAC/D,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,cAAc;IAC5B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IAEnC,iCAAiC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CACvD,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,EAAE,CAAC;IAE3B,gBAAgB;IAChB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CACtD,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,2BAA2B,KAAK,GAAG,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,iBAAiB,QAAQ,EAAE,CAChE,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAa;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":";;AA0BA,kCAMC;AAED,wCAEC;AAED,sCA2BC;AAED,4CAEC;AAOD,4BA2BC;AAvGD,oDAAyE;AACzE,sDAAoD;AAuBpD,IAAI,YAAY,GAAsB,IAAI,CAAC;AAEpC,KAAK,UAAU,WAAW;IAC/B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAiB,wBAAW,CAAC,CAAC;IAC/D,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,cAAc;IAC5B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IAEnC,iCAAiC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CACvD,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,EAAE,CAAC;IAE3B,gBAAgB;IAChB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CACtD,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,2BAA2B,KAAK,GAAG,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,iBAAiB,QAAQ,EAAE,CAChE,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAa;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAgB,QAAQ,CACtB,OAA6C;IAE7C,OAAO,KAAK,EAAE,IAAO,EAA2B,EAAE;QAChD,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,6BAAiB,EAAE,CAAC;gBACvC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE;gCACJ,kDAAkD;gCAClD,EAAE;gCACF,iBAAiB,KAAK,CAAC,eAAe,EAAE;gCACxC,sBAAsB,KAAK,CAAC,QAAQ,IAAI;gCACxC,EAAE;gCACF,sDAAsD;6BACvD,CAAC,IAAI,CAAC,IAAI,CAAC;yBACb;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -16,7 +16,7 @@ function registerLengthReadTools(server) {
16
16
  end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
17
  },
18
18
  annotations: { readOnlyHint: true },
19
- }, async ({ baby_name, start_date, end_date }) => {
19
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, start_date, end_date }) => {
20
20
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
21
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_LENGTHS, {
22
22
  babyId,
@@ -26,7 +26,7 @@ function registerLengthReadTools(server) {
26
26
  return {
27
27
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
28
  };
29
- });
29
+ }));
30
30
  }
31
31
  function registerLengthWriteTools(server) {
32
32
  server.registerTool("log_length", {
@@ -40,7 +40,7 @@ function registerLengthWriteTools(server) {
40
40
  notes: zod_1.z.string().optional().describe("Optional notes"),
41
41
  },
42
42
  annotations: { readOnlyHint: false },
43
- }, async ({ baby_name, measured_at, ...args }) => {
43
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, measured_at, ...args }) => {
44
44
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
45
45
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_LENGTH, {
46
46
  babyId,
@@ -50,6 +50,6 @@ function registerLengthWriteTools(server) {
50
50
  return {
51
51
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
52
52
  };
53
- });
53
+ }));
54
54
  }
55
55
  //# sourceMappingURL=lengths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lengths.js","sourceRoot":"","sources":["../../src/tools/lengths.ts"],"names":[],"mappings":";;AAMA,0DAsBC;AAED,4DAuBC;AArDD,6BAAwB;AAExB,oDAAsD;AACtD,sDAAmE;AACnE,6CAA+D;AAE/D,SAAgB,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,oFAAoF;QACtF,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAChE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,wBAAW,EAAE;YAC7C,MAAM;YACN,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAClD,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YACxF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACxD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,0BAAa,EAAE;YAC/C,MAAM;YACN,UAAU,EAAE,WAAW;YACvB,GAAG,IAAI;SACR,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"lengths.js","sourceRoot":"","sources":["../../src/tools/lengths.ts"],"names":[],"mappings":";;AAMA,0DAsBC;AAED,4DAuBC;AArDD,6BAAwB;AAExB,oDAAsD;AACtD,sDAAmE;AACnE,6CAAyE;AAEzE,SAAgB,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,oFAAoF;QACtF,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAChE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,IAAA,qBAAQ,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,wBAAW,EAAE;YAC7C,MAAM;YACN,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAClD,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YACxF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACxD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EAAE,IAAA,qBAAQ,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,0BAAa,EAAE;YAC/C,MAAM;YACN,UAAU,EAAE,WAAW;YACvB,GAAG,IAAI;SACR,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/tools/sleep.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsC9D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6B/D"}
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/tools/sleep.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8C9D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6B/D"}
@@ -16,7 +16,7 @@ function registerSleepReadTools(server) {
16
16
  end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
17
  },
18
18
  annotations: { readOnlyHint: true },
19
- }, async ({ baby_name, start_date, end_date }) => {
19
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, start_date, end_date }) => {
20
20
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
21
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_SLEEPS, {
22
22
  babyId,
@@ -26,21 +26,29 @@ function registerSleepReadTools(server) {
26
26
  return {
27
27
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
28
  };
29
- });
29
+ }));
30
30
  server.registerTool("get_sleep_stats", {
31
31
  title: "Get Sleep Statistics",
32
- description: "Get sleep statistics for a baby, including total sleep time, nap counts, and average durations.",
32
+ description: "Get sleep statistics for a baby, including total sleep time, nap counts, and average durations. Optionally filter by a specific date or date range.",
33
33
  inputSchema: {
34
34
  baby_name: zod_1.z.string().describe("The baby's name"),
35
+ date: zod_1.z.string().optional().describe("Specific date (ISO 8601, e.g. 2026-03-27). Cannot be combined with start_date/end_date."),
36
+ start_date: zod_1.z.string().optional().describe("Start date (ISO 8601). Cannot be combined with date."),
37
+ end_date: zod_1.z.string().optional().describe("End date (ISO 8601). Cannot be combined with date."),
35
38
  },
36
39
  annotations: { readOnlyHint: true },
37
- }, async ({ baby_name }) => {
40
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, date, start_date, end_date }) => {
38
41
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
39
- const data = await (0, client_js_1.graphqlRequest)(queries_js_1.SLEEP_STATISTICS, { babyId });
42
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.SLEEP_STATISTICS, {
43
+ babyId,
44
+ date,
45
+ startDate: start_date,
46
+ endDate: end_date,
47
+ });
40
48
  return {
41
49
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
42
50
  };
43
- });
51
+ }));
44
52
  }
45
53
  function registerSleepWriteTools(server) {
46
54
  server.registerTool("log_sleep", {
@@ -57,7 +65,7 @@ function registerSleepWriteTools(server) {
57
65
  notes: zod_1.z.string().optional().describe("Optional notes"),
58
66
  },
59
67
  annotations: { readOnlyHint: false },
60
- }, async ({ baby_name, sleep_type, started_at, ended_at, ...args }) => {
68
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, sleep_type, started_at, ended_at, ...args }) => {
61
69
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
62
70
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_SLEEP, {
63
71
  babyId,
@@ -69,6 +77,6 @@ function registerSleepWriteTools(server) {
69
77
  return {
70
78
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
71
79
  };
72
- });
80
+ }));
73
81
  }
74
82
  //# sourceMappingURL=sleep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/tools/sleep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/tools/sleep.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ function registerTemperatureReadTools(server) {
16
16
  end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
17
  },
18
18
  annotations: { readOnlyHint: true },
19
- }, async ({ baby_name, start_date, end_date }) => {
19
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, start_date, end_date }) => {
20
20
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
21
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_TEMPERATURES, {
22
22
  babyId,
@@ -26,7 +26,7 @@ function registerTemperatureReadTools(server) {
26
26
  return {
27
27
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
28
  };
29
- });
29
+ }));
30
30
  }
31
31
  function registerTemperatureWriteTools(server) {
32
32
  server.registerTool("log_temperature", {
@@ -40,7 +40,7 @@ function registerTemperatureWriteTools(server) {
40
40
  notes: zod_1.z.string().optional().describe("Optional notes"),
41
41
  },
42
42
  annotations: { readOnlyHint: false },
43
- }, async ({ baby_name, measured_at, ...args }) => {
43
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, measured_at, ...args }) => {
44
44
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
45
45
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_TEMPERATURE, {
46
46
  babyId,
@@ -50,6 +50,6 @@ function registerTemperatureWriteTools(server) {
50
50
  return {
51
51
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
52
52
  };
53
- });
53
+ }));
54
54
  }
55
55
  //# sourceMappingURL=temperatures.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"temperatures.js","sourceRoot":"","sources":["../../src/tools/temperatures.ts"],"names":[],"mappings":";;AAMA,oEAsBC;AAED,sEAuBC;AArDD,6BAAwB;AAExB,oDAAsD;AACtD,sDAA6E;AAC7E,6CAA+D;AAE/D,SAAgB,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;QACtC,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,kFAAkF;QACpF,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAChE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,6BAAgB,EAAE;YAClD,MAAM;YACN,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE;QACrC,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACrD,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YAC7E,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YACtF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACxD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,+BAAkB,EAAE;YACpD,MAAM;YACN,UAAU,EAAE,WAAW;YACvB,GAAG,IAAI;SACR,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"temperatures.js","sourceRoot":"","sources":["../../src/tools/temperatures.ts"],"names":[],"mappings":";;AAMA,oEAsBC;AAED,sEAuBC;AArDD,6BAAwB;AAExB,oDAAsD;AACtD,sDAA6E;AAC7E,6CAAyE;AAEzE,SAAgB,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;QACtC,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,kFAAkF;QACpF,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAChE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,IAAA,qBAAQ,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,6BAAgB,EAAE;YAClD,MAAM;YACN,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE;QACrC,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACrD,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YAC7E,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YACtF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACxD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EAAE,IAAA,qBAAQ,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,+BAAkB,EAAE;YACpD,MAAM;YACN,UAAU,EAAE,WAAW;YACvB,GAAG,IAAI;SACR,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -16,7 +16,7 @@ function registerWeightReadTools(server) {
16
16
  end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
17
  },
18
18
  annotations: { readOnlyHint: true },
19
- }, async ({ baby_name, start_date, end_date }) => {
19
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, start_date, end_date }) => {
20
20
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
21
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_WEIGHTS, {
22
22
  babyId,
@@ -26,7 +26,7 @@ function registerWeightReadTools(server) {
26
26
  return {
27
27
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
28
  };
29
- });
29
+ }));
30
30
  server.registerTool("get_weight_vs_guideline", {
31
31
  title: "Get Weight vs WHO Guideline",
32
32
  description: "Compare a baby's latest weight against WHO growth standards, showing percentile and standard deviation ranges.",
@@ -34,13 +34,13 @@ function registerWeightReadTools(server) {
34
34
  baby_name: zod_1.z.string().describe("The baby's name"),
35
35
  },
36
36
  annotations: { readOnlyHint: true },
37
- }, async ({ baby_name }) => {
37
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name }) => {
38
38
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
39
39
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.WEIGHT_VS_GUIDELINE, { babyId });
40
40
  return {
41
41
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
42
42
  };
43
- });
43
+ }));
44
44
  }
45
45
  function registerWeightWriteTools(server) {
46
46
  server.registerTool("log_weight", {
@@ -54,7 +54,7 @@ function registerWeightWriteTools(server) {
54
54
  notes: zod_1.z.string().optional().describe("Optional notes"),
55
55
  },
56
56
  annotations: { readOnlyHint: false },
57
- }, async ({ baby_name, measured_at, ...args }) => {
57
+ }, (0, helpers_js_1.withAuth)(async ({ baby_name, measured_at, ...args }) => {
58
58
  const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
59
59
  const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_WEIGHT, {
60
60
  babyId,
@@ -64,6 +64,6 @@ function registerWeightWriteTools(server) {
64
64
  return {
65
65
  content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
66
66
  };
67
- });
67
+ }));
68
68
  }
69
69
  //# sourceMappingURL=weights.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"weights.js","sourceRoot":"","sources":["../../src/tools/weights.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"weights.js","sourceRoot":"","sources":["../../src/tools/weights.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babylitics-mcp",
3
- "version": "0.5.0",
3
+ "version": "0.9.0",
4
4
  "description": "MCP server for Babylitics — Connect AI agents to your baby tracking data",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",