gitextract_minozs1b/ ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .github/ │ └── workflows/ │ ├── build.yml │ ├── ci.yml │ └── i18n.yml.disabled ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── post-merge ├── .prettierignore ├── .prettierrc ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ └── settings.json ├── .yarn/ │ └── patches/ │ ├── @handlewithcare-prosemirror-inputrules-npm-0.1.3-897e37b56f.patch │ ├── @tiptap-html-npm-3.15.3-a9641901db.patch │ ├── jest-snapshot-npm-29.7.0-15ef0a4ad6.patch │ └── strong-log-transformer-npm-2.1.0-45addd9278.patch ├── .yarnrc.yml ├── Dockerfile ├── LICENSE ├── README.md ├── TRANSLATION.md ├── apps/ │ ├── client-server/ │ │ ├── .eslintrc.json │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── account/ │ │ │ │ │ ├── account.controller.ts │ │ │ │ │ ├── account.events.ts │ │ │ │ │ ├── account.module.ts │ │ │ │ │ ├── account.service.spec.ts │ │ │ │ │ ├── account.service.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-account.dto.ts │ │ │ │ │ │ ├── set-website-data-request.dto.ts │ │ │ │ │ │ └── update-account.dto.ts │ │ │ │ │ └── login-state-poller.ts │ │ │ │ ├── app.controller.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.service.ts │ │ │ │ ├── common/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── postybirb-controller.ts │ │ │ │ │ └── service/ │ │ │ │ │ └── postybirb-service.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── custom-shortcuts/ │ │ │ │ │ ├── custom-shortcut.events.ts │ │ │ │ │ ├── custom-shortcuts.controller.ts │ │ │ │ │ ├── custom-shortcuts.module.ts │ │ │ │ │ ├── custom-shortcuts.service.ts │ │ │ │ │ └── dtos/ │ │ │ │ │ ├── create-custom-shortcut.dto.ts │ │ │ │ │ └── update-custom-shortcut.dto.ts │ │ │ │ ├── directory-watchers/ │ │ │ │ │ ├── directory-watcher.events.ts │ │ │ │ │ ├── directory-watchers.controller.ts │ │ │ │ │ ├── directory-watchers.module.ts │ │ │ │ │ ├── directory-watchers.service.spec.ts │ │ │ │ │ ├── directory-watchers.service.ts │ │ │ │ │ └── dtos/ │ │ │ │ │ ├── check-path.dto.ts │ │ │ │ │ ├── create-directory-watcher.dto.ts │ │ │ │ │ └── update-directory-watcher.dto.ts │ │ │ │ ├── drizzle/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── account.entity.ts │ │ │ │ │ │ ├── custom-shortcut.entity.ts │ │ │ │ │ │ ├── database-entity.spec.ts │ │ │ │ │ │ ├── database-entity.ts │ │ │ │ │ │ ├── directory-watcher.entity.ts │ │ │ │ │ │ ├── file-buffer.entity.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── notification.entity.ts │ │ │ │ │ │ ├── post-event.entity.ts │ │ │ │ │ │ ├── post-queue-record.entity.ts │ │ │ │ │ │ ├── post-record.entity.ts │ │ │ │ │ │ ├── settings.entity.ts │ │ │ │ │ │ ├── submission-file.entity.ts │ │ │ │ │ │ ├── submission.entity.ts │ │ │ │ │ │ ├── tag-converter.entity.ts │ │ │ │ │ │ ├── tag-group.entity.ts │ │ │ │ │ │ ├── user-converter.entity.ts │ │ │ │ │ │ ├── user-specified-website-options.entity.ts │ │ │ │ │ │ ├── website-data.entity.ts │ │ │ │ │ │ └── website-options.entity.ts │ │ │ │ │ ├── postybirb-database/ │ │ │ │ │ │ ├── find-options.type.ts │ │ │ │ │ │ ├── postybirb-database.spec.ts │ │ │ │ │ │ ├── postybirb-database.ts │ │ │ │ │ │ ├── postybirb-database.util.ts │ │ │ │ │ │ └── schema-entity-map.ts │ │ │ │ │ └── transaction-context.ts │ │ │ │ ├── file/ │ │ │ │ │ ├── file.controller.ts │ │ │ │ │ ├── file.module.ts │ │ │ │ │ ├── file.service.spec.ts │ │ │ │ │ ├── file.service.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── multer-file-info.ts │ │ │ │ │ │ ├── task-type.enum.ts │ │ │ │ │ │ └── task.ts │ │ │ │ │ ├── services/ │ │ │ │ │ │ ├── create-file.service.ts │ │ │ │ │ │ └── update-file.service.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── image.util.ts │ │ │ │ ├── file-converter/ │ │ │ │ │ ├── converters/ │ │ │ │ │ │ ├── file-converter.ts │ │ │ │ │ │ └── text-file-converter.ts │ │ │ │ │ ├── file-converter.module.ts │ │ │ │ │ ├── file-converter.service.spec.ts │ │ │ │ │ └── file-converter.service.ts │ │ │ │ ├── form-generator/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ └── form-generation-request.dto.ts │ │ │ │ │ ├── form-generator.controller.ts │ │ │ │ │ ├── form-generator.module.ts │ │ │ │ │ ├── form-generator.service.spec.ts │ │ │ │ │ └── form-generator.service.ts │ │ │ │ ├── image-processing/ │ │ │ │ │ ├── image-processing.module.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── sharp-instance-manager.ts │ │ │ │ ├── legacy-database-importer/ │ │ │ │ │ ├── converters/ │ │ │ │ │ │ ├── legacy-converter.ts │ │ │ │ │ │ ├── legacy-custom-shortcut.converter.spec.ts │ │ │ │ │ │ ├── legacy-custom-shortcut.converter.ts │ │ │ │ │ │ ├── legacy-tag-converter.converter.spec.ts │ │ │ │ │ │ ├── legacy-tag-converter.converter.ts │ │ │ │ │ │ ├── legacy-tag-group.converter.spec.ts │ │ │ │ │ │ ├── legacy-tag-group.converter.ts │ │ │ │ │ │ ├── legacy-user-account.converter.spec.ts │ │ │ │ │ │ ├── legacy-user-account.converter.ts │ │ │ │ │ │ ├── legacy-website-data.converter.spec.ts │ │ │ │ │ │ └── legacy-website-data.converter.ts │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ └── legacy-import.dto.ts │ │ │ │ │ ├── legacy-database-importer.controller.ts │ │ │ │ │ ├── legacy-database-importer.module.ts │ │ │ │ │ ├── legacy-database-importer.service.ts │ │ │ │ │ ├── legacy-entities/ │ │ │ │ │ │ ├── legacy-converter-entity.ts │ │ │ │ │ │ ├── legacy-custom-shortcut.ts │ │ │ │ │ │ ├── legacy-tag-converter.ts │ │ │ │ │ │ ├── legacy-tag-group.ts │ │ │ │ │ │ ├── legacy-user-account.ts │ │ │ │ │ │ └── legacy-website-data.ts │ │ │ │ │ ├── transformers/ │ │ │ │ │ │ ├── implementations/ │ │ │ │ │ │ │ ├── bluesky-data-transformer.ts │ │ │ │ │ │ │ ├── custom-data-transformer.ts │ │ │ │ │ │ │ ├── discord-data-transformer.ts │ │ │ │ │ │ │ ├── e621-data-transformer.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── inkbunny-data-transformer.ts │ │ │ │ │ │ │ ├── megalodon-data-transformer.ts │ │ │ │ │ │ │ ├── telegram-data-transformer.ts │ │ │ │ │ │ │ └── twitter-data-transformer.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── legacy-website-data-transformer.ts │ │ │ │ │ │ └── website-data-transformer-registry.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── ndjson-parser.ts │ │ │ │ │ └── website-name-mapper.ts │ │ │ │ ├── logs/ │ │ │ │ │ ├── logs.controller.ts │ │ │ │ │ ├── logs.module.ts │ │ │ │ │ └── logs.service.ts │ │ │ │ ├── notifications/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-notification.dto.ts │ │ │ │ │ │ └── update-notification.dto.ts │ │ │ │ │ ├── notification.events.ts │ │ │ │ │ ├── notifications.controller.ts │ │ │ │ │ ├── notifications.module.ts │ │ │ │ │ ├── notifications.service.spec.ts │ │ │ │ │ └── notifications.service.ts │ │ │ │ ├── post/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── post-queue-action.dto.ts │ │ │ │ │ │ └── queue-post-record.dto.ts │ │ │ │ │ ├── errors/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── invalid-post-chain.error.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── cancellable-token.ts │ │ │ │ │ │ ├── cancellation-error.ts │ │ │ │ │ │ └── posting-file.ts │ │ │ │ │ ├── post.controller.ts │ │ │ │ │ ├── post.module.ts │ │ │ │ │ ├── post.service.ts │ │ │ │ │ └── services/ │ │ │ │ │ ├── post-file-resizer/ │ │ │ │ │ │ ├── post-file-resizer.service.spec.ts │ │ │ │ │ │ └── post-file-resizer.service.ts │ │ │ │ │ ├── post-manager/ │ │ │ │ │ │ └── post-manager.controller.ts │ │ │ │ │ ├── post-manager-v2/ │ │ │ │ │ │ ├── base-post-manager.service.ts │ │ │ │ │ │ ├── file-submission-post-manager.service.spec.ts │ │ │ │ │ │ ├── file-submission-post-manager.service.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── message-submission-post-manager.service.spec.ts │ │ │ │ │ │ ├── message-submission-post-manager.service.ts │ │ │ │ │ │ └── post-manager-registry.service.ts │ │ │ │ │ ├── post-queue/ │ │ │ │ │ │ ├── post-queue.controller.ts │ │ │ │ │ │ ├── post-queue.service.spec.ts │ │ │ │ │ │ └── post-queue.service.ts │ │ │ │ │ └── post-record-factory/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post-event.repository.ts │ │ │ │ │ ├── post-record-factory.service.spec.ts │ │ │ │ │ └── post-record-factory.service.ts │ │ │ │ ├── post-parsers/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── description-node/ │ │ │ │ │ │ │ ├── converters/ │ │ │ │ │ │ │ │ ├── base-converter.ts │ │ │ │ │ │ │ │ ├── bbcode-converter.ts │ │ │ │ │ │ │ │ ├── custom-converter.ts │ │ │ │ │ │ │ │ ├── html-converter.ts │ │ │ │ │ │ │ │ ├── npf-converter.spec.ts │ │ │ │ │ │ │ │ ├── npf-converter.ts │ │ │ │ │ │ │ │ └── plaintext-converter.ts │ │ │ │ │ │ │ ├── description-node-tree.ts │ │ │ │ │ │ │ ├── description-node.base.ts │ │ │ │ │ │ │ └── description-node.types.ts │ │ │ │ │ │ └── description-node.spec.ts │ │ │ │ │ ├── parsers/ │ │ │ │ │ │ ├── content-warning-parser.ts │ │ │ │ │ │ ├── description-parser.service.spec.ts │ │ │ │ │ │ ├── description-parser.service.ts │ │ │ │ │ │ ├── rating-parser.spec.ts │ │ │ │ │ │ ├── rating-parser.ts │ │ │ │ │ │ ├── tag-parser.service.spec.ts │ │ │ │ │ │ ├── tag-parser.service.ts │ │ │ │ │ │ ├── title-parser.spec.ts │ │ │ │ │ │ └── title-parser.ts │ │ │ │ │ ├── post-parsers.module.ts │ │ │ │ │ └── post-parsers.service.ts │ │ │ │ ├── remote/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── update-cookies-remote.dto.ts │ │ │ │ │ ├── remote.controller.ts │ │ │ │ │ ├── remote.middleware.ts │ │ │ │ │ ├── remote.module.ts │ │ │ │ │ └── remote.service.ts │ │ │ │ ├── security-and-authentication/ │ │ │ │ │ └── ssl.ts │ │ │ │ ├── settings/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── update-settings.dto.ts │ │ │ │ │ │ └── update-startup-settings.dto.ts │ │ │ │ │ ├── settings.controller.ts │ │ │ │ │ ├── settings.events.ts │ │ │ │ │ ├── settings.module.ts │ │ │ │ │ ├── settings.service.spec.ts │ │ │ │ │ └── settings.service.ts │ │ │ │ ├── submission/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── apply-multi-submission.dto.ts │ │ │ │ │ │ ├── apply-template-options.dto.ts │ │ │ │ │ │ ├── create-submission.dto.ts │ │ │ │ │ │ ├── reorder-submission-files.dto.ts │ │ │ │ │ │ ├── reorder-submission.dto.ts │ │ │ │ │ │ ├── template-option.dto.ts │ │ │ │ │ │ ├── update-alt-file.dto.ts │ │ │ │ │ │ ├── update-submission-template-name.dto.ts │ │ │ │ │ │ └── update-submission.dto.ts │ │ │ │ │ ├── file-submission.controller.ts │ │ │ │ │ ├── services/ │ │ │ │ │ │ ├── file-submission.service.ts │ │ │ │ │ │ ├── message-submission.service.ts │ │ │ │ │ │ ├── submission-service.interface.ts │ │ │ │ │ │ ├── submission.service.spec.ts │ │ │ │ │ │ └── submission.service.ts │ │ │ │ │ ├── submission.controller.ts │ │ │ │ │ ├── submission.events.ts │ │ │ │ │ └── submission.module.ts │ │ │ │ ├── tag-converters/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-tag-converter.dto.ts │ │ │ │ │ │ └── update-tag-converter.dto.ts │ │ │ │ │ ├── tag-converter.events.ts │ │ │ │ │ ├── tag-converters.controller.ts │ │ │ │ │ ├── tag-converters.module.ts │ │ │ │ │ ├── tag-converters.service.spec.ts │ │ │ │ │ └── tag-converters.service.ts │ │ │ │ ├── tag-groups/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-tag-group.dto.ts │ │ │ │ │ │ └── update-tag-group.dto.ts │ │ │ │ │ ├── tag-group.events.ts │ │ │ │ │ ├── tag-groups.controller.ts │ │ │ │ │ ├── tag-groups.module.ts │ │ │ │ │ ├── tag-groups.service.spec.ts │ │ │ │ │ └── tag-groups.service.ts │ │ │ │ ├── update/ │ │ │ │ │ ├── update.controller.ts │ │ │ │ │ ├── update.events.ts │ │ │ │ │ ├── update.module.ts │ │ │ │ │ └── update.service.ts │ │ │ │ ├── user-converters/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-user-converter.dto.ts │ │ │ │ │ │ └── update-user-converter.dto.ts │ │ │ │ │ ├── user-converter.events.ts │ │ │ │ │ ├── user-converters.controller.ts │ │ │ │ │ ├── user-converters.module.ts │ │ │ │ │ ├── user-converters.service.spec.ts │ │ │ │ │ └── user-converters.service.ts │ │ │ │ ├── user-specified-website-options/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-user-specified-website-options.dto.ts │ │ │ │ │ │ └── update-user-specified-website-options.dto.ts │ │ │ │ │ ├── user-specified-website-options.controller.ts │ │ │ │ │ ├── user-specified-website-options.module.ts │ │ │ │ │ ├── user-specified-website-options.service.spec.ts │ │ │ │ │ └── user-specified-website-options.service.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── blocknote-to-tiptap.ts │ │ │ │ │ ├── coerce.util.ts │ │ │ │ │ ├── filesize.util.ts │ │ │ │ │ ├── html-parser.util.ts │ │ │ │ │ ├── select-option.util.ts │ │ │ │ │ └── wait.util.ts │ │ │ │ ├── validation/ │ │ │ │ │ ├── validation.module.ts │ │ │ │ │ ├── validation.service.spec.ts │ │ │ │ │ ├── validation.service.ts │ │ │ │ │ └── validators/ │ │ │ │ │ ├── common-field-validators.ts │ │ │ │ │ ├── datetime-field-validators.ts │ │ │ │ │ ├── description-validators.ts │ │ │ │ │ ├── file-submission-validators.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── select-field-validators.ts │ │ │ │ │ ├── tag-validators.ts │ │ │ │ │ ├── title-validators.ts │ │ │ │ │ └── validator.type.ts │ │ │ │ ├── web-socket/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── web-socket-event.ts │ │ │ │ │ ├── web-socket-adapter.ts │ │ │ │ │ ├── web-socket-gateway.ts │ │ │ │ │ ├── web-socket.events.ts │ │ │ │ │ └── web-socket.module.ts │ │ │ │ ├── website-options/ │ │ │ │ │ ├── dtos/ │ │ │ │ │ │ ├── create-website-options.dto.ts │ │ │ │ │ │ ├── preview-description.dto.ts │ │ │ │ │ │ ├── update-submission-website-options.dto.ts │ │ │ │ │ │ ├── update-website-options.dto.ts │ │ │ │ │ │ └── validate-website-options.dto.ts │ │ │ │ │ ├── website-options.controller.ts │ │ │ │ │ ├── website-options.module.ts │ │ │ │ │ ├── website-options.service.spec.ts │ │ │ │ │ └── website-options.service.ts │ │ │ │ └── websites/ │ │ │ │ ├── commons/ │ │ │ │ │ ├── post-builder.spec.ts │ │ │ │ │ ├── post-builder.ts │ │ │ │ │ ├── validator-passthru.ts │ │ │ │ │ └── validator.ts │ │ │ │ ├── decorators/ │ │ │ │ │ ├── disable-ads.decorator.ts │ │ │ │ │ ├── login-flow.decorator.ts │ │ │ │ │ ├── supports-files.decorator.ts │ │ │ │ │ ├── supports-username-shortcut.decorator.ts │ │ │ │ │ ├── website-decorator-props.ts │ │ │ │ │ └── website-metadata.decorator.ts │ │ │ │ ├── dtos/ │ │ │ │ │ └── oauth-website-request.dto.ts │ │ │ │ ├── implementations/ │ │ │ │ │ ├── artconomy/ │ │ │ │ │ │ ├── artconomy.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── artconomy-account-data.ts │ │ │ │ │ │ ├── artconomy-file-submission.ts │ │ │ │ │ │ └── artconomy-message-submission.ts │ │ │ │ │ ├── aryion/ │ │ │ │ │ │ ├── aryion.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── aryion-account-data.ts │ │ │ │ │ │ └── aryion-file-submission.ts │ │ │ │ │ ├── bluesky/ │ │ │ │ │ │ ├── bluesky.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── bluesky-file-submission.ts │ │ │ │ │ │ └── bluesky-message-submission.ts │ │ │ │ │ ├── cara/ │ │ │ │ │ │ ├── cara.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── cara-account-data.ts │ │ │ │ │ │ ├── cara-file-submission.ts │ │ │ │ │ │ └── cara-message-submission.ts │ │ │ │ │ ├── custom/ │ │ │ │ │ │ ├── custom.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── custom-file-submission.ts │ │ │ │ │ │ └── custom-message-submission.ts │ │ │ │ │ ├── default/ │ │ │ │ │ │ └── default.website.ts │ │ │ │ │ ├── derpibooru/ │ │ │ │ │ │ ├── derpibooru.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── derpibooru-file-submission.ts │ │ │ │ │ ├── deviant-art/ │ │ │ │ │ │ ├── deviant-art-description-converter.ts │ │ │ │ │ │ ├── deviant-art.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── deviant-art-account-data.ts │ │ │ │ │ │ ├── deviant-art-file-submission.ts │ │ │ │ │ │ └── deviant-art-message-submission.ts │ │ │ │ │ ├── discord/ │ │ │ │ │ │ ├── discord.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── discord-file-submission.ts │ │ │ │ │ │ └── discord-message-submission.ts │ │ │ │ │ ├── e621/ │ │ │ │ │ │ ├── e621.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── e621-file-submission.ts │ │ │ │ │ ├── firefish/ │ │ │ │ │ │ └── firefish.website.ts │ │ │ │ │ ├── friendica/ │ │ │ │ │ │ └── friendica.website.ts │ │ │ │ │ ├── fur-affinity/ │ │ │ │ │ │ ├── fur-affinity.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── fur-affinity-account-data.ts │ │ │ │ │ │ ├── fur-affinity-categories.ts │ │ │ │ │ │ ├── fur-affinity-file-submission.ts │ │ │ │ │ │ ├── fur-affinity-message-submission.ts │ │ │ │ │ │ ├── fur-affinity-species-options.ts │ │ │ │ │ │ └── fur-affinity-themes.ts │ │ │ │ │ ├── furbooru/ │ │ │ │ │ │ ├── furbooru.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── furbooru-file-submission.ts │ │ │ │ │ ├── gotosocial/ │ │ │ │ │ │ └── gotosocial.website.ts │ │ │ │ │ ├── hentai-foundry/ │ │ │ │ │ │ ├── hentai-foundry.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── hentai-foundry-account-data.ts │ │ │ │ │ │ ├── hentai-foundry-categories.ts │ │ │ │ │ │ ├── hentai-foundry-file-submission.ts │ │ │ │ │ │ └── hentai-foundry-message-submission.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── inkbunny/ │ │ │ │ │ │ ├── inkbunny.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── inkbunny-file-submission.ts │ │ │ │ │ ├── instagram/ │ │ │ │ │ │ ├── instagram-api-service/ │ │ │ │ │ │ │ └── instagram-api-service.ts │ │ │ │ │ │ ├── instagram-blob-service/ │ │ │ │ │ │ │ └── instagram-blob-service.ts │ │ │ │ │ │ ├── instagram.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── instagram-file-submission.ts │ │ │ │ │ ├── itaku/ │ │ │ │ │ │ ├── itaku.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── itaku-account-data.ts │ │ │ │ │ │ ├── itaku-file-submission.ts │ │ │ │ │ │ ├── itaku-message-submission.ts │ │ │ │ │ │ └── itaku-user-info.ts │ │ │ │ │ ├── ko-fi/ │ │ │ │ │ │ ├── ko-fi.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── ko-fi-account-data.ts │ │ │ │ │ │ ├── ko-fi-file-submission.ts │ │ │ │ │ │ └── ko-fi-message-submission.ts │ │ │ │ │ ├── manebooru/ │ │ │ │ │ │ ├── manebooru.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── manebooru-file-submission.ts │ │ │ │ │ ├── mastodon/ │ │ │ │ │ │ └── mastodon.website.ts │ │ │ │ │ ├── megalodon/ │ │ │ │ │ │ ├── megalodon-api-service.ts │ │ │ │ │ │ ├── megalodon.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── megalodon-file-submission.ts │ │ │ │ │ │ └── megalodon-message-submission.ts │ │ │ │ │ ├── misskey/ │ │ │ │ │ │ ├── misskey-api-service.ts │ │ │ │ │ │ ├── misskey.website.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ ├── misskey-file-submission.ts │ │ │ │ │ │ └── misskey-message-submission.ts │ │ │ │ │ ├── newgrounds/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── newgrounds-account-data.ts │ │ │ │ │ │ │ ├── newgrounds-base-submission.ts │ │ │ │ │ │ │ ├── newgrounds-file-submission.ts │ │ │ │ │ │ │ └── newgrounds-message-submission.ts │ │ │ │ │ │ └── newgrounds.website.ts │ │ │ │ │ ├── patreon/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── patreon-account-data.ts │ │ │ │ │ │ │ ├── patreon-campaign-types.ts │ │ │ │ │ │ │ ├── patreon-collection-types.ts │ │ │ │ │ │ │ ├── patreon-file-submission.ts │ │ │ │ │ │ │ ├── patreon-media-upload-types.ts │ │ │ │ │ │ │ ├── patreon-message-submission.ts │ │ │ │ │ │ │ └── patreon-post-types.ts │ │ │ │ │ │ ├── patreon-description-converter.ts │ │ │ │ │ │ └── patreon.website.ts │ │ │ │ │ ├── philomena/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── philomena-account-data.ts │ │ │ │ │ │ │ └── philomena-file-submission.ts │ │ │ │ │ │ └── philomena.website.ts │ │ │ │ │ ├── picarto/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── picarto-account-data.ts │ │ │ │ │ │ │ ├── picarto-categories.ts │ │ │ │ │ │ │ ├── picarto-file-submission.ts │ │ │ │ │ │ │ └── picarto-software.ts │ │ │ │ │ │ └── picarto.website.ts │ │ │ │ │ ├── piczel/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── piczel-account-data.ts │ │ │ │ │ │ │ └── piczel-file-submission.ts │ │ │ │ │ │ └── piczel.website.ts │ │ │ │ │ ├── pillowfort/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── pillowfort-account-data.ts │ │ │ │ │ │ │ ├── pillowfort-file-submission.ts │ │ │ │ │ │ │ └── pillowfort-message-submission.ts │ │ │ │ │ │ └── pillowfort.website.ts │ │ │ │ │ ├── pixelfed/ │ │ │ │ │ │ └── pixelfed.website.ts │ │ │ │ │ ├── pixiv/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── pixiv-account-data.ts │ │ │ │ │ │ │ └── pixiv-file-submission.ts │ │ │ │ │ │ └── pixiv.website.ts │ │ │ │ │ ├── pleroma/ │ │ │ │ │ │ └── pleroma.website.ts │ │ │ │ │ ├── provider.ts │ │ │ │ │ ├── sofurry/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── sofurry-account-data.ts │ │ │ │ │ │ │ ├── sofurry-categories.ts │ │ │ │ │ │ │ └── sofurry-file-submission.ts │ │ │ │ │ │ └── sofurry.website.ts │ │ │ │ │ ├── subscribe-star/ │ │ │ │ │ │ ├── base-subscribe-star.website.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── subscribe-star-account-data.ts │ │ │ │ │ │ │ ├── subscribe-star-file-submission.ts │ │ │ │ │ │ │ └── subscribe-star-message-submission.ts │ │ │ │ │ │ ├── subscribe-star-adult.website.ts │ │ │ │ │ │ └── subscribe-star.website.ts │ │ │ │ │ ├── telegram/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── telegram-file-submission.ts │ │ │ │ │ │ │ └── telegram-message-submission.ts │ │ │ │ │ │ └── telegram.website.ts │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── test-file-submission.ts │ │ │ │ │ │ │ └── test-message-submission.ts │ │ │ │ │ │ └── test.website.ts │ │ │ │ │ ├── toyhouse/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── toyhouse-account-data.ts │ │ │ │ │ │ │ └── toyhouse-file-submission.ts │ │ │ │ │ │ └── toyhouse.website.ts │ │ │ │ │ ├── tumblr/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── tumblr-account-data.ts │ │ │ │ │ │ │ ├── tumblr-file-submission.ts │ │ │ │ │ │ │ └── tumblr-message-submission.ts │ │ │ │ │ │ └── tumblr.website.ts │ │ │ │ │ ├── twitter/ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── twitter-file-submission.ts │ │ │ │ │ │ │ └── twitter-message-submission.ts │ │ │ │ │ │ ├── twitter-api-service/ │ │ │ │ │ │ │ └── twitter-api-service.ts │ │ │ │ │ │ └── twitter.website.ts │ │ │ │ │ └── weasyl/ │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── weasyl-account-data.ts │ │ │ │ │ │ ├── weasyl-categories.ts │ │ │ │ │ │ ├── weasyl-file-submission.ts │ │ │ │ │ │ └── weasyl-message-submission.ts │ │ │ │ │ └── weasyl.website.ts │ │ │ │ ├── models/ │ │ │ │ │ ├── base-website-options.spec.ts │ │ │ │ │ ├── base-website-options.ts │ │ │ │ │ ├── data-property-accessibility.ts │ │ │ │ │ ├── default-website-options.ts │ │ │ │ │ └── website-modifiers/ │ │ │ │ │ ├── file-website.ts │ │ │ │ │ ├── message-website.ts │ │ │ │ │ ├── oauth-website.ts │ │ │ │ │ ├── with-custom-description-parser.ts │ │ │ │ │ ├── with-dynamic-file-size-limits.ts │ │ │ │ │ └── with-runtime-description-parser.ts │ │ │ │ ├── website-data-manager.spec.ts │ │ │ │ ├── website-data-manager.ts │ │ │ │ ├── website-registry.service.spec.ts │ │ │ │ ├── website-registry.service.ts │ │ │ │ ├── website.events.ts │ │ │ │ ├── website.spec.ts │ │ │ │ ├── website.ts │ │ │ │ ├── websites.controller.ts │ │ │ │ └── websites.module.ts │ │ │ ├── assets/ │ │ │ │ ├── .gitkeep │ │ │ │ └── sharp-worker.js │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── main.ts │ │ │ └── test-files/ │ │ │ └── README.md │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ ├── postybirb/ │ │ ├── .eslintrc.json │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── api/ │ │ │ │ │ └── preload.ts │ │ │ │ ├── app.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── events/ │ │ │ │ │ └── electron.events.ts │ │ │ │ └── loader/ │ │ │ │ ├── css/ │ │ │ │ │ └── style.css │ │ │ │ ├── fonts/ │ │ │ │ │ └── Mylodon-Light.otf │ │ │ │ ├── loader.html │ │ │ │ └── loader.js │ │ │ ├── environments/ │ │ │ │ ├── environment.base.ts │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── main.ts │ │ │ └── migrations/ │ │ │ ├── 0000_tough_ken_ellis.sql │ │ │ ├── 0001_noisy_kate_bishop.sql │ │ │ ├── 0002_pretty_sunfire.sql │ │ │ ├── 0003_glamorous_power_pack.sql │ │ │ ├── 0004_fuzzy_rafael_vega.sql │ │ │ ├── 0005_exotic_nebula.sql │ │ │ ├── 0006_cooing_songbird.sql │ │ │ └── meta/ │ │ │ ├── 0000_snapshot.json │ │ │ ├── 0001_snapshot.json │ │ │ ├── 0002_snapshot.json │ │ │ ├── 0003_snapshot.json │ │ │ ├── 0004_snapshot.json │ │ │ ├── 0005_snapshot.json │ │ │ ├── 0006_snapshot.json │ │ │ └── _journal.json │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ ├── postybirb-cloud-server/ │ │ ├── .gitignore │ │ ├── host.json │ │ ├── local.settings.json │ │ ├── package.json │ │ ├── src/ │ │ │ └── functions/ │ │ │ └── upload.ts │ │ └── tsconfig.json │ └── postybirb-ui/ │ ├── .eslintrc.json │ ├── index.html │ ├── jest.config.ts │ ├── postcss.config.js │ ├── project.json │ ├── src/ │ │ ├── README.md │ │ ├── api/ │ │ │ ├── account.api.ts │ │ │ ├── base.api.ts │ │ │ ├── custom-shortcut.api.ts │ │ │ ├── directory-watchers.api.ts │ │ │ ├── file-submission.api.ts │ │ │ ├── form-generator.api.ts │ │ │ ├── legacy-database-importer.api.ts │ │ │ ├── notification.api.ts │ │ │ ├── post-manager.api.ts │ │ │ ├── post-queue.api.ts │ │ │ ├── post.api.ts │ │ │ ├── remote.api.ts │ │ │ ├── settings.api.ts │ │ │ ├── submission.api.ts │ │ │ ├── tag-converters.api.ts │ │ │ ├── tag-groups.api.ts │ │ │ ├── update.api.ts │ │ │ ├── user-converters.api.ts │ │ │ ├── user-specified-website-options.api.ts │ │ │ ├── website-options.api.ts │ │ │ └── websites.api.ts │ │ ├── app-insights-ui.ts │ │ ├── blocknote-locales.d.ts │ │ ├── components/ │ │ │ ├── confirm-action-modal/ │ │ │ │ ├── confirm-action-modal.tsx │ │ │ │ └── index.ts │ │ │ ├── dialogs/ │ │ │ │ └── settings-dialog/ │ │ │ │ ├── sections/ │ │ │ │ │ ├── app-settings-section.tsx │ │ │ │ │ ├── appearance-settings-section.tsx │ │ │ │ │ ├── data-settings-section.tsx │ │ │ │ │ ├── description-settings-section.tsx │ │ │ │ │ ├── import-settings-section.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notifications-settings-section.tsx │ │ │ │ │ ├── remote-settings-section.tsx │ │ │ │ │ ├── spellchecker-settings-section.tsx │ │ │ │ │ └── tags-settings-section.tsx │ │ │ │ ├── settings-dialog.module.css │ │ │ │ └── settings-dialog.tsx │ │ │ ├── disclaimer/ │ │ │ │ └── disclaimer.tsx │ │ │ ├── drawers/ │ │ │ │ ├── converter-drawer/ │ │ │ │ │ ├── converter-drawer.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── custom-shortcuts-drawer/ │ │ │ │ │ ├── custom-shortcuts-drawer.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── drawers.tsx │ │ │ │ ├── file-watcher-drawer/ │ │ │ │ │ ├── file-watcher-drawer.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── notifications-drawer/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notifications-drawer.tsx │ │ │ │ ├── schedule-drawer/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── schedule-calendar.tsx │ │ │ │ │ ├── schedule-drawer.css │ │ │ │ │ ├── schedule-drawer.tsx │ │ │ │ │ └── submission-list.tsx │ │ │ │ ├── section-drawer.tsx │ │ │ │ ├── tag-converter-drawer/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tag-converter-drawer.tsx │ │ │ │ ├── tag-group-drawer/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tag-group-drawer.tsx │ │ │ │ └── user-converter-drawer/ │ │ │ │ ├── index.ts │ │ │ │ └── user-converter-drawer.tsx │ │ │ ├── empty-state/ │ │ │ │ ├── empty-state.tsx │ │ │ │ └── index.ts │ │ │ ├── error-boundary/ │ │ │ │ ├── error-boundary.tsx │ │ │ │ ├── index.ts │ │ │ │ └── specialized-error-boundaries.tsx │ │ │ ├── hold-to-confirm/ │ │ │ │ ├── hold-to-confirm.tsx │ │ │ │ └── index.ts │ │ │ ├── language-picker/ │ │ │ │ ├── index.ts │ │ │ │ ├── language-picker.css │ │ │ │ └── language-picker.tsx │ │ │ ├── layout/ │ │ │ │ ├── content-area.tsx │ │ │ │ ├── content-navbar.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── primary-content.tsx │ │ │ │ ├── section-panel.tsx │ │ │ │ └── side-nav.tsx │ │ │ ├── onboarding-tour/ │ │ │ │ ├── index.ts │ │ │ │ ├── mantine-tooltip.tsx │ │ │ │ ├── tour-provider.tsx │ │ │ │ └── tours/ │ │ │ │ ├── accounts-tour.tsx │ │ │ │ ├── custom-shortcuts-tour.tsx │ │ │ │ ├── file-watchers-tour.tsx │ │ │ │ ├── home-tour.tsx │ │ │ │ ├── layout-tour.tsx │ │ │ │ ├── notifications-tour.tsx │ │ │ │ ├── schedule-tour.tsx │ │ │ │ ├── submission-edit-tour.tsx │ │ │ │ ├── submissions-tour.tsx │ │ │ │ ├── tag-converters-tour.tsx │ │ │ │ ├── tag-groups-tour.tsx │ │ │ │ ├── templates-tour.tsx │ │ │ │ └── user-converters-tour.tsx │ │ │ ├── sections/ │ │ │ │ ├── accounts-section/ │ │ │ │ │ ├── account-section-header.tsx │ │ │ │ │ ├── accounts-content.tsx │ │ │ │ │ ├── accounts-section.tsx │ │ │ │ │ ├── context/ │ │ │ │ │ │ ├── accounts-context.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── custom-login-placeholder.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── use-account-actions.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── login-webview.tsx │ │ │ │ │ ├── website-account-card.tsx │ │ │ │ │ ├── website-visibility-picker.tsx │ │ │ │ │ └── webview-tag.ts │ │ │ │ ├── file-submissions-section/ │ │ │ │ │ └── hooks/ │ │ │ │ │ └── use-file-submissions.ts │ │ │ │ ├── home-section/ │ │ │ │ │ ├── account-health-panel.tsx │ │ │ │ │ ├── home-content.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── queue-control-card.tsx │ │ │ │ │ ├── recent-activity-panel.tsx │ │ │ │ │ ├── schedule-calendar-panel.tsx │ │ │ │ │ ├── stat-card.tsx │ │ │ │ │ ├── upcoming-posts-panel.tsx │ │ │ │ │ └── validation-issues-panel.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── submissions-section/ │ │ │ │ │ ├── archived-submission-list.tsx │ │ │ │ │ ├── context/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── submissions-context.tsx │ │ │ │ │ ├── file-submission-modal/ │ │ │ │ │ │ ├── file-dropzone.tsx │ │ │ │ │ │ ├── file-list.tsx │ │ │ │ │ │ ├── file-preview.tsx │ │ │ │ │ │ ├── file-submission-modal.css │ │ │ │ │ │ ├── file-submission-modal.tsx │ │ │ │ │ │ ├── file-submission-modal.utils.ts │ │ │ │ │ │ ├── image-editor.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── submission-options.tsx │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── use-global-dropzone.ts │ │ │ │ │ │ ├── use-submission-actions.ts │ │ │ │ │ │ ├── use-submission-create.ts │ │ │ │ │ │ ├── use-submission-delete.ts │ │ │ │ │ │ ├── use-submission-handlers.ts │ │ │ │ │ │ ├── use-submission-post.ts │ │ │ │ │ │ ├── use-submission-selection.ts │ │ │ │ │ │ ├── use-submission-update.ts │ │ │ │ │ │ └── use-submissions.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post-confirm-modal/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── post-confirm-modal.tsx │ │ │ │ │ ├── resume-mode-modal/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── resume-mode-modal.tsx │ │ │ │ │ ├── submission-card/ │ │ │ │ │ │ ├── archived-submission-card.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── sortable-submission-card.tsx │ │ │ │ │ │ ├── submission-actions.tsx │ │ │ │ │ │ ├── submission-badges.tsx │ │ │ │ │ │ ├── submission-card.tsx │ │ │ │ │ │ ├── submission-quick-edit-actions.tsx │ │ │ │ │ │ ├── submission-thumbnail.tsx │ │ │ │ │ │ ├── submission-title.tsx │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── submission-edit-card/ │ │ │ │ │ │ ├── account-selection/ │ │ │ │ │ │ │ ├── account-option-row.tsx │ │ │ │ │ │ │ ├── account-select.tsx │ │ │ │ │ │ │ ├── account-selection-form.tsx │ │ │ │ │ │ │ ├── account-selection.css │ │ │ │ │ │ │ ├── form/ │ │ │ │ │ │ │ │ ├── fields/ │ │ │ │ │ │ │ │ │ ├── boolean-field.tsx │ │ │ │ │ │ │ │ │ ├── datetime-field.tsx │ │ │ │ │ │ │ │ │ ├── description-field.tsx │ │ │ │ │ │ │ │ │ ├── description-preview-panel.tsx │ │ │ │ │ │ │ │ │ ├── field-copy-button.tsx │ │ │ │ │ │ │ │ │ ├── field-label.tsx │ │ │ │ │ │ │ │ │ ├── field.css │ │ │ │ │ │ │ │ │ ├── form-field.type.ts │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ ├── input-field.tsx │ │ │ │ │ │ │ │ │ ├── radio-field.tsx │ │ │ │ │ │ │ │ │ ├── select-field.tsx │ │ │ │ │ │ │ │ │ ├── select-utils.ts │ │ │ │ │ │ │ │ │ ├── tag-field.tsx │ │ │ │ │ │ │ │ │ └── tree-select.tsx │ │ │ │ │ │ │ │ ├── form-field.tsx │ │ │ │ │ │ │ │ ├── form-fields-context.tsx │ │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ ├── use-default-option.tsx │ │ │ │ │ │ │ │ │ └── use-validations.tsx │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ ├── save-defaults-popover.tsx │ │ │ │ │ │ │ │ ├── section-layout.css │ │ │ │ │ │ │ │ ├── section-layout.tsx │ │ │ │ │ │ │ │ └── validation-alerts.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── selected-accounts-forms.tsx │ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ │ ├── apply-template-action.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── save-to-many-action.tsx │ │ │ │ │ │ │ └── submission-edit-card-actions.tsx │ │ │ │ │ │ ├── body/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── submission-edit-card-body.tsx │ │ │ │ │ │ ├── context/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── submission-edit-card-context.tsx │ │ │ │ │ │ ├── defaults-form/ │ │ │ │ │ │ │ ├── defaults-form.css │ │ │ │ │ │ │ ├── defaults-form.tsx │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── file-management/ │ │ │ │ │ │ │ ├── bulk-file-editor.tsx │ │ │ │ │ │ │ ├── file-actions.tsx │ │ │ │ │ │ │ ├── file-alt-text-editor.tsx │ │ │ │ │ │ │ ├── file-management.css │ │ │ │ │ │ │ ├── file-metadata.tsx │ │ │ │ │ │ │ ├── file-preview.tsx │ │ │ │ │ │ │ ├── file-uploader.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── submission-file-card.tsx │ │ │ │ │ │ │ ├── submission-file-manager.tsx │ │ │ │ │ │ │ └── use-submission-accounts.ts │ │ │ │ │ │ ├── header/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── submission-edit-card-header.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── schedule-form/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── schedule-form.tsx │ │ │ │ │ │ ├── submission-edit-card.css │ │ │ │ │ │ └── submission-edit-card.tsx │ │ │ │ │ ├── submission-history/ │ │ │ │ │ │ ├── history-utils.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── post-history-content.tsx │ │ │ │ │ │ └── post-record-card.tsx │ │ │ │ │ ├── submission-history-drawer.tsx │ │ │ │ │ ├── submission-list.tsx │ │ │ │ │ ├── submission-section-header.tsx │ │ │ │ │ ├── submissions-content.tsx │ │ │ │ │ ├── submissions-section.css │ │ │ │ │ ├── submissions-section.tsx │ │ │ │ │ └── types.ts │ │ │ │ └── templates-section/ │ │ │ │ ├── index.ts │ │ │ │ ├── template-card.tsx │ │ │ │ ├── templates-content.tsx │ │ │ │ ├── templates-section.css │ │ │ │ └── templates-section.tsx │ │ │ ├── shared/ │ │ │ │ ├── account-picker/ │ │ │ │ │ ├── account-picker.css │ │ │ │ │ ├── account-picker.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── basic-website-select/ │ │ │ │ │ └── basic-website-select.tsx │ │ │ │ ├── copy-to-clipboard/ │ │ │ │ │ ├── copy-to-clipboard.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── description-editor/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── bubble-toolbar.tsx │ │ │ │ │ │ ├── description-toolbar.tsx │ │ │ │ │ │ ├── html-edit-modal.tsx │ │ │ │ │ │ ├── insert-media-modal.tsx │ │ │ │ │ │ └── suggestion-menu.tsx │ │ │ │ │ ├── custom-blocks/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── shortcut.css │ │ │ │ │ │ └── website-only-selector.tsx │ │ │ │ │ ├── description-editor.css │ │ │ │ │ ├── description-editor.tsx │ │ │ │ │ ├── extensions/ │ │ │ │ │ │ ├── content-warning-shortcut.tsx │ │ │ │ │ │ ├── custom-shortcut.tsx │ │ │ │ │ │ ├── default-shortcut.tsx │ │ │ │ │ │ ├── indent.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── resizable-image.tsx │ │ │ │ │ │ ├── tags-shortcut.tsx │ │ │ │ │ │ ├── title-shortcut.tsx │ │ │ │ │ │ └── username-shortcut.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── external-link/ │ │ │ │ │ ├── external-link.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── multi-scheduler-modal/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── multi-scheduler-modal.css │ │ │ │ │ └── multi-scheduler-modal.tsx │ │ │ │ ├── rating-input/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── rating-input.tsx │ │ │ │ ├── reorderable-submission-list/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── reorderable-submission-list.css │ │ │ │ │ └── reorderable-submission-list.tsx │ │ │ │ ├── schedule-popover/ │ │ │ │ │ ├── cron-picker.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── schedule-popover.tsx │ │ │ │ ├── search-input.tsx │ │ │ │ ├── simple-tag-input/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── simple-tag-input.tsx │ │ │ │ ├── submission-picker/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── submission-picker-modal.tsx │ │ │ │ │ └── submission-picker.tsx │ │ │ │ └── template-picker/ │ │ │ │ ├── index.ts │ │ │ │ ├── template-picker-modal.tsx │ │ │ │ └── template-picker.tsx │ │ │ ├── theme-picker/ │ │ │ │ ├── index.ts │ │ │ │ └── theme-picker.tsx │ │ │ ├── update-button/ │ │ │ │ ├── index.ts │ │ │ │ ├── update-button.tsx │ │ │ │ └── update-modal.tsx │ │ │ ├── website-components/ │ │ │ │ ├── bluesky/ │ │ │ │ │ └── description-preview.tsx │ │ │ │ ├── e621/ │ │ │ │ │ ├── e621-dtext-renderer.tsx │ │ │ │ │ └── e621-tag-search-provider.tsx │ │ │ │ ├── furaffinity/ │ │ │ │ │ ├── furaffinity-bbcode-renderer.tsx │ │ │ │ │ └── furaffinity-bbcode.ts │ │ │ │ ├── index.ts │ │ │ │ ├── telegram/ │ │ │ │ │ └── telegram-format-renderer.tsx │ │ │ │ └── tumblr/ │ │ │ │ └── tumblr-npf-renderer.tsx │ │ │ └── website-login-views/ │ │ │ ├── bluesky/ │ │ │ │ ├── bluesky-login-view.tsx │ │ │ │ └── index.ts │ │ │ ├── custom/ │ │ │ │ ├── custom-login-view.tsx │ │ │ │ └── index.ts │ │ │ ├── discord/ │ │ │ │ ├── discord-login-view.tsx │ │ │ │ └── index.ts │ │ │ ├── e621/ │ │ │ │ ├── e621-login-view.tsx │ │ │ │ └── index.ts │ │ │ ├── helpers.tsx │ │ │ ├── index.ts │ │ │ ├── inkbunny/ │ │ │ │ ├── index.ts │ │ │ │ └── inkbunny-login-view.tsx │ │ │ ├── instagram/ │ │ │ │ ├── index.ts │ │ │ │ ├── instagram-login-view.tsx │ │ │ │ └── instagram-setup-guide.tsx │ │ │ ├── login-view-container.tsx │ │ │ ├── megalodon/ │ │ │ │ ├── index.ts │ │ │ │ └── megalodon-login-view.tsx │ │ │ ├── misskey/ │ │ │ │ ├── index.ts │ │ │ │ └── misskey-login-view.tsx │ │ │ ├── telegram/ │ │ │ │ ├── index.ts │ │ │ │ └── telegram-login-view.tsx │ │ │ ├── twitter/ │ │ │ │ ├── index.ts │ │ │ │ └── twitter-login-view.tsx │ │ │ └── types.ts │ │ ├── config/ │ │ │ ├── keybindings.ts │ │ │ └── nav-items.tsx │ │ ├── environments/ │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── hooks/ │ │ │ ├── index.ts │ │ │ ├── tag-search/ │ │ │ │ ├── index.ts │ │ │ │ ├── tag-search-provider.ts │ │ │ │ ├── tag-search-providers.ts │ │ │ │ └── use-tag-search.ts │ │ │ ├── use-keybindings.ts │ │ │ └── use-locale.ts │ │ ├── i18n/ │ │ │ ├── languages.tsx │ │ │ └── validation-translation.tsx │ │ ├── index.tsx │ │ ├── main.tsx │ │ ├── models/ │ │ │ └── http-error-response.ts │ │ ├── providers/ │ │ │ └── i18n-provider.tsx │ │ ├── shared/ │ │ │ └── platform-utils.ts │ │ ├── stores/ │ │ │ ├── create-entity-store.ts │ │ │ ├── create-typed-store.ts │ │ │ ├── entity/ │ │ │ │ ├── account-store.ts │ │ │ │ ├── custom-shortcut-store.ts │ │ │ │ ├── directory-watcher-store.ts │ │ │ │ ├── notification-store.ts │ │ │ │ ├── settings-store.ts │ │ │ │ ├── submission-store.ts │ │ │ │ ├── tag-converter-store.ts │ │ │ │ ├── tag-group-store.ts │ │ │ │ ├── user-converter-store.ts │ │ │ │ └── website-store.ts │ │ │ ├── index.ts │ │ │ ├── records/ │ │ │ │ ├── account-record.ts │ │ │ │ ├── base-record.ts │ │ │ │ ├── custom-shortcut-record.ts │ │ │ │ ├── directory-watcher-record.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notification-record.ts │ │ │ │ ├── settings-record.ts │ │ │ │ ├── submission-record.ts │ │ │ │ ├── tag-converter-record.ts │ │ │ │ ├── tag-group-record.ts │ │ │ │ ├── user-converter-record.ts │ │ │ │ └── website-record.ts │ │ │ ├── store-init.ts │ │ │ └── ui/ │ │ │ ├── accounts-ui-store.ts │ │ │ ├── appearance-store.ts │ │ │ ├── drawer-store.ts │ │ │ ├── locale-store.ts │ │ │ ├── navigation-store.ts │ │ │ ├── submissions-ui-store.ts │ │ │ ├── templates-ui-store.ts │ │ │ └── tour-store.ts │ │ ├── styles/ │ │ │ └── layout.css │ │ ├── styles.css │ │ ├── theme/ │ │ │ ├── css-variable-resolver.ts │ │ │ ├── theme-styles.css │ │ │ └── theme.ts │ │ ├── transports/ │ │ │ ├── http-client.ts │ │ │ └── websocket.ts │ │ ├── types/ │ │ │ ├── account-filters.ts │ │ │ ├── navigation.ts │ │ │ └── view-state.ts │ │ └── utils/ │ │ ├── class-names.ts │ │ ├── environment.ts │ │ ├── index.ts │ │ ├── notifications.tsx │ │ └── open-url.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── babel.config.js ├── commitlint.config.js ├── compose.yml ├── docs/ │ ├── DOCKER.md │ ├── POST_QUEUE_FLOWS.md │ ├── app-insights/ │ │ ├── APP_INSIGHTS_QUERIES.md │ │ └── APP_INSIGHTS_SETUP.md │ └── contributing/ │ └── add-a-website/ │ ├── README.md │ └── sections/ │ ├── authenticate-a-user.md │ ├── defining-submission-data.md │ ├── description-parsing.md │ ├── file-website.md │ ├── message-website.md │ └── validation.md ├── drizzle.config.ts ├── electron-builder.yml ├── entrypoint.sh ├── jest.config.ts ├── jest.preset.js ├── jest.reporter.js ├── jest.setup.ts ├── lang/ │ ├── de.po │ ├── en.po │ ├── es.po │ ├── lt.po │ ├── nl.po │ ├── pt_BR.po │ ├── ru.po │ └── ta.po ├── libs/ │ ├── database/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── database.ts │ │ │ ├── helper-types.ts │ │ │ ├── relations/ │ │ │ │ ├── index.ts │ │ │ │ └── relations.ts │ │ │ └── schemas/ │ │ │ ├── account.schema.ts │ │ │ ├── common.schema.ts │ │ │ ├── custom-shortcut.schema.ts │ │ │ ├── directory-watcher.schema.ts │ │ │ ├── file-buffer.schema.ts │ │ │ ├── index.ts │ │ │ ├── notification.schema.ts │ │ │ ├── post-event.schema.ts │ │ │ ├── post-queue-record.schema.ts │ │ │ ├── post-record.schema.ts │ │ │ ├── settings.schema.ts │ │ │ ├── submission-file.schema.ts │ │ │ ├── submission.schema.ts │ │ │ ├── tag-converter.schema.ts │ │ │ ├── tag-group.schema.ts │ │ │ ├── user-converter.schema.ts │ │ │ ├── user-specified-website-options.schema.ts │ │ │ ├── website-data.schema.ts │ │ │ └── website-options.schema.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── form-builder/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── decorators/ │ │ │ │ ├── boolean-field.decorator.ts │ │ │ │ ├── date-time-field.decorator.ts │ │ │ │ ├── description-field.decorator.ts │ │ │ │ ├── index.ts │ │ │ │ ├── radio-field.decorator.ts │ │ │ │ ├── rating.decorator.ts │ │ │ │ ├── select-field.decorator.ts │ │ │ │ ├── tag-field.decorator.ts │ │ │ │ ├── text-field.decorator.ts │ │ │ │ └── title-field.decorator.ts │ │ │ ├── form-builder.spec.ts │ │ │ ├── form-builder.ts │ │ │ ├── types/ │ │ │ │ ├── field-aggregate.ts │ │ │ │ ├── field.ts │ │ │ │ ├── form-builder-metadata.ts │ │ │ │ ├── index.ts │ │ │ │ └── primitive-record.ts │ │ │ └── utils/ │ │ │ └── assign-metadata.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── fs/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── directories.ts │ │ │ ├── fs.spec.ts │ │ │ └── fs.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── http/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── form-file.ts │ │ │ ├── http.spec.ts │ │ │ ├── http.ts │ │ │ └── proxy.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── logger/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── app-insights.ts │ │ │ ├── logger.ts │ │ │ ├── serialize-log.ts │ │ │ └── winston-appinsights-transport.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── socket-events/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ └── socket-events.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── translations/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ └── field-translations.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── types/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── project.json │ │ ├── src/ │ │ │ ├── dtos/ │ │ │ │ ├── account/ │ │ │ │ │ ├── account.dto.ts │ │ │ │ │ ├── create-account.dto.ts │ │ │ │ │ └── update-account.dto.ts │ │ │ │ ├── custom-shortcut/ │ │ │ │ │ ├── create-custom-shortcut.dto.ts │ │ │ │ │ ├── custom-shortcut.dto.ts │ │ │ │ │ └── update-custom-shortcut.dto.ts │ │ │ │ ├── database/ │ │ │ │ │ └── entity.dto.ts │ │ │ │ ├── directory-watcher/ │ │ │ │ │ ├── create-directory-watcher.dto.ts │ │ │ │ │ ├── directory-watcher.dto.ts │ │ │ │ │ └── update-directory-watcher.dto.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notification/ │ │ │ │ │ ├── create-notification.dto.ts │ │ │ │ │ └── update-notification.dto.ts │ │ │ │ ├── post/ │ │ │ │ │ ├── post-event.dto.ts │ │ │ │ │ ├── post-queue-action.dto.ts │ │ │ │ │ ├── post-queue-record.dto.ts │ │ │ │ │ ├── post-record.dto.ts │ │ │ │ │ └── queue-post-record-request.dto.ts │ │ │ │ ├── settings/ │ │ │ │ │ ├── settings.dto.ts │ │ │ │ │ └── update-settings.dto.ts │ │ │ │ ├── submission/ │ │ │ │ │ ├── apply-multi-submission.dto.ts │ │ │ │ │ ├── create-submission.dto.ts │ │ │ │ │ ├── file-buffer.dto.ts │ │ │ │ │ ├── reorder-submission-files.dto.ts │ │ │ │ │ ├── submission-file.dto.ts │ │ │ │ │ ├── submission.dto.ts │ │ │ │ │ ├── update-alt-file.dto.ts │ │ │ │ │ ├── update-submission-template-name.dto.ts │ │ │ │ │ └── update-submission.dto.ts │ │ │ │ ├── tag/ │ │ │ │ │ ├── create-tag-converter.dto.ts │ │ │ │ │ ├── create-tag-group.dto.ts │ │ │ │ │ ├── tag-converter.dto.ts │ │ │ │ │ ├── tag-group.dto.ts │ │ │ │ │ ├── update-tag-converter.dto.ts │ │ │ │ │ └── update-tag-group.dto.ts │ │ │ │ ├── user/ │ │ │ │ │ ├── create-user-converter.dto.ts │ │ │ │ │ ├── update-user-converter.dto.ts │ │ │ │ │ └── user-converter.dto.ts │ │ │ │ ├── website/ │ │ │ │ │ ├── custom-website-route.dto.ts │ │ │ │ │ ├── form-generation-request.dto.ts │ │ │ │ │ ├── oauth-website-request.dto.ts │ │ │ │ │ ├── set-website-data-request.dto.ts │ │ │ │ │ ├── website-data.dto.ts │ │ │ │ │ └── website-info.dto.ts │ │ │ │ └── website-options/ │ │ │ │ ├── create-user-specified-website-options.dto.ts │ │ │ │ ├── create-website-options.dto.ts │ │ │ │ ├── preview-description.dto.ts │ │ │ │ ├── update-submission-website-options.dto.ts │ │ │ │ ├── update-user-specified-website-options.dto.ts │ │ │ │ ├── update-website-options.dto.ts │ │ │ │ ├── user-specified-website-options.dto.ts │ │ │ │ ├── validate-website-options.dto.ts │ │ │ │ └── website-options.dto.ts │ │ │ ├── enums/ │ │ │ │ ├── description-types.enum.ts │ │ │ │ ├── directory-watcher-import-action.enum.ts │ │ │ │ ├── file-type.enum.ts │ │ │ │ ├── index.ts │ │ │ │ ├── post-event-type.enum.ts │ │ │ │ ├── post-record-resume-mode.enum.ts │ │ │ │ ├── post-record-state.enum.ts │ │ │ │ ├── schedule-type.enum.ts │ │ │ │ ├── submission-rating.enum.ts │ │ │ │ └── submission-type.enum.ts │ │ │ ├── index.ts │ │ │ ├── models/ │ │ │ │ ├── account/ │ │ │ │ │ └── account.interface.ts │ │ │ │ ├── common/ │ │ │ │ │ └── dynamic-object.ts │ │ │ │ ├── custom-shortcut/ │ │ │ │ │ └── custom-shortcut.interface.ts │ │ │ │ ├── database/ │ │ │ │ │ ├── entity-primitive.type.ts │ │ │ │ │ └── entity.interface.ts │ │ │ │ ├── directory-watcher/ │ │ │ │ │ └── directory-watcher.interface.ts │ │ │ │ ├── file/ │ │ │ │ │ ├── file-buffer.interface.ts │ │ │ │ │ └── file-dimensions.interface.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notification/ │ │ │ │ │ └── notification.interface.ts │ │ │ │ ├── post/ │ │ │ │ │ ├── post-event.interface.ts │ │ │ │ │ ├── post-queue-record.interface.ts │ │ │ │ │ ├── post-record.interface.ts │ │ │ │ │ └── post-response.type.ts │ │ │ │ ├── remote/ │ │ │ │ │ └── update-cookies-remote.type.ts │ │ │ │ ├── settings/ │ │ │ │ │ ├── settings-options.interface.ts │ │ │ │ │ ├── settings.constants.ts │ │ │ │ │ └── settings.interface.ts │ │ │ │ ├── submission/ │ │ │ │ │ ├── default-submission-file-props.ts │ │ │ │ │ ├── description-value.type.ts │ │ │ │ │ ├── file-submission/ │ │ │ │ │ │ ├── file-submission-metadata.type.ts │ │ │ │ │ │ ├── file-submission.ts │ │ │ │ │ │ └── modified-file-dimension.type.ts │ │ │ │ │ ├── message-submission/ │ │ │ │ │ │ └── message-submission.type.ts │ │ │ │ │ ├── npf-description.type.ts │ │ │ │ │ ├── submission-file-props.interface.ts │ │ │ │ │ ├── submission-file.interface.ts │ │ │ │ │ ├── submission-metadata.interface.ts │ │ │ │ │ ├── submission-metadata.type.ts │ │ │ │ │ ├── submission-schedule-info.interface.ts │ │ │ │ │ ├── submission.interface.ts │ │ │ │ │ ├── validation-result.type.ts │ │ │ │ │ └── website-form-fields.interface.ts │ │ │ │ ├── tag/ │ │ │ │ │ ├── default-tag-value.ts │ │ │ │ │ ├── tag-converter.interface.ts │ │ │ │ │ ├── tag-group.interface.ts │ │ │ │ │ ├── tag-value.type.ts │ │ │ │ │ └── tag.type.ts │ │ │ │ ├── update/ │ │ │ │ │ └── update.type.ts │ │ │ │ ├── user/ │ │ │ │ │ └── user-converter.interface.ts │ │ │ │ ├── website/ │ │ │ │ │ ├── file-website-form-fields.interface.ts │ │ │ │ │ ├── folder.type.ts │ │ │ │ │ ├── image-resize-props.ts │ │ │ │ │ ├── login-request-data.type.ts │ │ │ │ │ ├── login-response.interface.ts │ │ │ │ │ ├── login-state.class.ts │ │ │ │ │ ├── login-state.interface.ts │ │ │ │ │ ├── post-data.type.ts │ │ │ │ │ ├── website-data.interface.ts │ │ │ │ │ ├── website-info.interface.ts │ │ │ │ │ ├── website-login-type.ts │ │ │ │ │ └── website.type.ts │ │ │ │ └── website-options/ │ │ │ │ ├── user-specified-website-options.interface.ts │ │ │ │ └── website-options.interface.ts │ │ │ ├── website-modifiers/ │ │ │ │ ├── index.ts │ │ │ │ ├── oauth-routes.ts │ │ │ │ ├── username-shortcut.ts │ │ │ │ ├── website-file-options.ts │ │ │ │ └── website-metadata.ts │ │ │ └── website-public/ │ │ │ ├── README.md │ │ │ ├── bluesky-account-data.ts │ │ │ ├── custom-account-data.ts │ │ │ ├── discord-account-data.ts │ │ │ ├── e621-account-data.ts │ │ │ ├── index.ts │ │ │ ├── inkbunny-account-data.ts │ │ │ ├── instagram-account-data.ts │ │ │ ├── megalodon-account-data.ts │ │ │ ├── misskey-account-data.ts │ │ │ ├── telegram-account-data.ts │ │ │ └── twitter-account-data.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ └── utils/ │ ├── electron/ │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── browser-window-utils.ts │ │ │ ├── postybirb-env-config.ts │ │ │ ├── remote-utils.ts │ │ │ ├── startup-options-electron.ts │ │ │ ├── utils-electron.spec.ts │ │ │ ├── utils-electron.ts │ │ │ └── utils-test.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ └── file-type/ │ ├── .eslintrc.json │ ├── README.md │ ├── project.json │ ├── src/ │ │ ├── index.ts │ │ └── lib/ │ │ ├── calculate-image-resize.ts │ │ ├── get-file-type.ts │ │ ├── is-audio.ts │ │ ├── is-image.ts │ │ ├── is-text.ts │ │ ├── is-video.ts │ │ └── mime-helper.ts │ ├── tsconfig.json │ └── tsconfig.lib.json ├── lingui.config.ts ├── nx.json ├── package.json ├── packaging-resources/ │ ├── entitlements.mac.plist │ ├── icons/ │ │ └── icon.icns │ └── installer.nsh ├── scripts/ │ ├── add-website/ │ │ ├── create-file-from-template.js │ │ ├── create-website.js │ │ ├── parse-add-website-input.js │ │ └── templates/ │ │ ├── account-data.hbs │ │ ├── file-submission.hbs │ │ ├── message-submission.hbs │ │ └── website.hbs │ ├── add-website.js │ ├── inject-app-insights.js │ ├── package.json │ ├── tsconfig.json │ └── windows-signing/ │ ├── hasher.cjs │ └── pull-and-sign.ps1 └── tsconfig.base.json