@hasna/connectors 0.9.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +239 -1
- package/bin/mcp.js +239 -1
- package/bin/serve.js +238 -0
- package/connectors/connect-focuster/.env.example +11 -0
- package/connectors/connect-focuster/CLAUDE.md +272 -0
- package/connectors/connect-focuster/README.md +193 -0
- package/connectors/connect-focuster/package.json +49 -0
- package/connectors/connect-focuster/src/api/client.ts +213 -0
- package/connectors/connect-focuster/src/api/example.ts +48 -0
- package/connectors/connect-focuster/src/api/index.ts +51 -0
- package/connectors/connect-focuster/src/cli/index.ts +254 -0
- package/connectors/connect-focuster/src/index.ts +103 -0
- package/connectors/connect-focuster/src/types/index.ts +237 -0
- package/connectors/connect-focuster/src/utils/auth.ts +274 -0
- package/connectors/connect-focuster/src/utils/bulk.ts +212 -0
- package/connectors/connect-focuster/src/utils/config.ts +326 -0
- package/connectors/connect-focuster/src/utils/output.ts +175 -0
- package/connectors/connect-focuster/src/utils/settings.ts +114 -0
- package/connectors/connect-focuster/src/utils/storage.ts +198 -0
- package/connectors/connect-focuster/tsconfig.json +16 -0
- package/connectors/connect-formcarry/.env.example +11 -0
- package/connectors/connect-formcarry/CLAUDE.md +272 -0
- package/connectors/connect-formcarry/README.md +193 -0
- package/connectors/connect-formcarry/package.json +49 -0
- package/connectors/connect-formcarry/src/api/client.ts +213 -0
- package/connectors/connect-formcarry/src/api/example.ts +48 -0
- package/connectors/connect-formcarry/src/api/index.ts +51 -0
- package/connectors/connect-formcarry/src/cli/index.ts +254 -0
- package/connectors/connect-formcarry/src/index.ts +103 -0
- package/connectors/connect-formcarry/src/types/index.ts +237 -0
- package/connectors/connect-formcarry/src/utils/auth.ts +274 -0
- package/connectors/connect-formcarry/src/utils/bulk.ts +212 -0
- package/connectors/connect-formcarry/src/utils/config.ts +326 -0
- package/connectors/connect-formcarry/src/utils/output.ts +175 -0
- package/connectors/connect-formcarry/src/utils/settings.ts +114 -0
- package/connectors/connect-formcarry/src/utils/storage.ts +198 -0
- package/connectors/connect-formcarry/tsconfig.json +16 -0
- package/connectors/connect-formdesk/.env.example +11 -0
- package/connectors/connect-formdesk/CLAUDE.md +272 -0
- package/connectors/connect-formdesk/README.md +193 -0
- package/connectors/connect-formdesk/package.json +49 -0
- package/connectors/connect-formdesk/src/api/client.ts +213 -0
- package/connectors/connect-formdesk/src/api/example.ts +48 -0
- package/connectors/connect-formdesk/src/api/index.ts +51 -0
- package/connectors/connect-formdesk/src/cli/index.ts +254 -0
- package/connectors/connect-formdesk/src/index.ts +103 -0
- package/connectors/connect-formdesk/src/types/index.ts +237 -0
- package/connectors/connect-formdesk/src/utils/auth.ts +274 -0
- package/connectors/connect-formdesk/src/utils/bulk.ts +212 -0
- package/connectors/connect-formdesk/src/utils/config.ts +326 -0
- package/connectors/connect-formdesk/src/utils/output.ts +175 -0
- package/connectors/connect-formdesk/src/utils/settings.ts +114 -0
- package/connectors/connect-formdesk/src/utils/storage.ts +198 -0
- package/connectors/connect-formdesk/tsconfig.json +16 -0
- package/connectors/connect-formsite/.env.example +11 -0
- package/connectors/connect-formsite/CLAUDE.md +272 -0
- package/connectors/connect-formsite/README.md +193 -0
- package/connectors/connect-formsite/package.json +49 -0
- package/connectors/connect-formsite/src/api/client.ts +213 -0
- package/connectors/connect-formsite/src/api/example.ts +48 -0
- package/connectors/connect-formsite/src/api/index.ts +51 -0
- package/connectors/connect-formsite/src/cli/index.ts +254 -0
- package/connectors/connect-formsite/src/index.ts +103 -0
- package/connectors/connect-formsite/src/types/index.ts +237 -0
- package/connectors/connect-formsite/src/utils/auth.ts +274 -0
- package/connectors/connect-formsite/src/utils/bulk.ts +212 -0
- package/connectors/connect-formsite/src/utils/config.ts +326 -0
- package/connectors/connect-formsite/src/utils/output.ts +175 -0
- package/connectors/connect-formsite/src/utils/settings.ts +114 -0
- package/connectors/connect-formsite/src/utils/storage.ts +198 -0
- package/connectors/connect-formsite/tsconfig.json +16 -0
- package/connectors/connect-formsonfire/.env.example +11 -0
- package/connectors/connect-formsonfire/CLAUDE.md +272 -0
- package/connectors/connect-formsonfire/README.md +193 -0
- package/connectors/connect-formsonfire/package.json +49 -0
- package/connectors/connect-formsonfire/src/api/client.ts +213 -0
- package/connectors/connect-formsonfire/src/api/example.ts +48 -0
- package/connectors/connect-formsonfire/src/api/index.ts +51 -0
- package/connectors/connect-formsonfire/src/cli/index.ts +254 -0
- package/connectors/connect-formsonfire/src/index.ts +103 -0
- package/connectors/connect-formsonfire/src/types/index.ts +237 -0
- package/connectors/connect-formsonfire/src/utils/auth.ts +274 -0
- package/connectors/connect-formsonfire/src/utils/bulk.ts +212 -0
- package/connectors/connect-formsonfire/src/utils/config.ts +326 -0
- package/connectors/connect-formsonfire/src/utils/output.ts +175 -0
- package/connectors/connect-formsonfire/src/utils/settings.ts +114 -0
- package/connectors/connect-formsonfire/src/utils/storage.ts +198 -0
- package/connectors/connect-formsonfire/tsconfig.json +16 -0
- package/connectors/connect-formstackdocuments/.env.example +11 -0
- package/connectors/connect-formstackdocuments/CLAUDE.md +272 -0
- package/connectors/connect-formstackdocuments/README.md +193 -0
- package/connectors/connect-formstackdocuments/package.json +49 -0
- package/connectors/connect-formstackdocuments/src/api/client.ts +213 -0
- package/connectors/connect-formstackdocuments/src/api/example.ts +48 -0
- package/connectors/connect-formstackdocuments/src/api/index.ts +51 -0
- package/connectors/connect-formstackdocuments/src/cli/index.ts +254 -0
- package/connectors/connect-formstackdocuments/src/index.ts +103 -0
- package/connectors/connect-formstackdocuments/src/types/index.ts +237 -0
- package/connectors/connect-formstackdocuments/src/utils/auth.ts +274 -0
- package/connectors/connect-formstackdocuments/src/utils/bulk.ts +212 -0
- package/connectors/connect-formstackdocuments/src/utils/config.ts +326 -0
- package/connectors/connect-formstackdocuments/src/utils/output.ts +175 -0
- package/connectors/connect-formstackdocuments/src/utils/settings.ts +114 -0
- package/connectors/connect-formstackdocuments/src/utils/storage.ts +198 -0
- package/connectors/connect-formstackdocuments/tsconfig.json +16 -0
- package/connectors/connect-fortinetfortigate/.env.example +11 -0
- package/connectors/connect-fortinetfortigate/CLAUDE.md +272 -0
- package/connectors/connect-fortinetfortigate/README.md +193 -0
- package/connectors/connect-fortinetfortigate/package.json +49 -0
- package/connectors/connect-fortinetfortigate/src/api/client.ts +213 -0
- package/connectors/connect-fortinetfortigate/src/api/example.ts +48 -0
- package/connectors/connect-fortinetfortigate/src/api/index.ts +51 -0
- package/connectors/connect-fortinetfortigate/src/cli/index.ts +254 -0
- package/connectors/connect-fortinetfortigate/src/index.ts +103 -0
- package/connectors/connect-fortinetfortigate/src/types/index.ts +237 -0
- package/connectors/connect-fortinetfortigate/src/utils/auth.ts +274 -0
- package/connectors/connect-fortinetfortigate/src/utils/bulk.ts +212 -0
- package/connectors/connect-fortinetfortigate/src/utils/config.ts +326 -0
- package/connectors/connect-fortinetfortigate/src/utils/output.ts +175 -0
- package/connectors/connect-fortinetfortigate/src/utils/settings.ts +114 -0
- package/connectors/connect-fortinetfortigate/src/utils/storage.ts +198 -0
- package/connectors/connect-fortinetfortigate/tsconfig.json +16 -0
- package/connectors/connect-foursquare/.env.example +11 -0
- package/connectors/connect-foursquare/CLAUDE.md +272 -0
- package/connectors/connect-foursquare/README.md +193 -0
- package/connectors/connect-foursquare/package.json +49 -0
- package/connectors/connect-foursquare/src/api/client.ts +213 -0
- package/connectors/connect-foursquare/src/api/example.ts +48 -0
- package/connectors/connect-foursquare/src/api/index.ts +51 -0
- package/connectors/connect-foursquare/src/cli/index.ts +254 -0
- package/connectors/connect-foursquare/src/index.ts +103 -0
- package/connectors/connect-foursquare/src/types/index.ts +237 -0
- package/connectors/connect-foursquare/src/utils/auth.ts +274 -0
- package/connectors/connect-foursquare/src/utils/bulk.ts +212 -0
- package/connectors/connect-foursquare/src/utils/config.ts +326 -0
- package/connectors/connect-foursquare/src/utils/output.ts +175 -0
- package/connectors/connect-foursquare/src/utils/settings.ts +114 -0
- package/connectors/connect-foursquare/src/utils/storage.ts +198 -0
- package/connectors/connect-foursquare/tsconfig.json +16 -0
- package/connectors/connect-freedictionary/.env.example +11 -0
- package/connectors/connect-freedictionary/CLAUDE.md +272 -0
- package/connectors/connect-freedictionary/README.md +193 -0
- package/connectors/connect-freedictionary/package.json +49 -0
- package/connectors/connect-freedictionary/src/api/client.ts +213 -0
- package/connectors/connect-freedictionary/src/api/example.ts +48 -0
- package/connectors/connect-freedictionary/src/api/index.ts +51 -0
- package/connectors/connect-freedictionary/src/cli/index.ts +254 -0
- package/connectors/connect-freedictionary/src/index.ts +103 -0
- package/connectors/connect-freedictionary/src/types/index.ts +237 -0
- package/connectors/connect-freedictionary/src/utils/auth.ts +274 -0
- package/connectors/connect-freedictionary/src/utils/bulk.ts +212 -0
- package/connectors/connect-freedictionary/src/utils/config.ts +326 -0
- package/connectors/connect-freedictionary/src/utils/output.ts +175 -0
- package/connectors/connect-freedictionary/src/utils/settings.ts +114 -0
- package/connectors/connect-freedictionary/src/utils/storage.ts +198 -0
- package/connectors/connect-freedictionary/tsconfig.json +16 -0
- package/connectors/connect-freshping/.env.example +11 -0
- package/connectors/connect-freshping/CLAUDE.md +272 -0
- package/connectors/connect-freshping/README.md +193 -0
- package/connectors/connect-freshping/package.json +49 -0
- package/connectors/connect-freshping/src/api/client.ts +213 -0
- package/connectors/connect-freshping/src/api/example.ts +48 -0
- package/connectors/connect-freshping/src/api/index.ts +51 -0
- package/connectors/connect-freshping/src/cli/index.ts +254 -0
- package/connectors/connect-freshping/src/index.ts +103 -0
- package/connectors/connect-freshping/src/types/index.ts +237 -0
- package/connectors/connect-freshping/src/utils/auth.ts +274 -0
- package/connectors/connect-freshping/src/utils/bulk.ts +212 -0
- package/connectors/connect-freshping/src/utils/config.ts +326 -0
- package/connectors/connect-freshping/src/utils/output.ts +175 -0
- package/connectors/connect-freshping/src/utils/settings.ts +114 -0
- package/connectors/connect-freshping/src/utils/storage.ts +198 -0
- package/connectors/connect-freshping/tsconfig.json +16 -0
- package/connectors/connect-freshservice/.env.example +11 -0
- package/connectors/connect-freshservice/CLAUDE.md +272 -0
- package/connectors/connect-freshservice/README.md +193 -0
- package/connectors/connect-freshservice/package.json +51 -0
- package/connectors/connect-freshservice/scripts/release.ts +179 -0
- package/connectors/connect-freshservice/src/api/client.ts +213 -0
- package/connectors/connect-freshservice/src/api/example.ts +48 -0
- package/connectors/connect-freshservice/src/api/index.ts +51 -0
- package/connectors/connect-freshservice/src/cli/index.ts +254 -0
- package/connectors/connect-freshservice/src/index.ts +103 -0
- package/connectors/connect-freshservice/src/types/index.ts +237 -0
- package/connectors/connect-freshservice/src/utils/auth.ts +274 -0
- package/connectors/connect-freshservice/src/utils/bulk.ts +212 -0
- package/connectors/connect-freshservice/src/utils/config.ts +326 -0
- package/connectors/connect-freshservice/src/utils/output.ts +175 -0
- package/connectors/connect-freshservice/src/utils/settings.ts +114 -0
- package/connectors/connect-freshservice/src/utils/storage.ts +198 -0
- package/connectors/connect-freshservice/tsconfig.json +16 -0
- package/connectors/connect-freshworkscrm/.env.example +11 -0
- package/connectors/connect-freshworkscrm/CLAUDE.md +272 -0
- package/connectors/connect-freshworkscrm/README.md +193 -0
- package/connectors/connect-freshworkscrm/package.json +51 -0
- package/connectors/connect-freshworkscrm/scripts/release.ts +179 -0
- package/connectors/connect-freshworkscrm/src/api/client.ts +213 -0
- package/connectors/connect-freshworkscrm/src/api/example.ts +48 -0
- package/connectors/connect-freshworkscrm/src/api/index.ts +51 -0
- package/connectors/connect-freshworkscrm/src/cli/index.ts +254 -0
- package/connectors/connect-freshworkscrm/src/index.ts +103 -0
- package/connectors/connect-freshworkscrm/src/types/index.ts +237 -0
- package/connectors/connect-freshworkscrm/src/utils/auth.ts +274 -0
- package/connectors/connect-freshworkscrm/src/utils/bulk.ts +212 -0
- package/connectors/connect-freshworkscrm/src/utils/config.ts +326 -0
- package/connectors/connect-freshworkscrm/src/utils/output.ts +175 -0
- package/connectors/connect-freshworkscrm/src/utils/settings.ts +114 -0
- package/connectors/connect-freshworkscrm/src/utils/storage.ts +198 -0
- package/connectors/connect-freshworkscrm/tsconfig.json +16 -0
- package/connectors/connect-fullcontact/.env.example +11 -0
- package/connectors/connect-fullcontact/CLAUDE.md +272 -0
- package/connectors/connect-fullcontact/README.md +193 -0
- package/connectors/connect-fullcontact/package.json +51 -0
- package/connectors/connect-fullcontact/scripts/release.ts +179 -0
- package/connectors/connect-fullcontact/src/api/client.ts +213 -0
- package/connectors/connect-fullcontact/src/api/example.ts +48 -0
- package/connectors/connect-fullcontact/src/api/index.ts +51 -0
- package/connectors/connect-fullcontact/src/cli/index.ts +254 -0
- package/connectors/connect-fullcontact/src/index.ts +103 -0
- package/connectors/connect-fullcontact/src/types/index.ts +237 -0
- package/connectors/connect-fullcontact/src/utils/auth.ts +274 -0
- package/connectors/connect-fullcontact/src/utils/bulk.ts +212 -0
- package/connectors/connect-fullcontact/src/utils/config.ts +326 -0
- package/connectors/connect-fullcontact/src/utils/output.ts +175 -0
- package/connectors/connect-fullcontact/src/utils/settings.ts +114 -0
- package/connectors/connect-fullcontact/src/utils/storage.ts +198 -0
- package/connectors/connect-fullcontact/tsconfig.json +16 -0
- package/connectors/connect-fusioo/.env.example +11 -0
- package/connectors/connect-fusioo/CLAUDE.md +272 -0
- package/connectors/connect-fusioo/README.md +193 -0
- package/connectors/connect-fusioo/package.json +51 -0
- package/connectors/connect-fusioo/scripts/release.ts +179 -0
- package/connectors/connect-fusioo/src/api/client.ts +213 -0
- package/connectors/connect-fusioo/src/api/example.ts +48 -0
- package/connectors/connect-fusioo/src/api/index.ts +51 -0
- package/connectors/connect-fusioo/src/cli/index.ts +254 -0
- package/connectors/connect-fusioo/src/index.ts +103 -0
- package/connectors/connect-fusioo/src/types/index.ts +237 -0
- package/connectors/connect-fusioo/src/utils/auth.ts +274 -0
- package/connectors/connect-fusioo/src/utils/bulk.ts +212 -0
- package/connectors/connect-fusioo/src/utils/config.ts +326 -0
- package/connectors/connect-fusioo/src/utils/output.ts +175 -0
- package/connectors/connect-fusioo/src/utils/settings.ts +114 -0
- package/connectors/connect-fusioo/src/utils/storage.ts +198 -0
- package/connectors/connect-fusioo/tsconfig.json +16 -0
- package/connectors/connect-gali/.env.example +11 -0
- package/connectors/connect-gali/CLAUDE.md +272 -0
- package/connectors/connect-gali/README.md +193 -0
- package/connectors/connect-gali/package.json +51 -0
- package/connectors/connect-gali/scripts/release.ts +179 -0
- package/connectors/connect-gali/src/api/client.ts +213 -0
- package/connectors/connect-gali/src/api/example.ts +48 -0
- package/connectors/connect-gali/src/api/index.ts +51 -0
- package/connectors/connect-gali/src/cli/index.ts +254 -0
- package/connectors/connect-gali/src/index.ts +103 -0
- package/connectors/connect-gali/src/types/index.ts +237 -0
- package/connectors/connect-gali/src/utils/auth.ts +274 -0
- package/connectors/connect-gali/src/utils/bulk.ts +212 -0
- package/connectors/connect-gali/src/utils/config.ts +326 -0
- package/connectors/connect-gali/src/utils/output.ts +175 -0
- package/connectors/connect-gali/src/utils/settings.ts +114 -0
- package/connectors/connect-gali/src/utils/storage.ts +198 -0
- package/connectors/connect-gali/tsconfig.json +16 -0
- package/connectors/connect-gatekeeper/.env.example +11 -0
- package/connectors/connect-gatekeeper/CLAUDE.md +272 -0
- package/connectors/connect-gatekeeper/README.md +193 -0
- package/connectors/connect-gatekeeper/package.json +51 -0
- package/connectors/connect-gatekeeper/scripts/release.ts +179 -0
- package/connectors/connect-gatekeeper/src/api/client.ts +213 -0
- package/connectors/connect-gatekeeper/src/api/example.ts +48 -0
- package/connectors/connect-gatekeeper/src/api/index.ts +51 -0
- package/connectors/connect-gatekeeper/src/cli/index.ts +254 -0
- package/connectors/connect-gatekeeper/src/index.ts +103 -0
- package/connectors/connect-gatekeeper/src/types/index.ts +237 -0
- package/connectors/connect-gatekeeper/src/utils/auth.ts +274 -0
- package/connectors/connect-gatekeeper/src/utils/bulk.ts +212 -0
- package/connectors/connect-gatekeeper/src/utils/config.ts +326 -0
- package/connectors/connect-gatekeeper/src/utils/output.ts +175 -0
- package/connectors/connect-gatekeeper/src/utils/settings.ts +114 -0
- package/connectors/connect-gatekeeper/src/utils/storage.ts +198 -0
- package/connectors/connect-gatekeeper/tsconfig.json +16 -0
- package/connectors/connect-genderapi/.env.example +11 -0
- package/connectors/connect-genderapi/CLAUDE.md +272 -0
- package/connectors/connect-genderapi/README.md +193 -0
- package/connectors/connect-genderapi/package.json +51 -0
- package/connectors/connect-genderapi/scripts/release.ts +179 -0
- package/connectors/connect-genderapi/src/api/client.ts +213 -0
- package/connectors/connect-genderapi/src/api/example.ts +48 -0
- package/connectors/connect-genderapi/src/api/index.ts +51 -0
- package/connectors/connect-genderapi/src/cli/index.ts +254 -0
- package/connectors/connect-genderapi/src/index.ts +103 -0
- package/connectors/connect-genderapi/src/types/index.ts +237 -0
- package/connectors/connect-genderapi/src/utils/auth.ts +274 -0
- package/connectors/connect-genderapi/src/utils/bulk.ts +212 -0
- package/connectors/connect-genderapi/src/utils/config.ts +326 -0
- package/connectors/connect-genderapi/src/utils/output.ts +175 -0
- package/connectors/connect-genderapi/src/utils/settings.ts +114 -0
- package/connectors/connect-genderapi/src/utils/storage.ts +198 -0
- package/connectors/connect-genderapi/tsconfig.json +16 -0
- package/connectors/connect-getresponse/.env.example +11 -0
- package/connectors/connect-getresponse/CLAUDE.md +272 -0
- package/connectors/connect-getresponse/README.md +193 -0
- package/connectors/connect-getresponse/package.json +51 -0
- package/connectors/connect-getresponse/scripts/release.ts +179 -0
- package/connectors/connect-getresponse/src/api/client.ts +213 -0
- package/connectors/connect-getresponse/src/api/example.ts +48 -0
- package/connectors/connect-getresponse/src/api/index.ts +51 -0
- package/connectors/connect-getresponse/src/cli/index.ts +254 -0
- package/connectors/connect-getresponse/src/index.ts +103 -0
- package/connectors/connect-getresponse/src/types/index.ts +237 -0
- package/connectors/connect-getresponse/src/utils/auth.ts +274 -0
- package/connectors/connect-getresponse/src/utils/bulk.ts +212 -0
- package/connectors/connect-getresponse/src/utils/config.ts +326 -0
- package/connectors/connect-getresponse/src/utils/output.ts +175 -0
- package/connectors/connect-getresponse/src/utils/settings.ts +114 -0
- package/connectors/connect-getresponse/src/utils/storage.ts +198 -0
- package/connectors/connect-getresponse/tsconfig.json +16 -0
- package/connectors/connect-getscreenshot/.env.example +11 -0
- package/connectors/connect-getscreenshot/CLAUDE.md +272 -0
- package/connectors/connect-getscreenshot/README.md +193 -0
- package/connectors/connect-getscreenshot/package.json +51 -0
- package/connectors/connect-getscreenshot/scripts/release.ts +179 -0
- package/connectors/connect-getscreenshot/src/api/client.ts +213 -0
- package/connectors/connect-getscreenshot/src/api/example.ts +48 -0
- package/connectors/connect-getscreenshot/src/api/index.ts +51 -0
- package/connectors/connect-getscreenshot/src/cli/index.ts +254 -0
- package/connectors/connect-getscreenshot/src/index.ts +103 -0
- package/connectors/connect-getscreenshot/src/types/index.ts +237 -0
- package/connectors/connect-getscreenshot/src/utils/auth.ts +274 -0
- package/connectors/connect-getscreenshot/src/utils/bulk.ts +212 -0
- package/connectors/connect-getscreenshot/src/utils/config.ts +326 -0
- package/connectors/connect-getscreenshot/src/utils/output.ts +175 -0
- package/connectors/connect-getscreenshot/src/utils/settings.ts +114 -0
- package/connectors/connect-getscreenshot/src/utils/storage.ts +198 -0
- package/connectors/connect-getscreenshot/tsconfig.json +16 -0
- package/connectors/connect-ghost/.env.example +11 -0
- package/connectors/connect-ghost/CLAUDE.md +272 -0
- package/connectors/connect-ghost/README.md +193 -0
- package/connectors/connect-ghost/package.json +51 -0
- package/connectors/connect-ghost/scripts/release.ts +179 -0
- package/connectors/connect-ghost/src/api/client.ts +213 -0
- package/connectors/connect-ghost/src/api/example.ts +48 -0
- package/connectors/connect-ghost/src/api/index.ts +51 -0
- package/connectors/connect-ghost/src/cli/index.ts +254 -0
- package/connectors/connect-ghost/src/index.ts +103 -0
- package/connectors/connect-ghost/src/types/index.ts +237 -0
- package/connectors/connect-ghost/src/utils/auth.ts +274 -0
- package/connectors/connect-ghost/src/utils/bulk.ts +212 -0
- package/connectors/connect-ghost/src/utils/config.ts +326 -0
- package/connectors/connect-ghost/src/utils/output.ts +175 -0
- package/connectors/connect-ghost/src/utils/settings.ts +114 -0
- package/connectors/connect-ghost/src/utils/storage.ts +198 -0
- package/connectors/connect-ghost/tsconfig.json +16 -0
- package/connectors/connect-gitea/.env.example +11 -0
- package/connectors/connect-gitea/CLAUDE.md +272 -0
- package/connectors/connect-gitea/README.md +39 -0
- package/connectors/connect-gitea/package.json +49 -0
- package/connectors/connect-gitea/src/api/client.ts +213 -0
- package/connectors/connect-gitea/src/api/example.ts +48 -0
- package/connectors/connect-gitea/src/api/index.ts +51 -0
- package/connectors/connect-gitea/src/cli/index.ts +254 -0
- package/connectors/connect-gitea/src/index.ts +103 -0
- package/connectors/connect-gitea/src/types/index.ts +237 -0
- package/connectors/connect-gitea/src/utils/auth.ts +274 -0
- package/connectors/connect-gitea/src/utils/bulk.ts +212 -0
- package/connectors/connect-gitea/src/utils/config.ts +326 -0
- package/connectors/connect-gitea/src/utils/output.ts +175 -0
- package/connectors/connect-gitea/src/utils/settings.ts +114 -0
- package/connectors/connect-gitea/src/utils/storage.ts +198 -0
- package/connectors/connect-gitea/tsconfig.json +16 -0
- package/connectors/connect-gleap/.env.example +11 -0
- package/connectors/connect-gleap/CLAUDE.md +272 -0
- package/connectors/connect-gleap/README.md +39 -0
- package/connectors/connect-gleap/package.json +49 -0
- package/connectors/connect-gleap/src/api/client.ts +213 -0
- package/connectors/connect-gleap/src/api/example.ts +48 -0
- package/connectors/connect-gleap/src/api/index.ts +51 -0
- package/connectors/connect-gleap/src/cli/index.ts +254 -0
- package/connectors/connect-gleap/src/index.ts +103 -0
- package/connectors/connect-gleap/src/types/index.ts +237 -0
- package/connectors/connect-gleap/src/utils/auth.ts +274 -0
- package/connectors/connect-gleap/src/utils/bulk.ts +212 -0
- package/connectors/connect-gleap/src/utils/config.ts +326 -0
- package/connectors/connect-gleap/src/utils/output.ts +175 -0
- package/connectors/connect-gleap/src/utils/settings.ts +114 -0
- package/connectors/connect-gleap/src/utils/storage.ts +198 -0
- package/connectors/connect-gleap/tsconfig.json +16 -0
- package/connectors/connect-gocanvas/.env.example +11 -0
- package/connectors/connect-gocanvas/CLAUDE.md +272 -0
- package/connectors/connect-gocanvas/README.md +39 -0
- package/connectors/connect-gocanvas/package.json +49 -0
- package/connectors/connect-gocanvas/src/api/client.ts +213 -0
- package/connectors/connect-gocanvas/src/api/example.ts +48 -0
- package/connectors/connect-gocanvas/src/api/index.ts +51 -0
- package/connectors/connect-gocanvas/src/cli/index.ts +254 -0
- package/connectors/connect-gocanvas/src/index.ts +103 -0
- package/connectors/connect-gocanvas/src/types/index.ts +237 -0
- package/connectors/connect-gocanvas/src/utils/auth.ts +274 -0
- package/connectors/connect-gocanvas/src/utils/bulk.ts +212 -0
- package/connectors/connect-gocanvas/src/utils/config.ts +326 -0
- package/connectors/connect-gocanvas/src/utils/output.ts +175 -0
- package/connectors/connect-gocanvas/src/utils/settings.ts +114 -0
- package/connectors/connect-gocanvas/src/utils/storage.ts +198 -0
- package/connectors/connect-gocanvas/tsconfig.json +16 -0
- package/connectors/connect-godaddy/.env.example +11 -0
- package/connectors/connect-godaddy/CLAUDE.md +272 -0
- package/connectors/connect-godaddy/README.md +39 -0
- package/connectors/connect-godaddy/package.json +49 -0
- package/connectors/connect-godaddy/src/api/client.ts +213 -0
- package/connectors/connect-godaddy/src/api/example.ts +48 -0
- package/connectors/connect-godaddy/src/api/index.ts +51 -0
- package/connectors/connect-godaddy/src/cli/index.ts +254 -0
- package/connectors/connect-godaddy/src/index.ts +103 -0
- package/connectors/connect-godaddy/src/types/index.ts +237 -0
- package/connectors/connect-godaddy/src/utils/auth.ts +274 -0
- package/connectors/connect-godaddy/src/utils/bulk.ts +212 -0
- package/connectors/connect-godaddy/src/utils/config.ts +326 -0
- package/connectors/connect-godaddy/src/utils/output.ts +175 -0
- package/connectors/connect-godaddy/src/utils/settings.ts +114 -0
- package/connectors/connect-godaddy/src/utils/storage.ts +198 -0
- package/connectors/connect-godaddy/tsconfig.json +16 -0
- package/connectors/connect-gong/.env.example +11 -0
- package/connectors/connect-gong/CLAUDE.md +272 -0
- package/connectors/connect-gong/README.md +39 -0
- package/connectors/connect-gong/package.json +49 -0
- package/connectors/connect-gong/src/api/client.ts +213 -0
- package/connectors/connect-gong/src/api/example.ts +48 -0
- package/connectors/connect-gong/src/api/index.ts +51 -0
- package/connectors/connect-gong/src/cli/index.ts +254 -0
- package/connectors/connect-gong/src/index.ts +103 -0
- package/connectors/connect-gong/src/types/index.ts +237 -0
- package/connectors/connect-gong/src/utils/auth.ts +274 -0
- package/connectors/connect-gong/src/utils/bulk.ts +212 -0
- package/connectors/connect-gong/src/utils/config.ts +326 -0
- package/connectors/connect-gong/src/utils/output.ts +175 -0
- package/connectors/connect-gong/src/utils/settings.ts +114 -0
- package/connectors/connect-gong/src/utils/storage.ts +198 -0
- package/connectors/connect-gong/tsconfig.json +16 -0
- package/connectors/connect-googleads/CLAUDE.md +55 -0
- package/connectors/connect-googleads/README.md +39 -0
- package/connectors/connect-googleads/package.json +52 -0
- package/connectors/connect-googleads/src/api/adGroups.ts +170 -0
- package/connectors/connect-googleads/src/api/ads.ts +171 -0
- package/connectors/connect-googleads/src/api/campaigns.ts +252 -0
- package/connectors/connect-googleads/src/api/client.ts +214 -0
- package/connectors/connect-googleads/src/api/index.ts +76 -0
- package/connectors/connect-googleads/src/api/keywords.ts +308 -0
- package/connectors/connect-googleads/src/api/reports.ts +430 -0
- package/connectors/connect-googleads/src/cli/index.ts +1259 -0
- package/connectors/connect-googleads/src/index.ts +40 -0
- package/connectors/connect-googleads/src/types/index.ts +433 -0
- package/connectors/connect-googleads/src/utils/auth.ts +208 -0
- package/connectors/connect-googleads/src/utils/config.ts +342 -0
- package/connectors/connect-googleads/src/utils/output.ts +62 -0
- package/connectors/connect-googleads/tsconfig.json +16 -0
- package/connectors/connect-googleanalytics/.env.example +11 -0
- package/connectors/connect-googleanalytics/CLAUDE.md +272 -0
- package/connectors/connect-googleanalytics/README.md +39 -0
- package/connectors/connect-googleanalytics/package.json +49 -0
- package/connectors/connect-googleanalytics/src/api/client.ts +213 -0
- package/connectors/connect-googleanalytics/src/api/example.ts +48 -0
- package/connectors/connect-googleanalytics/src/api/index.ts +51 -0
- package/connectors/connect-googleanalytics/src/cli/index.ts +254 -0
- package/connectors/connect-googleanalytics/src/index.ts +103 -0
- package/connectors/connect-googleanalytics/src/types/index.ts +237 -0
- package/connectors/connect-googleanalytics/src/utils/auth.ts +274 -0
- package/connectors/connect-googleanalytics/src/utils/bulk.ts +212 -0
- package/connectors/connect-googleanalytics/src/utils/config.ts +326 -0
- package/connectors/connect-googleanalytics/src/utils/output.ts +175 -0
- package/connectors/connect-googleanalytics/src/utils/settings.ts +114 -0
- package/connectors/connect-googleanalytics/src/utils/storage.ts +198 -0
- package/connectors/connect-googleanalytics/tsconfig.json +16 -0
- package/connectors/connect-googlebigquery/.env.example +11 -0
- package/connectors/connect-googlebigquery/CLAUDE.md +272 -0
- package/connectors/connect-googlebigquery/README.md +39 -0
- package/connectors/connect-googlebigquery/package.json +49 -0
- package/connectors/connect-googlebigquery/src/api/client.ts +213 -0
- package/connectors/connect-googlebigquery/src/api/example.ts +48 -0
- package/connectors/connect-googlebigquery/src/api/index.ts +51 -0
- package/connectors/connect-googlebigquery/src/cli/index.ts +254 -0
- package/connectors/connect-googlebigquery/src/index.ts +103 -0
- package/connectors/connect-googlebigquery/src/types/index.ts +237 -0
- package/connectors/connect-googlebigquery/src/utils/auth.ts +274 -0
- package/connectors/connect-googlebigquery/src/utils/bulk.ts +212 -0
- package/connectors/connect-googlebigquery/src/utils/config.ts +326 -0
- package/connectors/connect-googlebigquery/src/utils/output.ts +175 -0
- package/connectors/connect-googlebigquery/src/utils/settings.ts +114 -0
- package/connectors/connect-googlebigquery/src/utils/storage.ts +198 -0
- package/connectors/connect-googlebigquery/tsconfig.json +16 -0
- package/connectors/connect-googlebooks/.env.example +11 -0
- package/connectors/connect-googlebooks/CLAUDE.md +272 -0
- package/connectors/connect-googlebooks/README.md +39 -0
- package/connectors/connect-googlebooks/package.json +49 -0
- package/connectors/connect-googlebooks/src/api/client.ts +213 -0
- package/connectors/connect-googlebooks/src/api/example.ts +48 -0
- package/connectors/connect-googlebooks/src/api/index.ts +51 -0
- package/connectors/connect-googlebooks/src/cli/index.ts +254 -0
- package/connectors/connect-googlebooks/src/index.ts +103 -0
- package/connectors/connect-googlebooks/src/types/index.ts +237 -0
- package/connectors/connect-googlebooks/src/utils/auth.ts +274 -0
- package/connectors/connect-googlebooks/src/utils/bulk.ts +212 -0
- package/connectors/connect-googlebooks/src/utils/config.ts +326 -0
- package/connectors/connect-googlebooks/src/utils/output.ts +175 -0
- package/connectors/connect-googlebooks/src/utils/settings.ts +114 -0
- package/connectors/connect-googlebooks/src/utils/storage.ts +198 -0
- package/connectors/connect-googlebooks/tsconfig.json +16 -0
- package/connectors/connect-googlebusinessprofile/.env.example +11 -0
- package/connectors/connect-googlebusinessprofile/CLAUDE.md +272 -0
- package/connectors/connect-googlebusinessprofile/README.md +39 -0
- package/connectors/connect-googlebusinessprofile/package.json +49 -0
- package/connectors/connect-googlebusinessprofile/src/api/client.ts +213 -0
- package/connectors/connect-googlebusinessprofile/src/api/example.ts +48 -0
- package/connectors/connect-googlebusinessprofile/src/api/index.ts +51 -0
- package/connectors/connect-googlebusinessprofile/src/cli/index.ts +254 -0
- package/connectors/connect-googlebusinessprofile/src/index.ts +103 -0
- package/connectors/connect-googlebusinessprofile/src/types/index.ts +237 -0
- package/connectors/connect-googlebusinessprofile/src/utils/auth.ts +274 -0
- package/connectors/connect-googlebusinessprofile/src/utils/bulk.ts +212 -0
- package/connectors/connect-googlebusinessprofile/src/utils/config.ts +326 -0
- package/connectors/connect-googlebusinessprofile/src/utils/output.ts +175 -0
- package/connectors/connect-googlebusinessprofile/src/utils/settings.ts +114 -0
- package/connectors/connect-googlebusinessprofile/src/utils/storage.ts +198 -0
- package/connectors/connect-googlebusinessprofile/tsconfig.json +16 -0
- package/connectors/connect-googlechat/.env.example +11 -0
- package/connectors/connect-googlechat/CLAUDE.md +272 -0
- package/connectors/connect-googlechat/README.md +194 -0
- package/connectors/connect-googlechat/package.json +53 -0
- package/connectors/connect-googlechat/scripts/release.ts +179 -0
- package/connectors/connect-googlechat/src/api/client.ts +213 -0
- package/connectors/connect-googlechat/src/api/example.ts +48 -0
- package/connectors/connect-googlechat/src/api/index.ts +51 -0
- package/connectors/connect-googlechat/src/cli/index.ts +254 -0
- package/connectors/connect-googlechat/src/index.ts +103 -0
- package/connectors/connect-googlechat/src/types/index.ts +237 -0
- package/connectors/connect-googlechat/src/utils/auth.ts +274 -0
- package/connectors/connect-googlechat/src/utils/bulk.ts +212 -0
- package/connectors/connect-googlechat/src/utils/config.ts +326 -0
- package/connectors/connect-googlechat/src/utils/output.ts +175 -0
- package/connectors/connect-googlechat/src/utils/settings.ts +114 -0
- package/connectors/connect-googlechat/src/utils/storage.ts +198 -0
- package/connectors/connect-googlechat/tsconfig.json +16 -0
- package/connectors/connect-googleforms/.env.example +11 -0
- package/connectors/connect-googleforms/CLAUDE.md +272 -0
- package/connectors/connect-googleforms/README.md +194 -0
- package/connectors/connect-googleforms/package.json +53 -0
- package/connectors/connect-googleforms/scripts/release.ts +179 -0
- package/connectors/connect-googleforms/src/api/client.ts +213 -0
- package/connectors/connect-googleforms/src/api/example.ts +48 -0
- package/connectors/connect-googleforms/src/api/index.ts +51 -0
- package/connectors/connect-googleforms/src/cli/index.ts +254 -0
- package/connectors/connect-googleforms/src/index.ts +103 -0
- package/connectors/connect-googleforms/src/types/index.ts +237 -0
- package/connectors/connect-googleforms/src/utils/auth.ts +274 -0
- package/connectors/connect-googleforms/src/utils/bulk.ts +212 -0
- package/connectors/connect-googleforms/src/utils/config.ts +326 -0
- package/connectors/connect-googleforms/src/utils/output.ts +175 -0
- package/connectors/connect-googleforms/src/utils/settings.ts +114 -0
- package/connectors/connect-googleforms/src/utils/storage.ts +198 -0
- package/connectors/connect-googleforms/tsconfig.json +16 -0
- package/connectors/connect-googleperspective/.env.example +11 -0
- package/connectors/connect-googleperspective/CLAUDE.md +272 -0
- package/connectors/connect-googleperspective/README.md +194 -0
- package/connectors/connect-googleperspective/package.json +54 -0
- package/connectors/connect-googleperspective/scripts/release.ts +179 -0
- package/connectors/connect-googleperspective/src/api/client.ts +213 -0
- package/connectors/connect-googleperspective/src/api/example.ts +48 -0
- package/connectors/connect-googleperspective/src/api/index.ts +51 -0
- package/connectors/connect-googleperspective/src/cli/index.ts +254 -0
- package/connectors/connect-googleperspective/src/index.ts +103 -0
- package/connectors/connect-googleperspective/src/types/index.ts +237 -0
- package/connectors/connect-googleperspective/src/utils/auth.ts +274 -0
- package/connectors/connect-googleperspective/src/utils/bulk.ts +212 -0
- package/connectors/connect-googleperspective/src/utils/config.ts +326 -0
- package/connectors/connect-googleperspective/src/utils/output.ts +175 -0
- package/connectors/connect-googleperspective/src/utils/settings.ts +114 -0
- package/connectors/connect-googleperspective/src/utils/storage.ts +198 -0
- package/connectors/connect-googleperspective/tsconfig.json +16 -0
- package/connectors/connect-googlephotos/.env.example +4 -0
- package/connectors/connect-googlephotos/CLAUDE.md +107 -0
- package/connectors/connect-googlephotos/README.md +194 -0
- package/connectors/connect-googlephotos/package.json +54 -0
- package/connectors/connect-googlephotos/scripts/publish.ts +74 -0
- package/connectors/connect-googlephotos/src/api/albums.ts +180 -0
- package/connectors/connect-googlephotos/src/api/client.ts +159 -0
- package/connectors/connect-googlephotos/src/api/index.ts +53 -0
- package/connectors/connect-googlephotos/src/api/media.ts +238 -0
- package/connectors/connect-googlephotos/src/api/upload.ts +204 -0
- package/connectors/connect-googlephotos/src/cli/index.ts +754 -0
- package/connectors/connect-googlephotos/src/index.ts +35 -0
- package/connectors/connect-googlephotos/src/types/index.ts +336 -0
- package/connectors/connect-googlephotos/src/utils/auth.ts +258 -0
- package/connectors/connect-googlephotos/src/utils/config.ts +419 -0
- package/connectors/connect-googlephotos/src/utils/output.ts +239 -0
- package/connectors/connect-googlephotos/tsconfig.json +15 -0
- package/dist/index.js +238 -0
- package/package.json +1 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, unlinkSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { getConfigDir } from './config';
|
|
4
|
+
|
|
5
|
+
// ============================================
|
|
6
|
+
// Generic Data Storage Utility
|
|
7
|
+
// ============================================
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Base interface for storable entities
|
|
11
|
+
* All stored entities should have an id field
|
|
12
|
+
*/
|
|
13
|
+
export interface Storable {
|
|
14
|
+
id: string;
|
|
15
|
+
createdAt?: string;
|
|
16
|
+
updatedAt?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Get the storage directory for an entity type
|
|
21
|
+
*/
|
|
22
|
+
function getStorageDir(entityType: string): string {
|
|
23
|
+
const dir = join(getConfigDir(), 'data', entityType);
|
|
24
|
+
if (!existsSync(dir)) {
|
|
25
|
+
mkdirSync(dir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
return dir;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Convert an ID to a safe filename
|
|
32
|
+
*/
|
|
33
|
+
function idToFilename(id: string): string {
|
|
34
|
+
return id.toLowerCase().replace(/[^a-z0-9]/g, '_') + '.json';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Get the file path for an entity
|
|
39
|
+
*/
|
|
40
|
+
function getEntityPath(entityType: string, id: string): string {
|
|
41
|
+
return join(getStorageDir(entityType), idToFilename(id));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Save an entity to storage
|
|
46
|
+
*/
|
|
47
|
+
export function saveEntity<T extends Storable>(entityType: string, entity: T): void {
|
|
48
|
+
const filepath = getEntityPath(entityType, entity.id);
|
|
49
|
+
const now = new Date().toISOString();
|
|
50
|
+
|
|
51
|
+
const existing = getEntity<T>(entityType, entity.id);
|
|
52
|
+
|
|
53
|
+
const data: T = {
|
|
54
|
+
...entity,
|
|
55
|
+
createdAt: existing?.createdAt || now,
|
|
56
|
+
updatedAt: now,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
writeFileSync(filepath, JSON.stringify(data, null, 2));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Get an entity by ID
|
|
64
|
+
*/
|
|
65
|
+
export function getEntity<T extends Storable>(entityType: string, id: string): T | null {
|
|
66
|
+
const filepath = getEntityPath(entityType, id);
|
|
67
|
+
|
|
68
|
+
if (!existsSync(filepath)) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const content = readFileSync(filepath, 'utf-8');
|
|
74
|
+
return JSON.parse(content) as T;
|
|
75
|
+
} catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Check if an entity exists
|
|
82
|
+
*/
|
|
83
|
+
export function entityExists(entityType: string, id: string): boolean {
|
|
84
|
+
return existsSync(getEntityPath(entityType, id));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Get all entities of a type
|
|
89
|
+
*/
|
|
90
|
+
export function getAllEntities<T extends Storable>(entityType: string): T[] {
|
|
91
|
+
const storageDir = getStorageDir(entityType);
|
|
92
|
+
const files = readdirSync(storageDir).filter(f => f.endsWith('.json'));
|
|
93
|
+
|
|
94
|
+
const entities: T[] = [];
|
|
95
|
+
for (const file of files) {
|
|
96
|
+
try {
|
|
97
|
+
const content = readFileSync(join(storageDir, file), 'utf-8');
|
|
98
|
+
entities.push(JSON.parse(content) as T);
|
|
99
|
+
} catch {
|
|
100
|
+
// Skip invalid files
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return entities.sort((a, b) => a.id.localeCompare(b.id));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Delete an entity
|
|
109
|
+
*/
|
|
110
|
+
export function deleteEntity(entityType: string, id: string): boolean {
|
|
111
|
+
const filepath = getEntityPath(entityType, id);
|
|
112
|
+
|
|
113
|
+
if (existsSync(filepath)) {
|
|
114
|
+
unlinkSync(filepath);
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Search entities by a predicate function
|
|
122
|
+
*/
|
|
123
|
+
export function searchEntities<T extends Storable>(
|
|
124
|
+
entityType: string,
|
|
125
|
+
predicate: (entity: T) => boolean
|
|
126
|
+
): T[] {
|
|
127
|
+
const all = getAllEntities<T>(entityType);
|
|
128
|
+
return all.filter(predicate);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Search entities by text match across all string fields
|
|
133
|
+
*/
|
|
134
|
+
export function searchEntitiesByText<T extends Storable>(
|
|
135
|
+
entityType: string,
|
|
136
|
+
query: string,
|
|
137
|
+
fields?: (keyof T)[]
|
|
138
|
+
): T[] {
|
|
139
|
+
const all = getAllEntities<T>(entityType);
|
|
140
|
+
const q = query.toLowerCase();
|
|
141
|
+
|
|
142
|
+
return all.filter(entity => {
|
|
143
|
+
const searchFields = fields || (Object.keys(entity) as (keyof T)[]);
|
|
144
|
+
return searchFields.some(field => {
|
|
145
|
+
const value = entity[field];
|
|
146
|
+
if (typeof value === 'string') {
|
|
147
|
+
return value.toLowerCase().includes(q);
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Count entities of a type
|
|
156
|
+
*/
|
|
157
|
+
export function countEntities(entityType: string): number {
|
|
158
|
+
const storageDir = getStorageDir(entityType);
|
|
159
|
+
if (!existsSync(storageDir)) {
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
return readdirSync(storageDir).filter(f => f.endsWith('.json')).length;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Clear all entities of a type
|
|
167
|
+
*/
|
|
168
|
+
export function clearEntities(entityType: string): number {
|
|
169
|
+
const storageDir = getStorageDir(entityType);
|
|
170
|
+
if (!existsSync(storageDir)) {
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const files = readdirSync(storageDir).filter(f => f.endsWith('.json'));
|
|
175
|
+
for (const file of files) {
|
|
176
|
+
unlinkSync(join(storageDir, file));
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return files.length;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Create a typed storage helper for a specific entity type
|
|
184
|
+
* This provides a cleaner API for working with a single entity type
|
|
185
|
+
*/
|
|
186
|
+
export function createStorage<T extends Storable>(entityType: string) {
|
|
187
|
+
return {
|
|
188
|
+
save: (entity: T) => saveEntity<T>(entityType, entity),
|
|
189
|
+
get: (id: string) => getEntity<T>(entityType, id),
|
|
190
|
+
exists: (id: string) => entityExists(entityType, id),
|
|
191
|
+
getAll: () => getAllEntities<T>(entityType),
|
|
192
|
+
delete: (id: string) => deleteEntity(entityType, id),
|
|
193
|
+
search: (predicate: (entity: T) => boolean) => searchEntities<T>(entityType, predicate),
|
|
194
|
+
searchByText: (query: string, fields?: (keyof T)[]) => searchEntitiesByText<T>(entityType, query, fields),
|
|
195
|
+
count: () => countEntities(entityType),
|
|
196
|
+
clear: () => clearEntities(entityType),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ESNext",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"declaration": true,
|
|
10
|
+
"outDir": "./dist",
|
|
11
|
+
"rootDir": "./src",
|
|
12
|
+
"types": ["bun-types"]
|
|
13
|
+
},
|
|
14
|
+
"include": ["src/**/*"],
|
|
15
|
+
"exclude": ["node_modules", "dist", "bin"]
|
|
16
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Google Photos Connector
|
|
2
|
+
|
|
3
|
+
A TypeScript CLI tool and library for interacting with the Google Photos Library API.
|
|
4
|
+
|
|
5
|
+
## Development
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Install dependencies
|
|
9
|
+
bun install
|
|
10
|
+
|
|
11
|
+
# Run in development mode
|
|
12
|
+
bun run dev <command>
|
|
13
|
+
|
|
14
|
+
# Build for production
|
|
15
|
+
bun run build
|
|
16
|
+
|
|
17
|
+
# Type check
|
|
18
|
+
bun run typecheck
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
1. Create a Google Cloud project and enable the Photos Library API
|
|
24
|
+
2. Create OAuth 2.0 credentials (Desktop app type)
|
|
25
|
+
3. Configure credentials:
|
|
26
|
+
```bash
|
|
27
|
+
connect-googlephotos config set-credentials <client-id> <client-secret>
|
|
28
|
+
```
|
|
29
|
+
4. Login:
|
|
30
|
+
```bash
|
|
31
|
+
connect-googlephotos auth login
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Multi-Profile Support
|
|
35
|
+
|
|
36
|
+
The connector supports multiple Google accounts via profiles:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# List profiles
|
|
40
|
+
connect-googlephotos profiles list
|
|
41
|
+
|
|
42
|
+
# Switch profile
|
|
43
|
+
connect-googlephotos profiles switch <name>
|
|
44
|
+
|
|
45
|
+
# Use profile for single command
|
|
46
|
+
connect-googlephotos -p <profile> media list
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Profiles are stored in `~/.connect/connect-googlephotos/profiles/`.
|
|
50
|
+
|
|
51
|
+
## Commands
|
|
52
|
+
|
|
53
|
+
### Authentication
|
|
54
|
+
- `auth login` - Login via OAuth2
|
|
55
|
+
- `auth status` - Check auth status
|
|
56
|
+
- `auth logout` - Clear tokens
|
|
57
|
+
|
|
58
|
+
### Configuration
|
|
59
|
+
- `config set-credentials <id> <secret>` - Set OAuth credentials
|
|
60
|
+
- `config show` - Show current config
|
|
61
|
+
- `config clear` - Clear all config
|
|
62
|
+
|
|
63
|
+
### Albums
|
|
64
|
+
- `albums list` - List all albums
|
|
65
|
+
- `albums get <id>` - Get album details
|
|
66
|
+
- `albums create <title>` - Create new album
|
|
67
|
+
- `albums share <id>` - Share an album
|
|
68
|
+
- `albums contents <id>` - List items in album
|
|
69
|
+
|
|
70
|
+
### Media
|
|
71
|
+
- `media list` - List media items
|
|
72
|
+
- `media get <id>` - Get item details
|
|
73
|
+
- `media search` - Search with filters
|
|
74
|
+
- `media download <id>` - Download item
|
|
75
|
+
- `media url <id>` - Get download URL
|
|
76
|
+
|
|
77
|
+
### Upload
|
|
78
|
+
- `upload file <path>` - Upload single file
|
|
79
|
+
- `upload dir <path>` - Upload directory
|
|
80
|
+
- `upload supported` - List supported file types
|
|
81
|
+
|
|
82
|
+
## API Usage
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { GooglePhotos } from '@hasna/connect-googlephotos';
|
|
86
|
+
|
|
87
|
+
const photos = GooglePhotos.create();
|
|
88
|
+
|
|
89
|
+
// List albums
|
|
90
|
+
const albums = await photos.albums.listAll();
|
|
91
|
+
|
|
92
|
+
// Get media items
|
|
93
|
+
const items = await photos.media.list();
|
|
94
|
+
|
|
95
|
+
// Upload a file
|
|
96
|
+
const item = await photos.upload.uploadAndCreate('./photo.jpg');
|
|
97
|
+
|
|
98
|
+
// Search favorites
|
|
99
|
+
const favorites = await photos.media.getFavorites();
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Google Photos API Limitations
|
|
103
|
+
|
|
104
|
+
- Can only edit/delete items created by this app
|
|
105
|
+
- Upload quota: 75MB photos, 10GB videos
|
|
106
|
+
- API rate limits apply
|
|
107
|
+
- Some features require specific scopes
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# connect-googlephotos
|
|
2
|
+
|
|
3
|
+
A TypeScript CLI and library for the Google Photos Library API with OAuth2 authentication and multi-profile support.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Global install
|
|
9
|
+
bun install -g @hasna/connect-googlephotos
|
|
10
|
+
|
|
11
|
+
# Or use with bunx
|
|
12
|
+
bunx @hasna/connect-googlephotos
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
### 1. Get Google Cloud Credentials
|
|
18
|
+
|
|
19
|
+
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
|
|
20
|
+
2. Create a project or select an existing one
|
|
21
|
+
3. Enable the **Photos Library API**
|
|
22
|
+
4. Go to **Credentials** → **Create Credentials** → **OAuth client ID**
|
|
23
|
+
5. Select **Desktop app** as the application type
|
|
24
|
+
6. Download the credentials
|
|
25
|
+
|
|
26
|
+
### 2. Configure the CLI
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Set your OAuth credentials
|
|
30
|
+
connect-googlephotos config set-credentials <client-id> <client-secret>
|
|
31
|
+
|
|
32
|
+
# Login (opens browser)
|
|
33
|
+
connect-googlephotos auth login
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3. Use the CLI
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# List your albums
|
|
40
|
+
connect-googlephotos albums list
|
|
41
|
+
|
|
42
|
+
# List recent photos
|
|
43
|
+
connect-googlephotos media list
|
|
44
|
+
|
|
45
|
+
# Search for selfies
|
|
46
|
+
connect-googlephotos media search --category SELFIES
|
|
47
|
+
|
|
48
|
+
# Download a photo
|
|
49
|
+
connect-googlephotos media download <media-id> -o photo.jpg
|
|
50
|
+
|
|
51
|
+
# Upload a photo
|
|
52
|
+
connect-googlephotos upload file photo.jpg
|
|
53
|
+
|
|
54
|
+
# Upload a directory
|
|
55
|
+
connect-googlephotos upload dir ./vacation-photos --album <album-id>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Multi-Profile Support
|
|
59
|
+
|
|
60
|
+
Manage multiple Google accounts:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# List all profiles
|
|
64
|
+
connect-googlephotos profiles list
|
|
65
|
+
|
|
66
|
+
# Show profile details
|
|
67
|
+
connect-googlephotos profiles show
|
|
68
|
+
|
|
69
|
+
# Switch to a different profile
|
|
70
|
+
connect-googlephotos profiles switch myprofile
|
|
71
|
+
|
|
72
|
+
# Use a specific profile for one command
|
|
73
|
+
connect-googlephotos -p work albums list
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Commands
|
|
77
|
+
|
|
78
|
+
### Authentication
|
|
79
|
+
|
|
80
|
+
| Command | Description |
|
|
81
|
+
|---------|-------------|
|
|
82
|
+
| `auth login` | Login via OAuth2 (opens browser) |
|
|
83
|
+
| `auth status` | Check authentication status |
|
|
84
|
+
| `auth logout` | Clear stored tokens |
|
|
85
|
+
|
|
86
|
+
### Configuration
|
|
87
|
+
|
|
88
|
+
| Command | Description |
|
|
89
|
+
|---------|-------------|
|
|
90
|
+
| `config set-credentials <id> <secret>` | Set OAuth credentials |
|
|
91
|
+
| `config show` | Show current configuration |
|
|
92
|
+
| `config clear` | Clear all configuration |
|
|
93
|
+
|
|
94
|
+
### Albums
|
|
95
|
+
|
|
96
|
+
| Command | Description |
|
|
97
|
+
|---------|-------------|
|
|
98
|
+
| `albums list` | List all albums |
|
|
99
|
+
| `albums get <id>` | Get album details |
|
|
100
|
+
| `albums create <title>` | Create a new album |
|
|
101
|
+
| `albums share <id>` | Share an album |
|
|
102
|
+
| `albums unshare <id>` | Unshare an album |
|
|
103
|
+
| `albums contents <id>` | List items in an album |
|
|
104
|
+
|
|
105
|
+
### Media
|
|
106
|
+
|
|
107
|
+
| Command | Description |
|
|
108
|
+
|---------|-------------|
|
|
109
|
+
| `media list` | List media items |
|
|
110
|
+
| `media get <id>` | Get media item details |
|
|
111
|
+
| `media search` | Search with filters |
|
|
112
|
+
| `media download <id>` | Download a media item |
|
|
113
|
+
| `media url <id>` | Get download URL |
|
|
114
|
+
|
|
115
|
+
### Upload
|
|
116
|
+
|
|
117
|
+
| Command | Description |
|
|
118
|
+
|---------|-------------|
|
|
119
|
+
| `upload file <path>` | Upload a single file |
|
|
120
|
+
| `upload dir <path>` | Upload all files from directory |
|
|
121
|
+
| `upload supported` | List supported file types |
|
|
122
|
+
|
|
123
|
+
## Programmatic Usage
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { GooglePhotos } from '@hasna/connect-googlephotos';
|
|
127
|
+
|
|
128
|
+
const photos = GooglePhotos.create();
|
|
129
|
+
|
|
130
|
+
// List albums
|
|
131
|
+
const albums = await photos.albums.listAll();
|
|
132
|
+
console.log(`Found ${albums.length} albums`);
|
|
133
|
+
|
|
134
|
+
// Get media items in an album
|
|
135
|
+
const items = await photos.media.getInAlbum(albums[0].id);
|
|
136
|
+
|
|
137
|
+
// Search for photos by category
|
|
138
|
+
const selfies = await photos.media.searchByCategory(['SELFIES']);
|
|
139
|
+
|
|
140
|
+
// Search favorites
|
|
141
|
+
const favorites = await photos.media.getFavorites();
|
|
142
|
+
|
|
143
|
+
// Upload a photo
|
|
144
|
+
const uploaded = await photos.upload.uploadAndCreate('./photo.jpg', {
|
|
145
|
+
description: 'My vacation photo',
|
|
146
|
+
albumId: 'album-id',
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Download a photo
|
|
150
|
+
const buffer = await photos.media.download(items[0]);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Configuration Storage
|
|
154
|
+
|
|
155
|
+
Configuration is stored in `~/.connect/connect-googlephotos/`:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
~/.connect/connect-googlephotos/
|
|
159
|
+
├── credentials.json # OAuth client credentials (shared)
|
|
160
|
+
├── current_profile # Current active profile
|
|
161
|
+
└── profiles/
|
|
162
|
+
├── default/
|
|
163
|
+
│ ├── config.json # Profile config
|
|
164
|
+
│ └── tokens.json # OAuth tokens
|
|
165
|
+
└── work/
|
|
166
|
+
├── config.json
|
|
167
|
+
└── tokens.json
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Environment Variables
|
|
171
|
+
|
|
172
|
+
| Variable | Description |
|
|
173
|
+
|----------|-------------|
|
|
174
|
+
| `GOOGLE_PHOTOS_CLIENT_ID` | OAuth client ID |
|
|
175
|
+
| `GOOGLE_PHOTOS_CLIENT_SECRET` | OAuth client secret |
|
|
176
|
+
| `GOOGLE_PHOTOS_ACCESS_TOKEN` | Access token (optional override) |
|
|
177
|
+
| `GOOGLE_PHOTOS_REFRESH_TOKEN` | Refresh token (optional override) |
|
|
178
|
+
|
|
179
|
+
## Supported File Types
|
|
180
|
+
|
|
181
|
+
**Images:** JPG, JPEG, PNG, GIF, WebP, HEIC, HEIF, BMP, TIFF, RAW, ICO
|
|
182
|
+
|
|
183
|
+
**Videos:** MP4, MOV, AVI, MKV, WebM, M4V, 3GP, MPG, MPEG, WMV
|
|
184
|
+
|
|
185
|
+
## API Limitations
|
|
186
|
+
|
|
187
|
+
- Can only edit/delete media items created by this app
|
|
188
|
+
- Maximum photo size: 75 MB
|
|
189
|
+
- Maximum video size: 10 GB
|
|
190
|
+
- API rate limits apply
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
Apache-2.0
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hasna/connect-googlephotos",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Google Photos API connector CLI - A TypeScript wrapper for Google Photos with OAuth2 authentication",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"connect-googlephotos": "./bin/index.js"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "bun build ./src/index.ts --outdir ./dist --target bun && bun build ./src/cli/index.ts --outdir ./bin --target bun",
|
|
19
|
+
"dev": "bun run ./src/cli/index.ts",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"prepublishOnly": "bun run build",
|
|
22
|
+
"release": "bun run scripts/release.ts",
|
|
23
|
+
"release:dry": "bun run scripts/release.ts --dry-run"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"google-photos",
|
|
27
|
+
"google",
|
|
28
|
+
"photos",
|
|
29
|
+
"api",
|
|
30
|
+
"connector",
|
|
31
|
+
"cli",
|
|
32
|
+
"typescript",
|
|
33
|
+
"bun",
|
|
34
|
+
"oauth2"
|
|
35
|
+
],
|
|
36
|
+
"author": "Hasna",
|
|
37
|
+
"license": "Apache-2.0",
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/bun": "latest",
|
|
40
|
+
"typescript": "^5"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"commander": "^12.1.0",
|
|
44
|
+
"chalk": "^5.3.0",
|
|
45
|
+
"open": "^10.1.0"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"bun": ">=1.0.0"
|
|
49
|
+
},
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "git+https://github.com/hasna/connectors.git"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { readFileSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
|
|
5
|
+
const args = process.argv.slice(2);
|
|
6
|
+
const dryRun = args.includes('--dry-run');
|
|
7
|
+
const bumpType = args.find(arg => ['patch', 'minor', 'major'].includes(arg)) || 'patch';
|
|
8
|
+
|
|
9
|
+
const packagePath = join(import.meta.dir, '..', 'package.json');
|
|
10
|
+
const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
11
|
+
|
|
12
|
+
// Parse current version
|
|
13
|
+
const [major, minor, patch] = pkg.version.split('.').map(Number);
|
|
14
|
+
|
|
15
|
+
// Bump version
|
|
16
|
+
let newVersion: string;
|
|
17
|
+
switch (bumpType) {
|
|
18
|
+
case 'major':
|
|
19
|
+
newVersion = `${major + 1}.0.0`;
|
|
20
|
+
break;
|
|
21
|
+
case 'minor':
|
|
22
|
+
newVersion = `${major}.${minor + 1}.0`;
|
|
23
|
+
break;
|
|
24
|
+
case 'patch':
|
|
25
|
+
default:
|
|
26
|
+
newVersion = `${major}.${minor}.${patch + 1}`;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
console.log(`📦 ${pkg.name}`);
|
|
31
|
+
console.log(` Current version: ${pkg.version}`);
|
|
32
|
+
console.log(` New version: ${newVersion}`);
|
|
33
|
+
console.log(` Bump type: ${bumpType}`);
|
|
34
|
+
console.log('');
|
|
35
|
+
|
|
36
|
+
if (dryRun) {
|
|
37
|
+
console.log('🔍 Dry run - no changes will be made');
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Update package.json
|
|
42
|
+
pkg.version = newVersion;
|
|
43
|
+
writeFileSync(packagePath, JSON.stringify(pkg, null, 2) + '\n');
|
|
44
|
+
console.log('✅ Updated package.json');
|
|
45
|
+
|
|
46
|
+
// Build
|
|
47
|
+
console.log('📦 Building...');
|
|
48
|
+
const buildProc = Bun.spawnSync(['bun', 'run', 'build'], {
|
|
49
|
+
cwd: join(import.meta.dir, '..'),
|
|
50
|
+
stdout: 'inherit',
|
|
51
|
+
stderr: 'inherit',
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
if (buildProc.exitCode !== 0) {
|
|
55
|
+
console.error('❌ Build failed');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
console.log('✅ Build complete');
|
|
59
|
+
|
|
60
|
+
// Publish
|
|
61
|
+
console.log('📤 Publishing...');
|
|
62
|
+
const publishProc = Bun.spawnSync(['npm', 'publish'], {
|
|
63
|
+
cwd: join(import.meta.dir, '..'),
|
|
64
|
+
stdout: 'inherit',
|
|
65
|
+
stderr: 'inherit',
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
if (publishProc.exitCode !== 0) {
|
|
69
|
+
console.error('❌ Publish failed');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
console.log('');
|
|
74
|
+
console.log(`✅ Published ${pkg.name}@${newVersion}`);
|