@joystick.js/db-canary 0.0.0-canary.2213 → 0.0.0-canary.2217

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.
Files changed (226) hide show
  1. package/dist/server/index.js +1 -1
  2. package/dist/server/lib/api_key_manager.js +4 -4
  3. package/dist/server/lib/development_mode.js +7 -0
  4. package/dist/server/lib/http_server.js +7 -7
  5. package/package.json +4 -4
  6. package/src/server/index.js +14 -1
  7. package/src/server/lib/api_key_manager.js +71 -5
  8. package/src/server/lib/development_mode.js +60 -0
  9. package/src/server/lib/http_server.js +31 -8
  10. package/{data → test_data_dev_1758048078945_ow5lwnkbj}/data.mdb +0 -0
  11. package/{test_data → test_data_dev_1758048078945_ow5lwnkbj}/lock.mdb +0 -0
  12. package/test_data_dev_1758048695693_jhp72uh09/data.mdb +0 -0
  13. package/{data → test_data_dev_1758048695693_jhp72uh09}/lock.mdb +0 -0
  14. package/tests/server/lib/api_key_manager_development.test.js +163 -0
  15. package/tests/server/lib/development_mode.test.js +106 -0
  16. package/API_KEY +0 -1
  17. package/logs/.013e15b54597d05db4b4b53ecc37b10c92a72927-audit.json +0 -20
  18. package/logs/.02de550a67ea0f5961faa2dfd458a4d06f59ebd1-audit.json +0 -20
  19. package/logs/.03494ba24eb3c72214b4068a77d54b8993bee651-audit.json +0 -20
  20. package/logs/.06309ec60b339be1259a7993dd09c732f8907fbc-audit.json +0 -20
  21. package/logs/.0663a04dcfa17285661e5e1b8cfa51f41523b210-audit.json +0 -20
  22. package/logs/.0f06e6c4c9b824622729e13927587479e5060391-audit.json +0 -20
  23. package/logs/.16ccf58682ecb22b3e3ec63f0da1b7fe9be56528-audit.json +0 -20
  24. package/logs/.1fa1a5d02f496474b1ab473524c65c984146a9ad-audit.json +0 -20
  25. package/logs/.2223c0ae3bea6f0d62c62b1d319cc8634856abb7-audit.json +0 -20
  26. package/logs/.23dc79ffda3e083665e6f5993f59397adcbf4a46-audit.json +0 -20
  27. package/logs/.28104f49b03906b189eefd1cd462cb46c3c0af22-audit.json +0 -20
  28. package/logs/.29cdbf13808abe6a0ce70ee2f2efdd680ce3fd8e-audit.json +0 -20
  29. package/logs/.2a9889afd071f77f41f5170d08703a0afca866b7-audit.json +0 -20
  30. package/logs/.2acec3d1940a2bbed487528b703ee5948959a599-audit.json +0 -20
  31. package/logs/.2fb60ff326338c02bfedbcd0e936444e4a216750-audit.json +0 -20
  32. package/logs/.318fc7a19530d76a345f030f7cad00dda15300e7-audit.json +0 -20
  33. package/logs/.3cf27043e19085f908cedc7701e6d013463208ee-audit.json +0 -25
  34. package/logs/.3d90d785415817fc443402843b7c95f8371adc9b-audit.json +0 -20
  35. package/logs/.4074bca620375f72966fc52dfd439577727671e5-audit.json +0 -20
  36. package/logs/.40eecf018417ea80a70ea8ec7a3cc9406bc6334b-audit.json +0 -20
  37. package/logs/.50e974f1ef7c365fca6a1251b2e2c2252914cb5e-audit.json +0 -20
  38. package/logs/.52cb7d9e4223cf26ba36006ac26b949a97c7923c-audit.json +0 -20
  39. package/logs/.54befcdb84c15aad980705a31bcc9f555c3577ab-audit.json +0 -20
  40. package/logs/.57dfb70e22eddb84db2e3c0ceeefac5c0b9baffa-audit.json +0 -20
  41. package/logs/.5f0b24705a1eaad4eca4968f2d86f91b3f9be683-audit.json +0 -20
  42. package/logs/.61ba98fdda7db58576b382fee07904e5db1169d6-audit.json +0 -20
  43. package/logs/.6235017727ef6b199d569a99d6aa8c8e80a1b475-audit.json +0 -20
  44. package/logs/.63db16193699219489d218a1ddea5dde3750cae4-audit.json +0 -20
  45. package/logs/.64fb67dfe14149c9eef728d79bf30a54da809c60-audit.json +0 -20
  46. package/logs/.669137453368987c1f311b5345342527afb54e50-audit.json +0 -20
  47. package/logs/.7a71f8c89ea28ae266d356aeff6306e876a30fbb-audit.json +0 -20
  48. package/logs/.7afbaa90fe9dc3a7d682676f9bb79f9a1b1fd9a6-audit.json +0 -20
  49. package/logs/.7ca29e322cd05327035de850099e7610864f2347-audit.json +0 -20
  50. package/logs/.83335ab3347e449dae03455a110aaf7f120d4802-audit.json +0 -20
  51. package/logs/.8c2487b5fd445d2c8e5c483c80b9fa99bbf1ca58-audit.json +0 -20
  52. package/logs/.8c8b9dc386922c9f3b4c13251af7052aac1d24c0-audit.json +0 -20
  53. package/logs/.8d6155d94640c4863301ae0fee5e4e7372a21446-audit.json +0 -20
  54. package/logs/.944a3119a243deea7c8270d5d9e582bb1d0eaa10-audit.json +0 -20
  55. package/logs/.9816a845c30fb2909f3b26a23eeb3538ebcad5db-audit.json +0 -20
  56. package/logs/.9dc08784e38b865488177c26d4af5934555e0323-audit.json +0 -20
  57. package/logs/.9dd27d2e0e454ac0a37600206d1cac5493b0d7ee-audit.json +0 -20
  58. package/logs/.a3d486feeac7654c59b547de96600e8849a06d4f-audit.json +0 -20
  59. package/logs/.a5b811f4def22250f86cc18870d7c4573625df22-audit.json +0 -20
  60. package/logs/.a61648eb5f830e0b6f508ac35e4f8f629d2ad4c7-audit.json +0 -20
  61. package/logs/.a89016d507045771b4b5a65656944a9c0f1e528b-audit.json +0 -20
  62. package/logs/.a99bee160a1c590be959af46bacc02724803f691-audit.json +0 -20
  63. package/logs/.ada7906d6243fd7da802f03d86c4ae5dd9df6236-audit.json +0 -20
  64. package/logs/.b518339ee942143b6af983af167f5bbb6983b4de-audit.json +0 -20
  65. package/logs/.b51b124b166d53c9519017856ea610d61d65fabe-audit.json +0 -20
  66. package/logs/.b7a6aee19f58e55633d5e4a3709041c47dfff975-audit.json +0 -20
  67. package/logs/.bd7a8a6ba9c55d557a4867ab53f02e3ec2e1553d-audit.json +0 -20
  68. package/logs/.c1435dafe453b169d6392b25065f3cf4ab6fbb21-audit.json +0 -20
  69. package/logs/.c17e1ce043109f77dc2f0e2aa290a9d1ed842c03-audit.json +0 -20
  70. package/logs/.ca62637ce9540e5a38a2fbedb2115febb6ad308a-audit.json +0 -20
  71. package/logs/.ccee67b9c176967f8977071409a41f5cb5cd6ad4-audit.json +0 -20
  72. package/logs/.db24043417ea79a6f14cd947476399e53930b48d-audit.json +0 -20
  73. package/logs/.e0f12acccb57829f5f33712bb2e2607ecd808147-audit.json +0 -20
  74. package/logs/.e9b6cc33d0bbd2e644c4e2bf44d177f850016557-audit.json +0 -20
  75. package/logs/.f15291d434808e3bdca7963ccd2e73893be027e6-audit.json +0 -20
  76. package/logs/.f4bdf9e21ef84f8a3fae3ffb32bbc39275991351-audit.json +0 -20
  77. package/logs/.fbac3aefac1e81b4230df5aa50667cb90d51024f-audit.json +0 -20
  78. package/logs/.fcfd495c0a9169db243f4a4f21878ee02b76413c-audit.json +0 -20
  79. package/logs/admin-2025-09-12.log +0 -580
  80. package/logs/admin-2025-09-15.log +0 -283
  81. package/logs/admin-error-2025-09-12.log +0 -22
  82. package/logs/admin-error-2025-09-15.log +0 -10
  83. package/logs/api_key_manager-2025-09-12.log +0 -658
  84. package/logs/api_key_manager-2025-09-15.log +0 -295
  85. package/logs/api_key_manager-error-2025-09-12.log +0 -0
  86. package/logs/api_key_manager-error-2025-09-15.log +0 -0
  87. package/logs/auth_manager-2025-09-12.log +0 -4432
  88. package/logs/auth_manager-2025-09-15.log +0 -2000
  89. package/logs/auth_manager-error-2025-09-12.log +0 -11
  90. package/logs/auth_manager-error-2025-09-15.log +0 -5
  91. package/logs/auto_index_manager-2025-09-12.log +0 -84
  92. package/logs/auto_index_manager-2025-09-15.log +0 -45
  93. package/logs/auto_index_manager-error-2025-09-12.log +0 -6
  94. package/logs/auto_index_manager-error-2025-09-15.log +0 -0
  95. package/logs/backup_manager-2025-09-12.log +0 -198
  96. package/logs/backup_manager-2025-09-15.log +0 -90
  97. package/logs/backup_manager-error-2025-09-12.log +0 -198
  98. package/logs/backup_manager-error-2025-09-15.log +0 -90
  99. package/logs/bulk_write-2025-09-12.log +0 -66
  100. package/logs/bulk_write-2025-09-15.log +0 -38
  101. package/logs/bulk_write-error-2025-09-12.log +0 -0
  102. package/logs/bulk_write-error-2025-09-15.log +0 -0
  103. package/logs/connection_manager-2025-09-12.log +0 -2412
  104. package/logs/connection_manager-2025-09-15.log +0 -1132
  105. package/logs/connection_manager-error-2025-09-12.log +0 -0
  106. package/logs/connection_manager-error-2025-09-15.log +0 -0
  107. package/logs/create_index-2025-09-12.log +0 -302
  108. package/logs/create_index-2025-09-15.log +0 -158
  109. package/logs/create_index-error-2025-09-12.log +0 -30
  110. package/logs/create_index-error-2025-09-15.log +0 -13
  111. package/logs/delete_one-2025-09-12.log +0 -73
  112. package/logs/delete_one-2025-09-15.log +0 -43
  113. package/logs/delete_one-error-2025-09-12.log +0 -0
  114. package/logs/delete_one-error-2025-09-15.log +0 -0
  115. package/logs/disk_utils-2025-09-12.log +0 -4954
  116. package/logs/disk_utils-2025-09-15.log +0 -2446
  117. package/logs/disk_utils-error-2025-09-12.log +0 -0
  118. package/logs/disk_utils-error-2025-09-15.log +0 -0
  119. package/logs/drop_index-2025-09-12.log +0 -41
  120. package/logs/drop_index-2025-09-15.log +0 -23
  121. package/logs/drop_index-error-2025-09-12.log +0 -11
  122. package/logs/drop_index-error-2025-09-15.log +0 -5
  123. package/logs/find-2025-09-12.log +0 -1050
  124. package/logs/find-2025-09-15.log +0 -592
  125. package/logs/find-error-2025-09-12.log +0 -1
  126. package/logs/find-error-2025-09-15.log +0 -0
  127. package/logs/find_one-2025-09-12.log +0 -425
  128. package/logs/find_one-2025-09-15.log +0 -264
  129. package/logs/find_one-error-2025-09-12.log +0 -5
  130. package/logs/find_one-error-2025-09-15.log +0 -0
  131. package/logs/get_indexes-2025-09-12.log +0 -84
  132. package/logs/get_indexes-2025-09-15.log +0 -56
  133. package/logs/get_indexes-error-2025-09-12.log +0 -6
  134. package/logs/get_indexes-error-2025-09-15.log +0 -0
  135. package/logs/http_server-2025-09-12.log +0 -2772
  136. package/logs/http_server-2025-09-15.log +0 -1276
  137. package/logs/http_server-error-2025-09-12.log +0 -212
  138. package/logs/http_server-error-2025-09-15.log +0 -44
  139. package/logs/index_manager-2025-09-12.log +0 -5031
  140. package/logs/index_manager-2025-09-15.log +0 -2909
  141. package/logs/index_manager-error-2025-09-12.log +0 -80
  142. package/logs/index_manager-error-2025-09-15.log +0 -38
  143. package/logs/insert_one-2025-09-12.log +0 -2181
  144. package/logs/insert_one-2025-09-15.log +0 -1293
  145. package/logs/insert_one-error-2025-09-12.log +0 -0
  146. package/logs/insert_one-error-2025-09-15.log +0 -0
  147. package/logs/master-2025-09-12.log +0 -1882
  148. package/logs/master-2025-09-15.log +0 -910
  149. package/logs/master-error-2025-09-12.log +0 -80
  150. package/logs/master-error-2025-09-15.log +0 -0
  151. package/logs/operation_dispatcher-2025-09-12.log +0 -751
  152. package/logs/operation_dispatcher-2025-09-15.log +0 -359
  153. package/logs/operation_dispatcher-error-2025-09-12.log +0 -33
  154. package/logs/operation_dispatcher-error-2025-09-15.log +0 -11
  155. package/logs/performance_monitor-2025-09-12.log +0 -14889
  156. package/logs/performance_monitor-2025-09-15.log +0 -6803
  157. package/logs/performance_monitor-error-2025-09-12.log +0 -0
  158. package/logs/performance_monitor-error-2025-09-15.log +0 -0
  159. package/logs/query_engine-2025-09-12.log +0 -5310
  160. package/logs/query_engine-2025-09-15.log +0 -2639
  161. package/logs/query_engine-error-2025-09-12.log +0 -0
  162. package/logs/query_engine-error-2025-09-15.log +0 -0
  163. package/logs/recovery_manager-2025-09-12.log +0 -462
  164. package/logs/recovery_manager-2025-09-15.log +0 -210
  165. package/logs/recovery_manager-error-2025-09-12.log +0 -22
  166. package/logs/recovery_manager-error-2025-09-15.log +0 -10
  167. package/logs/replication-2025-09-12.log +0 -1923
  168. package/logs/replication-2025-09-15.log +0 -917
  169. package/logs/replication-error-2025-09-12.log +0 -33
  170. package/logs/replication-error-2025-09-15.log +0 -15
  171. package/logs/server-2025-09-12.log +0 -2601
  172. package/logs/server-2025-09-15.log +0 -1191
  173. package/logs/server-error-2025-09-12.log +0 -0
  174. package/logs/server-error-2025-09-15.log +0 -0
  175. package/logs/tcp_protocol-2025-09-12.log +0 -22
  176. package/logs/tcp_protocol-2025-09-15.log +0 -10
  177. package/logs/tcp_protocol-error-2025-09-12.log +0 -22
  178. package/logs/tcp_protocol-error-2025-09-15.log +0 -10
  179. package/logs/test-2025-09-12.log +0 -0
  180. package/logs/test-2025-09-15.log +0 -0
  181. package/logs/test-error-2025-09-12.log +0 -0
  182. package/logs/test-error-2025-09-15.log +0 -0
  183. package/logs/update_one-2025-09-12.log +0 -173
  184. package/logs/update_one-2025-09-15.log +0 -118
  185. package/logs/update_one-error-2025-09-12.log +0 -0
  186. package/logs/update_one-error-2025-09-15.log +0 -0
  187. package/logs/worker-2025-09-12.log +0 -1457
  188. package/logs/worker-2025-09-15.log +0 -695
  189. package/logs/worker-error-2025-09-12.log +0 -0
  190. package/logs/worker-error-2025-09-15.log +0 -0
  191. package/logs/write_forwarder-2025-09-12.log +0 -1956
  192. package/logs/write_forwarder-2025-09-15.log +0 -932
  193. package/logs/write_forwarder-error-2025-09-12.log +0 -66
  194. package/logs/write_forwarder-error-2025-09-15.log +0 -30
  195. package/logs/write_queue-2025-09-12.log +0 -612
  196. package/logs/write_queue-2025-09-15.log +0 -301
  197. package/logs/write_queue-error-2025-09-12.log +0 -184
  198. package/logs/write_queue-error-2025-09-15.log +0 -83
  199. package/prompts/01-core-infrastructure.md +0 -56
  200. package/prompts/02-secondary-indexing.md +0 -65
  201. package/prompts/03-write-serialization.md +0 -63
  202. package/prompts/04-enhanced-authentication.md +0 -75
  203. package/prompts/05-comprehensive-admin-operations.md +0 -75
  204. package/prompts/06-backup-and-restore-system.md +0 -106
  205. package/prompts/07-production-safety-features.md +0 -107
  206. package/prompts/08-tcp-client-library.md +0 -121
  207. package/prompts/09-api-method-chaining.md +0 -134
  208. package/prompts/10-automatic-index-creation.md +0 -223
  209. package/prompts/11-operation-naming-consistency.md +0 -268
  210. package/prompts/12-tcp-replication-system.md +0 -333
  211. package/prompts/13-master-read-write-operations.md +0 -57
  212. package/prompts/14-index-upsert-operations.md +0 -68
  213. package/prompts/15-client-api-return-types.md +0 -81
  214. package/prompts/16-server-setup-ui.md +0 -97
  215. package/prompts/17-emergency-password-change.md +0 -108
  216. package/prompts/18-joystick-framework-integration.md +0 -116
  217. package/prompts/19-api-key-authentication-system.md +0 -137
  218. package/prompts/20-configurable-server-port.md +0 -105
  219. package/prompts/21-multi-database-support.md +0 -161
  220. package/prompts/22-build-script-integration.md +0 -129
  221. package/prompts/23-cli-integration.md +0 -268
  222. package/prompts/FULL_TEXT_SEARCH.md +0 -293
  223. package/prompts/PROMPTS.md +0 -158
  224. package/prompts/README.md +0 -221
  225. package/prompts/TYPESCRIPT_GENERATION.md +0 -179
  226. package/test_data/data.mdb +0 -0
@@ -1,129 +0,0 @@
1
- # Task 22: Build Script Integration for CLI and Node Packages
2
-
3
- ## Objective
4
- Integrate JoystickDB components into the CLI and Node packages by modifying their build scripts to copy the necessary database code before building, and updating their package.json files with required dependencies.
5
-
6
- ## Current State
7
- - JoystickDB is fully implemented in `/Users/rglover/projects/cheatcode/joystick/db`
8
- - CLI package needs server components for development database functionality
9
- - Node package needs client components for database connectivity
10
- - Both packages use esbuild with `bundle: false` configuration
11
- - Current build scripts do not include database code integration
12
-
13
- ## Requirements
14
-
15
- ### 1. CLI Package Integration
16
- **Target**: `/Users/rglover/projects/cheatcode/joystick/cli`
17
-
18
- **Build Script Updates** (`cli/.build/index.js`):
19
- - Copy `db/dist/server/` → `cli/src/lib/joystickdb/` before building CLI files
20
- - Ensure copying happens before the existing build process
21
- - Use proper error handling for copy operations
22
- - Create target directories if they don't exist
23
-
24
- **Package.json Updates** (`cli/package.json`):
25
- - Add JoystickDB server dependencies to `dependencies`:
26
- - `"lmdb": "^3.4.2"`
27
- - `"msgpackr": "^1.11.5"`
28
- - `"bcrypt": "^6.0.0"`
29
- - `"winston": "^3.17.0"`
30
- - `"winston-daily-rotate-file": "^5.0.0"`
31
- - `"@aws-sdk/client-s3": "^3.879.0"`
32
-
33
- ### 2. Node Package Integration
34
- **Target**: `/Users/rglover/projects/cheatcode/joystick/node`
35
-
36
- **Build Script Updates** (`node/.build/index.js`):
37
- - Copy `db/dist/client/` → `node/src/lib/joystickdb/` before building Node files
38
- - Ensure copying happens before the existing build process
39
- - Use proper error handling for copy operations
40
- - Create target directories if they don't exist
41
-
42
- **Package.json Updates** (`node/package.json`):
43
- - Add JoystickDB client dependencies to `dependencies`:
44
- - `"msgpackr": "^1.11.5"`
45
-
46
- ## Implementation Details
47
-
48
- ### Copy Operation Requirements
49
- - Use Node.js `fs` module with recursive directory copying
50
- - Preserve file structure and permissions
51
- - Handle existing directories (clean and recreate)
52
- - Provide clear error messages if source directories don't exist
53
- - Log copy operations for debugging
54
-
55
- ### Build Process Flow
56
- **CLI Build Process**:
57
- 1. Clean existing `cli/src/lib/joystickdb/` directory
58
- 2. Copy `db/dist/server/` → `cli/src/lib/joystickdb/`
59
- 3. Proceed with existing CLI build process (getFilesToBuild, buildFiles, copyFiles)
60
-
61
- **Node Build Process**:
62
- 1. Clean existing `node/src/lib/joystickdb/` directory
63
- 2. Copy `db/dist/client/` → `node/src/lib/joystickdb/`
64
- 3. Proceed with existing Node build process (getFilesToBuild, buildFiles, copyFiles)
65
-
66
- ### Error Handling
67
- - Graceful handling of missing source directories
68
- - Clear error messages indicating which copy operation failed
69
- - Build process should fail if database code copying fails
70
- - Provide guidance on running `npm run build` in db package first
71
-
72
- ### Import Path Consistency
73
- After integration, code can import database functionality using:
74
- - **CLI**: `import dbServer from './lib/joystickdb/index.js'`
75
- - **Node**: `import dbClient from './lib/joystickdb/index.js'`
76
-
77
- ## Code Standards
78
- - Follow existing build script patterns in both packages
79
- - Use ESM syntax (`import`/`export`)
80
- - Follow snake_case for variables and functions
81
- - Two-space indentation
82
- - Minimal comments (only when necessary for clarity)
83
- - Maintain compatibility with existing build processes
84
-
85
- ## Dependencies Management
86
- - Only add dependencies that are actually used by the copied code
87
- - CLI gets full server dependencies (including binary modules)
88
- - Node gets lightweight client dependencies only
89
- - Maintain version consistency with db package
90
- - Update package-lock.json files after dependency changes
91
-
92
- ## Testing Requirements
93
- - Verify build scripts run without errors after modifications
94
- - Confirm copied files are present in expected locations
95
- - Test that built packages include database functionality
96
- - Ensure existing CLI and Node functionality remains intact
97
- - Verify dependency installation works correctly
98
-
99
- ## Branch Management
100
- - Create feature branch: `feature/build-script-integration`
101
- - All work must be done in this branch
102
- - No direct commits to master or canary branch
103
- - Merge only when all build processes work correctly
104
-
105
- ## Success Criteria
106
- - ✅ CLI build script copies database server code before building
107
- - ✅ Node build script copies database client code before building
108
- - ✅ CLI package.json includes all necessary database server dependencies
109
- - ✅ Node package.json includes necessary database client dependencies
110
- - ✅ Build processes complete without errors
111
- - ✅ Copied database code is available at expected import paths
112
- - ✅ Existing CLI and Node functionality remains unaffected
113
- - ✅ Package-lock.json files are properly updated
114
-
115
- ## Implementation Notes
116
- - The db package must be built first (`npm run build` in db folder) to generate the dist files
117
- - Copy operations should use the built/dist versions, not the source files
118
- - This approach maintains the db folder as the "source of truth" while providing embedded functionality
119
- - CLI will be heavier due to binary dependencies, but this is acceptable for a development tool
120
- - Node package remains lightweight with only client functionality
121
-
122
- ## Future Considerations
123
- - This integration enables CLI to start database servers in development
124
- - Node package can connect to databases using embedded client code
125
- - Standalone db package remains available for production database server deployments
126
- - Version synchronization across packages will be handled by existing release processes
127
-
128
- ## Context for Implementation
129
- This task implements the build-time copying strategy discussed for integrating JoystickDB components into the CLI and Node packages. The approach maintains clean separation while providing embedded functionality without runtime path complexity.
@@ -1,268 +0,0 @@
1
- # Task 23: CLI Integration for Development Database
2
-
3
- ## Objective
4
- Integrate JoystickDB server into the existing CLI package development server infrastructure, enabling JoystickDB to be used alongside MongoDB, PostgreSQL, and Redis with identical developer experience.
5
-
6
- ## Current State
7
- - JoystickDB server code successfully copied to `cli/src/lib/development_server/databases/joystickdb/` during build process
8
- - CLI package includes all required server dependencies (lmdb, msgpackr, bcrypt, winston, etc.)
9
- - Existing database infrastructure supports MongoDB, PostgreSQL, and Redis via binary execution
10
- - Database provider map, installer, and connection patterns established
11
- - JoystickDB runs as standalone Node.js server via `create_server()` function
12
-
13
- ## Requirements
14
-
15
- ### 1. JoystickDB Provider Integration
16
- **Target**: `cli/src/lib/development_server/databases/`
17
-
18
- **Create JoystickDB Module** (`joystickdb/index.js`):
19
- - Import JoystickDB server from `./joystickdb/index.js` (copied database code in same directory)
20
- - Implement `start_joystickdb(port)` function using child_process.spawn()
21
- - Start JoystickDB as Node.js child process, not binary execution
22
- - Use `node ./lib/development_server/databases/joystickdb/index.js` pattern (file runs directly)
23
- - Handle process lifecycle: startup, shutdown, error handling
24
- - Return process ID for consistency with other databases
25
-
26
- **Create Connection Module** (`joystickdb/connect.js`):
27
- - Follow exact pattern of `mongodb/connect.js`, `postgresql/connect.js`, `redis/connect.js`
28
- - Support both external connections (when `settings.connection` provided) and local development server
29
- - Return `{ pid, connection }` object matching other database providers
30
- - Default connection: `{ hostname: "127.0.0.1", port: <port>, database: "app" }`
31
-
32
- **Create Connection Check** (`joystickdb/check_connection.js`):
33
- - Implement TCP connection validation to JoystickDB server
34
- - Follow pattern of other database connection checkers
35
- - Test basic connectivity and authentication if configured
36
-
37
- ### 2. Provider Map Registration
38
- **Target**: `cli/src/lib/development_server/databases/provider_map.js`
39
-
40
- **Add JoystickDB Entry**:
41
- ```javascript
42
- import connect_joystickdb from './joystickdb/connect.js';
43
-
44
- const provider_map = {
45
- // ... existing providers
46
- joystickdb: {
47
- name: 'JoystickDB',
48
- connect: connect_joystickdb,
49
- },
50
- };
51
- ```
52
-
53
- ### 3. Installer Integration
54
- **Target**: `cli/src/lib/development_server/databases/installer.js`
55
-
56
- **Skip Binary Installation for JoystickDB**:
57
- - Modify `install_database()` function to recognize `joystickdb` as special case
58
- - JoystickDB doesn't require binary download/installation (code already embedded)
59
- - Return early for `joystickdb` database type without attempting download
60
- - Add `joystickdb` to supported database list but bypass installation logic
61
-
62
- ### 4. Child Process Management
63
- **Implementation Details**:
64
-
65
- **Process Spawning**:
66
- - Use `child_process.spawn('node', ['./lib/development_server/databases/joystickdb/index.js'])` (file runs directly)
67
- - Set `cwd` to CLI package root directory for proper import resolution
68
- - Configure stdio: `{ stdio: ['pipe', 'pipe', 'pipe'] }` for output capture
69
- - Handle process startup confirmation via stdout monitoring
70
- - Set required environment variables (JOYSTICK_DB_SETTINGS) for proper startup
71
-
72
- **Process Lifecycle**:
73
- - Monitor stdout for "JoystickDB server started" or similar confirmation message
74
- - Implement graceful shutdown via process.kill() or SIGTERM
75
- - Handle process crashes and restart logic if needed
76
- - Track process ID for port management consistency
77
-
78
- **Error Handling**:
79
- - Catch spawn errors (Node.js not found, import failures, etc.)
80
- - Handle JoystickDB server startup errors (port conflicts, permission issues)
81
- - Provide clear error messages matching other database error patterns
82
- - Fallback gracefully if JoystickDB server fails to start
83
-
84
- ### 5. Port Management Integration
85
- **Requirements**:
86
- - Use existing `kill_port_process()` and `get_process_id_from_port()` utilities
87
- - Default JoystickDB port: `1983` (matching standalone server default)
88
- - Support custom port configuration via settings
89
- - Ensure port cleanup on development server shutdown
90
-
91
- ### 6. Data Directory Management
92
- **Setup Data Directory**:
93
- - Create `.joystick/data/joystickdb_<port>/` directory structure
94
- - Pass data directory path to JoystickDB server via environment variables or settings
95
- - Follow pattern of MongoDB data directory management
96
- - Support multiple JoystickDB instances on different ports
97
-
98
- ### 7. Settings Integration
99
- **Configuration Support**:
100
- - Accept JoystickDB settings in same format as other databases
101
- - Support external connection strings for remote JoystickDB servers
102
- - Handle authentication settings (password, API keys)
103
- - Pass settings to JoystickDB server process via environment or config file
104
-
105
- ### 8. Automated Setup for Development
106
- **Transparent Setup Process**:
107
- - Automatically read API_KEY from `./lib/development_server/databases/joystickdb/API_KEY` file
108
- - Create default admin user automatically on localhost without developer intervention
109
- - Use HTTP API to create admin user: `POST /api/users` with API key authentication
110
- - Default admin credentials: `username: 'admin'`, `password: 'password'`
111
- - Provide clear logging of setup process for debugging
112
- - Ensure setup happens after server startup confirmation but before returning connection
113
-
114
- ## Implementation Patterns
115
-
116
- ### Child Process Pattern
117
- ```javascript
118
- const start_joystickdb_process = (joystickdb_port = 1983) => {
119
- return new Promise((resolve, reject) => {
120
- const database_process = child_process.spawn('node', [
121
- './lib/development_server/databases/joystickdb/index.js'
122
- ], {
123
- cwd: process.cwd(),
124
- stdio: ['pipe', 'pipe', 'pipe'],
125
- env: {
126
- ...process.env,
127
- JOYSTICK_DB_SETTINGS: JSON.stringify({
128
- port: joystickdb_port,
129
- data_path: `./.joystick/data/joystickdb_${joystickdb_port}`,
130
- authentication: {}
131
- })
132
- }
133
- });
134
-
135
- database_process.on('error', reject);
136
-
137
- database_process.stdout.on('data', (data) => {
138
- if (data.toString().includes('Starting JoystickDB server')) {
139
- resolve(database_process.pid);
140
- }
141
- });
142
- });
143
- };
144
- ```
145
-
146
- ### Automated Setup Pattern
147
- ```javascript
148
- const setup_joystickdb_admin = async (port = 1983) => {
149
- try {
150
- // Read API key from copied database files
151
- const api_key_path = path.resolve('./lib/development_server/databases/joystickdb/API_KEY');
152
- const api_key = fs.readFileSync(api_key_path, 'utf8').trim();
153
-
154
- // Create admin user via HTTP API
155
- const response = await fetch(`http://localhost:${port + 1}/api/users`, {
156
- method: 'POST',
157
- headers: {
158
- 'Content-Type': 'application/json',
159
- 'x-joystick-db-api-key': api_key
160
- },
161
- body: JSON.stringify({
162
- username: 'admin',
163
- password: 'password',
164
- role: 'read_write'
165
- })
166
- });
167
-
168
- const result = await response.json();
169
- if (result.success) {
170
- console.log('✅ JoystickDB admin user created automatically');
171
- return true;
172
- } else {
173
- // User might already exist, which is fine
174
- if (result.error && result.error.includes('already exists')) {
175
- console.log('ℹ️ JoystickDB admin user already exists');
176
- return true;
177
- }
178
- throw new Error(result.error || 'Failed to create admin user');
179
- }
180
- } catch (error) {
181
- console.warn('⚠️ JoystickDB admin setup failed:', error.message);
182
- return false;
183
- }
184
- };
185
- ```
186
-
187
- ### Connection Pattern
188
- ```javascript
189
- const connect = async (settings = {}, port = 1983) => {
190
- const has_connection = settings.connection && Object.keys(settings.connection).length > 0;
191
-
192
- if (has_connection) {
193
- await check_connection(settings.connection, settings.options);
194
- } else {
195
- // Start local development server
196
- const pid = await start_joystickdb(port);
197
-
198
- // Wait a moment for HTTP server to be ready
199
- await new Promise(resolve => setTimeout(resolve, 2000));
200
-
201
- // Automatically setup admin user for development
202
- await setup_joystickdb_admin(port);
203
- }
204
-
205
- return {
206
- pid: !has_connection ? await start_joystickdb(port) : null,
207
- connection: has_connection ? settings.connection : {
208
- hostname: "127.0.0.1",
209
- port,
210
- database: "app",
211
- username: "admin",
212
- password: "password"
213
- },
214
- };
215
- };
216
- ```
217
-
218
- ## Code Standards
219
- - Follow existing CLI database integration patterns exactly
220
- - Use ESM syntax (`import`/`export`)
221
- - Follow snake_case for variables and functions
222
- - Two-space indentation
223
- - Minimal comments (only when necessary for clarity)
224
- - Error handling consistent with other database providers
225
-
226
- ## Testing Requirements
227
- - Verify JoystickDB starts as child process successfully
228
- - Test port management and cleanup
229
- - Confirm data directory creation and usage
230
- - Test connection validation and error handling
231
- - Ensure graceful shutdown of JoystickDB processes
232
- - Verify integration with existing development server workflow
233
-
234
- ## Success Criteria
235
- - ✅ JoystickDB appears in provider map alongside MongoDB, PostgreSQL, Redis
236
- - ✅ JoystickDB starts as Node.js child process (not binary)
237
- - ✅ Connection management follows exact pattern of other databases
238
- - ✅ Port management and cleanup works correctly
239
- - ✅ Data directory setup and management implemented
240
- - ✅ Error handling and process lifecycle management robust
241
- - ✅ No binary installation required (installer skips JoystickDB)
242
- - ✅ Developer experience identical to other databases
243
- - ✅ Existing CLI functionality remains unaffected
244
- - ✅ Automated admin user setup works transparently on localhost
245
- - ✅ API key reading and HTTP user creation handled automatically
246
- - ✅ Default admin credentials provided in connection object
247
-
248
- ## Integration Notes
249
- - JoystickDB is unique in being a Node.js process rather than external binary
250
- - Leverage embedded database code from build script integration at `src/lib/development_server/databases/joystickdb/`
251
- - Maintain consistency with existing database provider patterns
252
- - This enables seamless database switching in development environments
253
- - JoystickDB becomes first-class citizen alongside traditional databases
254
-
255
- ## Future Considerations
256
- - This integration enables JoystickDB development database functionality
257
- - Developers can use JoystickDB in development with same ease as MongoDB/PostgreSQL
258
- - Production deployments still use standalone JoystickDB server package
259
- - CLI integration provides embedded development database experience
260
- - Foundation for potential JoystickDB-specific development tools and utilities
261
-
262
- ## Context for Implementation
263
- This task completes the JoystickDB integration trilogy:
264
- 1. ✅ Build script integration (database code copying)
265
- 2. ✅ Package dependency management
266
- 3. 🎯 **CLI development server integration** (this task)
267
-
268
- The result is seamless JoystickDB development experience matching existing database providers while leveraging the unique advantage of embedded Node.js execution rather than binary dependencies.
@@ -1,293 +0,0 @@
1
- # Full Text Search Implementation Prompt
2
-
3
- ## Overview
4
-
5
- Implement full text search capabilities for the JoystickDB LMDB-based database server. This feature should provide fast, scalable text search across document fields while maintaining the existing clustered architecture and performance characteristics.
6
-
7
- ## Requirements
8
-
9
- ### Core Functionality
10
- - Support full text search across specified document fields
11
- - Implement inverted index strategy for optimal search performance
12
- - Provide boolean query operators (AND, OR, NOT)
13
- - Support phrase matching with quotes
14
- - Include fuzzy matching capabilities for typos/variations
15
- - Case-insensitive search by default with case-sensitive option
16
-
17
- ### Text Processing
18
- - Tokenization: Split text into searchable terms
19
- - Normalization: Convert to lowercase, handle Unicode
20
- - Stop word filtering: Remove common words (the, and, or, etc.)
21
- - Stemming: Reduce words to root forms (running → run)
22
- - Support for multiple languages (start with English)
23
-
24
- ### Index Management
25
- - Automatic index creation for designated searchable fields
26
- - Atomic index updates during document modifications
27
- - Index rebuilding capabilities for schema changes
28
- - Configurable index settings per field
29
-
30
- ### Query Interface
31
- - Add new operation type: `text_search`
32
- - Query syntax: `{ "query": "search terms", "fields": ["title", "content"], "options": {...} }`
33
- - Support for field-specific searches: `title:"exact phrase" content:keyword`
34
- - Result ranking based on relevance scores
35
- - Pagination support for large result sets
36
-
37
- ## Technical Implementation
38
-
39
- ### LMDB Storage Strategy
40
- ```
41
- Document Storage:
42
- - Key: `doc:{collection}:{id}`
43
- - Value: Original document data
44
-
45
- Inverted Index Storage:
46
- - Key: `idx:{collection}:{field}:{term}`
47
- - Value: Array of document IDs with positions
48
-
49
- Term Frequency Storage:
50
- - Key: `tf:{collection}:{field}:{doc_id}`
51
- - Value: Term frequency map for relevance scoring
52
-
53
- Metadata Storage:
54
- - Key: `meta:{collection}:search_config`
55
- - Value: Search configuration and field mappings
56
- ```
57
-
58
- ### Architecture Integration
59
-
60
- #### Master Process Responsibilities
61
- - Handle index updates during write operations
62
- - Coordinate index rebuilding across workers
63
- - Manage search configuration changes
64
- - Ensure index consistency during bulk operations
65
-
66
- #### Worker Process Responsibilities
67
- - Execute search queries against local LMDB instances
68
- - Perform text processing and tokenization
69
- - Calculate relevance scores
70
- - Handle search result pagination
71
-
72
- ### New Operation Types
73
- Add to `op_types.js`:
74
- ```javascript
75
- "text_search",
76
- "create_text_index",
77
- "drop_text_index",
78
- "rebuild_text_index"
79
- ```
80
-
81
- ### Search Query Structure
82
- ```javascript
83
- {
84
- "op": "text_search",
85
- "data": {
86
- "collection": "documents",
87
- "query": "machine learning algorithms",
88
- "fields": ["title", "content", "tags"],
89
- "options": {
90
- "fuzzy": true,
91
- "case_sensitive": false,
92
- "max_results": 50,
93
- "offset": 0,
94
- "highlight": true,
95
- "min_score": 0.1
96
- }
97
- }
98
- }
99
- ```
100
-
101
- ### Response Format
102
- ```javascript
103
- {
104
- "success": true,
105
- "data": {
106
- "results": [
107
- {
108
- "document": { /* original document */ },
109
- "score": 0.85,
110
- "highlights": {
111
- "title": ["<mark>machine learning</mark> basics"],
112
- "content": ["advanced <mark>algorithms</mark> for..."]
113
- }
114
- }
115
- ],
116
- "total_count": 127,
117
- "search_time_ms": 23,
118
- "query_info": {
119
- "parsed_terms": ["machine", "learning", "algorithms"],
120
- "fields_searched": ["title", "content", "tags"]
121
- }
122
- }
123
- }
124
- ```
125
-
126
- ## Implementation Steps
127
-
128
- ### Phase 1: Core Infrastructure
129
- 1. Create text processing utilities (tokenization, normalization, stemming)
130
- 2. Implement inverted index data structures
131
- 3. Add LMDB storage patterns for search indexes
132
- 4. Create search configuration management
133
-
134
- ### Phase 2: Basic Search
135
- 1. Implement simple keyword search
136
- 2. Add boolean operators (AND, OR, NOT)
137
- 3. Create relevance scoring algorithm
138
- 4. Add result ranking and pagination
139
-
140
- ### Phase 3: Advanced Features
141
- 1. Implement phrase matching
142
- 2. Add fuzzy search capabilities
143
- 3. Create result highlighting
144
- 4. Add field-specific search syntax
145
-
146
- ### Phase 4: Integration
147
- 1. Integrate with existing cluster architecture
148
- 2. Add search operations to worker/master communication
149
- 3. Implement atomic index updates
150
- 4. Add search-specific error handling
151
-
152
- ### Phase 5: Optimization
153
- 1. Performance tuning for large datasets
154
- 2. Memory usage optimization
155
- 3. Index compression techniques
156
- 4. Query optimization strategies
157
-
158
- ## File Structure
159
-
160
- ```
161
- src/server/search/
162
- ├── index.js # Main search module exports
163
- ├── text_processor.js # Tokenization, stemming, normalization
164
- ├── inverted_index.js # Index creation and management
165
- ├── query_parser.js # Parse search query syntax
166
- ├── relevance_scorer.js # Calculate document relevance scores
167
- ├── search_executor.js # Execute search queries
168
- ├── index_manager.js # Manage index lifecycle
169
- └── search_config.js # Search configuration utilities
170
-
171
- src/server/lib/
172
- ├── search_operations.js # Search-specific database operations
173
- └── search_utils.js # Shared search utilities
174
-
175
- test/server/search/
176
- ├── text_processor.test.js
177
- ├── inverted_index.test.js
178
- ├── query_parser.test.js
179
- ├── relevance_scorer.test.js
180
- └── search_integration.test.js
181
- ```
182
-
183
- ## Configuration Options
184
-
185
- ### Database Settings
186
- ```javascript
187
- {
188
- "search": {
189
- "default_language": "en",
190
- "stop_words_enabled": true,
191
- "stemming_enabled": true,
192
- "fuzzy_threshold": 0.8,
193
- "max_index_memory_mb": 512,
194
- "index_update_batch_size": 1000,
195
- "search_timeout_ms": 5000
196
- }
197
- }
198
- ```
199
-
200
- ### Field-Level Configuration
201
- ```javascript
202
- {
203
- "collections": {
204
- "documents": {
205
- "search_fields": {
206
- "title": {
207
- "weight": 2.0,
208
- "stemming": true,
209
- "fuzzy": true
210
- },
211
- "content": {
212
- "weight": 1.0,
213
- "stemming": true,
214
- "fuzzy": false
215
- },
216
- "tags": {
217
- "weight": 1.5,
218
- "stemming": false,
219
- "fuzzy": true
220
- }
221
- }
222
- }
223
- }
224
- }
225
- ```
226
-
227
- ## Performance Considerations
228
-
229
- ### Memory Management
230
- - Use LMDB's memory-mapped files for large indexes
231
- - Implement index compression for frequently accessed terms
232
- - Cache frequently used search results
233
- - Limit concurrent search operations per worker
234
-
235
- ### Scalability
236
- - Distribute index updates across multiple workers
237
- - Implement index sharding for very large collections
238
- - Use background processes for index maintenance
239
- - Monitor index size and performance metrics
240
-
241
- ### Query Optimization
242
- - Implement query plan optimization
243
- - Use term frequency for query reordering
244
- - Cache parsed queries for repeated searches
245
- - Implement search result caching
246
-
247
- ## Testing Strategy
248
-
249
- ### Unit Tests
250
- - Text processing functions
251
- - Index creation and updates
252
- - Query parsing logic
253
- - Relevance scoring algorithms
254
-
255
- ### Integration Tests
256
- - End-to-end search operations
257
- - Index consistency during concurrent writes
258
- - Search performance under load
259
- - Error handling and recovery
260
-
261
- ### Performance Tests
262
- - Search latency benchmarks
263
- - Index update performance
264
- - Memory usage patterns
265
- - Concurrent search handling
266
-
267
- ## Success Criteria
268
-
269
- 1. **Functionality**: All search operations work correctly with accurate results
270
- 2. **Performance**: Search queries complete within 100ms for typical datasets
271
- 3. **Scalability**: System handles 1000+ concurrent searches without degradation
272
- 4. **Reliability**: Index consistency maintained during all write operations
273
- 5. **Usability**: Intuitive query syntax with comprehensive error messages
274
-
275
- ## Dependencies
276
-
277
- ### New Package Dependencies
278
- ```javascript
279
- {
280
- "natural": "^6.0.0", // Text processing and stemming
281
- "stopword": "^2.0.0", // Stop word removal
282
- "fuse.js": "^7.0.0" // Fuzzy search capabilities
283
- }
284
- ```
285
-
286
- ### Development Dependencies
287
- ```javascript
288
- {
289
- "benchmark": "^2.1.4" // Performance testing
290
- }
291
- ```
292
-
293
- This implementation will provide a robust, scalable full text search solution that integrates seamlessly with the existing JoystickDB architecture while maintaining high performance and reliability.