appwrite-cli 13.0.0-rc.2 → 13.0.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/{npm-publish.yml → publish.yml} +1 -1
- package/CHANGELOG.md +106 -101
- package/LICENSE.md +2 -2
- package/README.md +36 -59
- package/cli.ts +152 -0
- package/dist/bundle.cjs +4613 -3653
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +145 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -142
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +7 -6
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/commands/config.d.ts +562 -0
- package/dist/lib/commands/config.d.ts.map +1 -0
- package/dist/lib/commands/config.js +416 -0
- package/dist/lib/commands/config.js.map +1 -0
- package/dist/lib/commands/db.d.ts +34 -0
- package/dist/lib/commands/db.d.ts.map +1 -0
- package/dist/lib/commands/db.js +247 -0
- package/dist/lib/commands/db.js.map +1 -0
- package/dist/lib/commands/errors.d.ts +68 -0
- package/dist/lib/commands/errors.d.ts.map +1 -0
- package/dist/lib/commands/errors.js +72 -0
- package/dist/lib/commands/errors.js.map +1 -0
- package/dist/lib/commands/init.d.ts.map +1 -1
- package/dist/lib/commands/init.js +15 -14
- package/dist/lib/commands/init.js.map +1 -1
- package/dist/lib/commands/pull.d.ts +104 -2
- package/dist/lib/commands/pull.d.ts.map +1 -1
- package/dist/lib/commands/pull.js +470 -281
- package/dist/lib/commands/pull.js.map +1 -1
- package/dist/lib/commands/push.d.ts +106 -0
- package/dist/lib/commands/push.d.ts.map +1 -1
- package/dist/lib/commands/push.js +1257 -1628
- package/dist/lib/commands/push.js.map +1 -1
- package/dist/lib/commands/run.js +1 -1
- package/dist/lib/commands/run.js.map +1 -1
- package/dist/lib/commands/schema.d.ts +59 -0
- package/dist/lib/commands/schema.d.ts.map +1 -0
- package/dist/lib/commands/schema.js +86 -0
- package/dist/lib/commands/schema.js.map +1 -0
- package/dist/lib/commands/services/account.d.ts.map +1 -1
- package/dist/lib/commands/services/account.js +86 -64
- package/dist/lib/commands/services/account.js.map +1 -1
- package/dist/lib/commands/services/console.d.ts.map +1 -1
- package/dist/lib/commands/services/console.js +4 -17
- package/dist/lib/commands/services/console.js.map +1 -1
- package/dist/lib/commands/services/databases.d.ts.map +1 -1
- package/dist/lib/commands/services/databases.js +160 -152
- package/dist/lib/commands/services/databases.js.map +1 -1
- package/dist/lib/commands/services/functions.d.ts.map +1 -1
- package/dist/lib/commands/services/functions.js +41 -33
- package/dist/lib/commands/services/functions.js.map +1 -1
- package/dist/lib/commands/services/graphql.d.ts.map +1 -1
- package/dist/lib/commands/services/graphql.js +3 -3
- package/dist/lib/commands/services/graphql.js.map +1 -1
- package/dist/lib/commands/services/health.d.ts.map +1 -1
- package/dist/lib/commands/services/health.js +24 -24
- package/dist/lib/commands/services/health.js.map +1 -1
- package/dist/lib/commands/services/locale.d.ts.map +1 -1
- package/dist/lib/commands/services/locale.js +9 -9
- package/dist/lib/commands/services/locale.js.map +1 -1
- package/dist/lib/commands/services/messaging.d.ts.map +1 -1
- package/dist/lib/commands/services/messaging.js +59 -59
- package/dist/lib/commands/services/messaging.js.map +1 -1
- package/dist/lib/commands/services/migrations.d.ts.map +1 -1
- package/dist/lib/commands/services/migrations.js +19 -19
- package/dist/lib/commands/services/migrations.js.map +1 -1
- package/dist/lib/commands/services/project.d.ts.map +1 -1
- package/dist/lib/commands/services/project.js +8 -8
- package/dist/lib/commands/services/project.js.map +1 -1
- package/dist/lib/commands/services/projects.d.ts.map +1 -1
- package/dist/lib/commands/services/projects.js +64 -64
- package/dist/lib/commands/services/projects.js.map +1 -1
- package/dist/lib/commands/services/proxy.d.ts.map +1 -1
- package/dist/lib/commands/services/proxy.js +11 -11
- package/dist/lib/commands/services/proxy.js.map +1 -1
- package/dist/lib/commands/services/sites.d.ts.map +1 -1
- package/dist/lib/commands/services/sites.js +41 -33
- package/dist/lib/commands/services/sites.js.map +1 -1
- package/dist/lib/commands/services/storage.d.ts.map +1 -1
- package/dist/lib/commands/services/storage.js +38 -16
- package/dist/lib/commands/services/storage.js.map +1 -1
- package/dist/lib/commands/services/tables-db.d.ts +3 -0
- package/dist/lib/commands/services/tables-db.d.ts.map +1 -0
- package/dist/lib/commands/services/{tablesdb.js → tables-db.js} +171 -163
- package/dist/lib/commands/services/tables-db.js.map +1 -0
- package/dist/lib/commands/services/teams.d.ts.map +1 -1
- package/dist/lib/commands/services/teams.js +16 -16
- package/dist/lib/commands/services/teams.js.map +1 -1
- package/dist/lib/commands/services/tokens.d.ts.map +1 -1
- package/dist/lib/commands/services/tokens.js +6 -6
- package/dist/lib/commands/services/tokens.js.map +1 -1
- package/dist/lib/commands/services/users.d.ts.map +1 -1
- package/dist/lib/commands/services/users.js +54 -54
- package/dist/lib/commands/services/users.js.map +1 -1
- package/dist/lib/commands/services/vcs.d.ts.map +1 -1
- package/dist/lib/commands/services/vcs.js +13 -13
- package/dist/lib/commands/services/vcs.js.map +1 -1
- package/dist/lib/commands/types.d.ts.map +1 -1
- package/dist/lib/commands/types.js +1 -1
- package/dist/lib/commands/types.js.map +1 -1
- package/dist/lib/commands/update.d.ts.map +1 -1
- package/dist/lib/commands/update.js +9 -8
- package/dist/lib/commands/update.js.map +1 -1
- package/dist/lib/commands/utils/attributes.d.ts +47 -0
- package/dist/lib/commands/utils/attributes.d.ts.map +1 -0
- package/dist/lib/commands/utils/attributes.js +514 -0
- package/dist/lib/commands/utils/attributes.js.map +1 -0
- package/dist/lib/commands/utils/change-approval.d.ts +25 -0
- package/dist/lib/commands/utils/change-approval.d.ts.map +1 -0
- package/dist/lib/commands/utils/change-approval.js +129 -0
- package/dist/lib/commands/utils/change-approval.js.map +1 -0
- package/dist/lib/commands/utils/database-sync.d.ts +10 -0
- package/dist/lib/commands/utils/database-sync.d.ts.map +1 -0
- package/dist/lib/commands/utils/database-sync.js +136 -0
- package/dist/lib/commands/utils/database-sync.js.map +1 -0
- package/dist/lib/commands/utils/deployment.d.ts +34 -0
- package/dist/lib/commands/utils/deployment.d.ts.map +1 -0
- package/dist/lib/commands/utils/deployment.js +109 -0
- package/dist/lib/commands/utils/deployment.js.map +1 -0
- package/dist/lib/commands/utils/error-formatter.d.ts +19 -0
- package/dist/lib/commands/utils/error-formatter.d.ts.map +1 -0
- package/dist/lib/commands/utils/error-formatter.js +333 -0
- package/dist/lib/commands/utils/error-formatter.js.map +1 -0
- package/dist/lib/commands/utils/pools.d.ts +16 -0
- package/dist/lib/commands/utils/pools.d.ts.map +1 -0
- package/dist/lib/commands/utils/pools.js +198 -0
- package/dist/lib/commands/utils/pools.js.map +1 -0
- package/dist/lib/config.d.ts +27 -26
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +8 -45
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +14 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +19 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/emulation/docker.d.ts +4 -4
- package/dist/lib/emulation/docker.d.ts.map +1 -1
- package/dist/lib/emulation/docker.js +80 -67
- package/dist/lib/emulation/docker.js.map +1 -1
- package/dist/lib/parser.d.ts.map +1 -1
- package/dist/lib/parser.js +11 -10
- package/dist/lib/parser.js.map +1 -1
- package/dist/lib/questions.d.ts.map +1 -1
- package/dist/lib/questions.js +20 -20
- package/dist/lib/questions.js.map +1 -1
- package/dist/lib/sdks.d.ts.map +1 -1
- package/dist/lib/sdks.js +10 -11
- package/dist/lib/sdks.js.map +1 -1
- package/dist/lib/types.d.ts +0 -214
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +42 -2
- package/dist/lib/utils.js.map +1 -1
- package/dist/package.json +12 -11
- package/docs/examples/account/create-anonymous-session.md +1 -0
- package/docs/examples/account/create-email-password-session.md +3 -0
- package/docs/examples/account/create-email-token.md +3 -0
- package/docs/examples/account/create-email-verification.md +2 -0
- package/docs/examples/account/create-jwt.md +1 -0
- package/docs/examples/account/create-magic-url-token.md +3 -0
- package/docs/examples/account/create-mfa-authenticator.md +2 -0
- package/docs/examples/account/create-mfa-challenge.md +2 -0
- package/docs/examples/account/create-mfa-recovery-codes.md +1 -0
- package/docs/examples/account/create-o-auth-2-session.md +2 -0
- package/docs/examples/account/create-o-auth-2-token.md +2 -0
- package/docs/examples/account/create-phone-token.md +3 -0
- package/docs/examples/account/create-phone-verification.md +1 -0
- package/docs/examples/account/create-push-target.md +3 -0
- package/docs/examples/account/create-recovery.md +3 -0
- package/docs/examples/account/create-session.md +3 -0
- package/docs/examples/account/create-verification.md +2 -0
- package/docs/examples/account/create.md +4 -0
- package/docs/examples/account/delete-identity.md +2 -0
- package/docs/examples/account/delete-mfa-authenticator.md +2 -0
- package/docs/examples/account/delete-push-target.md +2 -0
- package/docs/examples/account/delete-session.md +2 -0
- package/docs/examples/account/delete-sessions.md +1 -0
- package/docs/examples/account/delete.md +1 -0
- package/docs/examples/account/get-mfa-recovery-codes.md +1 -0
- package/docs/examples/account/get-prefs.md +1 -0
- package/docs/examples/account/get-session.md +2 -0
- package/docs/examples/account/get.md +1 -0
- package/docs/examples/account/list-identities.md +1 -0
- package/docs/examples/account/list-logs.md +1 -0
- package/docs/examples/account/list-mfa-factors.md +1 -0
- package/docs/examples/account/list-sessions.md +1 -0
- package/docs/examples/account/update-email-verification.md +3 -0
- package/docs/examples/account/update-email.md +3 -0
- package/docs/examples/account/update-magic-url-session.md +3 -0
- package/docs/examples/account/update-mfa-authenticator.md +3 -0
- package/docs/examples/account/update-mfa-challenge.md +3 -0
- package/docs/examples/account/update-mfa-recovery-codes.md +1 -0
- package/docs/examples/account/update-mfa.md +2 -0
- package/docs/examples/account/update-name.md +2 -0
- package/docs/examples/account/update-password.md +2 -0
- package/docs/examples/account/update-phone-session.md +3 -0
- package/docs/examples/account/update-phone-verification.md +3 -0
- package/docs/examples/account/update-phone.md +3 -0
- package/docs/examples/account/update-prefs.md +2 -0
- package/docs/examples/account/update-push-target.md +3 -0
- package/docs/examples/account/update-recovery.md +4 -0
- package/docs/examples/account/update-session.md +2 -0
- package/docs/examples/account/update-status.md +1 -0
- package/docs/examples/account/update-verification.md +3 -0
- package/docs/examples/console/get-resource.md +3 -0
- package/docs/examples/console/variables.md +1 -0
- package/docs/examples/databases/create-boolean-attribute.md +5 -0
- package/docs/examples/databases/create-collection.md +4 -0
- package/docs/examples/databases/create-datetime-attribute.md +5 -0
- package/docs/examples/databases/create-document.md +5 -0
- package/docs/examples/databases/create-documents.md +4 -0
- package/docs/examples/databases/create-email-attribute.md +5 -0
- package/docs/examples/databases/create-enum-attribute.md +6 -0
- package/docs/examples/databases/create-float-attribute.md +5 -0
- package/docs/examples/databases/create-index.md +6 -0
- package/docs/examples/databases/create-integer-attribute.md +5 -0
- package/docs/examples/databases/create-ip-attribute.md +5 -0
- package/docs/examples/databases/create-line-attribute.md +5 -0
- package/docs/examples/databases/create-operations.md +2 -0
- package/docs/examples/databases/create-point-attribute.md +5 -0
- package/docs/examples/databases/create-polygon-attribute.md +5 -0
- package/docs/examples/databases/create-relationship-attribute.md +5 -0
- package/docs/examples/databases/create-string-attribute.md +6 -0
- package/docs/examples/databases/create-transaction.md +1 -0
- package/docs/examples/databases/create-url-attribute.md +5 -0
- package/docs/examples/databases/create.md +3 -0
- package/docs/examples/databases/decrement-document-attribute.md +5 -0
- package/docs/examples/databases/delete-attribute.md +4 -0
- package/docs/examples/databases/delete-collection.md +3 -0
- package/docs/examples/databases/delete-document.md +4 -0
- package/docs/examples/databases/delete-documents.md +3 -0
- package/docs/examples/databases/delete-index.md +4 -0
- package/docs/examples/databases/delete-transaction.md +2 -0
- package/docs/examples/databases/delete.md +2 -0
- package/docs/examples/databases/get-attribute.md +4 -0
- package/docs/examples/databases/get-collection-usage.md +3 -0
- package/docs/examples/databases/get-collection.md +3 -0
- package/docs/examples/databases/get-document.md +4 -0
- package/docs/examples/databases/get-index.md +4 -0
- package/docs/examples/databases/get-transaction.md +2 -0
- package/docs/examples/databases/get-usage.md +2 -0
- package/docs/examples/databases/get.md +2 -0
- package/docs/examples/databases/increment-document-attribute.md +5 -0
- package/docs/examples/databases/list-attributes.md +3 -0
- package/docs/examples/databases/list-collection-logs.md +3 -0
- package/docs/examples/databases/list-collections.md +2 -0
- package/docs/examples/databases/list-document-logs.md +4 -0
- package/docs/examples/databases/list-documents.md +3 -0
- package/docs/examples/databases/list-indexes.md +3 -0
- package/docs/examples/databases/list-logs.md +2 -0
- package/docs/examples/databases/list-transactions.md +1 -0
- package/docs/examples/databases/list-usage.md +1 -0
- package/docs/examples/databases/list.md +1 -0
- package/docs/examples/databases/update-boolean-attribute.md +6 -0
- package/docs/examples/databases/update-collection.md +4 -0
- package/docs/examples/databases/update-datetime-attribute.md +6 -0
- package/docs/examples/databases/update-document.md +4 -0
- package/docs/examples/databases/update-documents.md +3 -0
- package/docs/examples/databases/update-email-attribute.md +6 -0
- package/docs/examples/databases/update-enum-attribute.md +7 -0
- package/docs/examples/databases/update-float-attribute.md +6 -0
- package/docs/examples/databases/update-integer-attribute.md +6 -0
- package/docs/examples/databases/update-ip-attribute.md +6 -0
- package/docs/examples/databases/update-line-attribute.md +5 -0
- package/docs/examples/databases/update-point-attribute.md +5 -0
- package/docs/examples/databases/update-polygon-attribute.md +5 -0
- package/docs/examples/databases/update-relationship-attribute.md +4 -0
- package/docs/examples/databases/update-string-attribute.md +6 -0
- package/docs/examples/databases/update-transaction.md +2 -0
- package/docs/examples/databases/update-url-attribute.md +6 -0
- package/docs/examples/databases/update.md +3 -0
- package/docs/examples/databases/upsert-document.md +4 -0
- package/docs/examples/databases/upsert-documents.md +4 -0
- package/docs/examples/functions/create-deployment.md +4 -0
- package/docs/examples/functions/create-duplicate-deployment.md +3 -0
- package/docs/examples/functions/create-execution.md +2 -0
- package/docs/examples/functions/create-template-deployment.md +7 -0
- package/docs/examples/functions/create-variable.md +4 -0
- package/docs/examples/functions/create-vcs-deployment.md +4 -0
- package/docs/examples/functions/create.md +4 -0
- package/docs/examples/functions/delete-deployment.md +3 -0
- package/docs/examples/functions/delete-execution.md +3 -0
- package/docs/examples/functions/delete-variable.md +3 -0
- package/docs/examples/functions/delete.md +2 -0
- package/docs/examples/functions/get-deployment-download.md +3 -0
- package/docs/examples/functions/get-deployment.md +3 -0
- package/docs/examples/functions/get-execution.md +3 -0
- package/docs/examples/functions/get-template.md +2 -0
- package/docs/examples/functions/get-usage.md +2 -0
- package/docs/examples/functions/get-variable.md +3 -0
- package/docs/examples/functions/get.md +2 -0
- package/docs/examples/functions/list-deployments.md +2 -0
- package/docs/examples/functions/list-executions.md +2 -0
- package/docs/examples/functions/list-runtimes.md +1 -0
- package/docs/examples/functions/list-specifications.md +1 -0
- package/docs/examples/functions/list-templates.md +1 -0
- package/docs/examples/functions/list-usage.md +1 -0
- package/docs/examples/functions/list-variables.md +2 -0
- package/docs/examples/functions/list.md +1 -0
- package/docs/examples/functions/update-deployment-status.md +3 -0
- package/docs/examples/functions/update-function-deployment.md +3 -0
- package/docs/examples/functions/update-variable.md +4 -0
- package/docs/examples/functions/update.md +3 -0
- package/docs/examples/graphql/mutation.md +2 -0
- package/docs/examples/graphql/query.md +2 -0
- package/docs/examples/health/get-antivirus.md +1 -0
- package/docs/examples/health/get-cache.md +1 -0
- package/docs/examples/health/get-certificate.md +1 -0
- package/docs/examples/health/get-db.md +1 -0
- package/docs/examples/health/get-failed-jobs.md +2 -0
- package/docs/examples/health/get-pub-sub.md +1 -0
- package/docs/examples/health/get-queue-builds.md +1 -0
- package/docs/examples/health/get-queue-certificates.md +1 -0
- package/docs/examples/health/get-queue-databases.md +1 -0
- package/docs/examples/health/get-queue-deletes.md +1 -0
- package/docs/examples/health/get-queue-functions.md +1 -0
- package/docs/examples/health/get-queue-logs.md +1 -0
- package/docs/examples/health/get-queue-mails.md +1 -0
- package/docs/examples/health/get-queue-messaging.md +1 -0
- package/docs/examples/health/get-queue-migrations.md +1 -0
- package/docs/examples/health/get-queue-stats-resources.md +1 -0
- package/docs/examples/health/get-queue-usage.md +1 -0
- package/docs/examples/health/get-queue-webhooks.md +1 -0
- package/docs/examples/health/get-storage-local.md +1 -0
- package/docs/examples/health/get-storage.md +1 -0
- package/docs/examples/health/get-time.md +1 -0
- package/docs/examples/health/get.md +1 -0
- package/docs/examples/locale/get.md +1 -0
- package/docs/examples/locale/list-codes.md +1 -0
- package/docs/examples/locale/list-continents.md +1 -0
- package/docs/examples/locale/list-countries-eu.md +1 -0
- package/docs/examples/locale/list-countries-phones.md +1 -0
- package/docs/examples/locale/list-countries.md +1 -0
- package/docs/examples/locale/list-currencies.md +1 -0
- package/docs/examples/locale/list-languages.md +1 -0
- package/docs/examples/messaging/create-apns-provider.md +3 -0
- package/docs/examples/messaging/create-email.md +4 -0
- package/docs/examples/messaging/create-fcm-provider.md +3 -0
- package/docs/examples/messaging/create-mailgun-provider.md +3 -0
- package/docs/examples/messaging/create-msg-91-provider.md +3 -0
- package/docs/examples/messaging/create-push.md +2 -0
- package/docs/examples/messaging/create-resend-provider.md +3 -0
- package/docs/examples/messaging/create-sendgrid-provider.md +3 -0
- package/docs/examples/messaging/create-sms.md +3 -0
- package/docs/examples/messaging/create-smtp-provider.md +4 -0
- package/docs/examples/messaging/create-subscriber.md +4 -0
- package/docs/examples/messaging/create-telesign-provider.md +3 -0
- package/docs/examples/messaging/create-textmagic-provider.md +3 -0
- package/docs/examples/messaging/create-topic.md +3 -0
- package/docs/examples/messaging/create-twilio-provider.md +3 -0
- package/docs/examples/messaging/create-vonage-provider.md +3 -0
- package/docs/examples/messaging/delete-provider.md +2 -0
- package/docs/examples/messaging/delete-subscriber.md +3 -0
- package/docs/examples/messaging/delete-topic.md +2 -0
- package/docs/examples/messaging/delete.md +2 -0
- package/docs/examples/messaging/get-message.md +2 -0
- package/docs/examples/messaging/get-provider.md +2 -0
- package/docs/examples/messaging/get-subscriber.md +3 -0
- package/docs/examples/messaging/get-topic.md +2 -0
- package/docs/examples/messaging/list-message-logs.md +2 -0
- package/docs/examples/messaging/list-messages.md +1 -0
- package/docs/examples/messaging/list-provider-logs.md +2 -0
- package/docs/examples/messaging/list-providers.md +1 -0
- package/docs/examples/messaging/list-subscriber-logs.md +2 -0
- package/docs/examples/messaging/list-subscribers.md +2 -0
- package/docs/examples/messaging/list-targets.md +2 -0
- package/docs/examples/messaging/list-topic-logs.md +2 -0
- package/docs/examples/messaging/list-topics.md +1 -0
- package/docs/examples/messaging/update-apns-provider.md +2 -0
- package/docs/examples/messaging/update-email.md +2 -0
- package/docs/examples/messaging/update-fcm-provider.md +2 -0
- package/docs/examples/messaging/update-mailgun-provider.md +2 -0
- package/docs/examples/messaging/update-msg-91-provider.md +2 -0
- package/docs/examples/messaging/update-push.md +2 -0
- package/docs/examples/messaging/update-resend-provider.md +2 -0
- package/docs/examples/messaging/update-sendgrid-provider.md +2 -0
- package/docs/examples/messaging/update-sms.md +2 -0
- package/docs/examples/messaging/update-smtp-provider.md +2 -0
- package/docs/examples/messaging/update-telesign-provider.md +2 -0
- package/docs/examples/messaging/update-textmagic-provider.md +2 -0
- package/docs/examples/messaging/update-topic.md +2 -0
- package/docs/examples/messaging/update-twilio-provider.md +2 -0
- package/docs/examples/messaging/update-vonage-provider.md +2 -0
- package/docs/examples/migrations/create-appwrite-migration.md +5 -0
- package/docs/examples/migrations/create-csv-export.md +3 -0
- package/docs/examples/migrations/create-csv-import.md +4 -0
- package/docs/examples/migrations/create-firebase-migration.md +3 -0
- package/docs/examples/migrations/create-n-host-migration.md +8 -0
- package/docs/examples/migrations/create-supabase-migration.md +7 -0
- package/docs/examples/migrations/delete.md +2 -0
- package/docs/examples/migrations/get-appwrite-report.md +5 -0
- package/docs/examples/migrations/get-firebase-report.md +3 -0
- package/docs/examples/migrations/get-n-host-report.md +8 -0
- package/docs/examples/migrations/get-supabase-report.md +7 -0
- package/docs/examples/migrations/get.md +2 -0
- package/docs/examples/migrations/list.md +1 -0
- package/docs/examples/migrations/retry.md +2 -0
- package/docs/examples/project/create-variable.md +3 -0
- package/docs/examples/project/delete-variable.md +2 -0
- package/docs/examples/project/get-usage.md +3 -0
- package/docs/examples/project/get-variable.md +2 -0
- package/docs/examples/project/list-variables.md +1 -0
- package/docs/examples/project/update-variable.md +3 -0
- package/docs/examples/projects/create-dev-key.md +4 -0
- package/docs/examples/projects/create-jwt.md +3 -0
- package/docs/examples/projects/create-key.md +4 -0
- package/docs/examples/projects/create-platform.md +4 -0
- package/docs/examples/projects/create-smtp-test.md +6 -0
- package/docs/examples/projects/create-webhook.md +6 -0
- package/docs/examples/projects/create.md +4 -0
- package/docs/examples/projects/delete-dev-key.md +3 -0
- package/docs/examples/projects/delete-email-template.md +4 -0
- package/docs/examples/projects/delete-key.md +3 -0
- package/docs/examples/projects/delete-platform.md +3 -0
- package/docs/examples/projects/delete-sms-template.md +4 -0
- package/docs/examples/projects/delete-webhook.md +3 -0
- package/docs/examples/projects/delete.md +2 -0
- package/docs/examples/projects/get-dev-key.md +3 -0
- package/docs/examples/projects/get-email-template.md +4 -0
- package/docs/examples/projects/get-key.md +3 -0
- package/docs/examples/projects/get-platform.md +3 -0
- package/docs/examples/projects/get-sms-template.md +4 -0
- package/docs/examples/projects/get-webhook.md +3 -0
- package/docs/examples/projects/get.md +2 -0
- package/docs/examples/projects/list-dev-keys.md +2 -0
- package/docs/examples/projects/list-keys.md +2 -0
- package/docs/examples/projects/list-platforms.md +2 -0
- package/docs/examples/projects/list-webhooks.md +2 -0
- package/docs/examples/projects/list.md +1 -0
- package/docs/examples/projects/update-api-status-all.md +3 -0
- package/docs/examples/projects/update-api-status.md +4 -0
- package/docs/examples/projects/update-auth-duration.md +3 -0
- package/docs/examples/projects/update-auth-limit.md +3 -0
- package/docs/examples/projects/update-auth-password-dictionary.md +3 -0
- package/docs/examples/projects/update-auth-password-history.md +3 -0
- package/docs/examples/projects/update-auth-sessions-limit.md +3 -0
- package/docs/examples/projects/update-auth-status.md +4 -0
- package/docs/examples/projects/update-dev-key.md +5 -0
- package/docs/examples/projects/update-email-template.md +6 -0
- package/docs/examples/projects/update-key.md +5 -0
- package/docs/examples/projects/update-memberships-privacy.md +5 -0
- package/docs/examples/projects/update-mock-numbers.md +3 -0
- package/docs/examples/projects/update-o-auth-2.md +3 -0
- package/docs/examples/projects/update-personal-data-check.md +3 -0
- package/docs/examples/projects/update-platform.md +4 -0
- package/docs/examples/projects/update-service-status-all.md +3 -0
- package/docs/examples/projects/update-service-status.md +4 -0
- package/docs/examples/projects/update-session-alerts.md +3 -0
- package/docs/examples/projects/update-session-invalidation.md +3 -0
- package/docs/examples/projects/update-sms-template.md +5 -0
- package/docs/examples/projects/update-smtp.md +3 -0
- package/docs/examples/projects/update-team.md +3 -0
- package/docs/examples/projects/update-webhook-signature.md +3 -0
- package/docs/examples/projects/update-webhook.md +7 -0
- package/docs/examples/projects/update.md +3 -0
- package/docs/examples/proxy/create-api-rule.md +2 -0
- package/docs/examples/proxy/create-function-rule.md +3 -0
- package/docs/examples/proxy/create-redirect-rule.md +6 -0
- package/docs/examples/proxy/create-site-rule.md +3 -0
- package/docs/examples/proxy/delete-rule.md +2 -0
- package/docs/examples/proxy/get-rule.md +2 -0
- package/docs/examples/proxy/list-rules.md +1 -0
- package/docs/examples/proxy/update-rule-verification.md +2 -0
- package/docs/examples/sites/create-deployment.md +4 -0
- package/docs/examples/sites/create-duplicate-deployment.md +3 -0
- package/docs/examples/sites/create-template-deployment.md +7 -0
- package/docs/examples/sites/create-variable.md +4 -0
- package/docs/examples/sites/create-vcs-deployment.md +4 -0
- package/docs/examples/sites/create.md +5 -0
- package/docs/examples/sites/delete-deployment.md +3 -0
- package/docs/examples/sites/delete-log.md +3 -0
- package/docs/examples/sites/delete-variable.md +3 -0
- package/docs/examples/sites/delete.md +2 -0
- package/docs/examples/sites/get-deployment-download.md +3 -0
- package/docs/examples/sites/get-deployment.md +3 -0
- package/docs/examples/sites/get-log.md +3 -0
- package/docs/examples/sites/get-template.md +2 -0
- package/docs/examples/sites/get-usage.md +2 -0
- package/docs/examples/sites/get-variable.md +3 -0
- package/docs/examples/sites/get.md +2 -0
- package/docs/examples/sites/list-deployments.md +2 -0
- package/docs/examples/sites/list-frameworks.md +1 -0
- package/docs/examples/sites/list-logs.md +2 -0
- package/docs/examples/sites/list-specifications.md +1 -0
- package/docs/examples/sites/list-templates.md +1 -0
- package/docs/examples/sites/list-usage.md +1 -0
- package/docs/examples/sites/list-variables.md +2 -0
- package/docs/examples/sites/list.md +1 -0
- package/docs/examples/sites/update-deployment-status.md +3 -0
- package/docs/examples/sites/update-site-deployment.md +3 -0
- package/docs/examples/sites/update-variable.md +4 -0
- package/docs/examples/sites/update.md +4 -0
- package/docs/examples/storage/create-bucket.md +3 -0
- package/docs/examples/storage/create-file.md +4 -0
- package/docs/examples/storage/delete-bucket.md +2 -0
- package/docs/examples/storage/delete-file.md +3 -0
- package/docs/examples/storage/get-bucket-usage.md +2 -0
- package/docs/examples/storage/get-bucket.md +2 -0
- package/docs/examples/storage/get-file-download.md +3 -0
- package/docs/examples/storage/get-file-preview.md +3 -0
- package/docs/examples/storage/get-file-view.md +3 -0
- package/docs/examples/storage/get-file.md +3 -0
- package/docs/examples/storage/get-usage.md +1 -0
- package/docs/examples/storage/list-buckets.md +1 -0
- package/docs/examples/storage/list-files.md +2 -0
- package/docs/examples/storage/update-bucket.md +3 -0
- package/docs/examples/storage/update-file.md +3 -0
- package/docs/examples/tablesdb/create-boolean-column.md +5 -0
- package/docs/examples/tablesdb/create-datetime-column.md +5 -0
- package/docs/examples/tablesdb/create-email-column.md +5 -0
- package/docs/examples/tablesdb/create-enum-column.md +6 -0
- package/docs/examples/tablesdb/create-float-column.md +5 -0
- package/docs/examples/tablesdb/create-index.md +6 -0
- package/docs/examples/tablesdb/create-integer-column.md +5 -0
- package/docs/examples/tablesdb/create-ip-column.md +5 -0
- package/docs/examples/tablesdb/create-line-column.md +5 -0
- package/docs/examples/tablesdb/create-operations.md +2 -0
- package/docs/examples/tablesdb/create-point-column.md +5 -0
- package/docs/examples/tablesdb/create-polygon-column.md +5 -0
- package/docs/examples/tablesdb/create-relationship-column.md +5 -0
- package/docs/examples/tablesdb/create-row.md +5 -0
- package/docs/examples/tablesdb/create-rows.md +4 -0
- package/docs/examples/tablesdb/create-string-column.md +6 -0
- package/docs/examples/tablesdb/create-table.md +4 -0
- package/docs/examples/tablesdb/create-transaction.md +1 -0
- package/docs/examples/tablesdb/create-url-column.md +5 -0
- package/docs/examples/tablesdb/create.md +3 -0
- package/docs/examples/tablesdb/decrement-row-column.md +5 -0
- package/docs/examples/tablesdb/delete-column.md +4 -0
- package/docs/examples/tablesdb/delete-index.md +4 -0
- package/docs/examples/tablesdb/delete-row.md +4 -0
- package/docs/examples/tablesdb/delete-rows.md +3 -0
- package/docs/examples/tablesdb/delete-table.md +3 -0
- package/docs/examples/tablesdb/delete-transaction.md +2 -0
- package/docs/examples/tablesdb/delete.md +2 -0
- package/docs/examples/tablesdb/get-column.md +4 -0
- package/docs/examples/tablesdb/get-index.md +4 -0
- package/docs/examples/tablesdb/get-row.md +4 -0
- package/docs/examples/tablesdb/get-table-usage.md +3 -0
- package/docs/examples/tablesdb/get-table.md +3 -0
- package/docs/examples/tablesdb/get-transaction.md +2 -0
- package/docs/examples/tablesdb/get-usage.md +2 -0
- package/docs/examples/tablesdb/get.md +2 -0
- package/docs/examples/tablesdb/increment-row-column.md +5 -0
- package/docs/examples/tablesdb/list-columns.md +3 -0
- package/docs/examples/tablesdb/list-indexes.md +3 -0
- package/docs/examples/tablesdb/list-row-logs.md +4 -0
- package/docs/examples/tablesdb/list-rows.md +3 -0
- package/docs/examples/tablesdb/list-table-logs.md +3 -0
- package/docs/examples/tablesdb/list-tables.md +2 -0
- package/docs/examples/tablesdb/list-transactions.md +1 -0
- package/docs/examples/tablesdb/list-usage.md +1 -0
- package/docs/examples/tablesdb/list.md +1 -0
- package/docs/examples/tablesdb/update-boolean-column.md +6 -0
- package/docs/examples/tablesdb/update-datetime-column.md +6 -0
- package/docs/examples/tablesdb/update-email-column.md +6 -0
- package/docs/examples/tablesdb/update-enum-column.md +7 -0
- package/docs/examples/tablesdb/update-float-column.md +6 -0
- package/docs/examples/tablesdb/update-integer-column.md +6 -0
- package/docs/examples/tablesdb/update-ip-column.md +6 -0
- package/docs/examples/tablesdb/update-line-column.md +5 -0
- package/docs/examples/tablesdb/update-point-column.md +5 -0
- package/docs/examples/tablesdb/update-polygon-column.md +5 -0
- package/docs/examples/tablesdb/update-relationship-column.md +4 -0
- package/docs/examples/tablesdb/update-row.md +4 -0
- package/docs/examples/tablesdb/update-rows.md +3 -0
- package/docs/examples/tablesdb/update-string-column.md +6 -0
- package/docs/examples/tablesdb/update-table.md +4 -0
- package/docs/examples/tablesdb/update-transaction.md +2 -0
- package/docs/examples/tablesdb/update-url-column.md +6 -0
- package/docs/examples/tablesdb/update.md +3 -0
- package/docs/examples/tablesdb/upsert-row.md +4 -0
- package/docs/examples/tablesdb/upsert-rows.md +4 -0
- package/docs/examples/teams/create-membership.md +3 -0
- package/docs/examples/teams/create.md +3 -0
- package/docs/examples/teams/delete-membership.md +3 -0
- package/docs/examples/teams/delete.md +2 -0
- package/docs/examples/teams/get-membership.md +3 -0
- package/docs/examples/teams/get-prefs.md +2 -0
- package/docs/examples/teams/get.md +2 -0
- package/docs/examples/teams/list-logs.md +2 -0
- package/docs/examples/teams/list-memberships.md +2 -0
- package/docs/examples/teams/list.md +1 -0
- package/docs/examples/teams/update-membership-status.md +5 -0
- package/docs/examples/teams/update-membership.md +4 -0
- package/docs/examples/teams/update-name.md +3 -0
- package/docs/examples/teams/update-prefs.md +3 -0
- package/docs/examples/tokens/create-file-token.md +3 -0
- package/docs/examples/tokens/delete.md +2 -0
- package/docs/examples/tokens/get.md +2 -0
- package/docs/examples/tokens/list.md +3 -0
- package/docs/examples/tokens/update.md +2 -0
- package/docs/examples/users/create-argon-2-user.md +4 -0
- package/docs/examples/users/create-bcrypt-user.md +4 -0
- package/docs/examples/users/create-jwt.md +2 -0
- package/docs/examples/users/create-md-5-user.md +4 -0
- package/docs/examples/users/create-mfa-recovery-codes.md +2 -0
- package/docs/examples/users/create-ph-pass-user.md +4 -0
- package/docs/examples/users/create-scrypt-modified-user.md +7 -0
- package/docs/examples/users/create-scrypt-user.md +9 -0
- package/docs/examples/users/create-session.md +2 -0
- package/docs/examples/users/create-sha-user.md +4 -0
- package/docs/examples/users/create-target.md +5 -0
- package/docs/examples/users/create-token.md +2 -0
- package/docs/examples/users/create.md +2 -0
- package/docs/examples/users/delete-identity.md +2 -0
- package/docs/examples/users/delete-mfa-authenticator.md +3 -0
- package/docs/examples/users/delete-session.md +3 -0
- package/docs/examples/users/delete-sessions.md +2 -0
- package/docs/examples/users/delete-target.md +3 -0
- package/docs/examples/users/delete.md +2 -0
- package/docs/examples/users/get-mfa-recovery-codes.md +2 -0
- package/docs/examples/users/get-prefs.md +2 -0
- package/docs/examples/users/get-target.md +3 -0
- package/docs/examples/users/get-usage.md +1 -0
- package/docs/examples/users/get.md +2 -0
- package/docs/examples/users/list-identities.md +1 -0
- package/docs/examples/users/list-logs.md +2 -0
- package/docs/examples/users/list-memberships.md +2 -0
- package/docs/examples/users/list-mfa-factors.md +2 -0
- package/docs/examples/users/list-sessions.md +2 -0
- package/docs/examples/users/list-targets.md +2 -0
- package/docs/examples/users/list.md +1 -0
- package/docs/examples/users/update-email-verification.md +3 -0
- package/docs/examples/users/update-email.md +3 -0
- package/docs/examples/users/update-labels.md +3 -0
- package/docs/examples/users/update-mfa-recovery-codes.md +2 -0
- package/docs/examples/users/update-mfa.md +3 -0
- package/docs/examples/users/update-name.md +3 -0
- package/docs/examples/users/update-password.md +3 -0
- package/docs/examples/users/update-phone-verification.md +3 -0
- package/docs/examples/users/update-phone.md +3 -0
- package/docs/examples/users/update-prefs.md +3 -0
- package/docs/examples/users/update-status.md +3 -0
- package/docs/examples/users/update-target.md +3 -0
- package/docs/examples/vcs/create-repository-detection.md +4 -0
- package/docs/examples/vcs/create-repository.md +4 -0
- package/docs/examples/vcs/delete-installation.md +2 -0
- package/docs/examples/vcs/get-installation.md +2 -0
- package/docs/examples/vcs/get-repository-contents.md +3 -0
- package/docs/examples/vcs/get-repository.md +3 -0
- package/docs/examples/vcs/list-installations.md +1 -0
- package/docs/examples/vcs/list-repositories.md +3 -0
- package/docs/examples/vcs/list-repository-branches.md +3 -0
- package/docs/examples/vcs/update-external-deployments.md +4 -0
- package/index.ts +25 -165
- package/install.ps1 +2 -2
- package/install.sh +1 -1
- package/lib/client.ts +14 -6
- package/lib/commands/config.ts +494 -0
- package/lib/commands/db.ts +324 -0
- package/lib/commands/errors.ts +93 -0
- package/lib/commands/init.ts +25 -14
- package/lib/commands/pull.ts +683 -420
- package/lib/commands/push.ts +1677 -2404
- package/lib/commands/run.ts +1 -1
- package/lib/commands/schema.ts +122 -0
- package/lib/commands/services/account.ts +200 -385
- package/lib/commands/services/console.ts +13 -34
- package/lib/commands/services/databases.ts +298 -1215
- package/lib/commands/services/functions.ts +115 -434
- package/lib/commands/services/graphql.ts +5 -2
- package/lib/commands/services/health.ts +87 -149
- package/lib/commands/services/locale.ts +36 -33
- package/lib/commands/services/messaging.ts +180 -999
- package/lib/commands/services/migrations.ts +54 -226
- package/lib/commands/services/project.ts +19 -23
- package/lib/commands/services/projects.ts +182 -714
- package/lib/commands/services/proxy.ts +30 -58
- package/lib/commands/services/sites.ts +107 -379
- package/lib/commands/services/storage.ts +93 -302
- package/lib/commands/services/tables-db.ts +1150 -0
- package/lib/commands/services/teams.ts +48 -110
- package/lib/commands/services/tokens.ts +16 -28
- package/lib/commands/services/users.ts +133 -403
- package/lib/commands/services/vcs.ts +48 -151
- package/lib/commands/types.ts +1 -1
- package/lib/commands/update.ts +13 -22
- package/lib/commands/utils/attributes.ts +719 -0
- package/lib/commands/utils/change-approval.ts +186 -0
- package/lib/commands/utils/database-sync.ts +180 -0
- package/lib/commands/utils/deployment.ts +184 -0
- package/lib/commands/utils/error-formatter.ts +417 -0
- package/lib/commands/utils/pools.ts +355 -0
- package/lib/config.ts +46 -82
- package/lib/constants.ts +22 -0
- package/lib/emulation/docker.ts +101 -87
- package/lib/parser.ts +16 -11
- package/lib/questions.ts +20 -21
- package/lib/sdks.ts +15 -11
- package/lib/types.ts +0 -229
- package/lib/utils.ts +45 -4
- package/package.json +12 -11
- package/scoop/appwrite.config.json +29 -19
- package/.github/workflows/build-verify.yml +0 -71
- package/bun.lock +0 -625
- package/dist/lib/commands/services/avatars.d.ts +0 -3
- package/dist/lib/commands/services/avatars.d.ts.map +0 -1
- package/dist/lib/commands/services/avatars.js +0 -118
- package/dist/lib/commands/services/avatars.js.map +0 -1
- package/dist/lib/commands/services/tablesdb.d.ts +0 -3
- package/dist/lib/commands/services/tablesdb.d.ts.map +0 -1
- package/dist/lib/commands/services/tablesdb.js.map +0 -1
- package/dist/scripts/generate-commands.d.ts +0 -2
- package/dist/scripts/generate-commands.d.ts.map +0 -1
- package/dist/scripts/generate-commands.js +0 -398
- package/dist/scripts/generate-commands.js.map +0 -1
- package/lib/commands/services/avatars.ts +0 -400
- package/lib/commands/services/tablesdb.ts +0 -1928
- package/scripts/generate-commands.ts +0 -539
|
@@ -1,14 +1,420 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
2
3
|
import chalk from "chalk";
|
|
3
|
-
import tar from "tar";
|
|
4
4
|
import { Command } from "commander";
|
|
5
5
|
import inquirer from "inquirer";
|
|
6
|
-
import {
|
|
6
|
+
import { Databases, Functions, Messaging, Projects, Sites, Storage, TablesDB, Teams, Query, } from "@appwrite.io/console";
|
|
7
|
+
import { getFunctionsService, getSitesService } from "../services.js";
|
|
8
|
+
import { sdkForProject, sdkForConsole } from "../sdks.js";
|
|
7
9
|
import { localConfig } from "../config.js";
|
|
8
10
|
import { paginate } from "../paginate.js";
|
|
9
|
-
import {
|
|
11
|
+
import { questionsPullFunctions, questionsPullFunctionsCode, questionsPullSites, questionsPullSitesCode, questionsPullResources, } from "../questions.js";
|
|
10
12
|
import { cliConfig, success, log, warn, error, actionRunner, commandDescriptions, } from "../parser.js";
|
|
11
|
-
|
|
13
|
+
import { createSettingsObject } from "../utils.js";
|
|
14
|
+
import { ProjectNotInitializedError } from "./errors.js";
|
|
15
|
+
import { downloadDeploymentCode } from "./utils/deployment.js";
|
|
16
|
+
async function createPullInstance() {
|
|
17
|
+
const projectClient = await sdkForProject();
|
|
18
|
+
const consoleClient = await sdkForConsole();
|
|
19
|
+
const pullInstance = new Pull(projectClient, consoleClient);
|
|
20
|
+
pullInstance.setConfigDirectoryPath(localConfig.configDirectoryPath);
|
|
21
|
+
return pullInstance;
|
|
22
|
+
}
|
|
23
|
+
export class Pull {
|
|
24
|
+
projectClient;
|
|
25
|
+
consoleClient;
|
|
26
|
+
configDirectoryPath;
|
|
27
|
+
silent;
|
|
28
|
+
constructor(projectClient, consoleClient, silent = false) {
|
|
29
|
+
this.projectClient = projectClient;
|
|
30
|
+
this.consoleClient = consoleClient;
|
|
31
|
+
this.configDirectoryPath = process.cwd();
|
|
32
|
+
this.silent = silent;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Set the base directory path for config files and resources
|
|
36
|
+
*/
|
|
37
|
+
setConfigDirectoryPath(path) {
|
|
38
|
+
this.configDirectoryPath = path;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Log a message (respects silent mode)
|
|
42
|
+
*/
|
|
43
|
+
log(message) {
|
|
44
|
+
if (!this.silent) {
|
|
45
|
+
log(message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Log a success message (respects silent mode)
|
|
50
|
+
*/
|
|
51
|
+
success(message) {
|
|
52
|
+
if (!this.silent) {
|
|
53
|
+
success(message);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Log a warning message (respects silent mode)
|
|
58
|
+
*/
|
|
59
|
+
warn(message) {
|
|
60
|
+
if (!this.silent) {
|
|
61
|
+
warn(message);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Pull resources from Appwrite project and return updated config
|
|
66
|
+
*
|
|
67
|
+
* @param config - Current configuration object
|
|
68
|
+
* @param options - Pull options specifying which resources to pull
|
|
69
|
+
* @returns Updated configuration object with pulled resources
|
|
70
|
+
*/
|
|
71
|
+
async pullResources(config, options = { all: true, skipDeprecated: true }) {
|
|
72
|
+
const { skipDeprecated = true } = options;
|
|
73
|
+
if (!config.projectId) {
|
|
74
|
+
throw new ProjectNotInitializedError();
|
|
75
|
+
}
|
|
76
|
+
const updatedConfig = { ...config };
|
|
77
|
+
const shouldPullAll = options.all === true;
|
|
78
|
+
if (shouldPullAll || options.settings) {
|
|
79
|
+
const settings = await this.pullSettings(config.projectId);
|
|
80
|
+
updatedConfig.settings = settings.settings;
|
|
81
|
+
updatedConfig.projectName = settings.projectName;
|
|
82
|
+
}
|
|
83
|
+
if (shouldPullAll || options.functions) {
|
|
84
|
+
const functions = await this.pullFunctions({
|
|
85
|
+
code: options.noCode === true ? false : true,
|
|
86
|
+
withVariables: options.withVariables,
|
|
87
|
+
});
|
|
88
|
+
updatedConfig.functions = functions;
|
|
89
|
+
}
|
|
90
|
+
if (shouldPullAll || options.sites) {
|
|
91
|
+
const sites = await this.pullSites({
|
|
92
|
+
code: options.noCode === true ? false : true,
|
|
93
|
+
withVariables: options.withVariables,
|
|
94
|
+
});
|
|
95
|
+
updatedConfig.sites = sites;
|
|
96
|
+
}
|
|
97
|
+
if (shouldPullAll || options.tables) {
|
|
98
|
+
const { databases, tables } = await this.pullTables();
|
|
99
|
+
updatedConfig.databases = databases;
|
|
100
|
+
updatedConfig.tables = tables;
|
|
101
|
+
}
|
|
102
|
+
if (options.collections || (shouldPullAll && !skipDeprecated)) {
|
|
103
|
+
const { databases, collections } = await this.pullCollections();
|
|
104
|
+
updatedConfig.databases = databases;
|
|
105
|
+
updatedConfig.collections = collections;
|
|
106
|
+
}
|
|
107
|
+
if (shouldPullAll || options.buckets) {
|
|
108
|
+
const buckets = await this.pullBuckets();
|
|
109
|
+
updatedConfig.buckets = buckets;
|
|
110
|
+
}
|
|
111
|
+
if (shouldPullAll || options.teams) {
|
|
112
|
+
const teams = await this.pullTeams();
|
|
113
|
+
updatedConfig.teams = teams;
|
|
114
|
+
}
|
|
115
|
+
if (shouldPullAll || options.topics) {
|
|
116
|
+
const topics = await this.pullMessagingTopics();
|
|
117
|
+
updatedConfig.topics = topics;
|
|
118
|
+
}
|
|
119
|
+
return updatedConfig;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Pull project settings
|
|
123
|
+
*/
|
|
124
|
+
async pullSettings(projectId) {
|
|
125
|
+
this.log("Pulling project settings ...");
|
|
126
|
+
const projectsService = new Projects(this.consoleClient);
|
|
127
|
+
const project = await projectsService.get({ projectId: projectId });
|
|
128
|
+
this.success(`Successfully pulled ${chalk.bold("all")} project settings.`);
|
|
129
|
+
return {
|
|
130
|
+
projectName: project.name,
|
|
131
|
+
settings: createSettingsObject(project),
|
|
132
|
+
project,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Pull functions from the project
|
|
137
|
+
*/
|
|
138
|
+
async pullFunctions(options = {}) {
|
|
139
|
+
this.log("Fetching functions ...");
|
|
140
|
+
const functionsService = new Functions(this.projectClient);
|
|
141
|
+
let functions;
|
|
142
|
+
if (options.functionIds && options.functionIds.length > 0) {
|
|
143
|
+
functions = await Promise.all(options.functionIds.map((id) => functionsService.get({
|
|
144
|
+
functionId: id,
|
|
145
|
+
})));
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
const fetchResponse = await functionsService.list({
|
|
149
|
+
queries: [Query.limit(1)],
|
|
150
|
+
});
|
|
151
|
+
if (fetchResponse["functions"].length <= 0) {
|
|
152
|
+
this.log("No functions found.");
|
|
153
|
+
this.success(`Successfully pulled ${chalk.bold(0)} functions.`);
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
const { functions: allFunctions } = await paginate(async () => new Functions(this.projectClient).list(), {}, 100, "functions");
|
|
157
|
+
functions = allFunctions;
|
|
158
|
+
}
|
|
159
|
+
const result = [];
|
|
160
|
+
for (const func of functions) {
|
|
161
|
+
this.log(`Pulling function ${chalk.bold(func.name)} ...`);
|
|
162
|
+
const funcPath = `functions/${func.name}`;
|
|
163
|
+
const absoluteFuncPath = path.resolve(this.configDirectoryPath, funcPath);
|
|
164
|
+
const holdingVars = func.vars || [];
|
|
165
|
+
const functionConfig = {
|
|
166
|
+
$id: func.$id,
|
|
167
|
+
name: func.name,
|
|
168
|
+
runtime: func.runtime,
|
|
169
|
+
path: funcPath,
|
|
170
|
+
entrypoint: func.entrypoint,
|
|
171
|
+
execute: func.execute,
|
|
172
|
+
enabled: func.enabled,
|
|
173
|
+
logging: func.logging,
|
|
174
|
+
events: func.events,
|
|
175
|
+
schedule: func.schedule,
|
|
176
|
+
timeout: func.timeout,
|
|
177
|
+
commands: func.commands,
|
|
178
|
+
scopes: func.scopes,
|
|
179
|
+
specification: func.specification,
|
|
180
|
+
};
|
|
181
|
+
result.push(functionConfig);
|
|
182
|
+
if (!fs.existsSync(absoluteFuncPath)) {
|
|
183
|
+
fs.mkdirSync(absoluteFuncPath, { recursive: true });
|
|
184
|
+
}
|
|
185
|
+
if (options.code !== false) {
|
|
186
|
+
await downloadDeploymentCode({
|
|
187
|
+
resourceId: func["$id"],
|
|
188
|
+
resourcePath: absoluteFuncPath,
|
|
189
|
+
holdingVars,
|
|
190
|
+
withVariables: options.withVariables,
|
|
191
|
+
listDeployments: () => functionsService.listDeployments({
|
|
192
|
+
functionId: func["$id"],
|
|
193
|
+
queries: [Query.limit(1), Query.orderDesc("$id")],
|
|
194
|
+
}),
|
|
195
|
+
getDownloadUrl: (deploymentId) => functionsService.getDeploymentDownload({
|
|
196
|
+
functionId: func["$id"],
|
|
197
|
+
deploymentId,
|
|
198
|
+
}),
|
|
199
|
+
projectClient: this.projectClient,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (options.code === false) {
|
|
204
|
+
this.warn("Source code download skipped.");
|
|
205
|
+
}
|
|
206
|
+
this.success(`Successfully pulled ${chalk.bold(result.length)} functions.`);
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Pull sites from the project
|
|
211
|
+
*/
|
|
212
|
+
async pullSites(options = {}) {
|
|
213
|
+
this.log("Fetching sites ...");
|
|
214
|
+
const sitesService = new Sites(this.projectClient);
|
|
215
|
+
let sites;
|
|
216
|
+
if (options.siteIds && options.siteIds.length > 0) {
|
|
217
|
+
sites = await Promise.all(options.siteIds.map((id) => sitesService.get({
|
|
218
|
+
siteId: id,
|
|
219
|
+
})));
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const fetchResponse = await sitesService.list({
|
|
223
|
+
queries: [Query.limit(1)],
|
|
224
|
+
});
|
|
225
|
+
if (fetchResponse["sites"].length <= 0) {
|
|
226
|
+
this.log("No sites found.");
|
|
227
|
+
this.success(`Successfully pulled ${chalk.bold(0)} sites.`);
|
|
228
|
+
return [];
|
|
229
|
+
}
|
|
230
|
+
const { sites: fetchedSites } = await paginate(async () => new Sites(this.projectClient).list(), {}, 100, "sites");
|
|
231
|
+
sites = fetchedSites;
|
|
232
|
+
}
|
|
233
|
+
const result = [];
|
|
234
|
+
for (const site of sites) {
|
|
235
|
+
this.log(`Pulling site ${chalk.bold(site.name)} ...`);
|
|
236
|
+
const sitePath = `sites/${site.name}`;
|
|
237
|
+
const absoluteSitePath = path.resolve(this.configDirectoryPath, sitePath);
|
|
238
|
+
const holdingVars = site.vars || [];
|
|
239
|
+
const siteConfig = {
|
|
240
|
+
$id: site.$id,
|
|
241
|
+
name: site.name,
|
|
242
|
+
path: sitePath,
|
|
243
|
+
framework: site.framework,
|
|
244
|
+
enabled: site.enabled,
|
|
245
|
+
logging: site.logging,
|
|
246
|
+
timeout: site.timeout,
|
|
247
|
+
buildRuntime: site.buildRuntime,
|
|
248
|
+
adapter: site.adapter,
|
|
249
|
+
installCommand: site.installCommand,
|
|
250
|
+
buildCommand: site.buildCommand,
|
|
251
|
+
outputDirectory: site.outputDirectory,
|
|
252
|
+
fallbackFile: site.fallbackFile,
|
|
253
|
+
specification: site.specification,
|
|
254
|
+
};
|
|
255
|
+
result.push(siteConfig);
|
|
256
|
+
if (!fs.existsSync(absoluteSitePath)) {
|
|
257
|
+
fs.mkdirSync(absoluteSitePath, { recursive: true });
|
|
258
|
+
}
|
|
259
|
+
if (options.code !== false) {
|
|
260
|
+
await downloadDeploymentCode({
|
|
261
|
+
resourceId: site["$id"],
|
|
262
|
+
resourcePath: absoluteSitePath,
|
|
263
|
+
holdingVars,
|
|
264
|
+
withVariables: options.withVariables,
|
|
265
|
+
listDeployments: () => sitesService.listDeployments({
|
|
266
|
+
siteId: site["$id"],
|
|
267
|
+
queries: [Query.limit(1), Query.orderDesc("$id")],
|
|
268
|
+
}),
|
|
269
|
+
getDownloadUrl: (deploymentId) => sitesService.getDeploymentDownload({
|
|
270
|
+
siteId: site["$id"],
|
|
271
|
+
deploymentId,
|
|
272
|
+
}),
|
|
273
|
+
projectClient: this.projectClient,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (options.code === false) {
|
|
278
|
+
this.warn("Source code download skipped.");
|
|
279
|
+
}
|
|
280
|
+
this.success(`Successfully pulled ${chalk.bold(result.length)} sites.`);
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Pull collections from the project (deprecated)
|
|
285
|
+
*/
|
|
286
|
+
async pullCollections() {
|
|
287
|
+
this.warn("appwrite pull collection has been deprecated. Please consider using 'appwrite pull tables' instead");
|
|
288
|
+
this.log("Fetching collections ...");
|
|
289
|
+
const databasesService = new Databases(this.projectClient);
|
|
290
|
+
const fetchResponse = await databasesService.list([Query.limit(1)]);
|
|
291
|
+
if (fetchResponse["databases"].length <= 0) {
|
|
292
|
+
this.log("No collections found.");
|
|
293
|
+
this.success(`Successfully pulled ${chalk.bold(0)} collections from ${chalk.bold(0)} databases.`);
|
|
294
|
+
return { databases: [], collections: [] };
|
|
295
|
+
}
|
|
296
|
+
const { databases } = await paginate(async () => new Databases(this.projectClient).list(), {}, 100, "databases");
|
|
297
|
+
const allDatabases = [];
|
|
298
|
+
const allCollections = [];
|
|
299
|
+
for (const database of databases) {
|
|
300
|
+
this.log(`Pulling all collections from ${chalk.bold(database.name)} database ...`);
|
|
301
|
+
allDatabases.push(database);
|
|
302
|
+
const { collections } = await paginate(async () => new Databases(this.projectClient).listCollections(database.$id), {}, 100, "collections");
|
|
303
|
+
for (const collection of collections) {
|
|
304
|
+
allCollections.push({
|
|
305
|
+
...collection,
|
|
306
|
+
$createdAt: undefined,
|
|
307
|
+
$updatedAt: undefined,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
this.success(`Successfully pulled ${chalk.bold(allCollections.length)} collections from ${chalk.bold(allDatabases.length)} databases.`);
|
|
312
|
+
return {
|
|
313
|
+
databases: allDatabases,
|
|
314
|
+
collections: allCollections,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Pull tables from the project
|
|
319
|
+
*/
|
|
320
|
+
async pullTables() {
|
|
321
|
+
this.log("Fetching tables ...");
|
|
322
|
+
const tablesDBService = new TablesDB(this.projectClient);
|
|
323
|
+
const fetchResponse = await tablesDBService.list({
|
|
324
|
+
queries: [Query.limit(1)],
|
|
325
|
+
});
|
|
326
|
+
if (fetchResponse["databases"].length <= 0) {
|
|
327
|
+
this.log("No tables found.");
|
|
328
|
+
this.success(`Successfully pulled ${chalk.bold(0)} tables from ${chalk.bold(0)} tableDBs.`);
|
|
329
|
+
return { databases: [], tables: [] };
|
|
330
|
+
}
|
|
331
|
+
const { databases } = await paginate(async () => new TablesDB(this.projectClient).list(), {}, 100, "databases");
|
|
332
|
+
const allDatabases = [];
|
|
333
|
+
const allTables = [];
|
|
334
|
+
for (const database of databases) {
|
|
335
|
+
this.log(`Pulling all tables from ${chalk.bold(database.name)} database ...`);
|
|
336
|
+
allDatabases.push(database);
|
|
337
|
+
const { tables } = await paginate(async () => new TablesDB(this.projectClient).listTables(database.$id), {}, 100, "tables");
|
|
338
|
+
for (const table of tables) {
|
|
339
|
+
allTables.push({
|
|
340
|
+
...table,
|
|
341
|
+
$createdAt: undefined,
|
|
342
|
+
$updatedAt: undefined,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
this.success(`Successfully pulled ${chalk.bold(allTables.length)} tables from ${chalk.bold(allDatabases.length)} tableDBs.`);
|
|
347
|
+
return {
|
|
348
|
+
databases: allDatabases,
|
|
349
|
+
tables: allTables,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Pull storage buckets from the project
|
|
354
|
+
*/
|
|
355
|
+
async pullBuckets() {
|
|
356
|
+
this.log("Fetching buckets ...");
|
|
357
|
+
const storageService = new Storage(this.projectClient);
|
|
358
|
+
const fetchResponse = await storageService.listBuckets({
|
|
359
|
+
queries: [Query.limit(1)],
|
|
360
|
+
});
|
|
361
|
+
if (fetchResponse["buckets"].length <= 0) {
|
|
362
|
+
this.log("No buckets found.");
|
|
363
|
+
this.success(`Successfully pulled ${chalk.bold(0)} buckets.`);
|
|
364
|
+
return [];
|
|
365
|
+
}
|
|
366
|
+
const { buckets } = await paginate(async () => new Storage(this.projectClient).listBuckets(), {}, 100, "buckets");
|
|
367
|
+
for (const bucket of buckets) {
|
|
368
|
+
this.log(`Pulling bucket ${chalk.bold(bucket.name)} ...`);
|
|
369
|
+
}
|
|
370
|
+
this.success(`Successfully pulled ${chalk.bold(buckets.length)} buckets.`);
|
|
371
|
+
return buckets;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Pull teams from the project
|
|
375
|
+
*/
|
|
376
|
+
async pullTeams() {
|
|
377
|
+
this.log("Fetching teams ...");
|
|
378
|
+
const teamsService = new Teams(this.projectClient);
|
|
379
|
+
const fetchResponse = await teamsService.list({
|
|
380
|
+
queries: [Query.limit(1)],
|
|
381
|
+
});
|
|
382
|
+
if (fetchResponse["teams"].length <= 0) {
|
|
383
|
+
this.log("No teams found.");
|
|
384
|
+
this.success(`Successfully pulled ${chalk.bold(0)} teams.`);
|
|
385
|
+
return [];
|
|
386
|
+
}
|
|
387
|
+
const { teams } = await paginate(async () => new Teams(this.projectClient).list(), {}, 100, "teams");
|
|
388
|
+
for (const team of teams) {
|
|
389
|
+
this.log(`Pulling team ${chalk.bold(team.name)} ...`);
|
|
390
|
+
}
|
|
391
|
+
this.success(`Successfully pulled ${chalk.bold(teams.length)} teams.`);
|
|
392
|
+
return teams;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Pull messaging topics from the project
|
|
396
|
+
*/
|
|
397
|
+
async pullMessagingTopics() {
|
|
398
|
+
this.log("Fetching topics ...");
|
|
399
|
+
const messagingService = new Messaging(this.projectClient);
|
|
400
|
+
const fetchResponse = await messagingService.listTopics({
|
|
401
|
+
queries: [Query.limit(1)],
|
|
402
|
+
});
|
|
403
|
+
if (fetchResponse["topics"].length <= 0) {
|
|
404
|
+
this.log("No topics found.");
|
|
405
|
+
this.success(`Successfully pulled ${chalk.bold(0)} topics.`);
|
|
406
|
+
return [];
|
|
407
|
+
}
|
|
408
|
+
const { topics } = await paginate(async () => new Messaging(this.projectClient).listTopics(), {}, 100, "topics");
|
|
409
|
+
for (const topic of topics) {
|
|
410
|
+
this.log(`Pulling topic ${chalk.bold(topic.name)} ...`);
|
|
411
|
+
}
|
|
412
|
+
this.success(`Successfully pulled ${chalk.bold(topics.length)} topics.`);
|
|
413
|
+
return topics;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/** Helper methods for CLI commands */
|
|
417
|
+
export const pullResources = async ({ skipDeprecated = true, } = {}) => {
|
|
12
418
|
const project = localConfig.getProject();
|
|
13
419
|
if (!project.projectId) {
|
|
14
420
|
error("Project configuration not found. Please run 'appwrite init project' to initialize your project first.");
|
|
@@ -42,338 +448,121 @@ export const pullResources = async ({ skipDeprecated = false, } = {}) => {
|
|
|
42
448
|
}
|
|
43
449
|
};
|
|
44
450
|
const pullSettings = async () => {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
localConfig.setProject(response.$id, response.name, response);
|
|
50
|
-
success(`Successfully pulled ${chalk.bold("all")} project settings.`);
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
throw e;
|
|
54
|
-
}
|
|
451
|
+
const pullInstance = await createPullInstance();
|
|
452
|
+
const projectId = localConfig.getProject().projectId;
|
|
453
|
+
const settings = await pullInstance.pullSettings(projectId);
|
|
454
|
+
localConfig.setProject(projectId, settings.projectName, settings.project);
|
|
55
455
|
};
|
|
56
456
|
const pullFunctions = async ({ code, withVariables, } = {}) => {
|
|
57
|
-
process.chdir(localConfig.configDirectoryPath);
|
|
58
|
-
log("Fetching functions ...");
|
|
59
|
-
let total = 0;
|
|
60
457
|
const functionsService = await getFunctionsService();
|
|
61
|
-
const fetchResponse = await functionsService.list([
|
|
62
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
63
|
-
]);
|
|
458
|
+
const fetchResponse = await functionsService.list([Query.limit(1)]);
|
|
64
459
|
if (fetchResponse["functions"].length <= 0) {
|
|
65
460
|
log("No functions found.");
|
|
66
|
-
success(`Successfully pulled ${chalk.bold(
|
|
461
|
+
success(`Successfully pulled ${chalk.bold(0)} functions.`);
|
|
67
462
|
return;
|
|
68
463
|
}
|
|
69
|
-
const
|
|
464
|
+
const functionsToCheck = cliConfig.all
|
|
70
465
|
? (await paginate(async () => (await getFunctionsService()).list(), {}, 100, "functions")).functions
|
|
71
466
|
: (await inquirer.prompt(questionsPullFunctions)).functions;
|
|
72
467
|
let allowCodePull = cliConfig.force === true ? true : null;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
468
|
+
if (code !== false && allowCodePull === null) {
|
|
469
|
+
const codeAnswer = await inquirer.prompt(questionsPullFunctionsCode);
|
|
470
|
+
allowCodePull = codeAnswer.override;
|
|
471
|
+
}
|
|
472
|
+
const shouldPullCode = code !== false && allowCodePull === true;
|
|
473
|
+
const selectedFunctionIds = functionsToCheck.map((f) => f.$id);
|
|
474
|
+
const pullInstance = await createPullInstance();
|
|
475
|
+
const functions = await pullInstance.pullFunctions({
|
|
476
|
+
code: shouldPullCode,
|
|
477
|
+
withVariables,
|
|
478
|
+
functionIds: selectedFunctionIds,
|
|
479
|
+
});
|
|
480
|
+
for (const func of functions) {
|
|
76
481
|
const localFunction = localConfig.getFunction(func.$id);
|
|
77
|
-
func["path"] = localFunction["path"];
|
|
78
|
-
if (!localFunction["path"]) {
|
|
79
|
-
func["path"] = `functions/${func.name}`;
|
|
80
|
-
}
|
|
81
|
-
const holdingVars = func["vars"];
|
|
82
|
-
// We don't save var in to the config
|
|
83
|
-
delete func["vars"];
|
|
482
|
+
func["path"] = localFunction["path"] || func["path"];
|
|
84
483
|
localConfig.addFunction(func);
|
|
85
|
-
if (!fs.existsSync(func["path"])) {
|
|
86
|
-
fs.mkdirSync(func["path"], { recursive: true });
|
|
87
|
-
}
|
|
88
|
-
if (code === false) {
|
|
89
|
-
warn("Source code download skipped.");
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
if (allowCodePull === null) {
|
|
93
|
-
const codeAnswer = await inquirer.prompt(questionsPullFunctionsCode);
|
|
94
|
-
allowCodePull = codeAnswer.override;
|
|
95
|
-
}
|
|
96
|
-
if (!allowCodePull) {
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
let deploymentId = null;
|
|
100
|
-
try {
|
|
101
|
-
const fetchResponse = await functionsService.listDeployments({
|
|
102
|
-
functionId: func["$id"],
|
|
103
|
-
queries: [
|
|
104
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
105
|
-
JSON.stringify({ method: "orderDesc", values: ["$id"] }),
|
|
106
|
-
],
|
|
107
|
-
});
|
|
108
|
-
if (fetchResponse["total"] > 0) {
|
|
109
|
-
deploymentId = fetchResponse["deployments"][0]["$id"];
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
catch { }
|
|
113
|
-
if (deploymentId === null) {
|
|
114
|
-
log("Source code download skipped because function doesn't have any available deployment");
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
log("Pulling latest deployment code ...");
|
|
118
|
-
const compressedFileName = `${func["$id"]}-${+new Date()}.tar.gz`;
|
|
119
|
-
const downloadUrl = functionsService.getDeploymentDownload({
|
|
120
|
-
functionId: func["$id"],
|
|
121
|
-
deploymentId: deploymentId,
|
|
122
|
-
});
|
|
123
|
-
const client = (await getFunctionsService()).client;
|
|
124
|
-
const downloadBuffer = await client.call("get", new URL(downloadUrl), {}, {}, "arrayBuffer");
|
|
125
|
-
fs.writeFileSync(compressedFileName, Buffer.from(downloadBuffer));
|
|
126
|
-
tar.extract({
|
|
127
|
-
sync: true,
|
|
128
|
-
cwd: func["path"],
|
|
129
|
-
file: compressedFileName,
|
|
130
|
-
strict: false,
|
|
131
|
-
});
|
|
132
|
-
fs.rmSync(compressedFileName);
|
|
133
|
-
if (withVariables) {
|
|
134
|
-
const envFileLocation = `${func["path"]}/.env`;
|
|
135
|
-
try {
|
|
136
|
-
fs.rmSync(envFileLocation);
|
|
137
|
-
}
|
|
138
|
-
catch { }
|
|
139
|
-
fs.writeFileSync(envFileLocation, holdingVars.map((r) => `${r.key}=${r.value}\n`).join(""));
|
|
140
|
-
}
|
|
141
484
|
}
|
|
142
|
-
success(`Successfully pulled ${chalk.bold(total)} functions.`);
|
|
143
485
|
};
|
|
144
486
|
const pullSites = async ({ code, withVariables, } = {}) => {
|
|
145
|
-
process.chdir(localConfig.configDirectoryPath);
|
|
146
|
-
log("Fetching sites ...");
|
|
147
|
-
let total = 0;
|
|
148
487
|
const sitesService = await getSitesService();
|
|
149
|
-
const fetchResponse = await sitesService.list(
|
|
150
|
-
|
|
151
|
-
|
|
488
|
+
const fetchResponse = await sitesService.list({
|
|
489
|
+
queries: [Query.limit(1)],
|
|
490
|
+
});
|
|
152
491
|
if (fetchResponse["sites"].length <= 0) {
|
|
153
492
|
log("No sites found.");
|
|
154
|
-
success(`Successfully pulled ${chalk.bold(
|
|
493
|
+
success(`Successfully pulled ${chalk.bold(0)} sites.`);
|
|
155
494
|
return;
|
|
156
495
|
}
|
|
157
|
-
const
|
|
496
|
+
const sitesToCheck = cliConfig.all
|
|
158
497
|
? (await paginate(async () => (await getSitesService()).list(), {}, 100, "sites")).sites
|
|
159
498
|
: (await inquirer.prompt(questionsPullSites)).sites;
|
|
160
499
|
let allowCodePull = cliConfig.force === true ? true : null;
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
500
|
+
if (code !== false && allowCodePull === null) {
|
|
501
|
+
const codeAnswer = await inquirer.prompt(questionsPullSitesCode);
|
|
502
|
+
allowCodePull = codeAnswer.override;
|
|
503
|
+
}
|
|
504
|
+
const shouldPullCode = code !== false && allowCodePull === true;
|
|
505
|
+
const selectedSiteIds = sitesToCheck.map((s) => s.$id);
|
|
506
|
+
const pullInstance = await createPullInstance();
|
|
507
|
+
const sites = await pullInstance.pullSites({
|
|
508
|
+
code: shouldPullCode,
|
|
509
|
+
withVariables,
|
|
510
|
+
siteIds: selectedSiteIds,
|
|
511
|
+
});
|
|
512
|
+
for (const site of sites) {
|
|
164
513
|
const localSite = localConfig.getSite(site.$id);
|
|
165
|
-
site["path"] = localSite["path"];
|
|
166
|
-
if (!localSite["path"]) {
|
|
167
|
-
site["path"] = `sites/${site.name}`;
|
|
168
|
-
}
|
|
169
|
-
const holdingVars = site["vars"];
|
|
170
|
-
// We don't save var in to the config
|
|
171
|
-
delete site["vars"];
|
|
514
|
+
site["path"] = localSite["path"] || site["path"];
|
|
172
515
|
localConfig.addSite(site);
|
|
173
|
-
if (!fs.existsSync(site["path"])) {
|
|
174
|
-
fs.mkdirSync(site["path"], { recursive: true });
|
|
175
|
-
}
|
|
176
|
-
if (code === false) {
|
|
177
|
-
warn("Source code download skipped.");
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
if (allowCodePull === null) {
|
|
181
|
-
const codeAnswer = await inquirer.prompt(questionsPullSitesCode);
|
|
182
|
-
allowCodePull = codeAnswer.override;
|
|
183
|
-
}
|
|
184
|
-
if (!allowCodePull) {
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
let deploymentId = null;
|
|
188
|
-
try {
|
|
189
|
-
const fetchResponse = await sitesService.listDeployments({
|
|
190
|
-
siteId: site["$id"],
|
|
191
|
-
queries: [
|
|
192
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
193
|
-
JSON.stringify({ method: "orderDesc", values: ["$id"] }),
|
|
194
|
-
],
|
|
195
|
-
});
|
|
196
|
-
if (fetchResponse["total"] > 0) {
|
|
197
|
-
deploymentId = fetchResponse["deployments"][0]["$id"];
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
catch { }
|
|
201
|
-
if (deploymentId === null) {
|
|
202
|
-
log("Source code download skipped because site doesn't have any available deployment");
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
log("Pulling latest deployment code ...");
|
|
206
|
-
const compressedFileName = `${site["$id"]}-${+new Date()}.tar.gz`;
|
|
207
|
-
const downloadUrl = sitesService.getDeploymentDownload({
|
|
208
|
-
siteId: site["$id"],
|
|
209
|
-
deploymentId: deploymentId,
|
|
210
|
-
});
|
|
211
|
-
const client = (await getSitesService()).client;
|
|
212
|
-
const downloadBuffer = await client.call("get", new URL(downloadUrl), {}, {}, "arrayBuffer");
|
|
213
|
-
fs.writeFileSync(compressedFileName, Buffer.from(downloadBuffer));
|
|
214
|
-
tar.extract({
|
|
215
|
-
sync: true,
|
|
216
|
-
cwd: site["path"],
|
|
217
|
-
file: compressedFileName,
|
|
218
|
-
strict: false,
|
|
219
|
-
});
|
|
220
|
-
fs.rmSync(compressedFileName);
|
|
221
|
-
if (withVariables) {
|
|
222
|
-
const envFileLocation = `${site["path"]}/.env`;
|
|
223
|
-
try {
|
|
224
|
-
fs.rmSync(envFileLocation);
|
|
225
|
-
}
|
|
226
|
-
catch { }
|
|
227
|
-
fs.writeFileSync(envFileLocation, holdingVars.map((r) => `${r.key}=${r.value}\n`).join(""));
|
|
228
|
-
}
|
|
229
516
|
}
|
|
230
|
-
success(`Successfully pulled ${chalk.bold(total)} sites.`);
|
|
231
517
|
};
|
|
232
518
|
const pullCollection = async () => {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
let totalCollections = 0;
|
|
237
|
-
const databasesService = await getDatabasesService();
|
|
238
|
-
const fetchResponse = await databasesService.list([
|
|
239
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
240
|
-
]);
|
|
241
|
-
if (fetchResponse["databases"].length <= 0) {
|
|
242
|
-
log("No collections found.");
|
|
243
|
-
success(`Successfully pulled ${chalk.bold(totalCollections)} collections from ${chalk.bold(totalDatabases)} databases.`);
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
let databases = cliConfig.ids;
|
|
247
|
-
if (databases.length === 0) {
|
|
248
|
-
if (cliConfig.all) {
|
|
249
|
-
databases = (await paginate(async () => (await getDatabasesService()).list(), {}, 100, "databases")).databases.map((database) => database.$id);
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
databases = (await inquirer.prompt(questionsPullCollection)).databases;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
for (const databaseId of databases) {
|
|
256
|
-
const database = await databasesService.get(databaseId);
|
|
257
|
-
totalDatabases++;
|
|
258
|
-
log(`Pulling all collections from ${chalk.bold(database["name"])} database ...`);
|
|
519
|
+
const pullInstance = await createPullInstance();
|
|
520
|
+
const { databases, collections } = await pullInstance.pullCollections();
|
|
521
|
+
for (const database of databases) {
|
|
259
522
|
localConfig.addDatabase(database);
|
|
260
|
-
const { collections } = await paginate(async () => (await getDatabasesService()).listCollections(databaseId), {}, 100, "collections");
|
|
261
|
-
for (const collection of collections) {
|
|
262
|
-
totalCollections++;
|
|
263
|
-
localConfig.addCollection({
|
|
264
|
-
...collection,
|
|
265
|
-
$createdAt: undefined,
|
|
266
|
-
$updatedAt: undefined,
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
523
|
}
|
|
270
|
-
|
|
524
|
+
for (const collection of collections) {
|
|
525
|
+
localConfig.addCollection(collection);
|
|
526
|
+
}
|
|
271
527
|
};
|
|
272
528
|
const pullTable = async () => {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const tablesDBService = await getTablesDBService();
|
|
277
|
-
const fetchResponse = await tablesDBService.list([
|
|
278
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
279
|
-
]);
|
|
280
|
-
if (fetchResponse["databases"].length <= 0) {
|
|
281
|
-
log("No tables found.");
|
|
282
|
-
success(`Successfully pulled ${chalk.bold(totalTables)} tables from ${chalk.bold(totalTablesDBs)} tableDBs.`);
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
let databases = cliConfig.ids;
|
|
286
|
-
if (databases.length === 0) {
|
|
287
|
-
if (cliConfig.all) {
|
|
288
|
-
databases = (await paginate(async () => (await getTablesDBService()).list(), {}, 100, "databases")).databases.map((database) => database.$id);
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
databases = (await inquirer.prompt(questionsPullCollection)).databases;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
for (const databaseId of databases) {
|
|
295
|
-
const database = await tablesDBService.get(databaseId);
|
|
296
|
-
totalTablesDBs++;
|
|
297
|
-
log(`Pulling all tables from ${chalk.bold(database["name"])} database ...`);
|
|
529
|
+
const pullInstance = await createPullInstance();
|
|
530
|
+
const { databases, tables } = await pullInstance.pullTables();
|
|
531
|
+
for (const database of databases) {
|
|
298
532
|
localConfig.addTablesDB(database);
|
|
299
|
-
const { tables } = await paginate(async () => (await getTablesDBService()).listTables(databaseId), {}, 100, "tables");
|
|
300
|
-
for (const table of tables) {
|
|
301
|
-
totalTables++;
|
|
302
|
-
localConfig.addTable({
|
|
303
|
-
...table,
|
|
304
|
-
$createdAt: undefined,
|
|
305
|
-
$updatedAt: undefined,
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
533
|
}
|
|
309
|
-
|
|
534
|
+
for (const table of tables) {
|
|
535
|
+
localConfig.addTable(table);
|
|
536
|
+
}
|
|
310
537
|
};
|
|
311
538
|
const pullBucket = async () => {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
const storageService = await getStorageService();
|
|
315
|
-
const fetchResponse = await storageService.listBuckets([
|
|
316
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
317
|
-
]);
|
|
318
|
-
if (fetchResponse["buckets"].length <= 0) {
|
|
319
|
-
log("No buckets found.");
|
|
320
|
-
success(`Successfully pulled ${chalk.bold(total)} buckets.`);
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
const { buckets } = await paginate(async () => (await getStorageService()).listBuckets(), {}, 100, "buckets");
|
|
539
|
+
const pullInstance = await createPullInstance();
|
|
540
|
+
const buckets = await pullInstance.pullBuckets();
|
|
324
541
|
for (const bucket of buckets) {
|
|
325
|
-
total++;
|
|
326
|
-
log(`Pulling bucket ${chalk.bold(bucket["name"])} ...`);
|
|
327
542
|
localConfig.addBucket(bucket);
|
|
328
543
|
}
|
|
329
|
-
success(`Successfully pulled ${chalk.bold(total)} buckets.`);
|
|
330
544
|
};
|
|
331
545
|
const pullTeam = async () => {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
const teamsService = await getTeamsService();
|
|
335
|
-
const fetchResponse = await teamsService.list([
|
|
336
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
337
|
-
]);
|
|
338
|
-
if (fetchResponse["teams"].length <= 0) {
|
|
339
|
-
log("No teams found.");
|
|
340
|
-
success(`Successfully pulled ${chalk.bold(total)} teams.`);
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
const { teams } = await paginate(async () => (await getTeamsService()).list(), {}, 100, "teams");
|
|
546
|
+
const pullInstance = await createPullInstance();
|
|
547
|
+
const teams = await pullInstance.pullTeams();
|
|
344
548
|
for (const team of teams) {
|
|
345
|
-
total++;
|
|
346
|
-
log(`Pulling team ${chalk.bold(team["name"])} ...`);
|
|
347
549
|
localConfig.addTeam(team);
|
|
348
550
|
}
|
|
349
|
-
success(`Successfully pulled ${chalk.bold(total)} teams.`);
|
|
350
551
|
};
|
|
351
552
|
const pullMessagingTopic = async () => {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
const messagingService = await getMessagingService();
|
|
355
|
-
const fetchResponse = await messagingService.listTopics([
|
|
356
|
-
JSON.stringify({ method: "limit", values: [1] }),
|
|
357
|
-
]);
|
|
358
|
-
if (fetchResponse["topics"].length <= 0) {
|
|
359
|
-
log("No topics found.");
|
|
360
|
-
success(`Successfully pulled ${chalk.bold(total)} topics.`);
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
const { topics } = await paginate(async () => (await getMessagingService()).listTopics(), {}, 100, "topics");
|
|
553
|
+
const pullInstance = await createPullInstance();
|
|
554
|
+
const topics = await pullInstance.pullMessagingTopics();
|
|
364
555
|
for (const topic of topics) {
|
|
365
|
-
total++;
|
|
366
|
-
log(`Pulling topic ${chalk.bold(topic["name"])} ...`);
|
|
367
556
|
localConfig.addMessagingTopic(topic);
|
|
368
557
|
}
|
|
369
|
-
success(`Successfully pulled ${chalk.bold(total)} topics.`);
|
|
370
558
|
};
|
|
559
|
+
/** Commander.js exports */
|
|
371
560
|
export const pull = new Command("pull")
|
|
372
561
|
.description(commandDescriptions["pull"])
|
|
373
562
|
.action(actionRunner(() => pullResources({ skipDeprecated: true })));
|
|
374
563
|
pull
|
|
375
564
|
.command("all")
|
|
376
|
-
.description("Pull all
|
|
565
|
+
.description("Pull all resources")
|
|
377
566
|
.action(actionRunner(() => {
|
|
378
567
|
cliConfig.all = true;
|
|
379
568
|
return pullResources({
|