appwrite-utils-cli 1.9.7 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1004 -1004
- package/dist/adapters/index.d.ts +7 -8
- package/dist/adapters/index.js +7 -9
- package/dist/backups/operations/bucketBackup.js +2 -2
- package/dist/backups/operations/collectionBackup.d.ts +1 -1
- package/dist/backups/operations/collectionBackup.js +3 -3
- package/dist/backups/operations/comprehensiveBackup.d.ts +1 -1
- package/dist/backups/operations/comprehensiveBackup.js +2 -2
- package/dist/backups/tracking/centralizedTracking.d.ts +1 -1
- package/dist/backups/tracking/centralizedTracking.js +2 -2
- package/dist/cli/commands/configCommands.js +51 -7
- package/dist/cli/commands/databaseCommands.js +156 -104
- package/dist/cli/commands/functionCommands.js +3 -3
- package/dist/cli/commands/importFileCommands.d.ts +7 -0
- package/dist/cli/commands/importFileCommands.js +674 -0
- package/dist/cli/commands/schemaCommands.js +3 -3
- package/dist/cli/commands/storageCommands.js +2 -3
- package/dist/cli/commands/transferCommands.js +3 -5
- package/dist/collections/{attributes.d.ts → columns.d.ts} +1 -1
- package/dist/collections/{attributes.js → columns.js} +15 -9
- package/dist/collections/indexes.js +1 -3
- package/dist/collections/methods.d.ts +1 -1
- package/dist/collections/methods.js +38 -20
- package/dist/collections/tableOperations.d.ts +1 -0
- package/dist/collections/tableOperations.js +30 -11
- package/dist/collections/transferOperations.d.ts +1 -1
- package/dist/collections/transferOperations.js +3 -4
- package/dist/collections/wipeOperations.d.ts +4 -3
- package/dist/collections/wipeOperations.js +112 -39
- package/dist/databases/methods.js +2 -2
- package/dist/databases/setup.js +2 -2
- package/dist/examples/yamlTerminologyExample.js +2 -2
- package/dist/functions/deployments.d.ts +1 -1
- package/dist/functions/deployments.js +6 -6
- package/dist/functions/fnConfigDiscovery.js +2 -2
- package/dist/functions/methods.js +2 -2
- package/dist/functions/templates/count-docs-in-collection/README.md +53 -53
- package/dist/functions/templates/count-docs-in-collection/src/main.ts +159 -159
- package/dist/functions/templates/count-docs-in-collection/src/request.ts +8 -8
- package/dist/functions/templates/hono-typescript/README.md +285 -285
- package/dist/functions/templates/hono-typescript/src/adapters/request.ts +73 -73
- package/dist/functions/templates/hono-typescript/src/adapters/response.ts +105 -105
- package/dist/functions/templates/hono-typescript/src/app.ts +179 -179
- package/dist/functions/templates/hono-typescript/src/context.ts +102 -102
- package/{src/functions/templates/hono-typescript/src/index.ts → dist/functions/templates/hono-typescript/src/main.ts} +53 -53
- package/dist/functions/templates/hono-typescript/src/middleware/appwrite.ts +118 -118
- package/dist/functions/templates/typescript-node/README.md +31 -31
- package/dist/functions/templates/typescript-node/src/context.ts +102 -102
- package/dist/functions/templates/typescript-node/src/{index.ts → main.ts} +29 -29
- package/dist/functions/templates/uv/README.md +30 -30
- package/dist/functions/templates/uv/pyproject.toml +29 -29
- package/dist/functions/templates/uv/src/context.py +124 -124
- package/dist/functions/templates/uv/src/{index.py → main.py} +45 -45
- package/dist/init.js +1 -1
- package/dist/interactiveCLI.d.ts +6 -1
- package/dist/interactiveCLI.js +79 -25
- package/dist/main.js +125 -180
- package/dist/migrations/afterImportActions.js +2 -3
- package/dist/migrations/appwriteToX.d.ts +1 -1
- package/dist/migrations/appwriteToX.js +10 -8
- package/dist/migrations/comprehensiveTransfer.js +3 -5
- package/dist/migrations/dataLoader.d.ts +4 -2
- package/dist/migrations/dataLoader.js +42 -20
- package/dist/migrations/importController.d.ts +2 -0
- package/dist/migrations/importController.js +39 -24
- package/dist/migrations/importDataActions.js +3 -3
- package/dist/migrations/relationships.js +1 -2
- package/dist/migrations/services/DataTransformationService.js +2 -2
- package/dist/migrations/services/FileHandlerService.js +1 -1
- package/dist/migrations/services/ImportOrchestrator.d.ts +2 -0
- package/dist/migrations/services/ImportOrchestrator.js +15 -7
- package/dist/migrations/services/RateLimitManager.js +1 -1
- package/dist/migrations/services/RelationshipResolver.js +1 -1
- package/dist/migrations/services/UserMappingService.js +1 -1
- package/dist/migrations/services/ValidationService.js +1 -1
- package/dist/migrations/transfer.d.ts +8 -4
- package/dist/migrations/transfer.js +108 -55
- package/dist/migrations/yaml/YamlImportConfigLoader.js +52 -52
- package/dist/migrations/yaml/YamlImportIntegration.js +2 -2
- package/dist/migrations/yaml/generateImportSchemas.js +174 -174
- package/dist/setupCommands.d.ts +1 -1
- package/dist/setupCommands.js +5 -6
- package/dist/setupController.js +1 -1
- package/dist/shared/backupTracking.d.ts +1 -1
- package/dist/shared/backupTracking.js +2 -2
- package/dist/shared/confirmationDialogs.js +1 -1
- package/dist/shared/migrationHelpers.d.ts +1 -1
- package/dist/shared/migrationHelpers.js +4 -4
- package/dist/shared/operationQueue.d.ts +1 -1
- package/dist/shared/operationQueue.js +3 -4
- package/dist/shared/operationsTable.d.ts +1 -1
- package/dist/shared/operationsTable.js +35 -34
- package/dist/shared/operationsTableSchema.d.ts +3 -3
- package/dist/shared/operationsTableSchema.js +2 -2
- package/dist/shared/progressManager.js +1 -1
- package/dist/shared/selectionDialogs.d.ts +6 -0
- package/dist/shared/selectionDialogs.js +56 -12
- package/dist/storage/methods.d.ts +12 -0
- package/dist/storage/methods.js +92 -89
- package/dist/storage/schemas.d.ts +2 -2
- package/dist/tables/indexManager.d.ts +1 -1
- package/dist/tables/indexManager.js +2 -2
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/users/methods.js +2 -3
- package/dist/utils/configMigration.js +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/loadConfigs.d.ts +2 -2
- package/dist/utils/loadConfigs.js +6 -7
- package/dist/utils/setupFiles.js +139 -141
- package/dist/utilsController.d.ts +16 -9
- package/dist/utilsController.js +93 -68
- package/package.json +9 -3
- package/.appwrite/.yaml_schemas/appwrite-config.schema.json +0 -380
- package/.appwrite/.yaml_schemas/collection.schema.json +0 -255
- package/.appwrite/collections/Categories.yaml +0 -182
- package/.appwrite/collections/ExampleCollection.yaml +0 -36
- package/.appwrite/collections/Posts.yaml +0 -227
- package/.appwrite/collections/Users.yaml +0 -149
- package/.appwrite/config.yaml +0 -109
- package/.appwrite/import/README.md +0 -148
- package/.appwrite/import/categories-import.yaml +0 -129
- package/.appwrite/import/posts-import.yaml +0 -208
- package/.appwrite/import/users-import.yaml +0 -130
- package/.appwrite/importData/categories.json +0 -194
- package/.appwrite/importData/posts.json +0 -270
- package/.appwrite/importData/users.json +0 -220
- package/.appwrite/schemas/categories.json +0 -128
- package/.appwrite/schemas/exampleCollection.json +0 -52
- package/.appwrite/schemas/posts.json +0 -173
- package/.appwrite/schemas/users.json +0 -125
- package/CHANGELOG.md +0 -35
- package/CONFIG_TODO.md +0 -1189
- package/SELECTION_DIALOGS.md +0 -146
- package/SERVICE_IMPLEMENTATION_REPORT.md +0 -462
- package/dist/adapters/AdapterFactory.d.ts +0 -94
- package/dist/adapters/AdapterFactory.js +0 -420
- package/dist/adapters/DatabaseAdapter.d.ts +0 -243
- package/dist/adapters/DatabaseAdapter.js +0 -50
- package/dist/adapters/LegacyAdapter.d.ts +0 -50
- package/dist/adapters/LegacyAdapter.js +0 -615
- package/dist/adapters/TablesDBAdapter.d.ts +0 -45
- package/dist/adapters/TablesDBAdapter.js +0 -611
- package/dist/config/ConfigManager.d.ts +0 -450
- package/dist/config/ConfigManager.js +0 -650
- package/dist/config/configMigration.d.ts +0 -87
- package/dist/config/configMigration.js +0 -390
- package/dist/config/configValidation.d.ts +0 -66
- package/dist/config/configValidation.js +0 -358
- package/dist/config/index.d.ts +0 -8
- package/dist/config/index.js +0 -7
- package/dist/config/services/ConfigDiscoveryService.d.ts +0 -122
- package/dist/config/services/ConfigDiscoveryService.js +0 -322
- package/dist/config/services/ConfigLoaderService.d.ts +0 -129
- package/dist/config/services/ConfigLoaderService.js +0 -535
- package/dist/config/services/ConfigMergeService.d.ts +0 -208
- package/dist/config/services/ConfigMergeService.js +0 -308
- package/dist/config/services/ConfigValidationService.d.ts +0 -214
- package/dist/config/services/ConfigValidationService.js +0 -310
- package/dist/config/services/SessionAuthService.d.ts +0 -225
- package/dist/config/services/SessionAuthService.js +0 -456
- package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +0 -1
- package/dist/config/services/__tests__/ConfigMergeService.test.js +0 -271
- package/dist/config/services/index.d.ts +0 -13
- package/dist/config/services/index.js +0 -10
- package/dist/config/yamlConfig.d.ts +0 -722
- package/dist/config/yamlConfig.js +0 -702
- package/dist/functions/pathResolution.d.ts +0 -37
- package/dist/functions/pathResolution.js +0 -185
- package/dist/functions/templates/count-docs-in-collection/package.json +0 -25
- package/dist/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/dist/functions/templates/hono-typescript/package.json +0 -26
- package/dist/functions/templates/hono-typescript/src/index.ts +0 -54
- package/dist/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/dist/functions/templates/typescript-node/package.json +0 -25
- package/dist/functions/templates/typescript-node/tsconfig.json +0 -28
- package/dist/shared/attributeMapper.d.ts +0 -20
- package/dist/shared/attributeMapper.js +0 -203
- package/dist/shared/errorUtils.d.ts +0 -54
- package/dist/shared/errorUtils.js +0 -95
- package/dist/shared/functionManager.d.ts +0 -48
- package/dist/shared/functionManager.js +0 -348
- package/dist/shared/jsonSchemaGenerator.d.ts +0 -50
- package/dist/shared/jsonSchemaGenerator.js +0 -290
- package/dist/shared/logging.d.ts +0 -61
- package/dist/shared/logging.js +0 -116
- package/dist/shared/messageFormatter.d.ts +0 -39
- package/dist/shared/messageFormatter.js +0 -162
- package/dist/shared/pydanticModelGenerator.d.ts +0 -17
- package/dist/shared/pydanticModelGenerator.js +0 -615
- package/dist/shared/schemaGenerator.d.ts +0 -40
- package/dist/shared/schemaGenerator.js +0 -556
- package/dist/utils/ClientFactory.d.ts +0 -87
- package/dist/utils/ClientFactory.js +0 -212
- package/dist/utils/configDiscovery.d.ts +0 -78
- package/dist/utils/configDiscovery.js +0 -472
- package/dist/utils/constantsGenerator.d.ts +0 -31
- package/dist/utils/constantsGenerator.js +0 -321
- package/dist/utils/dataConverters.d.ts +0 -46
- package/dist/utils/dataConverters.js +0 -139
- package/dist/utils/directoryUtils.d.ts +0 -22
- package/dist/utils/directoryUtils.js +0 -59
- package/dist/utils/getClientFromConfig.d.ts +0 -39
- package/dist/utils/getClientFromConfig.js +0 -199
- package/dist/utils/helperFunctions.d.ts +0 -63
- package/dist/utils/helperFunctions.js +0 -156
- package/dist/utils/pathResolvers.d.ts +0 -53
- package/dist/utils/pathResolvers.js +0 -72
- package/dist/utils/projectConfig.d.ts +0 -122
- package/dist/utils/projectConfig.js +0 -206
- package/dist/utils/retryFailedPromises.d.ts +0 -2
- package/dist/utils/retryFailedPromises.js +0 -23
- package/dist/utils/sessionAuth.d.ts +0 -48
- package/dist/utils/sessionAuth.js +0 -164
- package/dist/utils/typeGuards.d.ts +0 -35
- package/dist/utils/typeGuards.js +0 -57
- package/dist/utils/validationRules.d.ts +0 -43
- package/dist/utils/validationRules.js +0 -42
- package/dist/utils/versionDetection.d.ts +0 -58
- package/dist/utils/versionDetection.js +0 -251
- package/dist/utils/yamlConverter.d.ts +0 -100
- package/dist/utils/yamlConverter.js +0 -428
- package/dist/utils/yamlLoader.d.ts +0 -70
- package/dist/utils/yamlLoader.js +0 -267
- package/scripts/copy-templates.ts +0 -23
- package/src/adapters/AdapterFactory.ts +0 -529
- package/src/adapters/DatabaseAdapter.ts +0 -319
- package/src/adapters/LegacyAdapter.ts +0 -844
- package/src/adapters/TablesDBAdapter.ts +0 -823
- package/src/adapters/index.ts +0 -37
- package/src/backups/operations/bucketBackup.ts +0 -277
- package/src/backups/operations/collectionBackup.ts +0 -310
- package/src/backups/operations/comprehensiveBackup.ts +0 -342
- package/src/backups/schemas/bucketManifest.ts +0 -78
- package/src/backups/schemas/comprehensiveManifest.ts +0 -76
- package/src/backups/tracking/centralizedTracking.ts +0 -352
- package/src/cli/commands/configCommands.ts +0 -201
- package/src/cli/commands/databaseCommands.ts +0 -879
- package/src/cli/commands/functionCommands.ts +0 -418
- package/src/cli/commands/schemaCommands.ts +0 -200
- package/src/cli/commands/storageCommands.ts +0 -152
- package/src/cli/commands/transferCommands.ts +0 -457
- package/src/collections/attributes.ts +0 -2020
- package/src/collections/attributes.ts.backup +0 -1555
- package/src/collections/indexes.ts +0 -352
- package/src/collections/methods.ts +0 -700
- package/src/collections/tableOperations.ts +0 -521
- package/src/collections/transferOperations.ts +0 -590
- package/src/collections/wipeOperations.ts +0 -346
- package/src/config/ConfigManager.ts +0 -849
- package/src/config/README.md +0 -274
- package/src/config/configMigration.ts +0 -575
- package/src/config/configValidation.ts +0 -445
- package/src/config/index.ts +0 -10
- package/src/config/services/ConfigDiscoveryService.ts +0 -410
- package/src/config/services/ConfigLoaderService.ts +0 -732
- package/src/config/services/ConfigMergeService.ts +0 -388
- package/src/config/services/ConfigValidationService.ts +0 -394
- package/src/config/services/SessionAuthService.ts +0 -565
- package/src/config/services/__tests__/ConfigMergeService.test.ts +0 -351
- package/src/config/services/index.ts +0 -29
- package/src/config/yamlConfig.ts +0 -761
- package/src/databases/methods.ts +0 -49
- package/src/databases/setup.ts +0 -77
- package/src/examples/yamlTerminologyExample.ts +0 -346
- package/src/functions/deployments.ts +0 -220
- package/src/functions/fnConfigDiscovery.ts +0 -103
- package/src/functions/methods.ts +0 -284
- package/src/functions/pathResolution.ts +0 -227
- package/src/functions/templates/count-docs-in-collection/README.md +0 -54
- package/src/functions/templates/count-docs-in-collection/package.json +0 -25
- package/src/functions/templates/count-docs-in-collection/src/main.ts +0 -159
- package/src/functions/templates/count-docs-in-collection/src/request.ts +0 -9
- package/src/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/src/functions/templates/hono-typescript/README.md +0 -286
- package/src/functions/templates/hono-typescript/package.json +0 -26
- package/src/functions/templates/hono-typescript/src/adapters/request.ts +0 -74
- package/src/functions/templates/hono-typescript/src/adapters/response.ts +0 -106
- package/src/functions/templates/hono-typescript/src/app.ts +0 -180
- package/src/functions/templates/hono-typescript/src/context.ts +0 -103
- package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +0 -119
- package/src/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/src/functions/templates/typescript-node/README.md +0 -32
- package/src/functions/templates/typescript-node/package.json +0 -25
- package/src/functions/templates/typescript-node/src/context.ts +0 -103
- package/src/functions/templates/typescript-node/src/index.ts +0 -29
- package/src/functions/templates/typescript-node/tsconfig.json +0 -28
- package/src/functions/templates/uv/README.md +0 -31
- package/src/functions/templates/uv/pyproject.toml +0 -30
- package/src/functions/templates/uv/src/__init__.py +0 -0
- package/src/functions/templates/uv/src/context.py +0 -125
- package/src/functions/templates/uv/src/index.py +0 -46
- package/src/init.ts +0 -62
- package/src/interactiveCLI.ts +0 -1136
- package/src/main.ts +0 -1670
- package/src/migrations/afterImportActions.ts +0 -580
- package/src/migrations/appwriteToX.ts +0 -664
- package/src/migrations/comprehensiveTransfer.ts +0 -2285
- package/src/migrations/dataLoader.ts +0 -1702
- package/src/migrations/importController.ts +0 -428
- package/src/migrations/importDataActions.ts +0 -315
- package/src/migrations/relationships.ts +0 -334
- package/src/migrations/services/DataTransformationService.ts +0 -196
- package/src/migrations/services/FileHandlerService.ts +0 -311
- package/src/migrations/services/ImportOrchestrator.ts +0 -666
- package/src/migrations/services/RateLimitManager.ts +0 -363
- package/src/migrations/services/RelationshipResolver.ts +0 -461
- package/src/migrations/services/UserMappingService.ts +0 -345
- package/src/migrations/services/ValidationService.ts +0 -349
- package/src/migrations/transfer.ts +0 -1068
- package/src/migrations/yaml/YamlImportConfigLoader.ts +0 -439
- package/src/migrations/yaml/YamlImportIntegration.ts +0 -446
- package/src/migrations/yaml/generateImportSchemas.ts +0 -1354
- package/src/schemas/authUser.ts +0 -23
- package/src/setup.ts +0 -8
- package/src/setupCommands.ts +0 -603
- package/src/setupController.ts +0 -43
- package/src/shared/attributeMapper.ts +0 -229
- package/src/shared/backupMetadataSchema.ts +0 -93
- package/src/shared/backupTracking.ts +0 -211
- package/src/shared/confirmationDialogs.ts +0 -327
- package/src/shared/errorUtils.ts +0 -110
- package/src/shared/functionManager.ts +0 -537
- package/src/shared/jsonSchemaGenerator.ts +0 -383
- package/src/shared/logging.ts +0 -149
- package/src/shared/messageFormatter.ts +0 -208
- package/src/shared/migrationHelpers.ts +0 -232
- package/src/shared/operationLogger.ts +0 -20
- package/src/shared/operationQueue.ts +0 -377
- package/src/shared/operationsTable.ts +0 -338
- package/src/shared/operationsTableSchema.ts +0 -60
- package/src/shared/progressManager.ts +0 -278
- package/src/shared/pydanticModelGenerator.ts +0 -618
- package/src/shared/relationshipExtractor.ts +0 -214
- package/src/shared/schemaGenerator.ts +0 -644
- package/src/shared/selectionDialogs.ts +0 -749
- package/src/storage/backupCompression.ts +0 -88
- package/src/storage/methods.ts +0 -698
- package/src/storage/schemas.ts +0 -205
- package/src/tables/indexManager.ts +0 -409
- package/src/types/node-appwrite-tablesdb.d.ts +0 -44
- package/src/types.ts +0 -9
- package/src/users/methods.ts +0 -359
- package/src/utils/ClientFactory.ts +0 -240
- package/src/utils/configDiscovery.ts +0 -557
- package/src/utils/configMigration.ts +0 -348
- package/src/utils/constantsGenerator.ts +0 -369
- package/src/utils/dataConverters.ts +0 -159
- package/src/utils/directoryUtils.ts +0 -61
- package/src/utils/getClientFromConfig.ts +0 -257
- package/src/utils/helperFunctions.ts +0 -228
- package/src/utils/index.ts +0 -2
- package/src/utils/loadConfigs.ts +0 -449
- package/src/utils/pathResolvers.ts +0 -81
- package/src/utils/projectConfig.ts +0 -340
- package/src/utils/retryFailedPromises.ts +0 -29
- package/src/utils/sessionAuth.ts +0 -230
- package/src/utils/setupFiles.ts +0 -1238
- package/src/utils/typeGuards.ts +0 -65
- package/src/utils/validationRules.ts +0 -88
- package/src/utils/versionDetection.ts +0 -292
- package/src/utils/yamlConverter.ts +0 -542
- package/src/utils/yamlLoader.ts +0 -371
- package/src/utilsController.ts +0 -1213
- package/tests/README.md +0 -497
- package/tests/adapters/AdapterFactory.test.ts +0 -277
- package/tests/integration/syncOperations.test.ts +0 -463
- package/tests/jest.config.js +0 -25
- package/tests/migration/configMigration.test.ts +0 -546
- package/tests/setup.ts +0 -62
- package/tests/testUtils.ts +0 -340
- package/tests/utils/loadConfigs.test.ts +0 -350
- package/tests/validation/configValidation.test.ts +0 -412
- package/tmp-sync-test/.appwrite/collections/TestCollection.yaml +0 -7
- package/tsconfig.json +0 -44
|
@@ -1,286 +1,286 @@
|
|
|
1
|
-
# {{functionName}} - Hono + Appwrite Function
|
|
2
|
-
|
|
3
|
-
This is an Appwrite TypeScript function built with the [Hono](https://hono.dev) web framework. Hono provides a fast, lightweight, and modern way to build web APIs with excellent TypeScript support.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- 🚀 **Ultra-fast routing** with Hono framework
|
|
8
|
-
- 🔒 **Built-in Appwrite integration** with context injection
|
|
9
|
-
- 📝 **Full TypeScript support** with type safety
|
|
10
|
-
- 🛠️ **Comprehensive middleware** for logging, error handling, and Appwrite context
|
|
11
|
-
- 🔧 **Request/Response adapters** for seamless integration
|
|
12
|
-
- 📊 **Example API endpoints** with database operations
|
|
13
|
-
|
|
14
|
-
## Project Structure
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
src/
|
|
18
|
-
├── index.ts # Main Appwrite function entry point
|
|
19
|
-
├── app.ts # Hono application with routes
|
|
20
|
-
├── context.ts # Appwrite context type definitions
|
|
21
|
-
├── adapters/
|
|
22
|
-
│ ├── request.ts # Appwrite → Hono request conversion
|
|
23
|
-
│ └── response.ts # Hono → Appwrite response conversion
|
|
24
|
-
└── middleware/
|
|
25
|
-
└── appwrite.ts # Appwrite context middleware
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Getting Started
|
|
29
|
-
|
|
30
|
-
### 1. Install Dependencies
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
npm install
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 2. Available Routes
|
|
37
|
-
|
|
38
|
-
- `GET /` - Welcome message with function info
|
|
39
|
-
- `GET /health` - Health check endpoint
|
|
40
|
-
- `GET /api/user` - Get current authenticated user (requires user session)
|
|
41
|
-
- `POST /api/webhook` - Generic webhook handler
|
|
42
|
-
- `GET /api/databases` - List databases (requires API key)
|
|
43
|
-
- `POST /api/data/:databaseId/:collectionId` - Create document
|
|
44
|
-
- `GET /api/data/:databaseId/:collectionId` - List documents
|
|
45
|
-
|
|
46
|
-
### 3. Development
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
npm run dev
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 4. Build
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
npm run build
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Adding New Routes
|
|
59
|
-
|
|
60
|
-
You can easily add new routes to your Hono app in `src/app.ts`:
|
|
61
|
-
|
|
62
|
-
```typescript
|
|
63
|
-
// GET endpoint
|
|
64
|
-
app.get("/api/hello/:name", (c) => {
|
|
65
|
-
const name = c.req.param("name");
|
|
66
|
-
c.log(`Hello endpoint called for ${name}`);
|
|
67
|
-
|
|
68
|
-
return c.json({
|
|
69
|
-
message: `Hello, ${name}!`,
|
|
70
|
-
timestamp: new Date().toISOString(),
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
// POST endpoint with JSON body
|
|
75
|
-
app.post("/api/items", async (c) => {
|
|
76
|
-
const data = await c.req.json();
|
|
77
|
-
|
|
78
|
-
// Access Appwrite context
|
|
79
|
-
const { databases } = getAppwriteClient(c);
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
const document = await databases.createDocument(
|
|
83
|
-
"database-id",
|
|
84
|
-
"collection-id",
|
|
85
|
-
"unique()",
|
|
86
|
-
data
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
c.log("Item created successfully");
|
|
90
|
-
return c.json({ item: document }, 201);
|
|
91
|
-
} catch (error) {
|
|
92
|
-
c.error(`Failed to create item: ${error}`);
|
|
93
|
-
return c.json({ error: "Failed to create item" }, 500);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Middleware
|
|
99
|
-
|
|
100
|
-
The template includes several built-in middleware:
|
|
101
|
-
|
|
102
|
-
### Appwrite Context Middleware
|
|
103
|
-
Automatically injects Appwrite context into every Hono request:
|
|
104
|
-
|
|
105
|
-
```typescript
|
|
106
|
-
// Access Appwrite context in any route handler
|
|
107
|
-
app.get("/api/example", (c) => {
|
|
108
|
-
const appwriteContext = c.get("appwriteContext");
|
|
109
|
-
|
|
110
|
-
// Use Appwrite logging
|
|
111
|
-
c.log("This will appear in Appwrite function logs");
|
|
112
|
-
c.error("This will appear as an error in Appwrite logs");
|
|
113
|
-
|
|
114
|
-
// Access Appwrite headers
|
|
115
|
-
const userId = c.appwrite.userId;
|
|
116
|
-
const isAuthenticated = c.appwrite.isUserAuthenticated();
|
|
117
|
-
|
|
118
|
-
return c.json({ userId, isAuthenticated });
|
|
119
|
-
});
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Request Logging
|
|
123
|
-
Automatically logs incoming requests and responses with timing:
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
→ GET /api/user
|
|
127
|
-
← GET /api/user 200 (45ms)
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Error Handling
|
|
131
|
-
Catches and properly formats errors:
|
|
132
|
-
|
|
133
|
-
```typescript
|
|
134
|
-
app.get("/api/error-example", (c) => {
|
|
135
|
-
throw new Error("Something went wrong");
|
|
136
|
-
// This will be automatically caught and returned as:
|
|
137
|
-
// { error: "Internal Server Error", message: "Something went wrong", ... }
|
|
138
|
-
});
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## Appwrite Integration
|
|
142
|
-
|
|
143
|
-
### Authentication
|
|
144
|
-
|
|
145
|
-
Check if a user is authenticated:
|
|
146
|
-
|
|
147
|
-
```typescript
|
|
148
|
-
app.get("/api/protected", (c) => {
|
|
149
|
-
if (!c.appwrite.isUserAuthenticated()) {
|
|
150
|
-
return c.json({ error: "Authentication required" }, 401);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const userId = c.appwrite.userId;
|
|
154
|
-
return c.json({ message: `Hello user ${userId}` });
|
|
155
|
-
});
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### API Key Access
|
|
159
|
-
|
|
160
|
-
Check if request has valid API key:
|
|
161
|
-
|
|
162
|
-
```typescript
|
|
163
|
-
app.get("/api/admin", (c) => {
|
|
164
|
-
if (!c.appwrite.isApiKeyRequest()) {
|
|
165
|
-
return c.json({ error: "API key required" }, 401);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Admin operations here
|
|
169
|
-
return c.json({ message: "Admin access granted" });
|
|
170
|
-
});
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Database Operations
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
app.post("/api/posts", async (c) => {
|
|
177
|
-
const data = await c.req.json();
|
|
178
|
-
const { databases } = getAppwriteClient(c);
|
|
179
|
-
|
|
180
|
-
try {
|
|
181
|
-
const post = await databases.createDocument(
|
|
182
|
-
"blog-db",
|
|
183
|
-
"posts",
|
|
184
|
-
"unique()",
|
|
185
|
-
{
|
|
186
|
-
title: data.title,
|
|
187
|
-
content: data.content,
|
|
188
|
-
authorId: c.appwrite.userId,
|
|
189
|
-
createdAt: new Date().toISOString(),
|
|
190
|
-
}
|
|
191
|
-
);
|
|
192
|
-
|
|
193
|
-
return c.json({ post }, 201);
|
|
194
|
-
} catch (error) {
|
|
195
|
-
c.error(`Failed to create post: ${error}`);
|
|
196
|
-
return c.json({ error: "Failed to create post" }, 500);
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
## Environment Variables
|
|
202
|
-
|
|
203
|
-
The following environment variables are automatically available:
|
|
204
|
-
|
|
205
|
-
- `APPWRITE_FUNCTION_ENDPOINT` - Appwrite server endpoint
|
|
206
|
-
- `APPWRITE_FUNCTION_PROJECT_ID` - Current project ID
|
|
207
|
-
- `APPWRITE_FUNCTION_API_KEY` - Function API key
|
|
208
|
-
- `APPWRITE_FUNCTION_ID` - Current function ID
|
|
209
|
-
- `APPWRITE_FUNCTION_NAME` - Function name
|
|
210
|
-
|
|
211
|
-
## Response Types
|
|
212
|
-
|
|
213
|
-
Hono provides several response helpers:
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
// JSON response
|
|
217
|
-
return c.json({ data: "value" });
|
|
218
|
-
|
|
219
|
-
// Text response
|
|
220
|
-
return c.text("Hello World");
|
|
221
|
-
|
|
222
|
-
// HTML response
|
|
223
|
-
return c.html("<h1>Hello</h1>");
|
|
224
|
-
|
|
225
|
-
// Redirect
|
|
226
|
-
return c.redirect("/new-url");
|
|
227
|
-
|
|
228
|
-
// Custom status
|
|
229
|
-
return c.json({ error: "Not found" }, 404);
|
|
230
|
-
|
|
231
|
-
// Custom headers
|
|
232
|
-
return c.json({ data: "value" }, 200, {
|
|
233
|
-
"X-Custom-Header": "value"
|
|
234
|
-
});
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Advanced Usage
|
|
238
|
-
|
|
239
|
-
### Custom Middleware
|
|
240
|
-
|
|
241
|
-
```typescript
|
|
242
|
-
const authMiddleware = () => {
|
|
243
|
-
return async (c, next) => {
|
|
244
|
-
const token = c.req.header("Authorization");
|
|
245
|
-
|
|
246
|
-
if (!token) {
|
|
247
|
-
return c.json({ error: "Missing token" }, 401);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// Validate token logic here
|
|
251
|
-
c.set("user", { id: "123", email: "user@example.com" });
|
|
252
|
-
|
|
253
|
-
await next();
|
|
254
|
-
};
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
// Apply to specific routes
|
|
258
|
-
app.use("/api/protected/*", authMiddleware());
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
### Path Parameters and Query Strings
|
|
262
|
-
|
|
263
|
-
```typescript
|
|
264
|
-
// Path parameters
|
|
265
|
-
app.get("/api/users/:id/posts/:postId", (c) => {
|
|
266
|
-
const userId = c.req.param("id");
|
|
267
|
-
const postId = c.req.param("postId");
|
|
268
|
-
|
|
269
|
-
return c.json({ userId, postId });
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
// Query parameters
|
|
273
|
-
app.get("/api/search", (c) => {
|
|
274
|
-
const query = c.req.query("q");
|
|
275
|
-
const page = parseInt(c.req.query("page") || "1");
|
|
276
|
-
const limit = parseInt(c.req.query("limit") || "10");
|
|
277
|
-
|
|
278
|
-
return c.json({ query, page, limit });
|
|
279
|
-
});
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
## Learn More
|
|
283
|
-
|
|
284
|
-
- [Hono Documentation](https://hono.dev/docs)
|
|
285
|
-
- [Appwrite Functions Documentation](https://appwrite.io/docs/functions)
|
|
1
|
+
# {{functionName}} - Hono + Appwrite Function
|
|
2
|
+
|
|
3
|
+
This is an Appwrite TypeScript function built with the [Hono](https://hono.dev) web framework. Hono provides a fast, lightweight, and modern way to build web APIs with excellent TypeScript support.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🚀 **Ultra-fast routing** with Hono framework
|
|
8
|
+
- 🔒 **Built-in Appwrite integration** with context injection
|
|
9
|
+
- 📝 **Full TypeScript support** with type safety
|
|
10
|
+
- 🛠️ **Comprehensive middleware** for logging, error handling, and Appwrite context
|
|
11
|
+
- 🔧 **Request/Response adapters** for seamless integration
|
|
12
|
+
- 📊 **Example API endpoints** with database operations
|
|
13
|
+
|
|
14
|
+
## Project Structure
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
src/
|
|
18
|
+
├── index.ts # Main Appwrite function entry point
|
|
19
|
+
├── app.ts # Hono application with routes
|
|
20
|
+
├── context.ts # Appwrite context type definitions
|
|
21
|
+
├── adapters/
|
|
22
|
+
│ ├── request.ts # Appwrite → Hono request conversion
|
|
23
|
+
│ └── response.ts # Hono → Appwrite response conversion
|
|
24
|
+
└── middleware/
|
|
25
|
+
└── appwrite.ts # Appwrite context middleware
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Getting Started
|
|
29
|
+
|
|
30
|
+
### 1. Install Dependencies
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. Available Routes
|
|
37
|
+
|
|
38
|
+
- `GET /` - Welcome message with function info
|
|
39
|
+
- `GET /health` - Health check endpoint
|
|
40
|
+
- `GET /api/user` - Get current authenticated user (requires user session)
|
|
41
|
+
- `POST /api/webhook` - Generic webhook handler
|
|
42
|
+
- `GET /api/databases` - List databases (requires API key)
|
|
43
|
+
- `POST /api/data/:databaseId/:collectionId` - Create document
|
|
44
|
+
- `GET /api/data/:databaseId/:collectionId` - List documents
|
|
45
|
+
|
|
46
|
+
### 3. Development
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm run dev
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 4. Build
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm run build
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Adding New Routes
|
|
59
|
+
|
|
60
|
+
You can easily add new routes to your Hono app in `src/app.ts`:
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// GET endpoint
|
|
64
|
+
app.get("/api/hello/:name", (c) => {
|
|
65
|
+
const name = c.req.param("name");
|
|
66
|
+
c.log(`Hello endpoint called for ${name}`);
|
|
67
|
+
|
|
68
|
+
return c.json({
|
|
69
|
+
message: `Hello, ${name}!`,
|
|
70
|
+
timestamp: new Date().toISOString(),
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// POST endpoint with JSON body
|
|
75
|
+
app.post("/api/items", async (c) => {
|
|
76
|
+
const data = await c.req.json();
|
|
77
|
+
|
|
78
|
+
// Access Appwrite context
|
|
79
|
+
const { databases } = getAppwriteClient(c);
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
const document = await databases.createDocument(
|
|
83
|
+
"database-id",
|
|
84
|
+
"collection-id",
|
|
85
|
+
"unique()",
|
|
86
|
+
data
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
c.log("Item created successfully");
|
|
90
|
+
return c.json({ item: document }, 201);
|
|
91
|
+
} catch (error) {
|
|
92
|
+
c.error(`Failed to create item: ${error}`);
|
|
93
|
+
return c.json({ error: "Failed to create item" }, 500);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Middleware
|
|
99
|
+
|
|
100
|
+
The template includes several built-in middleware:
|
|
101
|
+
|
|
102
|
+
### Appwrite Context Middleware
|
|
103
|
+
Automatically injects Appwrite context into every Hono request:
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// Access Appwrite context in any route handler
|
|
107
|
+
app.get("/api/example", (c) => {
|
|
108
|
+
const appwriteContext = c.get("appwriteContext");
|
|
109
|
+
|
|
110
|
+
// Use Appwrite logging
|
|
111
|
+
c.log("This will appear in Appwrite function logs");
|
|
112
|
+
c.error("This will appear as an error in Appwrite logs");
|
|
113
|
+
|
|
114
|
+
// Access Appwrite headers
|
|
115
|
+
const userId = c.appwrite.userId;
|
|
116
|
+
const isAuthenticated = c.appwrite.isUserAuthenticated();
|
|
117
|
+
|
|
118
|
+
return c.json({ userId, isAuthenticated });
|
|
119
|
+
});
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Request Logging
|
|
123
|
+
Automatically logs incoming requests and responses with timing:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
→ GET /api/user
|
|
127
|
+
← GET /api/user 200 (45ms)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Error Handling
|
|
131
|
+
Catches and properly formats errors:
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
app.get("/api/error-example", (c) => {
|
|
135
|
+
throw new Error("Something went wrong");
|
|
136
|
+
// This will be automatically caught and returned as:
|
|
137
|
+
// { error: "Internal Server Error", message: "Something went wrong", ... }
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Appwrite Integration
|
|
142
|
+
|
|
143
|
+
### Authentication
|
|
144
|
+
|
|
145
|
+
Check if a user is authenticated:
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
app.get("/api/protected", (c) => {
|
|
149
|
+
if (!c.appwrite.isUserAuthenticated()) {
|
|
150
|
+
return c.json({ error: "Authentication required" }, 401);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const userId = c.appwrite.userId;
|
|
154
|
+
return c.json({ message: `Hello user ${userId}` });
|
|
155
|
+
});
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### API Key Access
|
|
159
|
+
|
|
160
|
+
Check if request has valid API key:
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
app.get("/api/admin", (c) => {
|
|
164
|
+
if (!c.appwrite.isApiKeyRequest()) {
|
|
165
|
+
return c.json({ error: "API key required" }, 401);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Admin operations here
|
|
169
|
+
return c.json({ message: "Admin access granted" });
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Database Operations
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
app.post("/api/posts", async (c) => {
|
|
177
|
+
const data = await c.req.json();
|
|
178
|
+
const { databases } = getAppwriteClient(c);
|
|
179
|
+
|
|
180
|
+
try {
|
|
181
|
+
const post = await databases.createDocument(
|
|
182
|
+
"blog-db",
|
|
183
|
+
"posts",
|
|
184
|
+
"unique()",
|
|
185
|
+
{
|
|
186
|
+
title: data.title,
|
|
187
|
+
content: data.content,
|
|
188
|
+
authorId: c.appwrite.userId,
|
|
189
|
+
createdAt: new Date().toISOString(),
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
return c.json({ post }, 201);
|
|
194
|
+
} catch (error) {
|
|
195
|
+
c.error(`Failed to create post: ${error}`);
|
|
196
|
+
return c.json({ error: "Failed to create post" }, 500);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Environment Variables
|
|
202
|
+
|
|
203
|
+
The following environment variables are automatically available:
|
|
204
|
+
|
|
205
|
+
- `APPWRITE_FUNCTION_ENDPOINT` - Appwrite server endpoint
|
|
206
|
+
- `APPWRITE_FUNCTION_PROJECT_ID` - Current project ID
|
|
207
|
+
- `APPWRITE_FUNCTION_API_KEY` - Function API key
|
|
208
|
+
- `APPWRITE_FUNCTION_ID` - Current function ID
|
|
209
|
+
- `APPWRITE_FUNCTION_NAME` - Function name
|
|
210
|
+
|
|
211
|
+
## Response Types
|
|
212
|
+
|
|
213
|
+
Hono provides several response helpers:
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
// JSON response
|
|
217
|
+
return c.json({ data: "value" });
|
|
218
|
+
|
|
219
|
+
// Text response
|
|
220
|
+
return c.text("Hello World");
|
|
221
|
+
|
|
222
|
+
// HTML response
|
|
223
|
+
return c.html("<h1>Hello</h1>");
|
|
224
|
+
|
|
225
|
+
// Redirect
|
|
226
|
+
return c.redirect("/new-url");
|
|
227
|
+
|
|
228
|
+
// Custom status
|
|
229
|
+
return c.json({ error: "Not found" }, 404);
|
|
230
|
+
|
|
231
|
+
// Custom headers
|
|
232
|
+
return c.json({ data: "value" }, 200, {
|
|
233
|
+
"X-Custom-Header": "value"
|
|
234
|
+
});
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Advanced Usage
|
|
238
|
+
|
|
239
|
+
### Custom Middleware
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
const authMiddleware = () => {
|
|
243
|
+
return async (c, next) => {
|
|
244
|
+
const token = c.req.header("Authorization");
|
|
245
|
+
|
|
246
|
+
if (!token) {
|
|
247
|
+
return c.json({ error: "Missing token" }, 401);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Validate token logic here
|
|
251
|
+
c.set("user", { id: "123", email: "user@example.com" });
|
|
252
|
+
|
|
253
|
+
await next();
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
// Apply to specific routes
|
|
258
|
+
app.use("/api/protected/*", authMiddleware());
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Path Parameters and Query Strings
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
// Path parameters
|
|
265
|
+
app.get("/api/users/:id/posts/:postId", (c) => {
|
|
266
|
+
const userId = c.req.param("id");
|
|
267
|
+
const postId = c.req.param("postId");
|
|
268
|
+
|
|
269
|
+
return c.json({ userId, postId });
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// Query parameters
|
|
273
|
+
app.get("/api/search", (c) => {
|
|
274
|
+
const query = c.req.query("q");
|
|
275
|
+
const page = parseInt(c.req.query("page") || "1");
|
|
276
|
+
const limit = parseInt(c.req.query("limit") || "10");
|
|
277
|
+
|
|
278
|
+
return c.json({ query, page, limit });
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Learn More
|
|
283
|
+
|
|
284
|
+
- [Hono Documentation](https://hono.dev/docs)
|
|
285
|
+
- [Appwrite Functions Documentation](https://appwrite.io/docs/functions)
|
|
286
286
|
- [TypeScript Documentation](https://www.typescriptlang.org/docs/)
|