{"_id":"@kamilio/baby-daybook-sdk","_rev":"29-113ee553d2b719a82e931a93e9c60605","name":"@kamilio/baby-daybook-sdk","dist-tags":{"latest":"0.1.28"},"versions":{"0.1.0":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.0","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.0","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"5ef0bc50fc32b3eef20f28858fd0f6d731847af9","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.0.tgz","fileCount":54,"integrity":"sha512-hnfqUF0+vuZP3S4XCv/IYJvwXrjxJCIQ3NrVSfK8rqhn+avvJDr6NBwDSZNl9yI5PCQugeTrM3T9hEZvW9faaw==","signatures":[{"sig":"MEQCIC4dQR6PWJMtygyvCTT1tk80iUTIXKuLFItk7IfCfjmoAiAyWWl1wJ0T+SVLaTuzUFb3eZp5zA/IztER8zOaUYynAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15971152},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"fcad638f0fad98b55bccd45a10a2d0d2d58acfad","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kamilio","email":"kamil.jopek@gmail.com"},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"10.9.7","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.126","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.0_1783528494119_0.8601501753783478","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.1","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.1","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"ab7613229c704c97c8718e4cbd568f47ea328f96","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.1.tgz","fileCount":54,"integrity":"sha512-MRHCy+5S9YnJyWMOJEcchUluMcp+4aP3Vumx1YU4d6NQGL7e6niIEz/RGYndYSQvJRlajQ4Ou2bUZKOPYwKLWw==","signatures":[{"sig":"MEYCIQDGt0ILnpt4Mu1qRA4uKJYLgIAeuar/Bf1bu9wCcp3zswIhAL2V3NtBzsS2o1yAalQCOHW6OiVMo51x5qf+DgL5f9Po","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15971152},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"6554105fcf7794ec40b2d5c42e3975b0a6f1682d","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.126","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.1_1783528988768_0.7624658049063655","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.2","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.2","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"1995d038aeab1249e54c5eb9462f93be4f84a13d","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.2.tgz","fileCount":54,"integrity":"sha512-2CJrSxXlRBTReXIzJEm7pN0ifUjklH/JPSIz/VU48vJzs9wI4IXu0vCZhqrr4CjqExXz1EspxbUNTad4UTHVbg==","signatures":[{"sig":"MEUCIHhkpxR03ZQhg2xy+BbZMzaZk5sgeGYWE2wvq60MvIYYAiEA7lsNnnrCkQfvDvQ+2FIXze/HEDvZ/+Oiufg+NWJ7jHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15970610},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"5dfe2411138a2e07340dc04185c59cc3e664b51c","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.126","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.2_1783535702259_0.26026107485329075","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.3","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.3","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"8b3bec8e9273dcffdb3d890673d7618e28c38793","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.3.tgz","fileCount":54,"integrity":"sha512-l0w0kE5ZQCnT93TkfjqZLmz8uq6PRW5YJzrHeRSq3KH8+qTQmgrBNNYT4xNUfnnzJ/i7oH8zTaDch9rTVd6SQQ==","signatures":[{"sig":"MEUCID6kLMY0Yy7ztNaH+0SUoIAXNg5LdDo2Hncm9JN849UwAiEAmtLn3594EByNRBjC7E1fy2tPKfBgDkG3fmcuuEcU4Yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16019966},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"89aed017bf3cdf4e53d3181b259f534181549ad1","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.131","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.3_1783884423538_0.8095813027258385","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.4","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.4","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"a797f32951ae31800d4a424901c3e50edc5c68a6","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.4.tgz","fileCount":54,"integrity":"sha512-+YebxzfsRQlzT5UDOS8zHx27rYptMKIZfi7rWctCJiydUfkAwj4j/nI52VPa/ZlP90rNN2jdFTXTNU2teluZDg==","signatures":[{"sig":"MEUCIQDW86EGRVeUIU3zvQlKQ/aY2JOA81SfVFjO0D/hLeDk5AIgLEkGcfa1iA5Wu2ogur38q4e3sSZH/JUTRb1lZb5Gjpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16034020},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"d0fa558b2cb70a4f93ec9b24ddd86f9dec1e73c0","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.131","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.4_1783992200890_0.4067687843880168","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.5","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.5","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"10c56404852a8d5bcfa3a08248b604d987165c12","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.5.tgz","fileCount":54,"integrity":"sha512-I1bv9CT/c9bD7aWSLwAyw380XNzWTVRw0YiP+FK2HiV7wgcmyMEfUhDJGn6ZWNsnMmGORLq1XxyOgiysEZAccQ==","signatures":[{"sig":"MEYCIQC9/4r0onNWsxd4sg10zZAIzhFXBiZsCmdRR6S5nlVCDgIhAOSTSHiJdAK7r5J9FFPptUNI7PNtPBD9SHCyOOB1ZW6S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16036228},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"2402d6ea8586b5c95fa4428059092d1f8f03a765","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.131","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.5_1784081305670_0.03245320996412038","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.6","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.6","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"209026144701b40ccea3b6145b422924e595f6b7","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.6.tgz","fileCount":54,"integrity":"sha512-otFLXPdWhCSiKtWCCxreiDsbPbvLVSnsiC4dGuRUwb9hRaqQqOjdNbWV1qXArQNjI83qg8/2k2uwhjwOqlp+oA==","signatures":[{"sig":"MEQCIHN1thCRiGsojd0ox8AaGHq0zhUXoFV1lB/Ha+U3h0rNAiAmnXRUk6vUGq9N2cT2y6aJ17rm6dwXi7qDUnHKCMJRJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16047702},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"2fe42c345c1370c2e92fea4b0f9706f4ffdfe3eb","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.131","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.6_1784084845585_0.6234625724109017","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.7","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.7","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"63efd894b8cef2e1e8706e2163f5f83326acb42f","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.7.tgz","fileCount":54,"integrity":"sha512-abO0/hm0DQ73slt0MlbGkCmmy/Q5Mt8aMC0cPlzNWuwT/YwOCkAt21LlDQGX6maRQ3Cw1rc6TRgNqtPNj6TbDQ==","signatures":[{"sig":"MEQCIArLPUyhGi/a6vD/xdbC/tb+pg7AvmXgdCj+JkrdCgoTAiAFoXlhDP2dYTSA+TAERw7LTcB2DC/SaWFoR4d4iky4ww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16049235},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"e939740a7c49f6d6345206e1a3674d2f688c794b","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.131","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.7_1784085650540_0.16209866868356282","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.8","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.8","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"56c199cdc09d4861b24e1a2ec6fb5faaed6af129","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.8.tgz","fileCount":54,"integrity":"sha512-epw8dWOScCKhSSP1h/U9ekinB8t3JDBx6XXKuucs9ny3QEoLgjS2j3HIVA2606n3G/jRBQN5w/rf2GzzhriZnw==","signatures":[{"sig":"MEUCIFWvsALG/oAAhMKKwzMY9ZN8agcbHGDQPZuWM2aVyOt5AiEAjDswCSXPF8lDnth3pVfTSGUSNaEB0kvBpM0LaApCICk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17016470},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"180d6953d0a04654af85155f95736814e598889f","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.18.0","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.8_1784825616553_0.45775922779295364","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.9","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.9","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"8a2acc07e965c687caea4cc9fc3d81678bec6b28","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.9.tgz","fileCount":54,"integrity":"sha512-hrkDtYfZ8Qr2fLgj8eONTF8Uf0Y+C7qQ3Jst9mkGVJRWb9XfHO61AZZgF/BN9wVfzhpYIu/w5sf57Cv5ICJ+EA==","signatures":[{"sig":"MEUCIQCKrBegiafXQyXLmFrrDj9AuWck4YutzA+t3z/pIl5fWgIgL3GPzEo2jaKcRwEvVMPQIqn/Ux/VOV1N9cPOT7i5nTY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICADIVW8Dy9IqL4Ngl7/1hjMGkcFzhHnFkXLild/SNf5AiBgvK62CJLGY72NzGYtCsHumq0DwSvvSl9CDEUo+rHJgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17167484},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"0697c7a46db66caa705555a3ca007835fe170664","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.9_1788153348546_0.21175447271111691","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.10","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.10","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"6589e4ebd74531f88085d8fffca5d51529b34ce4","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.10.tgz","fileCount":54,"integrity":"sha512-Wi/74Dlz+9hlr4M0S8Mlpp5tTj26J2XlbK3OwofEd1VDUeBjtc0tz9nV5MPHJkPKsgV2E8cwaYDnqpyTpdi6rQ==","signatures":[{"sig":"MEUCIQC/lGsELGWa24F4rGpW2jbiHilY4WlEfizHsOgmSlgeTwIgA/ZjLaku9sie2dqEdQelVKjYG7ooF3dUbumOB75iL4o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGw8BVXE1Ngu8sbHJYlWMP9BS01kEkiDt8lLs11OLE+9AiBghvgwdPWt1ucpMv/CyouamnCjdKPZx9UO1cygyvuBpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17215909},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"11e1ae8f2fda171e3dffffba559aad358f58322d","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.10_1788156172103_0.6087552973244243","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.11","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.11","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"e6e52a80abfeb5ba23fec5c2de0ea2d0ad6b6205","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.11.tgz","fileCount":54,"integrity":"sha512-MKfQq5Lb10tA7/+Fu9L1MCJggUFhul7gf4kp6tlw1s+KVQh4WowjbzxilFHo+6KrbxMYac6R0kwlc6gYUOLjYw==","signatures":[{"sig":"MEYCIQDAUgOX9OFnJsYXI4c+DbYm4sAnKmct5mR2+csQxPz+KQIhAKDIrII+1/RFkgDLlfculkgRxWWkOqiwgTdx4VNUvdgS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCnKrSzCrw8yMiVDkU95qO8uKUvOA1DrvJ2z4Qb7KpujwIgIRK6v9C/29r+1JNnIfswpsAdBODO32DsyHwVBnuoIMw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17217657},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"2f1526f09ceec04014a28cb474228d78585c5f73","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.11_1788157569568_0.5677605298987929","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.12","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.12","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"6858cda4ec141b4a7c98d1a55030b3442c12a4db","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.12.tgz","fileCount":54,"integrity":"sha512-dPCpr/oetSBO599Y/I3QxYrZkXj09vnx4Zvk3x2O9TsaKdtDehHOr1o2ZvbZptJVF9UokVAd7PRqsR+2fLNsdw==","signatures":[{"sig":"MEYCIQCzD60XY+tRbqMvIyIeCcRqWSX+Fm8aB27TiVy0ufYoDAIhAJTtNTFVddI9YsrxYrYGl/3PEUNBn/O3ZoO3y7bvb1go","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDNlYZcpUloy6Coxa9P9DjK2Di5wyD8Hz5p13zjTP8QAAiEA/fpDSb8czz4Myc0XvjuH2mC7D8871eOSop0rJYQOsaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17219286},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"da4c6d72ef829b28ac451cc4d05c66fa24b2246d","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.12_1788161686075_0.7257487950829253","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.13","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.13","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"cc4f46179a8cf2392c89bd3c87ddd632772a200e","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.13.tgz","fileCount":54,"integrity":"sha512-fYXOYMER5DFN8e4YYJ9OveCuuWr9pvIpdTUzuFthb8NX4y+9PzhPmuxiawSQQfI9sxrU/GEQqvhVCs9rwx7PcQ==","signatures":[{"sig":"MEQCIAMn2i5uQSytX8NS068SAXVV/sWmM6XWcmIe24k1/q4RAiAwP4fC44bWGVkrKtiMR5PLsbJYe53v2l5cDwW4yG+UCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID3O60VN3ayg+UaY4+0JQPp7sfvjiZ+b0UM5xxoHK/QpAiBlpsGwc3/o0tzEZjolFRMTY0+owSSbnY5MbEKhvfrzIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17232859},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"daf9ca1abc2cde076b95cc7cae4fb0fb3e1f7ba1","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.13_1788162823389_0.7901854040924878","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.14","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.14","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"0db158d72d820052a4459abfbecde80b7b832a41","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.14.tgz","fileCount":54,"integrity":"sha512-d7aVR6J6hyQhrDvJFV4W3nGjLFnW3E+HMqN4v7dV5CncAbA3Y5tQXezCOV2r/ICJIOD7X3Lxc9sMUaxEpBLbYw==","signatures":[{"sig":"MEQCIA/aMU7Vh0FTHm/nFXhjp+ptpW5fWm9khBdf5AvJqcwnAiA7vV1ltYRgPqEbh5QapOKITtYO0ad7ApTDVGAVgMJmrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEaNQ1Vo5v0wXPiGghA09xXU8n44bJ9saLPDutV4C0JvAiBK7pFdQhFMiVH54iZ963K27wCw0zQyB/WTr26uwTE4MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17233704},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"46ede177e2b89a1ebe0422becc2786b50595f120","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.14_1788163822842_0.7661854186603627","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.15","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.15","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"cbafbbf3b2c58bb662467aa2ea2a40a2b29746b4","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.15.tgz","fileCount":54,"integrity":"sha512-I74EXyLGfWvVQ+KAVU9PuULPDdR6yY+t9cvMRyCZfhrHbHHFMweZHGxg/JSzgCCPly98aRWAYaHrBK9Jbgk5Rw==","signatures":[{"sig":"MEYCIQCBL5cWdd+N5sbW6BDOAzEXc10CjP/9vfu5FxNxXwvSzgIhAMrjvv6SAiohXXmNaQi44MrhGZsgQANy9ZQug6SYktTt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHaP7/TUkTvtutF/CmWRr3aFtc/KirpgfcFHa4OtLcX+AiBdhLfNhQFV5p71Dljh7knrq6gwFilnLvfH4yWadBTe6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17238403},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"70aa32841256afddfa03268bc74cea78ee5b8733","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.15_1788165144975_0.5262042653468098","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.16","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.16","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"9add9d3591edabc5c2dc527b0ce96334d7a3163c","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.16.tgz","fileCount":54,"integrity":"sha512-6sfMK9+mqFHqDuXkoyHpfjkA/Nc+NsgUX7uOfIpaM6AzZxxLjZHJfnqTO+MfWO89OF7IQEUnLoVXwBbb5bJ3Ew==","signatures":[{"sig":"MEUCIQD5HIiksEbdlwY0bfDCtZLCylCgCTZtTunyjaJYXFZ7tgIgGnUxTgyUgQ0L1mSz5lOKR4c9rk+sfqUGGEuhM9B5TEM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHmBg1u9gxlKdjCLu/0GM5zJfogupdO5tYD2ubymqS2sAiEA8E6+ePYPWu4pZ/Uw5ycmq2m6XFgph+dWvXv6PI8AhrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17239429},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"937e845996993d021717e40712adc685cab6bc7e","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.16_1788184814826_0.936421513925316","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.17","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.17","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"da924b82698670943d720851eb5b8cbd34947fb2","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.17.tgz","fileCount":54,"integrity":"sha512-CIb8Pf2r6pF3coo7BkMwKDKVL1XXTYlcFIwV+Asyo+dyvLkTjIqdUgZdxHwwKYKWq9D4kRq/M5Q5jpn0TJQ7gQ==","signatures":[{"sig":"MEYCIQCD5nJfJwZUisyeBIMjE2U6tBNQaMLC/fGW28QM3JtpgAIhAK3144QuWX459P0N2V65gzls11U6K22jG6smGHXSyxqu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEh5+X29mcRtUxRdK9TWm7gYZ5NZn/9qdGZSKwfKblI3AiB27UCGEc3SDuJN6l+8BNE4jqA5OvPUS2APoH6EACg1YA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17240326},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"e345276162589244c2e8954d00416c08b39f6602","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.17_1788185688474_0.1855006923688689","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.18","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.18","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"8c73e7b43af3c7533557c96e5c974723236ecde3","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.18.tgz","fileCount":54,"integrity":"sha512-FkLrVagOqzR7cbl5zUeUbo6tl9Oca0lNDcbxr34USpmnxzs074uWbo7ySsc2n6dy7kQsj98nm8LFpS7IEkFBGA==","signatures":[{"sig":"MEUCIEF4lGpFYAqF6qhXvkFbDz+VNWbsGRe5lbYOJaPN6we9AiEAwFndlDmOL5S867VvKWpv07jJaTVvm6FoGMP9rG1mmoA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCdrki+not9r8ihP9UqMTHC3OzXzEgC3LLFijqzdxoH8gIgfNlXMxZdK+gciSXK7xMWEJDXNEDzsDFekvoiztLPYFA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17241681},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"f9e8319da5e3dc7a2c7dc00d9e25aa6cd940e71d","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.18_1788186768569_0.3862934891852101","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.19","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.19","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"6f09580ce50232217171b4170d38c03ceca33da0","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.19.tgz","fileCount":54,"integrity":"sha512-YLQrOz5DKT4z76DNUhZKSMkOf9/XREs3SuN8OAcoLwpNeHZ6xICVvhY8dme3Vuft8AHqiyO8SJaXuXJRxn/M4Q==","signatures":[{"sig":"MEUCIQD7951+NGEM8S64gso8koTYnf2u1OWWMX8yL5SvMpS0NQIgfcoToGRUGPU4Muz8586UiYTB9PQCNIw6/uaMh0iMZdk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC3z96o1cJF9Mt1v4DZAcrST6vBLF7AvxALurbR0C34xwIgG0NAn8EjN5keUm7kjY8bDV18UfY3cBnlPnwHo/2FI9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17248047},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"2e43cc36be94d0bcd021154ada851b1b68f6fc1b","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.19_1788187696729_0.06584070085826998","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.20","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.20","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"77b4b70b47bc674389df93eb5949a673606a90f6","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.20.tgz","fileCount":54,"integrity":"sha512-Xjp9scc84zzBnrGlkNZtI+N+Px3QlDLmFkC1B3ddKgADOffe29b5JiKlEmh4Yqfs/2j4MHMeh5zzTUeuSBq/Hg==","signatures":[{"sig":"MEQCIBqFNlPkWcWZUUaThZWtLlrgm2CA0nv83xMgUzsgJ91MAiAEICCUBubOMWPmeSopKN1aOUmEdeDzs35WZQeWYY4Y2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFldz+bEtrelaqIZGFtJCKm0tX1setRIZ6riCZa7BiV9AiEA73QdDnKnbXpEYANZ+gyVQr75RRFFvP1PD5ffL/Xvr5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17248935},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"9766036b40d76d9788e6f67e2486f7c6299b1f5a","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.20_1788188005821_0.18691468257505872","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.21","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.21","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"9a1241f26329ec92274c51d42cf6edabffa4f7ec","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.21.tgz","fileCount":54,"integrity":"sha512-xLtyokonRDiiKrJIH76KWILfa+/WGH3F2u3IZzz6bNbnh17HFBmZm8GaZlCid7x+h5N3bfod/Zpspa1wmd998Q==","signatures":[{"sig":"MEYCIQDYjbwu+u+O6Iw+amWNeTLvnTVNNzgFf5mENr2d1xfoBwIhANmG++lXMjXSh6fUN5g/YyEoypX1kUE5fIaXKwGevhrq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHROdHALTKPL86RqxBlybBWD7HeQ34TTTNAzL5EVjmDEAiBBQdujQ15Ps9Qnrafo5VwltkhRaw8hRtCXQpy34JV5bA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17281596},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"50e682952522ba854db4a4b4b17897c49c06a3f2","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.21_1788189181766_0.1006690431484325","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.22","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.22","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"4a3c17b4413b7186666b7a046d5715917b242392","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.22.tgz","fileCount":89,"integrity":"sha512-OTd4CEhV1u0HM0AG1FWDG5ZWNp5SKhih4TzNnZfNeWbF+0kCjL1d3IGXqDwljuSZLSE4Xf8NU/rlFGR9lr4sYg==","signatures":[{"sig":"MEUCIA11LjlwJwW43zMtofU6eNuA493dhYBVrqnpwdqV9fX0AiEAvvy9eplpyHEOX6ZxyPuGoEgUYAF2csNH9MwQULaFyrk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC8IxPS4awfaX5MAInVnuqqXEcZRC3pd8/BSlKZMoSr1AiEAhk+Oyd3Msvr68mq4ZchlMXHU37OPhamZRmaWXw6pSAI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71115510},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"5e26cc1d5a8a85b436104d90ad001465ad3fee67","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","bidi-js":"1.0.3","fontkit":"2.0.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/fontkit":"2.0.9","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.22_1788191775011_0.5082366995759755","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.23","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.23","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"eeba9e33eeb600aec3fc9c394c47753d9e7ef90e","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.23.tgz","fileCount":89,"integrity":"sha512-/qRP71k9G9ZN2X6P7leOKg2RRwXeaCfJHs4t+j97VpWOQs/U4i1aQy6GRGBiae27uASnrjFa5dlfD5UqQ5zaUg==","signatures":[{"sig":"MEUCIQCwaSnX0LcuccccTD+GYGOH4NDc0khARYsQWBA1QZy7bgIgG0rafSzMv1ONf7G8+0tvYR1WMTylUFeJ6589CS+pLlE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCrR+FbfvEAUHaKXf+qGVXmsfslvNsdz8xpevzS8yr8nQIhAP24WejrAeSXtGYFsTZjuSLjCjdZErdbhxR4n6BX102N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71120869},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"4aaac8b280b57115df901fa9f3cee27bf64bd556","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","bidi-js":"1.0.3","fontkit":"2.0.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/fontkit":"2.0.9","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.23_1788193598867_0.576274192505549","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.24","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.24","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"570b9df5d4ae86d986b1ac91b4026d11253e6b34","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.24.tgz","fileCount":89,"integrity":"sha512-UP673SYAlKZG7kqam/OQNBUR9PmXICPcm0mz7hX5E95JgejzaOVC71qLQy57JRA/PisyM+mHIYdDR55vxxE+Dg==","signatures":[{"sig":"MEUCIAziT4//lXf2oZhIh1HDOYspFSTnIztY/I7y7OryKLDSAiEAlqhtqwSUFRAEhRv/l/NrWQyu4MweF39jybAp9EgdivM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDyb5iuJwOjBXd74u0s4FEy3dqVYUFXReCDUMGIJMT20AiB9VIOUjm6C9rlolDqNGr9uEVw3VVXF0ryjCUD4jbJyFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71120801},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"b4f7d9c4358e646e2f21657dcce5355565f65f3f","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","bidi-js":"1.0.3","fontkit":"2.0.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/fontkit":"2.0.9","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.24_1788194822589_0.5139989206401294","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.25","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.25","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"e881dc1751267fbb0d3b95c91c479a4f7292128b","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.25.tgz","fileCount":89,"integrity":"sha512-xZ6KwZla/AHcRGM2veXNVJU0gJ4w53OInjcMza8S8ckruVzPfN3aKjUoy6JcKTzezFCGsep2WRksXW9s986dJQ==","signatures":[{"sig":"MEUCIFD7dGkETXfDYGFDRaMVmt/xfT0dz99llagWsstWul04AiEAmj2fwjuP+O4JCQSitKtk2O3G5Zc7ni3yZZcHrkdR99c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFQZDBNxc6l5n4OXNpUNR8e91Wa1dOFRA9YClRJ+/fRkAiEAzm8Gq+DO1KSDIA1EtPfsuSWNhxYeJ+0dKreH1BccOgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71121270},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"22553b604b7971fe3c26a750e07b62cabdf903a1","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","bidi-js":"1.0.3","fontkit":"2.0.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/fontkit":"2.0.9","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.25_1788195747246_0.7838366773373571","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.26","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.26","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"1fd81b985a2ef2a9612bd291c68a1dffce3c9442","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.26.tgz","fileCount":89,"integrity":"sha512-7v5LmQl889dlNXBhEk3AxmpmUrHNwMIN1a1e7ZXSo58T0LxDxzSqieco3m0xoFC5wHkcEEAp0kPMHNA0xoQPFQ==","signatures":[{"sig":"MEUCIQCJscZk2qa6j6LLLcoP6KshY4xiTISIxliXj1Kht3394gIgCgLbcYkRUsY0nEmzEUOYAV51DW88fYLHw7bxw2vA2lU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDQuW/8/rqxKDB3aYtlNLGi+Rx4zO+x+tLQKO2QgHEPpwIgSJDnAJewGQvo6u0jWvgOr/b/8fhQMzUlI1ilnY5ip0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71123153},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"af13481959c42387dc09f858e48f50a4bae71cda","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","bidi-js":"1.0.3","fontkit":"2.0.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/fontkit":"2.0.9","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.26_1788196655797_0.152437372961435","host":"s3://npm-registry-packages-npm-production"}},"0.1.27":{"name":"@kamilio/baby-daybook-sdk","version":"0.1.27","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","_id":"@kamilio/baby-daybook-sdk@0.1.27","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"bin":{"baby-daybook":"dist/cli.js"},"dist":{"shasum":"71982f4ae8a8a145e321ff1aa55318679699abb9","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.27.tgz","fileCount":89,"integrity":"sha512-arHwraCMfOb36zq0JiQOTa2diAxsRVj0exB0psL7IvA4dxmZR2TMkk3mbhDva+7+JoCP+Uwucpj2nOepg0DUpg==","signatures":[{"sig":"MEUCID4Tecw7sNxG7YGXOApTtutx5JK6/sRql7hfro6fqXqXAiEA4WxWK7HTmSVnzQiFfn1tP63DqG9tqbYdwbRlFKpg/Iw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGPDr9qQGtl8296nx0fSalDTc0HSazD+JkPkDqx4ahbxAiBpdcPiO+jIpA4ZHfHPStudpQc4zqXTQWxtmini1D7rwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71128663},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"f39a05da18e4796219e6a5acaa1a5fe9a4685a03","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","bidi-js":"1.0.3","fontkit":"2.0.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/fontkit":"2.0.9","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"tmp":"tmp/baby-daybook-sdk_0.1.27_1788197953435_0.8446701176016551","host":"s3://npm-registry-packages-npm-production"}},"0.1.28":{"_id":"@kamilio/baby-daybook-sdk@0.1.28","bin":{"baby-daybook":"dist/cli.js"},"bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"dist":{"shasum":"cf818e270a0e796e2d3244c1d2a698501af1ff22","tarball":"https://registry.npmjs.org/@kamilio/baby-daybook-sdk/-/baby-daybook-sdk-0.1.28.tgz","fileCount":89,"integrity":"sha512-IYLKWchPemHCt5BBi38AYLBy0qZZfOlU4nfWQCm71FTau6E/hKAyh+4O2k4YS89oaNjY19+fCNEtYiRB3b7pBQ==","signatures":[{"sig":"MEUCIAapnUmO749ojmnOsWNLwXtjolDWsOVISIzHDf1Fg/QkAiEAuVJzCkLk+aC+8XOSs2rugo2BCsHmjw3fGhNde26Ijek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDB8Jc7sJjyN1jaVYjluyfZUyU+rSRhKndsS0Qv0URQ3gIhAKwIaLKvyaACGbZGY6r+U9nhCPpEDZxgu/nDJQp44V9A"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@kamilio%2fbaby-daybook-sdk@0.1.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71131103},"main":"./dist/index.cjs","name":"@kamilio/baby-daybook-sdk","type":"module","types":"./dist/index.d.ts","author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./toolcraft":{"import":{"types":"./dist/toolcraft.d.ts","default":"./dist/toolcraft.js"}},"./toolcraft-http":{"import":{"types":"./dist/toolcraft-http.d.ts","default":"./dist/toolcraft-http.js"}}},"gitHead":"ffcce56fbb6da62116c35c89e23efb9febe1b86d","license":"MIT","scripts":{"lint":"eslint src test --max-warnings=0","test":"vitest run --coverage","build":"tsup && node scripts/canonicalize-toolcraft-artifacts.mjs","clean":"rm -rf dist coverage","prepack":"npm run build","typecheck":"tsc --noEmit"},"version":"0.1.28","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:330ce3cc-d04b-4e38-bc8c-84b8d27dad4e"}},"homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"overrides":{"tsup":{"esbuild":"0.28.1"}},"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","directories":{},"maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vite":"^6.4.3","eslint":"^9.30.0","vitest":"^3.2.4","bidi-js":"1.0.3","fontkit":"2.0.4","toolcraft":"0.0.152","@eslint/js":"^9.30.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/fontkit":"2.0.9","typescript-eslint":"8.55.0","@vitest/coverage-v8":"^3.2.6"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/baby-daybook-sdk_0.1.28_1788199559156_0.7306770131541986"}}},"time":{"created":"2026-07-08T16:34:53.928Z","modified":"2026-08-31T18:06:00.191Z","0.1.0":"2026-07-08T16:34:54.409Z","0.1.1":"2026-07-08T16:43:09.078Z","0.1.2":"2026-07-08T18:35:02.517Z","0.1.3":"2026-07-12T19:27:03.765Z","0.1.4":"2026-07-14T01:23:21.149Z","0.1.5":"2026-07-15T02:08:25.889Z","0.1.6":"2026-07-15T03:07:25.845Z","0.1.7":"2026-07-15T03:20:50.776Z","0.1.8":"2026-07-23T16:53:36.805Z","0.1.9":"2026-08-31T05:15:48.742Z","0.1.10":"2026-08-31T06:02:52.263Z","0.1.11":"2026-08-31T06:26:09.756Z","0.1.12":"2026-08-31T07:34:46.238Z","0.1.13":"2026-08-31T07:53:43.590Z","0.1.14":"2026-08-31T08:10:23.011Z","0.1.15":"2026-08-31T08:32:25.158Z","0.1.16":"2026-08-31T14:00:15.017Z","0.1.17":"2026-08-31T14:14:48.661Z","0.1.18":"2026-08-31T14:32:48.804Z","0.1.19":"2026-08-31T14:48:16.971Z","0.1.20":"2026-08-31T14:53:26.028Z","0.1.21":"2026-08-31T15:13:01.965Z","0.1.22":"2026-08-31T15:56:15.441Z","0.1.23":"2026-08-31T16:26:39.260Z","0.1.24":"2026-08-31T16:47:03.004Z","0.1.25":"2026-08-31T17:02:27.647Z","0.1.26":"2026-08-31T17:17:36.404Z","0.1.27":"2026-08-31T17:39:13.834Z","0.1.28":"2026-08-31T18:05:59.772Z"},"bugs":{"url":"https://github.com/kamilio/baby-daybook-sdk/issues"},"author":{"name":"Kamil Jopek","email":"kjopek@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/kamilio/baby-daybook-sdk#readme","keywords":["baby-daybook","baby-tracker","firebase","firestore","sdk","cli","mcp","streamable-http","toolcraft"],"repository":{"url":"git+https://github.com/kamilio/baby-daybook-sdk.git","type":"git"},"description":"Unofficial JavaScript SDK, Toolcraft MCP server, and CLI for Baby Daybook","maintainers":[{"name":"kamilio","email":"kamil.jopek@gmail.com"}],"readme":"# Baby Daybook SDK, CLI, and MCP Servers\n\nUnofficial, typed JavaScript SDK plus a Toolcraft CLI and stdio/Streamable HTTP MCP servers for accessing a user's Baby Daybook data through the same Firebase services used by the Android app. It is not affiliated with Baby Daybook or DrillyApps.\n\n## Supported functionality\n\n- Firebase email/password, custom-token, refresh-token, Google, Facebook, and Apple credential authentication.\n- User profiles, owned babies, shared babies, purchases, caregivers, and pending invitations.\n- Activity types, timed activities, feeding sides, groups, growth, moments, daily notes, teething, reminders, and per-baby settings.\n- Attachment metadata plus Firebase Storage upload, download, native `thumb_` previews, and paired deletion.\n- Soft deletion compatible with Baby Daybook synchronization.\n- Local activity and daily-note search matching the app's core filters.\n- CDC, WHO, and CDC Down syndrome growth percentile calculations using the app's bundled LMS reference data.\n- Baby Daybook's 42 bundled sleep schedules, corrected-age handling, age buckets, transition options, and nap-count selection.\n- Full JSON backups, restore, activity CSV/PDF exports, activity summaries, and polling change streams covering all 18 native sync categories.\n- PDF exports matching the app's daily-list, growth, and timeline report modes.\n- Typed statistics for counts, durations, amounts, units, volumes, reactions, temperatures, hours, groups, and day/night sleep.\n- Native count-chart cards for total, average per day, and average time between activities, including comparison percentages and the app's five-minute interval cutoff.\n- Native volume-chart period bins and total, average-per-day, and average-per-activity cards with adjacent-range comparisons.\n- Native amount-chart period bins and cards kept separate by the app's exact amount-unit strings.\n- Native duration-chart period totals and average-per-day summaries, preferring stored pause-adjusted durations and safely handling unfinished activities.\n- Native temperature scatter points, per-period extrema and averages, and the app's highest-period-average summary rule.\n- Native liked/neutral/disliked reaction distributions and the app's liked-count comparison summary.\n- Native 24-hour time-of-day count distributions with optional previous-range comparison series.\n- App-compatible reminder scheduling for one-time, activity-relative, day-interval, and weekday reminders, including DND and dismissal handling.\n- Baby Daybook sleep recommendations for newborns through 59 months, including grouped age ranges.\n- Native-compatible average sleep clock ranges, including crossing-midnight normalization.\n- Native sleep-duration constraint loosening and clamping used by prediction adjustments.\n- The native 20-position primary-tooth map, ten-row eruption/shed chart, deterministic tooth IDs, colors, and state precedence.\n- Raw Firestore, Firebase Storage, and callable-function clients for forward-compatible access.\n- A workflow-oriented 79-command Toolcraft tree exposed identically through a typed SDK, the `baby-daybook` CLI, and MCP servers.\n\nThe SDK does not bypass subscription checks. Operations remain subject to the authenticated user's Firebase security-rule permissions and Baby Daybook account status.\n\nThe default Firebase configuration includes the Android package name and release-certificate SHA-1 extracted from Baby Daybook 7.0.8. Authentication and token-refresh requests send both values in Google's required `X-Android-Package` and `X-Android-Cert` headers because the app's API key rejects unidentified clients. Custom Firebase configurations can override both fields.\n\n## Install\n\n```bash\nnpm install @kamilio/baby-daybook-sdk\n```\n\nTo install the CLI globally from npm:\n\n```bash\nnpm install -g @kamilio/baby-daybook-sdk\nbaby-daybook --help\n```\n\n## CLI\n\nThe CLI uses the persisted rotating refresh-token session at `~/.config/baby-daybook/auth.json` by default. Create or refresh it with automatic Apple login, or authenticate through environment variables:\n\n```bash\nexport BABY_DAYBOOK_EMAIL=\"parent@example.com\"\nexport BABY_DAYBOOK_PASSWORD=\"your-linked-password\"\n\nbaby-daybook login apple\nbaby-daybook manage account status\nbaby-daybook babies list\nbaby-daybook log bottle 5 --volume-unit fluidOunces\nbaby-daybook log diaper wet-and-dirty\nbaby-daybook timeline recent\nbaby-daybook timeline timer start BABY_UID sleeping\nbaby-daybook journal growth add BABY_UID --weight 8.2 --height 70\nbaby-daybook journal notes set BABY_UID \"Slept well\"\nbaby-daybook sleep predict BABY_UID\nbaby-daybook sleep statistics BABY_UID --interval last7Days\n```\n\n`baby-daybook login apple` opens a temporary Chrome, Edge, or Chromium profile and captures Baby Daybook's native callback automatically. It never asks you to paste the callback. Use `--browser`, `--auth-file`, or `--timeout-minutes` to override the browser executable, session location, or 30-minute timeout. The login command requires Node.js 22 or newer; the remaining SDK, CLI, and MCP features support Node.js 20 or newer.\n\nUse `BABY_DAYBOOK_REFRESH_TOKEN` for an explicit refresh token or `BABY_DAYBOOK_AUTH_FILE` for another session path. Email and password must always be provided together. A successful token rotation is atomically persisted in the versioned session format with directory mode `0700` and file mode `0600`.\n\nDestructive commands require confirmation. For reviewed automation, pass `--yes`:\n\n```bash\nbaby-daybook timeline delete BABY_UID ACTIVITY_UID --yes\nbaby-daybook manage caregivers remove BABY_UID CAREGIVER_UID --yes\n```\n\nUse `--output json` for scripts and agents. Run group or command help to inspect exact parameters:\n\n```bash\nbaby-daybook timeline --help\nbaby-daybook timeline timer start --help\n```\n\n## MCP server\n\nStart the same command tree as an MCP stdio server:\n\n```bash\nbaby-daybook mcp\n```\n\nExample MCP client configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"baby-daybook\": {\n      \"command\": \"baby-daybook\",\n      \"args\": [\"mcp\"],\n      \"env\": {\n        \"BABY_DAYBOOK_AUTH_FILE\": \"/home/user/.config/baby-daybook/auth.json\"\n      }\n    }\n  }\n}\n```\n\nMCP exposes a flat `tools/list`, so all 79 tools remain visible. Nested command groups become name prefixes such as `log__bottle`, `timeline__timer__start`, and `advanced__backup__create`; the redundant root prefix is omitted. Every tool publishes input and output schemas plus explicit read-only, destructive, idempotent, and open-world annotations. The dedicated `log` tools use a precise activity output schema; other data commands return JSON-compatible results under `data`.\n\n## Streamable HTTP MCP server\n\nRun the identical 79-tool tree over Streamable HTTP:\n\n```bash\nbaby-daybook http\n```\n\nThe secure defaults bind to `127.0.0.1`, select a free operating-system port, and expose `/mcp`. The listening URL is printed to standard error. For a fixed local endpoint:\n\n```bash\nbaby-daybook http --port 8080 --path /mcp --allowed-host localhost:8080\n```\n\nThe CLI defaults to Toolcraft's stateless mode; pass `--stateful` to create persistent sessions with random UUIDs. Use `baby-daybook http --help` for JSON responses, host/origin allowlists, request limits, session limits, concurrency, proxy handling, and timeout controls. OAuth, observability, custom session stores, request-scoped services, and the complete upstream transport options are available through the ESM-only programmatic export:\n\n```ts\nimport { runBabyDaybookHTTPMCP } from \"@kamilio/baby-daybook-sdk/toolcraft-http\";\n\nconst handle = await runBabyDaybookHTTPMCP({\n  hostname: \"127.0.0.1\",\n  port: 8080,\n  path: \"/mcp\",\n  oauth,\n  requestServices: ({ auth }) => ({\n    babyDaybook: serviceForSubject(auth?.subject),\n  }),\n});\n\nconsole.log(handle.url);\n```\n\nThe HTTP surface requires Node.js 20 or newer. Toolcraft owns the HTTP adapter and bundles `tiny-http-mcp-server`; consumers do not install or wire the transport separately.\n\n### Public OAuth MCP service\n\nThe repository also deploys the same tool tree as a public, multi-user OAuth MCP service:\n\n```text\nhttps://baby-daybook-kjopek.fly.dev/mcp\n```\n\nConnect that URL from an OAuth-capable MCP client. The client discovers protected-resource and authorization-server metadata, dynamically registers, and starts authorization code with PKCE. The hosted interaction offers Sign in with Apple using a one-time `intent://callback…` paste-back step and an email/password option for accounts that already have password sign-in enabled. Each OAuth subject receives a separate encrypted Baby Daybook refresh token; there is no shared account, static service token, or anonymous fallback.\n\nAfter a successful Apple or email reconnection, the next tool request loads the replacement Baby Daybook session without a server restart. Late refresh or sign-out callbacks from an older client cannot overwrite or remove that replacement, and an older failed request cannot evict the new cached client. A cached-session refresh failure discards that client but retains persisted sign-in state for recovery. Already-running tool operations are not automatically cancelled or replayed.\n\nMaintainers deploy the bundled Node.js 24 OAuth server from this repository's `Dockerfile` and `fly.toml`.\n\nThe Garmin relay combines complementary legacy wet/dirty diaper events within one minute. New merges persist the consumed watch event IDs in `garminMergedEventIds` on the combined record, in the same write as the merge. Retrying either the merged event or its full original batch does not create another diaper or rewrite that record. Soft-deleted records retain their replay identity. Records merged before this change have no saved incoming event ID; existing duplicates are not automatically repaired. This behavior does not change replay handling for other activity types or explicit activity edits.\n\nThe deployment uses Toolcraft's supported authorization server, SQLite on a persistent Fly volume, AES-256-GCM session encryption, ES256 access tokens, PKCE S256, exact redirect URIs, token rotation with replay revocation, secure interaction cookies, request limits, and rate limits.\n\n## Toolcraft SDK\n\nThe regular package root remains the dual ESM/CommonJS low-level typed Baby Daybook SDK. The ESM-only `baby-daybook-sdk/toolcraft` export provides the shared command tree and generated in-process SDK:\n\n```ts\nimport { createBabyDaybookToolcraftSDK } from \"@kamilio/baby-daybook-sdk/toolcraft\";\n\nconst tools = createBabyDaybookToolcraftSDK({\n  env: {\n    BABY_DAYBOOK_AUTH_FILE: `${process.env.HOME}/.config/baby-daybook/auth.json`,\n  },\n});\n\nconst babies = await tools.babies.list({ includeDeleted: false });\nconst prediction = await tools.sleep.predict({ babyUid: babies.data[0].uid });\nconst bottle = await tools.log.bottle({ volume: 5, volumeUnit: \"fluidOunces\" });\n```\n\nAll Toolcraft commands have `cli`, `mcp`, and `sdk` scope, preserving exact command parity across the three surfaces. The adapters share one handler implementation, so validation, authentication, and returned data do not drift. The CLI requires `--yes` for reviewed destructive actions, while MCP clients receive the corresponding destructive annotations.\n\nThe command hierarchy is intentionally task-first:\n\n- `log` — pump, bottle, diaper, medicine, and another completed point activity.\n- `timeline`, `sleep`, `journal`, `reminders`, and `insights` — everyday reads and care workflows.\n- `manage` — account, baby-profile, caregiver, activity-type, group, and setting administration.\n- `reports` — CSV and PDF exports.\n- `advanced` — raw JSON patches, attachments, backups, and synchronization internals.\n\nMCP has no collapsible group hierarchy: `manage` and `advanced` lower administrative tools' prominence through clear name prefixes, but do not hide them. This is intentional so CLI, MCP, and SDK expose the same 79 commands.\n\n## Sign in\n\n```ts\nimport { BabyDaybookClient } from \"@kamilio/baby-daybook-sdk\";\n\nconst client = await BabyDaybookClient.signInWithEmail(\n  process.env.BABY_DAYBOOK_EMAIL!,\n  process.env.BABY_DAYBOOK_PASSWORD!,\n  {\n    onSessionChanged(session) {\n      // Persist session.refreshToken in an OS credential store.\n    },\n  },\n);\n\nconst babies = await client.listBabies();\nconst baby = client.baby(babies[0].uid);\nconst activities = await baby.activities.list();\n```\n\nBaby Daybook stores its daytime window as `HH:mm-HH:mm`. The SDK validates the app's 04:00–22:00 bounds and 11–14 hour duration before saving:\n\n```ts\nconst daytimeRange = await baby.getDaytimeRange();\nawait baby.setDaytimeRange({\n  start: { hour: 7, minute: 0 },\n  end: { hour: 20, minute: 0 },\n});\n```\n\nThe app's average sleep-range calculator is available for sleep prediction and custom reporting. It aligns crossing-midnight sleeps before averaging their local clock times:\n\n```ts\nimport { calculateAverageSleepRange } from \"@kamilio/baby-daybook-sdk\";\n\nconst averageNight = calculateAverageSleepRange(daytimeRange, completedSleeps, \"America/Chicago\");\n```\n\nPrediction tooling also exposes the app's loose duration bounds, which expand each edge by 10%, round the adjustment to five minutes, and cap it at 30 minutes:\n\n```ts\nconst looseNap = loosenSleepDurationConstraint(schedule.constraints.nap);\nconst adjustedMinutes = clampSleepDurationToLooseConstraint(recordedMinutes, schedule.constraints.nap);\n```\n\nTo restore a saved login without retaining the password:\n\n```ts\nconst client = await BabyDaybookClient.fromRefreshToken(savedRefreshToken);\n```\n\n### Apple accounts and command-line use\n\nApple sign-in requires a fresh Apple identity token plus either the authorization code returned by Apple's Android/web flow or the matching raw nonce used by a nonce-based flow. The Android app uses the authorization-code form:\n\n```ts\nconst client = await BabyDaybookClient.signInWithAppleCredential(\n  {\n    idToken: appleIdentityToken,\n    authorizationCode: appleAuthorizationCode,\n  },\n  {\n    onSessionChanged(session) {\n      // Persist session?.refreshToken in an OS credential store.\n    },\n  },\n);\n```\n\nFor platforms that create a nonce, pass `{ idToken, nonce: rawNonce }`; `rawNonce` is the unhashed value whose SHA-256 hash was sent to Apple.\n\nA headless CLI cannot generate a valid Apple identity token by itself. For convenient later CLI access, authenticate once with Apple, then link an email and a strong generated password to the already authenticated account:\n\n```ts\nawait client.linkEmailPassword(\"parent@example.com\", generatedPassword);\nawait client.sendEmailVerification();\nawait client.setPassword(replacementPassword); // Later rotation on the authenticated account.\n```\n\nThis keeps the existing Firebase user ID, babies, and activity data, while adding email/password as another sign-in method. Do not use `signUpWithEmail` for this migration: it can create a separate Firebase user. Apple remains linked, and subsequent CLI runs can use `signInWithEmail` or the persisted refresh token. If Apple supplied a private-relay address, confirm which email you want associated with the account before linking it.\n\nThe repository includes a one-time headed-browser command that performs this migration without asking for an Apple password in the terminal:\n\n```bash\nbaby-daybook login apple\n```\n\nThe command opens a temporary Chrome, Edge, or Chromium profile, lets Apple handle credentials and two-factor authentication, captures Baby Daybook's native direct or redirected `intent://` callback through the browser debugging protocol (including Chrome's insecure-form interstitial without requiring its confirmation button), signs into the existing Firebase user, asks which email to link, generates a 192-bit URL-safe password, and requests email verification. It stores only the rotating Firebase refresh token in `~/.config/baby-daybook/auth.json`; the directory is created with mode `0700` and the file with mode `0600`. Save the generated password in your password manager because it is displayed once and is not written to that file. Use `--email`, `--browser`, `--auth-file`, or `--timeout-minutes` to override the interactive email, browser executable, session location, or 30-minute browser timeout.\n\nAn Apple app-specific password is not interchangeable with a Baby Daybook password and will not work with Firebase email/password authentication. The password must be linked after a successful Apple session, as the command does. To restore the saved session later:\n\n```bash\nbaby-daybook manage account status\n```\n\nThis health check refreshes and safely re-persists the rotating session when needed, verifies that Firebase and the active SDK session identify the same account, reports whether email/password is linked, and prints only the number of accessible babies. Pass `--auth-file path` after `--` when using a non-default session file.\n\n```ts\nimport { readFile } from \"node:fs/promises\";\nimport { BabyDaybookClient } from \"@kamilio/baby-daybook-sdk\";\n\nconst saved = JSON.parse(await readFile(`${process.env.HOME}/.config/baby-daybook/auth.json`, \"utf8\"));\nconst client = await BabyDaybookClient.fromRefreshToken(saved.refreshToken);\n```\n\nFor a custom browser integration, `createAppleAuthorizationUrl()` recreates the native Android request, `parseAppleCallbackUrl()` validates the returned `intent://callback` credential, and `BabyDaybookClient.signInWithAppleCallback()` completes the Firebase exchange.\n\nAccount lifecycle mirrors the mobile app. Display-name changes update both Firebase Authentication and the Baby Daybook user document, while sign-out invalidates the local SDK session and emits `undefined` through `onSessionChanged`:\n\n```ts\nawait client.updateDisplayName(\"Parent name\");\nawait client.signOut();\n```\n\nCreating a baby also initializes the same 20 built-in activity types and 39 default groups as the Android app. It follows the native write order: create the baby first, then write the default activity types and groups. The ownership relation is server-managed and read-only to clients. If default initialization fails, the SDK rolls back the newly created baby root:\n\n```ts\nconst created = await client.createBaby({\n  name: \"Baby\",\n  birthdayMillis: Date.parse(\"2026-01-01T00:00:00Z\"),\n});\n\nawait client.baby(created.uid).save({\n  name: \"Baby\",\n  gender: \"female\",\n  isPremature: true,\n  expectedBirthdayMillis: Date.parse(\"2026-01-15T00:00:00Z\"),\n});\n\nawait client.baby(created.uid).delete();\n```\n\nBaby profile saves match the native editor: the name must contain at least one character, all entered profile fields are preserved without hidden birthday or premature-birth normalization, and each save writes `svt: 0` with a fresh `updatedMillis` synchronization stamp. Baby deletion is a synchronization tombstone rather than a Firestore hard delete, matching the app and its security rules.\n\nDefault group names use the app's English labels. A caller that has another localization catalog can resolve the native message keys while creating the baby:\n\n```ts\nawait client.createBaby({ name: \"Baby\" }, {\n  resolveDefaultGroupTitle({ messageKey, title }) {\n    return translations[messageKey] ?? title;\n  },\n});\n```\n\n## Record activities\n\n```ts\nconst sleep = await baby.startActivity({ type: \"sleeping\" });\nawait baby.pauseActivity(sleep.uid);\nawait baby.resumeActivity(sleep.uid);\nawait baby.stopActivity(sleep.uid);\n\nconst feeding = await baby.startActivity({\n  type: \"breastfeeding\",\n  side: \"left\",\n});\nawait baby.switchBreastfeedingSide(feeding.uid, \"right\");\nawait baby.stopActivity(feeding.uid);\n\nawait baby.saveActivity({ ...feeding, notes: \"Good latch\" });\nawait baby.deleteActivity(feeding.uid);\n```\n\nStopping a paused timer records its pause boundary as `endMillis` and excludes the paused tail from `duration`, sleep charts, and timeline overlap. An explicitly earlier stop time is still honored. `updatedMillis` records the completion write time; a resumed timer uses its requested stop time with the existing pause-adjusted start.\n\nRepeating Pause on an already-paused activity or Stop on a completed activity returns the stored record without another write, even when a different timestamp is supplied. Pausing a completed activity fails without changing history. Stop timestamps apply only when completing a running or paused timer; to correct completed history, use `saveActivity` or `sdk.advanced.raw.activities.update` with the intended `endMillis` and `duration`. These checks use the persisted state and do not make concurrent transitions atomic.\n\nStopping a breastfeeding or pumping timer saves its final left/right segment together with the completion fields in one write, preserving previously accumulated side durations. A paused side is settled only through its pause time; selecting `both` credits the remaining segment to both side counters. Daily feeding and pumping summaries expose these values as `leftDurationMillis` and `rightDurationMillis`, rather than the generic `durationMillis` field.\n\nCompleted point events have dedicated methods and never create an active timer:\n\n```ts\nawait baby.logPump({ volume: 135, side: \"both\" });\nawait baby.logBottle({ volume: 150, groupUid: formulaGroupUid });\nawait baby.logDiaper({ pee: true, poo: true });\nawait baby.logMedicine({ amount: 1, amountUnit: \"drops\", groupUid: vitaminDGroupUid });\n```\n\nThe Toolcraft `log` façade adds single-baby auto-selection, exact baby-name lookup, fluid-ounce conversion, and safe group-title resolution. Native records keep canonical milliliters and integer `0/1` flags at the Firestore boundary while SDK callers receive booleans.\n\n`saveActivity` mirrors the Android editor by preserving type-specific fields while applying the native update and synchronization stamps. `deleteActivity` writes the same synchronized tombstone used by the app rather than hard-deleting history.\n\nThe native activity queries are available without a local SQLite dependency:\n\n```ts\nconst lastBottle = await baby.getLastActivity(\"bottle\");\nconst activeTimers = await baby.getInProgressActivities();\nconst previousAmount = await baby.getLastAmountForGroup(\"bottle\", groupUid);\nconst overlaps = await baby.findOverlappingActivities(candidateActivity);\n```\n\nLast-activity queries reproduce the app's one-minute future-entry grace window. Overlap detection uses the same inclusive start boundary and treats an existing in-progress activity as open-ended.\n\nPrimary caregivers can delete custom activity types with the same cascade used by the Android app:\n\n```ts\nconst customType = await baby.createActivityType({\n  title: \"Outdoor time\",\n  hasDuration: true,\n});\n\nconst stroller = await baby.createGroup({\n  title: \"Stroller\",\n  daType: customType.uid,\n});\n\nconsole.log(await baby.listGroups(customType.uid));\nawait baby.deleteActivityType(customType.uid);\n```\n\nNew custom types use the app's `pen_ink` icon, disabled optional fields, and one of its exact 80 hexadecimal color strings unless overridden. Group names are unique case-insensitively within each activity type and list in the app's activity-type/title order. Deleting a group tombstones only that group, matching the app.\n\nDeleting a custom type updates both activity-type configuration records, then tombstones matching reminders, groups, activities, and the custom type in native order. Built-in activity types cannot be deleted.\n\nAll direct collection repositories provide `list`, `get`, `save`, `softDelete`, and `hardDelete`. Prefer `softDelete` because the mobile app uses tombstones to synchronize deletions.\n\nDaily notes use the app's timezone-aware `yyyyMMdd` document IDs:\n\n```ts\nconst day = new Date(\"2026-01-02T00:30:00Z\");\nawait baby.setDailyNote(\"First full night\", day, \"America/Chicago\");\nconsole.log(await baby.getDailyNote(day, \"America/Chicago\"));\nawait baby.deleteDailyNote(day, \"America/Chicago\");\n```\n\n`setDailyNote(\"\", ...)` deletes the note exactly like the app. Whitespace-only notes remain valid because the native check distinguishes an empty string from non-empty text.\n\n## Teething chart\n\nThe SDK reproduces the app's complete primary-tooth model rather than exposing only raw Firestore records:\n\n```ts\nconst chart = baby.listToothChart();\nconst map = await baby.getToothMap();\n\nconst upperLeftCentralId = toothUid(\"central_incisor\", \"upper\", \"left\");\nconst upperCentralRange = getToothEruptionInterval(\"central_incisor\", \"upper\");\n\nconst growth = await baby.createGrowth({ weight: 7.5 });\nconst moment = await baby.createMoment({ description: \"First steps\" });\nconst tooth = await baby.createTooth({ name: \"central_incisor\", jaw: \"lower\", side: \"left\" });\n\nconst momentMonths = await baby.listMomentMonths({ timeZone: \"America/Chicago\" });\nconst julyMoments = await baby.listMomentsForMonth(new Date(\"2026-07-15\"), { timeZone: \"America/Chicago\" });\n```\n\n`listToothChartItems` returns the native ten-row eruption/shed order. `listPrimaryTeeth` and `baby.getToothMap()` return all 20 positions with deterministic IDs, native colors, expected age intervals, and `none`, `erupted`, or `shed` state. When both flags are present, `shed` takes precedence exactly like the app.\n\nGrowth, moment, and tooth helpers reproduce native editor defaults. Growth and moment records receive random IDs and current timestamps; tooth IDs are deterministic and a newly selected tooth starts as erupted. Every save or delete resets `svt` to zero and refreshes `updatedMillis` for cloud synchronization.\n\nMoment month lists match the native screen's `date_millis DESC, uid` ordering and local-calendar grouping. Supplying `timeZone` makes month boundaries deterministic in server and CLI processes; range filters include the complete selected months, matching the Android query.\n\n## Search and growth\n\n```ts\nconst nightFeeds = await baby.searchActivities({\n  query: \"night\",\n  types: [\"bottle\", \"breastfeeding\"],\n  reactions: [\"liked\"],\n  parameters: [\"pee\"],\n  offset: 0,\n  limit: 25,\n});\nconst activityCount = await baby.countSearchActivities({ query: \"night\" });\nconst matchingNotes = await baby.searchDailyNotes(\"doctor\", {\n  fromMillis: Date.parse(\"2026-01-01T00:00:00Z\"),\n  toMillis: Date.parse(\"2026-12-31T00:00:00Z\"),\n  limit: 25,\n});\nconst noteCount = await baby.countSearchDailyNotes(\"doctor\");\n\nconst growthEntries = await baby.listGrowth();\nconst comparisonBabies = await client.listGrowthComparisonBabies(baby.babyUid);\nconst comparisonGrowth = await client.getGrowthComparisonMap(comparisonBabies.map(({ uid }) => uid));\n\nconst result = calculateGrowthPercentile({\n  source: \"who_0_60_months\",\n  gender: \"female\",\n  measurement: \"weight\",\n  age: 12,\n  value: 9.1,\n});\n```\n\nGrowth age uses the selected reference dataset's weeks, months, or years. Use `growthAgeAtDate` to convert timestamps and `calculateGrowthValueAtPercentile` to obtain a reference value for percentiles 1 through 99.\n\n`baby.listGrowth()` matches the native list's `date_millis DESC` order. The chart comparison picker exposes only other babies with the active baby's gender, and `getGrowthComparisonMap()` fetches each selected baby's ordered series while preserving selection order.\n\nSearch reproduces the native SQLite screen behavior: activity keywords match notes only, reaction values are OR filters, selected `pee`, `poo`, and `hairWash` parameters are all required, and `groupsByType` applies the app's per-activity-type group map. Activities sort by `startMillis DESC, type, uid`; day notes sort by their `YYYYMMDD` ID descending. Count helpers intentionally ignore `offset` and `limit`, matching the app's separate count and paged-list queries.\n\n## Sleep schedules\n\nThe SDK includes the schedule table and selection behavior recovered from the Android app. Sleep prediction supports corrected ages from 2 through 59 months:\n\n```ts\nconst schedule = await baby.getSampleSleepSchedule();\nconst dated = materializeSleepSchedule(schedule, new Date());\nconst prediction = await baby.predictSleep(new Date());\n\nconst transitionOptions = getExpandedSleepSchedulesForAge(12);\nconst oneNapSchedule = selectSleepSchedule({ ageMonths: 12, napCount: 1 });\n```\n\n`getSleepSchedulesForAge` follows the app's exact age buckets: monthly schedules through 23 months, then the 24-, 36-, and 48-month tables. `getExpandedSleepSchedulesForAge` includes nearby higher- and lower-nap transition schedules, and `selectSleepSchedule` chooses the exact or nearest nap count with the same lower-count tie break as the app.\n\n`predictSleepSchedule` and `baby.predictSleep` combine that reference schedule with recorded `sleeping` activities. Completed or in-progress naps shift the remaining naps and bedtime through the schedule's wake windows, while generated times use the app's five-minute increments.\n\nThe statistics screen's recommendation ranges are also available directly:\n\n```ts\nconst recommendation = await baby.getSleepRecommendation();\nconst grouped = listGroupedSleepRecommendations();\n```\n\n## PDF exports\n\nThe Android app exposes daily-list, growth, and timeline PDF modes. The SDK provides deterministic equivalents suitable for saving, emailing, or further processing:\n\n```ts\nconst dailyListPdf = await baby.exportActivitiesPdf();\nconst growthPdf = await baby.exportGrowthPdf({\n  weightUnit: \"lb\",\n  lengthUnit: \"in\",\n});\nconst timelinePdf = await baby.exportTimelinePdf({ hourLabelInterval: 3 });\n```\n\nDaily-list reports follow the app's section order: day label, timeline, daily note, summary, and individual activity rows. Daily notes are matched using Baby Daybook's `yyyyMMdd` document IDs in the selected timezone. Growth reports include measurement rows and independently selectable weight, height, and head-size trend sections. Timeline reports group activities by day and reproduce the app's hour-label concept.\n\nGrowth PDFs treat zero and negative measurement placeholders as absent, matching the development summary's positive-value rule. Each measurement is handled independently: missing values leave blank table cells and do not affect that measurement's trend count, minimum, maximum, or latest value and date. Dated records, notes, and valid measurements in the same row remain included; exports do not modify stored records. This rule applies before metric or imperial conversion.\n\nActivity PDF rows use the recorded volume in milliliters for bottle, pump, and drink activities, rather than their native zero-valued amount placeholder. Temperature activities show their recorded Celsius value with an ASCII `C` unit label. Other activity types retain their recorded amount and amount unit. Missing quantities stay blank, and exporting does not change stored records.\n\nActivity CSV exports append `temperature` and `temperatureUnit` after the existing columns, preserving their order. Temperature readings stay numeric in canonical Celsius with `temperatureUnit` set to `celsius`; both cells stay blank for other activity types or an absent reading. CSV and PDF retain stored precision and explicit zero readings without converting units or interpreting the measurement. Native temperature defaults on unrelated activity types are not exported as readings.\n\nDaily notes in activity PDFs wrap to the page's printable width using the rendered font's character advances. Explicit line endings, blank paragraphs, indentation, and complete words are preserved; tabs expand to four spaces. Unbroken text wider than a line is split without truncation. Pagination counts the wrapped physical lines, so long notes continue onto subsequent pages without hiding their ending or overwriting page footers. Exporting leaves the stored note unchanged.\n\nAll three PDF modes preserve Unicode names, titles, and notes using embedded, subsetted Noto fonts with searchable/copyable text. Bundled fonts cover Latin accents, Greek, Cyrillic, Arabic, Hebrew, major South and Southeast Asian scripts, Chinese, Japanese, Korean, and monochrome emoji. Mixed right-to-left text and combining sequences are shaped before rendering. Table-field length limits count whole grapheme clusters, so shortening a field cannot split an accent or emoji sequence. Wide Unicode rows scale to fit the page; daily notes wrap without truncation. ASCII-only reports retain the compact Helvetica format, and the pure export functions remain synchronous. No font downloads or system fonts are needed at runtime. Characters outside the bundled fonts' coverage produce an explicit error naming their Unicode code points instead of silent replacement; CSV remains available for that text.\n\nKeep `data/pdf-fonts` alongside `dist` when manually copying a built SDK or server. The npm package and Docker image include these assets and their SIL Open Font License notices. From a source checkout, `node scripts/update-pdf-fonts.mjs` reproduces the pinned upstream font assets and coverage manifest.\n\nReports retain their left-to-right column layout. Unicode table cells include direction-isolation marks so right-to-left labels and notes cannot reorder adjacent dates or numeric values; copied table text can retain these invisible formatting marks.\n\n## Family sharing\n\n```ts\nawait client.family.sendInvite(babyUid, \"caregiver@example.com\");\nawait client.family.acceptInvite(babyUid);\nawait client.family.removeCaregiver(babyUid, caregiverUid);\nawait client.family.changePrimaryCaregiver(babyUid, caregiverUid);\n\nconst caregiver = await client.family.getUserWithPremiumStatus(\"caregiver@example.com\");\nif (caregiver) console.log(caregiver.user.displayName, caregiver.isPremium);\n\nconst caregiverScreen = await client.baby(babyUid).getCaregiversScreenData();\nconsole.log(caregiverScreen.caregivers, caregiverScreen.pendingInvites);\n```\n\nCaregiver mutations follow the native app's `void` contract. Email lookup returns `undefined` when the cloud function reports that no user exists and validates successful user responses before exposing them.\n\n`getCaregiversScreenData` joins the baby owner, accepted-invite user profiles, pending invites, current user, primary-caregiver state, and the native deleted-from-cloud state. The primary caregiver is always first; remaining caregivers and pending invitations use deterministic display-name/email ordering.\n\n## Reminders\n\nReminder documents use the app's serialized modes: `basic`, `advanced`, `advanced_repeat_days`, and `advanced_repeat_weekdays`. Resolve their current state locally or fetch schedules with the latest matching activity already associated:\n\n```ts\nconst schedules = await baby.getReminderSchedules({\n  nowMillis: Date.now(),\n  lastFeedingFromStart: true,\n});\n\nfor (const schedule of schedules) {\n  console.log(schedule.expiredMillis, schedule.nextMillis, schedule.nextIsInDnd);\n}\n\nconst relevant = await baby.getRelevantReminderSchedules();\nawait baby.dismissReminder(relevant[0].reminder.uid);\n```\n\nCreate, edit, and delete reminders through the native editor lifecycle rather than writing raw documents:\n\n```ts\nconst reminder = await baby.createReminder({\n  daType: \"bottle\",\n  groupUid: formulaGroupUid,\n});\n\nawait baby.saveReminder({\n  ...reminder,\n  type: \"advanced_repeat_weekdays\",\n  dateMillis: Date.now(),\n  repeatWeekdays: \"1,3,5\",\n});\n\nawait baby.deleteReminder(reminder.uid);\n```\n\nNew basic reminders use the app's three-hour interval and native 16-character ID format. Saving clears fields that do not belong to the selected mode, resets dismissal, and enforces a minimum one-day interval for `advanced_repeat_days`. The relevant-reminder helper matches the home screen: expired reminders are always included, upcoming reminders enter the list strictly less than 30 minutes before their occurrence, and `getEarliestReminderDisplayMillis` returns the next time a caller should refresh. Dismissal stamps `dismissedMillis` and `updatedMillis` while resetting `svt` to zero for synchronization.\n\nDay-interval and weekday recurrences use the host process's local time zone and the clock encoded in the stored `dateMillis`, including seconds and milliseconds. Each candidate date is reconstructed independently, so crossing a daylight-saving gap cannot shift later reminders or revive dismissed occurrences during backward scans. A nonexistent local time advances by the size of that date's clock gap; an ambiguous repeated time uses the earlier offset, following JavaScript `Date` resolution. This adjustment applies only to that occurrence, not to other dates or the stored reminder. One-time timestamps and activity-relative elapsed intervals are unchanged.\n\n## Attachments and backups\n\n```ts\nimport { randomUUID } from \"node:crypto\";\n\nconst fileName = `${randomUUID()}.jpg`;\nawait baby.uploadAttachment(\"moments\", momentUid, fileName, jpegBytes, \"image/jpeg\");\nawait baby.uploadAttachmentThumbnail(\"moments\", momentUid, fileName, thumbnailBytes, \"image/jpeg\");\nconst jpeg = await baby.downloadAttachment(\"moments\", momentUid, fileName);\nconst preview = await baby.downloadAttachment(\"moments\", momentUid, fileName, true);\nawait baby.deleteAttachment(\"moments\", momentUid, fileName);\n\nconst backup = await baby.createBackup();\nawait baby.restoreBackup(backup);\n\n// Same-account lightweight snapshot; existing Storage objects must remain available.\nconst metadataOnlyBackup = await baby.createBackup({ includeAttachments: false });\nconst csv = await baby.exportActivitiesCsv();\nconst pdf = await baby.exportActivitiesPdf({\n  title: \"Weekly activity report\",\n  fromMillis: Date.now() - 7 * 86_400_000,\n});\nconst summary = await baby.summarizeActivities();\nconst statistics = await baby.getActivityStatistics({\n  fromMillis: Date.now() - 7 * 86_400_000,\n});\n```\n\nActivity statistics and `insights.activities` include temperature aggregates only from `temperature` activities with a defined temperature value. Native zero defaults and stray temperature fields on bottles or other activity types do not count as measurements. Ordinary activity counts, volumes, and other dimensions are unchanged. Explicit zero values on temperature activities remain included, consistent with the type-specific temperature chart; native record defaults are not rewritten.\n\n`buildActivityStatistics`, `baby.getActivityStatistics(...)`, and `insights.activities` split sleep using local calendar boundaries in the process timezone (06:00–18:00 by default), including across daylight-saving changes. Custom `daytimeStartMinutes`/`daytimeEndMinutes` on the statistics APIs are local clock minutes, not elapsed offsets from midnight; `1440` means the next local midnight. Durations and daytime capacity for awake-time calculations use actual elapsed milliseconds, so windows spanning a clock change can be shorter or longer. JavaScript resolves skipped boundary times forward by the gap and repeated times to their earlier occurrence; a normalized window whose end is not after its start has zero capacity. Daily rows retain their existing activity-start-date attribution, and nap counts retain the existing daytime-at-least-nighttime rule. These split statistics are distinct from the native whole-session sleep charts described below.\n\nThe native app stores attachments under generated UUID image filenames. Firebase Storage triggers create and tombstone the corresponding Firestore file metadata; those metadata collections are read-only to clients, and the SDK never attempts forbidden direct writes. Metadata propagation is asynchronous, so callers that immediately create a backup after uploading should poll `baby.fileMetadata(category).list()` until the new file appears.\n\nVersion 2 backups embed every active original attachment as base64 by default, so restored image and video records do not point at missing Storage objects. Native `thumb_` preview files are not embedded because downloads already fall back to the original; applications can regenerate thumbnails after restore. Backup creation fails if an active metadata record points at a missing file rather than silently creating an incomplete archive. Use `includeAttachments: false` only for lightweight same-account snapshots where the original Firebase Storage objects will remain available.\n\nThe SDK backup is a portable JSON snapshot of baby data, per-caregiver reminders and settings, attachment metadata, and optional attachment contents. It intentionally excludes caregiver access-control relationships, caregiver profiles, and purchases. Baby Daybook's Android backup command instead copies the app's nine-table private SQLite database to a `.db` file; the two formats are intentionally not interchangeable.\n\n`restoreBackup` still resolves to `undefined` on success. It restores attachments sequentially, then the baby profile, then the nine record sections concurrently. If any record save fails, it waits for every started save and readback to settle before rejecting; a failed restore no longer leaves sibling SDK promises writing behind the caller's recovery work. A prerequisite failure does not start later stages.\n\nWrite-stage failures throw `BabyDaybookRestoreError` (a `BabyDaybookError` with code `BACKUP_RESTORE_FAILED`). Its `outcomes` lists each target and its `fulfilled`, `rejected`, or `not-started` status. Targets identify the backup section and record UID, or the attachment category, item UID, and filename. Rejected outcomes retain the original `reason`; `errors` contains all those reasons and `cause` is the first in report order. Format and attachment-manifest validation errors still reject before writes begin.\n\n```ts\nimport { BabyDaybookRestoreError } from \"@kamilio/baby-daybook-sdk\";\n\ntry {\n  await baby.restoreBackup(backup);\n} catch (error) {\n  if (error instanceof BabyDaybookRestoreError) console.error(error.outcomes);\n  throw error;\n}\n```\n\nRestore is not transactional: completed writes are not rolled back. A rejected operation may have committed remotely before a response or readback failed, so its status does not prove that nothing was written. Settling SDK promises cannot cancel work the server may still perform after a transport failure. Inspect the affected targets and reconcile uncertain outcomes before retrying; do not blindly rerun an old backup over newer corrections. Await the restore before beginning recovery.\n\n## Baby settings\n\n```ts\nawait baby.setNotificationsEnabled(true);\nawait baby.setQuickAddNotificationEnabled(true);\nawait baby.setStickyNotificationEnabled(\"bottle\", true);\nawait baby.setSleepPredictionNotificationMinutes(15);\nawait baby.setDaTypesConfig([\"breastfeeding\", \"bottle\", \"sleeping\"]);\n\nconsole.log(await baby.areNotificationsEnabled());\nconsole.log(await baby.listStickyNotifications());\n```\n\nThese helpers use the app's exact Firestore setting names and JSON-string parameter format. Defaults match the native app when a setting has not been stored.\n\n## Measurement units\n\nBaby Daybook stores synchronized measurements in metric units and applies device-local display preferences. The SDK reproduces the native conversion constants and number precision:\n\n```ts\nimport {\n  formatGrowthLength,\n  formatGrowthWeight,\n  formatTemperature,\n  formatVolume,\n} from \"@kamilio/baby-daybook-sdk\";\n\nformatTemperature(37, \"fahrenheit\"); // \"98.6 °F\"\nformatVolume(120, \"fluidOunces\"); // \"4.06 fl oz\"\nformatGrowthWeight(3.5, \"poundsAndOunces\"); // \"7 lb 11.5 oz\"\nformatGrowthLength(50, \"inches\"); // \"19.7 in\"\n```\n\nPure `convertValueToImperial` and `convertValueToMetric` helpers are also exported for volume, temperature, weight, height, and head-size values.\n\nThe native Development tab derives its cards from existing growth, moment, and attachment records. The SDK exposes the same derived data:\n\n```ts\nconst growthCard = await baby.getDevelopmentGrowth({\n  weightUnit: \"poundsAndOunces\",\n  lengthUnit: \"inches\",\n});\nconst momentsCard = await baby.getDevelopmentMoments(3);\n```\n\n`getDevelopmentGrowth` keeps the newest growth record's identity and backfills each missing measurement from older records, matching the Android repository. `getDevelopmentMoments` counts all active moments, limits moments in `dateMillis DESC, uid` order, and then returns active preview-file metadata for that limited set.\n\nThe Home and Timeline screens use an overlap-aware range query. It includes ordinary activities whose start is inside the inclusive range, plus duration activities that began earlier and either end after the range starts or remain in progress. Either boundary may be omitted: `fromMillis` alone leaves the upper end open, and `toMillis` alone leaves the lower end open. The same policy applies to `timeline list`, including its CLI and MCP forms. Supplied zero timestamps are real bounds. Calls with both boundaries keep their existing overlap rules; a command with neither boundary retains its unfiltered repository listing:\n\n```ts\nconst activities = await baby.listActivitiesForRange({\n  fromMillis: dayStart,\n  toMillis: dayEnd,\n  types: [\"sleeping\", \"bottle\"],\n});\nconst count = await baby.countActivitiesForRange({ fromMillis: dayStart, toMillis: dayEnd });\n```\n\nResults follow the native `startMillis DESC, type, uid` order. Duration types come from each activity type's `hasDuration` flag, including custom types.\n\nThe Home quick-launch strip is available as a composed read model:\n\n```ts\nconst quickLaunch = await baby.getQuickLaunchItems({\n  nowMillis: Date.now(),\n  lastFeedingFromStart: true,\n});\n```\n\nEach item contains its configured activity type, latest activity when present, and first relevant reminder schedule when present. Stored activity-type configuration order is preserved; unknown or deleted type IDs are skipped.\n\nBaby Daybook intentionally stores an empty `title` for built-in activity types because the native app localizes them from their stable UID. Composed read models expose `activityType.displayTitle` for rendering; the activity-type CLI/MCP list does the same. Raw repositories, synchronization, and backups keep the native `title` unchanged. Use `resolveActivityTypeDisplayTitle(activityType)` when presenting a raw activity type, and do not persist the derived display title.\n\nThe Home day-summary cards are available with the native aggregation and ordering rules:\n\n```ts\nconst cards = await baby.getDayActivityTypeSummaries({\n  fromMillis: dayStartMillis,\n  toMillis: dayEndMillis,\n  nowMillis: Date.now(),\n});\n```\n\nEach card includes count and overlap-scaled duration, left/right feeding or pumping totals, volume, diaper and bath counters, maximum temperature, amount totals by group and unit, the active timer, and the native last-side/group/unit values. Cards with recent activities come first; configured cards without records remain available afterward.\n\nThe Statistics screen selector and native tab eligibility are also available:\n\n```ts\nconst statisticsScreen = await baby.getStatisticsScreenData(preferredActivityTypeUid);\n```\n\nIt returns configured activity types with all-time active record counts and the exact native tab order: number of times, optional duration, temperature, volume, amount, reaction, then time of day. A missing preferred type falls back to the first configured type.\n\n`buildStatisticsParameterBreakdown` and `baby.getStatisticsParameterBreakdown(...)` reproduce the native parameter cards that appear within those tabs: left/right for breastfeeding and pumping, pee/poo/combined/empty for potty, wet/dirty/combined/dry for diaper changes, and hair-wash/no-hair-wash for baths. Each parameter includes date-period count, duration, and volume series, a 24-hour distribution, totals, and optional comparison-period series. This also covers the native volume-by-side card. Left and right duration charts use their dedicated side durations while side `both` contributes to both parameter series.\n\n`buildStatisticsVolumeByHour` reproduces the native hourly volume card. It returns all 24 local hours with total volume, activity count, and the app's displayed average volume per activity, plus an optional comparison series and percentage change.\n\n`buildStatisticsGroupBreakdown` and `baby.getStatisticsGroupBreakdown(...)` reproduce the native by-group cards across number of times, duration, volume, amount, reaction, and time of day. The baby-scoped method preserves the app's configured group order and includes groups with no data; each group carries period series, totals, amount-unit series, reaction distribution, hourly counts, and optional comparison series.\n\n`buildStatisticsNapCountData` and `baby.getStatisticsNapCountData(...)` reproduce the native naps-number-of-times chart and average-per-day card. A sleep counts as a nap only when its complete range belongs to the configured local daytime window; sleeps crossing either daytime boundary remain nighttime sleep.\n\n`buildStatisticsSleepDurationData` and `baby.getStatisticsSleepDurationData(...)` reproduce the native total, daytime, nighttime, nap-duration, awake-time, and average wake-up/bedtime cards. Sleep sessions are classified whole rather than split at daytime boundaries. Total, daytime, and nighttime series include totals and per-day averages; nap-duration series contain the average completed nap duration per chart period and overall. Awake-time bins average gaps of at least five minutes within each day before period aggregation. Wake-up and bedtime retain the app's native decimal-hour conversion, including its `minute / 59` behavior.\n\nNative Statistics date presets and previous/next navigation are available too. Ranges use local calendar days, matching the app across daylight-saving changes:\n\nOrdinary presets (`last7Days`, `last14Days`, `last30Days`, `thisMonth`, and `lastMonth`) work without a profile birthday, including the default `sleep statistics` command. Only `sinceBirthday` requires one. When the birthday is unknown, previous-page navigation remains available because no lower bound is known; the SDK does not invent a birthday or alter the profile. `canLoadPreviousStatisticsDateRange` and `buildStatisticsDateRangeNavigation` also accept an omitted birthday. Supplied birthdays retain the existing lower-bound behavior, while next-page navigation remains bounded by the current date.\n\nFor `sleep statistics`, each explicit `fromMillis` or `toMillis` overrides that endpoint of the selected interval (`last7Days` by default). If only one is supplied, the other comes from the preset; if both are supplied, the preset and profile lookup are bypassed. An inverted combined range returns a range error instead of silently ignoring the requested date. To query a period wholly outside the preset, supply both endpoints or select an appropriate interval. Partial ranges that need `sinceBirthday` still require a birthday.\n\n```ts\nconst navigation = await baby.getStatisticsDateRange(\"last7Days\");\n// navigation.range, navigation.canLoadPrevious, navigation.canLoadNext\n\nconst previousRange = getPreviousStatisticsDateRange(navigation.range);\nconst nextRange = getNextStatisticsDateRange(navigation.range);\n\nconst chartPeriod = getStatisticsChartPeriod(navigation.range);\nconst queryRange = getStatisticsQueryDateRange(navigation.range, true);\nconst countBins = buildStatisticsActivityCountBins(activities, navigation.range, \"bottle\");\n```\n\nChart periods and comparison queries use the native thresholds and adjacent equal-length range. Comparison is automatically unavailable for year charts.\n\nWhen reproducing the app's one-time profile conversion, use `migrateUnitsToMetric`. The callback must durably store the supplied metadata-only recovery backup before the SDK changes any record:\n\n```ts\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nconst backupPath = \"baby-daybook-pre-unit-conversion.json\";\n\nawait baby.migrateUnitsToMetric({\n  temperatureFahrenheit: true,\n  volumeFluidOunces: true,\n  growthWeightPoundsAndOunces: true,\n  growthHeightInches: true,\n  growthHeadSizeInches: true,\n  loadBackup: async () => {\n    try {\n      return JSON.parse(await readFile(backupPath, \"utf8\"));\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n      throw error;\n    }\n  },\n  persistBackup: (backup) => writeFile(\n    backupPath,\n    JSON.stringify(backup, null, 2),\n    { mode: 0o600, flag: \"wx\" },\n  ),\n});\n```\n\n`loadBackup` is required, including for callers upgrading from the earlier write-only callback API. A missing reader rejects before any backup or record is written. Return `undefined` only when no migration backup exists. `persistBackup` must durably create the original backup without replacing an existing file; use a separate recovery file per baby and retain it after failures. The SDK records the source-unit options in that backup and refuses a different baby, changed options, invalid source values, or an unmarked older backup. Review older backups manually rather than guessing their units or overwriting them.\n\nRetries reload the same original snapshot, including after a process restart. Records already equal to their metric targets are skipped, and a completed profile makes a retry a no-op. Only active nonzero measurements are converted; timestamps and unrelated fields are preserved. Each write checks the document's Firestore update time, so a racing edit rejects instead of being overwritten. Deleted records are not recreated. Conversion counts describe writes performed by the current invocation, not all earlier attempts.\n\nPause other apps and automations that write measurements until the migration finishes. The SDK checks for conflicting values and new records outside the source snapshot, but it does not lock other applications. If it reports a conflict, retain the original backup and reconcile the affected records before retrying; do not create a replacement backup from a partially converted dataset. The baby's `convertUnits` flag is set only after the current records are checked again. If loading or persisting the original backup fails, no unit data is mutated.\n\n## Change polling\n\nFor a one-time read, use `await baby.getSyncSnapshot()` or `baby-daybook advanced sync snapshot <baby-uid>` (typed SDK: `advanced.sync.snapshot`; MCP: `advanced__sync__snapshot`). Each invocation reads the current synchronization collections, including all pages and tombstones, without starting a polling subscription. It returns the same `added` record-event shape as a watch's initial nonempty batch. A missing profile with empty collections returns `[]` (`{ data: [] }` through commands); any available records are still returned if the profile is missing. Upstream read failures propagate rather than becoming an empty success. This is one read pass, not an atomic cross-collection database snapshot.\n\nThe mobile app uses Firestore listeners. The REST SDK offers an async polling stream that reports equivalent added, modified, and deleted records without requiring the Firebase browser bundle:\n\n```ts\nconst controller = new AbortController();\nfor await (const changes of baby.watch({ intervalMillis: 5_000, signal: controller.signal })) {\n  console.log(changes);\n}\n```\n\nAborting the signal ends the watch without delivering a pending snapshot, including an initial batch still being read. Cancellation during the base collection reads also skips the later caregiver reads; cancellation during an interval wait clears that timer. Reads already in progress (including their pagination) may finish before the pending iterator request settles, and upstream read errors still propagate. Cancellation is local to that watcher and does not affect other watches or one-time snapshots.\n\n## Development\n\nFrom the repository root with Node.js 24 selected:\n\n```bash\nnpm run build\nnpm test\nnpm run typecheck\nnpm run lint\n```\n\nTests use mocked Firebase protocol responses and never access a real account. The repository does not run destructive live-account checks automatically; any manual verification with owner-provided credentials should use a dedicated test baby.\n","readmeFilename":"README.md"}