{"_id":"@armsteadj1/granola-sync","_rev":"10-4a4399b19c30fa014a0434472a7e20a0","name":"@armsteadj1/granola-sync","dist-tags":{"latest":"0.3.0"},"versions":{"0.2.0":{"name":"@armsteadj1/granola-sync","version":"0.2.0","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.0","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"b79a02d41909effb64a74dc15c50156ca9f92a23","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.0.tgz","fileCount":15,"integrity":"sha512-2YKRAgf2V6ETh6P0pi0pB5EN+Ykl8UmEHJq4Mo+s623Bq1HNgTX2+LDknCrN+fi5xaEMpQkfXkkNmjYoOb51zg==","signatures":[{"sig":"MEUCIALEPNc6Sf/0+RWJ2zF5J/MmcDOMMGlROpwGsDZfD/UkAiEAz4ILU5CXD98R8lQm2QFN0Sd18wYPOwhH7oWhGQCXGzU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72810},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"c7f02f6535317f9c5354c98c08e643bdfa3c2a63","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to Google Drive","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.0_1771701805837_0.5653606679988832","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@armsteadj1/granola-sync","version":"0.2.2","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.2","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"1fefe25b5aeb9c9aa55c394f2c0a26f395dbb6f5","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.2.tgz","fileCount":15,"integrity":"sha512-xJcwqbasSXDEwwcWJNnN6Pdzxlb0Plxvs5FASjAZqGKr0o2nGyPsZqi9NnUr65yC44j+S2MXnwFWm96Bulg+GQ==","signatures":[{"sig":"MEQCIFOD9c3scVobwh5tTm154hdqNOUilZ5vDOAQDEMp68n6AiBjwC1r52HO7rZd9JwsxfRll85ZFs8TsfXL4lDLwwnuNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78492},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"b43a5ae7c661b313f605c337c2f89af442afe3cf","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to Google Drive","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.2_1771724839064_0.11439663110369036","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@armsteadj1/granola-sync","version":"0.2.3","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.3","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"5af37eb5edfc2646521f39d6bc249c225d684767","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.3.tgz","fileCount":15,"integrity":"sha512-ielicy86OD6ryPaiYW+dg7qogTYL5LKdpZZeJ0lZruZaxslqzER3j4tpfe69s1qkj2i6AqUfbj/VECPHuEal1Q==","signatures":[{"sig":"MEQCIDlRfZ1agA+jUVfzt0Z2CZk2Nq1Gq+ec89Ux5yEf/9SjAiAo7670ol9bnfYDa8G6b6cI6YgGS7b7Bp5mSG10eTwPZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78492},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"47db8618a85f4a47a41bb8c71fdcca6d15804cc2","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to Google Drive","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.3_1771724941001_0.2588813298864898","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@armsteadj1/granola-sync","version":"0.2.4","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.4","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"2904ac5e56b202b27e171c092b6dd776ef4528c3","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.4.tgz","fileCount":16,"integrity":"sha512-OIHe8FWap6HfpDTNsY80i8E3XQq2jJq3rrYXNLjtAORMvFaW4RtD3CpbOpix8z+ywyv5lCLki51wamJaHFrwhg==","signatures":[{"sig":"MEQCICniXPYbo7hcvhCm0N5TQ+OypMKp7pfsQO8AxkqUoJblAiBu9Xa5yVMDgN+oDZjMLzdO/cXsYa1tkm4MIuG5HkJ39A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82102},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"65ba906f251f047d09f975976051622f86c9335b","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to a configured folder","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.4_1771777285219_0.5545726201189929","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@armsteadj1/granola-sync","version":"0.2.5","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.5","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"668d4293ae402fad383bbc23d77f643efeb31719","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.5.tgz","fileCount":16,"integrity":"sha512-DOE2/UusCeSnlunT/QyrqG/MTsWDCn+vYRZ2bvlCT6ooMnXBebr/Ytc8lb7ISToEcBNgn1ABkePS1teIYI6yKg==","signatures":[{"sig":"MEYCIQDQwIApJ592FfLUzKyLGfh1HUNB+tIE3oaWGfIBsu89CAIhAOIbdbp7B9BZdW50z0djGmpvlmB9uKZ39lET4m+Z2WeT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":83272},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"a62ac9dea6c64891125785dd49f184d8b733383e","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to a configured folder","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.5_1771883739178_0.6593072878306976","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@armsteadj1/granola-sync","version":"0.2.6","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.6","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"4fffe24a85177ea53af986b8cf9c3d8e6b9082ff","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.6.tgz","fileCount":16,"integrity":"sha512-xnPxNBzYyXuynfFZZa5CbDvnZ0QLvInE3WNFXPDrfXxD3p6WOWOmivE7v/JtiUA7ex5t0pXQFfKG2jbt8Mmrcg==","signatures":[{"sig":"MEUCIGJO5Ln5bftBxHEZ9iPrPt2n4Jx1Rz7pravu/T48w8EpAiEAu5JqSNoSf/ZoZLLeSLgkuGYYwrfhRKg1+H/j0keFoBo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82977},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"7a74c4b48dbd98604f7f9e43547d8b655baff062","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to a configured folder","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.6_1771884269346_0.10111745657203541","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@armsteadj1/granola-sync","version":"0.2.7","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.7","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"b1ab4436aab185bc6a55a328cf359d319f0e3912","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.7.tgz","fileCount":16,"integrity":"sha512-nmxg5cxWTxd8hTi55KkeMmYWjD6Zypub/iAWy2eVCyGWTePHcX3zKRBSLv0SCkwDgQWJ4NXRHp/WGlW8uZ9J6g==","signatures":[{"sig":"MEYCIQCaoix3oqKMmeTtHO3n0ZFV+BYjX9gypcQPYJ+IeRMonwIhAK9LEhQy0pVcctytihE9IlxiXEZzgNOGLwkTyAkf8mIt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89487},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"5bf9f9cc66683e60f7f89e2eec000d0b90eb82fd","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to a configured folder","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.7_1771884509647_0.1610808068193783","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@armsteadj1/granola-sync","version":"0.2.8","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.8","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"f284e65505b8af0f74fc88efb2c6f3c54fda5bb3","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.8.tgz","fileCount":16,"integrity":"sha512-2/YAKP5be5ExWWBqDhYetgF6VYPCJyN53J+MvbC7Q1+DU3v01nEm53UrDl5FqNJPF+n8oroo/j9o57p7ZcLQ8g==","signatures":[{"sig":"MEUCIEJVNGt4+X9e1toxXsKZ2hC3Ge6+VJgK+rWd4AcHcpp1AiEA1u2o5M3CG9ck+FifOhsHwcBiRqIa5f10wzwnPL/2mmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89859},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"52b9879eaca96acba320e711ac67be19d9eeb723","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to a configured folder","directories":{},"_nodeVersion":"20.20.0","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.8_1771884865766_0.034996726763415476","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@armsteadj1/granola-sync","version":"0.2.9","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"author":{"name":"James Armstead"},"license":"MIT","_id":"@armsteadj1/granola-sync@0.2.9","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"bin":{"granola-sync":"dist/index.js"},"dist":{"shasum":"86b668a6f9c2ec7d38bcbd27d72d956fe8a29dac","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.2.9.tgz","fileCount":16,"integrity":"sha512-PJ2B9mSj6TVQhyIy6mfGxqGZaWICwyJ4NItFCRvGiIgQkqC+MrfSVNfvJqC5ACNnEoOkVSl1ruyVFEUq3IREAQ==","signatures":[{"sig":"MEUCIQCczrXXVRcyOv1vKSBg4TN15Zzb88Ky4kwz3G4v/u5m1AIgMHghHnuM1oW58W6xoJo0zulG+NYcCE5j+rGygUmotXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":92886},"main":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"edadd8d140f6e859def6ad338278bfc46761334f","scripts":{"build":"tsc && node scripts/postbuild.js","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"repository":{"url":"git+https://github.com/armsteadj1/granola-sync.git","type":"git"},"_npmVersion":"10.8.2","description":"Sync Granola meeting transcripts to a configured folder","directories":{},"_nodeVersion":"20.20.1","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","prompts":"^2.4.2","commander":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.2","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/granola-sync_0.2.9_1774269883716_0.8835932756256992","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@armsteadj1/granola-sync","version":"0.3.0","description":"Sync Granola meeting transcripts to a configured folder","main":"dist/index.js","bin":{"granola-sync":"dist/index.js"},"scripts":{"build":"tsc && node scripts/postbuild.js","prepare":"npm run build","start":"node dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/armsteadj1/granola-sync.git"},"homepage":"https://github.com/armsteadj1/granola-sync#readme","bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"author":{"name":"James Armstead"},"engines":{"node":">=18.0.0"},"dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","commander":"^11.1.0","js-yaml":"^4.1.0","prompts":"^2.4.2"},"devDependencies":{"@types/js-yaml":"^4.0.9","@types/node":"^20.10.0","@types/prompts":"^2.4.9","typescript":"^5.3.2"},"keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"license":"MIT","_id":"@armsteadj1/granola-sync@0.3.0","gitHead":"c93aeb79a7ac479f4b7718743762f29ded6aee5d","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-TgvL9JP5ooBHF6jUQMK3Z9yHAIdCmhleYjQfEe5lkvGq1jhFkGeEaVk/KdVy2NMX4AnHFHbHsEmS/MPG8EJNng==","shasum":"f2930cb4d2bfc91dfa3afab5308ccbe3e7c40e35","tarball":"https://registry.npmjs.org/@armsteadj1/granola-sync/-/granola-sync-0.3.0.tgz","fileCount":16,"unpackedSize":94311,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@armsteadj1%2fgranola-sync@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDROc3h3o+LNWesSprWWNX0VsZiwy8f4xdpmZQjX6rljgIgUQ2LTfeI/iVVC+2NBxOSjv5GeBMU/GNign19Zj5rdB4="}]},"_npmUser":{"name":"armsteadj1","email":"armsteadj1@gmail.com"},"directories":{},"maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/granola-sync_0.3.0_1774628131368_0.8378446541923228"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-21T19:23:25.757Z","modified":"2026-03-27T16:15:31.788Z","0.2.0":"2026-02-21T19:23:25.992Z","0.2.2":"2026-02-22T01:47:19.233Z","0.2.3":"2026-02-22T01:49:01.147Z","0.2.4":"2026-02-22T16:21:25.359Z","0.2.5":"2026-02-23T21:55:39.339Z","0.2.6":"2026-02-23T22:04:29.492Z","0.2.7":"2026-02-23T22:08:29.800Z","0.2.8":"2026-02-23T22:14:25.924Z","0.2.9":"2026-03-23T12:44:43.861Z","0.3.0":"2026-03-27T16:15:31.513Z"},"bugs":{"url":"https://github.com/armsteadj1/granola-sync/issues"},"author":{"name":"James Armstead"},"license":"MIT","homepage":"https://github.com/armsteadj1/granola-sync#readme","keywords":["granola","google-drive","sync","transcripts","meetings","cli"],"repository":{"type":"git","url":"git+https://github.com/armsteadj1/granola-sync.git"},"description":"Sync Granola meeting transcripts to a configured folder","maintainers":[{"name":"armsteadj1","email":"armsteadj1@gmail.com"}],"readme":"# @armsteadj1/granola-sync\n\n[![CI](https://github.com/armsteadj1/granola-sync/actions/workflows/ci.yml/badge.svg)](https://github.com/armsteadj1/granola-sync/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/@armsteadj1/granola-sync.svg)](https://www.npmjs.com/package/@armsteadj1/granola-sync)\n\nAutomatically syncs [Granola](https://granola.ai) meeting transcripts to Google Drive. Runs as a macOS LaunchAgent every 30 minutes — no Google Drive API setup required.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Prerequisites](#prerequisites)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Configuration](#configuration)\n- [How It Works](#how-it-works)\n- [Output Format](#output-format)\n- [Troubleshooting](#troubleshooting)\n- [For AI Agents](#for-ai-agents)\n\n---\n\n## Overview\n\nGranola records and transcribes your meetings locally. This tool reads Granola's local cache, fetches full transcripts from the Granola API, and writes formatted Markdown files into your Google Drive folder — using the Google Drive desktop app's local filesystem mount rather than the Google Drive API.\n\nEach meeting becomes a Markdown file like `2024-11-15 - Weekly Standup.md` containing the meeting title, date, attendees, notes, AI-generated summaries, and full transcript.\n\n---\n\n## Prerequisites\n\n- **macOS** (uses `~/Library/` paths and LaunchAgent)\n- **Node.js 18+** (`node --version`)\n- **[Granola](https://granola.ai)** installed and signed in — the tool reads from `~/Library/Application Support/Granola/`\n- **[Google Drive desktop app](https://www.google.com/drive/download/)** installed and signed in — the tool writes to `~/Library/CloudStorage/GoogleDrive-*/My Drive/`\n\n---\n\n## Installation\n\n### Recommended: Global install\n\nGlobal install gives you the best experience — the `granola-sync` command is always available and you can set up the LaunchAgent daemon for automatic syncing every 30 minutes.\n\n```bash\nnpm install -g @armsteadj1/granola-sync\ngranola-sync setup\n```\n\n### Quick try: npx\n\nRun a one-off sync without installing anything. Note that `npx` won't persist a global command, so the LaunchAgent daemon won't work — use the global install above for automatic syncing.\n\n```bash\nnpx @armsteadj1/granola-sync sync\n```\n\n### From source\n\n```bash\ngit clone <repo-url>\ncd @armsteadj1/granola-sync\nnpm install\nnpm run build\nnpm link   # makes granola-sync available globally\ngranola-sync setup\n```\n\n---\n\n## Usage\n\n| Command | Description |\n|---|---|\n| `@armsteadj1/granola-sync setup` | Check configuration and show status |\n| `@armsteadj1/granola-sync sync` | Run a one-time sync |\n| `@armsteadj1/granola-sync status` | Show detailed sync state |\n| `@armsteadj1/granola-sync status --json` | Machine-readable JSON status |\n| `@armsteadj1/granola-sync config --show` | Show current configuration |\n| `@armsteadj1/granola-sync config --output-dir <path>` | Set output directory |\n| `@armsteadj1/granola-sync daemon` | Run continuous background sync |\n| `@armsteadj1/granola-sync doctor` | Run diagnostic checks |\n| `@armsteadj1/granola-sync doctor --json` | Diagnostic checks as JSON |\n| `@armsteadj1/granola-sync --help` | Show usage |\n\n**Install LaunchAgent for automatic 30-minute syncing:**\n\n```bash\nchmod +x install_launchagent.sh\n./install_launchagent.sh\n```\n\n**Monitor the LaunchAgent:**\n\n```bash\n# Check status\nlaunchctl list | grep granola\n\n# Stream logs\ntail -f ~/Library/Logs/@armsteadj1/granola-sync.log\n\n# Stop auto-sync\nlaunchctl unload ~/Library/LaunchAgents/com.user.@armsteadj1/granola-sync.plist\n\n# Restart auto-sync\nlaunchctl load ~/Library/LaunchAgents/com.user.@armsteadj1/granola-sync.plist\n```\n\n---\n\n## Configuration\n\n| What | Path |\n|---|---|\n| Granola auth | `~/Library/Application Support/Granola/supabase.json` |\n| Granola cache | `~/Library/Application Support/Granola/cache-v6.json` (auto-detected) |\n| Sync state | `~/.config/@armsteadj1/granola-sync/sync_state.json` |\n| Config file | `~/.config/@armsteadj1/granola-sync/config.yaml` |\n| Log file | `~/Library/Logs/@armsteadj1/granola-sync.log` |\n| Default output | `~/Library/CloudStorage/GoogleDrive-*/My Drive/Granola Transcripts/` |\n\n**Set a custom output directory:**\n\n```bash\n@armsteadj1/granola-sync config --output-dir ~/Documents/Granola\n```\n\n**Set a custom cache file** (if Granola changes its cache format):\n\n```bash\n@armsteadj1/granola-sync config --cache-file cache-v6.json\n```\n\nBy default, the tool auto-detects the highest `cache-vN.json` file in Granola's application support directory. You only need to set this if auto-detection doesn't work for your setup.\n\n**Sync state** (`~/.config/@armsteadj1/granola-sync/sync_state.json`) tracks which meetings have been uploaded. Delete this file to force a full re-sync.\n\n---\n\n## How It Works\n\n```\nGranola local cache (auto-detected cache-vN.json)\n        │\n        ▼\n  Load meeting list\n  Sort newest → oldest\n        │\n        ▼\n  For each unsynced meeting:\n    ├── Skip: deleted, in-progress, no content\n    ├── Fetch transcript via Granola API\n    └── Write Markdown → Google Drive folder\n        │\n        ▼\n  Save sync state (sync_state.json)\n```\n\n**Authentication:** Granola stores WorkOS OAuth tokens in `supabase.json`. The tool reads these directly and auto-refreshes them when they expire (with a 5-minute buffer).\n\n**Deduplication:** Each meeting is identified by its Granola document ID (or a SHA-256 hash of title + date for older entries). Already-synced meetings are tracked in `sync_state.json` and skipped. Sync stops early after 10 consecutive already-synced meetings to avoid scanning the entire history every run.\n\n**Content filtering:** Meetings without a transcript *and* without notes are skipped — this avoids creating empty files for calendar blocks.\n\n---\n\n## Output Format\n\nEach meeting produces a Markdown file named `YYYY-MM-DD - Meeting Title.md`:\n\n```markdown\n# Weekly Standup\n\n**Date:** 2024-11-15 09:00\n**Attendees:** Alice Smith, Bob Jones\n\n---\n\n## Notes\n\n[Your meeting notes from Granola]\n\n---\n\n## Summary\n\n[AI-generated summary]\n\n---\n\n## Transcript\n\n**You:** Let's get started...\n\n**Other:** Sounds good...\n```\n\n---\n\n## Troubleshooting\n\n**`Granola auth not found`**\nGranola is not installed or you haven't signed in. Open Granola and log in, then check that `~/Library/Application Support/Granola/supabase.json` exists.\n\n**`Google Drive folder not found`**\nThe Google Drive desktop app is not installed or not signed in. Install it from [google.com/drive/download](https://www.google.com/drive/download/) and sign in. The tool looks for `~/Library/CloudStorage/GoogleDrive-*/My Drive/`.\n\n**`No meetings found in local cache`**\nGranola hasn't cached any meetings yet. Open Granola and let it load your meeting history, then retry.\n\n**Token refresh failures**\nIf the API returns 401 errors, try logging out and back into Granola to reset your tokens, then re-run.\n\n**LaunchAgent not running**\n```bash\n# Check exit code (0 = success, non-zero = error)\nlaunchctl list | grep granola\n\n# View full logs\ncat ~/Library/Logs/@armsteadj1/granola-sync.log\n```\n\n---\n\n## For AI Agents\n\nThis section is for autonomous agents attempting to help their human set up Granola transcript syncing.\n\n### Important: Agent vs. User Machine Separation\n\n**Granola runs on your human's machine (their laptop), NOT on the agent's machine (your server/Mac mini).**\n\nWhen you detect that Granola is not installed on your machine:\n1. **Don't try to install Granola on the agent machine**\n2. **Assume it's on your human's machine**\n3. **Provide them with setup instructions** (see below)\n\n### Detection Logic (on Agent Machine)\n\nRun these checks to determine what's available on YOUR machine:\n\n```bash\n# 1. Node.js 18+ available?\nnode --version 2>&1 | grep -E \"v(1[89]|[2-9][0-9])\\.\"\n# Exit 0 = OK, non-zero = install Node.js 18+\n\n# 2. Granola auth file present?\ntest -f \"$HOME/Library/Application Support/Granola/supabase.json\" && echo \"OK\" || echo \"MISSING\"\n# MISSING = Granola is not on this machine (expected for agents)\n\n# 3. Shared folder accessible?\n# Check if your human has set up a shared sync folder you can access\ntest -d \"$HOME/Shared/Granola Transcripts\" && echo \"OK\" || echo \"NOT_SETUP\"\n```\n\n### When Granola is NOT on Agent Machine (Expected Case)\n\nIf Granola is not installed on your machine, provide your human with these **setup instructions for THEIR machine**:\n\n```\nI found the @armsteadj1/granola-sync tool, but Granola is installed on YOUR machine, not mine.\n\nHere's how to set it up so I can access your meeting transcripts:\n\n**On your machine:**\n\n1. Install the sync tool:\n   npm install -g @armsteadj1/granola-sync\n\n2. Configure it to sync to a folder I can access:\n   @armsteadj1/granola-sync config --output-dir ~/Dropbox/Granola Transcripts\n   \n   (Or use Google Drive, iCloud, or any shared folder)\n\n3. Run the initial sync:\n   @armsteadj1/granola-sync sync\n\n4. Set up automatic syncing (runs every 30 min):\n   curl -fsSL https://raw.githubusercontent.com/thegreysky/@armsteadj1/granola-sync/main/install_launchagent.sh | bash\n\n5. Share the output folder with me:\n   - If using Dropbox: Share \"Granola Transcripts\" folder\n   - If using Google Drive: Make sure Drive File Stream is set up on both machines\n   - If local network: Set up folder sharing via SMB/AFP\n\nOnce you've done this, I'll be able to read your meeting transcripts automatically.\n```\n\n### Auto-Setup Flow (When Granola IS on Agent Machine)\n\nOnly use this flow if you detect Granola is actually installed on the same machine as the agent:\n\n```bash\n# Step 1: Install the tool\nnpm install -g @armsteadj1/granola-sync\n\n# Step 2: Verify\n@armsteadj1/granola-sync doctor --json\n\n# Step 3: Run sync\n@armsteadj1/granola-sync sync\n\n# Step 4: Install LaunchAgent\ncurl -fsSL https://raw.githubusercontent.com/thegreysky/@armsteadj1/granola-sync/main/install_launchagent.sh | bash\n```\n\n### Setup Options for Users\n\nWhen guiding your human, suggest these output directory options:\n\n| Option | Command | Best For |\n|---|---|---|\n| **Dropbox** | `@armsteadj1/granola-sync config --output-dir ~/Dropbox/Granola` | Easy sharing between machines |\n| **Google Drive** | `@armsteadj1/granola-sync config --output-dir ~/Google\\ Drive/My\\ Drive/Granola` | Already using Google Drive File Stream |\n| **iCloud Drive** | `@armsteadj1/granola-sync config --output-dir ~/Library/Mobile\\ Documents/com~apple~CloudDocs/Granola` | macOS-only environments |\n| **Network Share** | `@armsteadj1/granola-sync config --output-dir /Volumes/shared/Granola` | Local network access |\n| **Custom Path** | `@armsteadj1/granola-sync config --output-dir ~/any/path` | Advanced setups |\n\n### Alternatives\n\n| Scenario | Alternative |\n|---|---|\n| No Google Drive desktop app | Use `@armsteadj1/granola-sync config --output-dir ~/some/path` to write locally, then use `rclone` to push to Google Drive |\n| Google Drive API preferred | Replace the file-write logic with Google Drive API v3 calls |\n| Linux environment | The sync logic works cross-platform; only the LaunchAgent (macOS-only) and `~/Library/` paths need to change |\n| Need Granola data without running Granola | The cache (e.g. `cache-v6.json`) can be read directly — no live Granola process required for cached meetings |\n| Want to export to Notion/Obsidian/etc. | The Markdown output from `createMeetingMarkdown()` is portable |\n\n### File Map for Agents\n\n```\nsrc/index.ts          — CLI entry point\nsrc/cli.ts            — All command implementations (setup, sync, status, config, daemon, doctor)\nsrc/sync.ts           — Main sync engine, output folder logic\nsrc/auth.ts           — Granola auth loading and token refresh\nsrc/api.ts            — Granola API client (getTranscript)\nsrc/cache.ts          — Local Granola cache reader\nsrc/markdown.ts       — Markdown generation\nsrc/config.ts         — Config and sync state management\nsrc/status.ts         — Daemon status, log parsing, formatting helpers\nsrc/paths.ts          — All path constants\nsrc/types.ts          — TypeScript interfaces\n\ndist/index.js         — Compiled binary (executable)\ninstall_launchagent.sh — LaunchAgent installer (macOS only)\narchive/              — Archived Python implementation\n```\n","readmeFilename":"README.md"}