@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
@@ -0,0 +1,163 @@
1
+ /**
2
+ * @fileoverview Tests for API key manager development mode functionality.
3
+ */
4
+
5
+ import test from 'ava';
6
+ import {
7
+ validate_api_key,
8
+ create_user,
9
+ initialize_api_key_manager,
10
+ reset_api_key_state,
11
+ create_development_admin_user
12
+ } from '../../../src/server/lib/api_key_manager.js';
13
+ import { initialize_database, cleanup_database } from '../../../src/server/lib/query_engine.js';
14
+
15
+ let original_node_env;
16
+ let console_log_calls;
17
+
18
+ test.beforeEach(async (t) => {
19
+ original_node_env = process.env.NODE_ENV;
20
+ console_log_calls = [];
21
+
22
+ // Mock console.log to capture calls
23
+ console.log = (...args) => {
24
+ console_log_calls.push(args.join(' '));
25
+ };
26
+
27
+ // Clean up any existing database first
28
+ try {
29
+ await cleanup_database();
30
+ } catch (error) {
31
+ // Ignore cleanup errors
32
+ }
33
+
34
+ // Clean up any existing API key file and reset state
35
+ reset_api_key_state();
36
+
37
+ // Initialize database for user storage tests with unique path per test
38
+ const test_db_path = `./test_data_dev_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
39
+ initialize_database(test_db_path);
40
+
41
+ // Store the test db path for cleanup
42
+ t.context.test_db_path = test_db_path;
43
+ });
44
+
45
+ test.afterEach(async (t) => {
46
+ process.env.NODE_ENV = original_node_env;
47
+
48
+ // Restore console.log
49
+ console.log = console.log.__original || console.log;
50
+
51
+ // Clean up database and API key state
52
+ try {
53
+ await cleanup_database(true); // Remove test database directory
54
+ } catch (error) {
55
+ // Ignore cleanup errors
56
+ }
57
+
58
+ reset_api_key_state();
59
+ });
60
+
61
+ test('validate_api_key bypasses validation in development mode', (t) => {
62
+ process.env.NODE_ENV = 'development';
63
+
64
+ // Should return true for any API key in development mode
65
+ t.true(validate_api_key('invalid-key'));
66
+ t.true(validate_api_key(''));
67
+ t.true(validate_api_key(null));
68
+ t.true(validate_api_key(undefined));
69
+ });
70
+
71
+ test('validate_api_key enforces validation in production mode', (t) => {
72
+ process.env.NODE_ENV = 'production';
73
+
74
+ // Should return false for invalid keys in production mode
75
+ t.false(validate_api_key('invalid-key'));
76
+ t.false(validate_api_key(''));
77
+ t.false(validate_api_key(null));
78
+ t.false(validate_api_key(undefined));
79
+ });
80
+
81
+ test('validate_api_key enforces validation when NODE_ENV is not set', (t) => {
82
+ delete process.env.NODE_ENV;
83
+
84
+ // Should return false for invalid keys when NODE_ENV is not set
85
+ t.false(validate_api_key('invalid-key'));
86
+ t.false(validate_api_key(''));
87
+ t.false(validate_api_key(null));
88
+ t.false(validate_api_key(undefined));
89
+ });
90
+
91
+ test('create_development_admin_user returns null when not in development mode', async (t) => {
92
+ process.env.NODE_ENV = 'production';
93
+
94
+ const admin_user = await create_development_admin_user();
95
+
96
+ t.is(admin_user, null);
97
+ });
98
+
99
+ test('initialize_api_key_manager works in development mode', async (t) => {
100
+ process.env.NODE_ENV = 'development';
101
+
102
+ await t.notThrowsAsync(async () => {
103
+ await initialize_api_key_manager();
104
+ });
105
+
106
+ // Just verify it doesn't throw - the console output may vary
107
+ t.pass();
108
+ });
109
+
110
+ test('initialize_api_key_manager works in production mode', async (t) => {
111
+ process.env.NODE_ENV = 'production';
112
+
113
+ await t.notThrowsAsync(async () => {
114
+ await initialize_api_key_manager();
115
+ });
116
+
117
+ // Should display setup message
118
+ t.true(console_log_calls.some(call => call.includes('JoystickDB Setup')));
119
+ });
120
+
121
+ test('production security is maintained in production mode', async (t) => {
122
+ process.env.NODE_ENV = 'production';
123
+
124
+ // API key validation should be enforced
125
+ t.false(validate_api_key('invalid-key'));
126
+
127
+ // Password complexity should be enforced
128
+ const error = await t.throwsAsync(async () => {
129
+ await create_user({
130
+ username: 'testuser',
131
+ password: 'simple',
132
+ role: 'read_write'
133
+ });
134
+ });
135
+
136
+ t.true(error.message.includes('Password must be at least 8 characters long'));
137
+
138
+ // Development admin user should not be created
139
+ const admin_user = await create_development_admin_user();
140
+ t.is(admin_user, null);
141
+ });
142
+
143
+ test('production security is maintained when NODE_ENV is undefined', async (t) => {
144
+ delete process.env.NODE_ENV;
145
+
146
+ // API key validation should be enforced
147
+ t.false(validate_api_key('invalid-key'));
148
+
149
+ // Password complexity should be enforced
150
+ const error = await t.throwsAsync(async () => {
151
+ await create_user({
152
+ username: 'testuser',
153
+ password: 'simple',
154
+ role: 'read_write'
155
+ });
156
+ });
157
+
158
+ t.true(error.message.includes('Password must be at least 8 characters long'));
159
+
160
+ // Development admin user should not be created
161
+ const admin_user = await create_development_admin_user();
162
+ t.is(admin_user, null);
163
+ });
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @fileoverview Tests for development mode detection and setup utilities.
3
+ */
4
+
5
+ import test from 'ava';
6
+ import {
7
+ is_development_mode,
8
+ display_development_startup_message,
9
+ warn_undefined_node_env
10
+ } from '../../../src/server/lib/development_mode.js';
11
+
12
+ let original_node_env;
13
+ let console_log_calls;
14
+
15
+ test.beforeEach(() => {
16
+ original_node_env = process.env.NODE_ENV;
17
+ console_log_calls = [];
18
+
19
+ // Mock console.log to capture calls
20
+ console.log = (...args) => {
21
+ console_log_calls.push(args.join(' '));
22
+ };
23
+ });
24
+
25
+ test.afterEach(() => {
26
+ process.env.NODE_ENV = original_node_env;
27
+
28
+ // Restore console.log
29
+ console.log = console.log.__original || console.log;
30
+ });
31
+
32
+ test('is_development_mode returns true when NODE_ENV is development', (t) => {
33
+ process.env.NODE_ENV = 'development';
34
+ t.true(is_development_mode());
35
+ });
36
+
37
+ test('is_development_mode returns false when NODE_ENV is production', (t) => {
38
+ process.env.NODE_ENV = 'production';
39
+ t.false(is_development_mode());
40
+ });
41
+
42
+ test('is_development_mode returns false when NODE_ENV is test', (t) => {
43
+ process.env.NODE_ENV = 'test';
44
+ t.false(is_development_mode());
45
+ });
46
+
47
+ test('is_development_mode returns false when NODE_ENV is undefined', (t) => {
48
+ delete process.env.NODE_ENV;
49
+ t.false(is_development_mode());
50
+ });
51
+
52
+ test('is_development_mode returns false when NODE_ENV is empty string', (t) => {
53
+ process.env.NODE_ENV = '';
54
+ t.false(is_development_mode());
55
+ });
56
+
57
+ test('display_development_startup_message shows correct content with default ports', (t) => {
58
+ const tcp_port = 1983;
59
+ const http_port = 1984;
60
+
61
+ display_development_startup_message(tcp_port, http_port);
62
+
63
+ t.true(console_log_calls.some(call => call.includes('JoystickDB Development Mode')));
64
+ t.true(console_log_calls.some(call => call.includes('Development environment detected')));
65
+ t.true(console_log_calls.some(call => call.includes('Security features have been bypassed')));
66
+ t.true(console_log_calls.some(call => call.includes('Username: admin')));
67
+ t.true(console_log_calls.some(call => call.includes('Password: password')));
68
+ t.true(console_log_calls.some(call => call.includes('WARNING: This configuration is NOT suitable for production')));
69
+ t.true(console_log_calls.some(call => call.includes(`TCP Server: localhost:${tcp_port}`)));
70
+ t.true(console_log_calls.some(call => call.includes(`HTTP Server: localhost:${http_port}`)));
71
+ });
72
+
73
+ test('display_development_startup_message shows custom ports', (t) => {
74
+ const tcp_port = 3000;
75
+ const http_port = 3001;
76
+
77
+ display_development_startup_message(tcp_port, http_port);
78
+
79
+ t.true(console_log_calls.some(call => call.includes(`TCP Server: localhost:${tcp_port}`)));
80
+ t.true(console_log_calls.some(call => call.includes(`HTTP Server: localhost:${http_port}`)));
81
+ });
82
+
83
+ test('warn_undefined_node_env warns when NODE_ENV is undefined', (t) => {
84
+ delete process.env.NODE_ENV;
85
+
86
+ warn_undefined_node_env();
87
+
88
+ t.true(console_log_calls.some(call => call.includes('WARNING: NODE_ENV is not set. Defaulting to secure mode.')));
89
+ });
90
+
91
+ test('warn_undefined_node_env warns when NODE_ENV is empty string', (t) => {
92
+ process.env.NODE_ENV = '';
93
+
94
+ warn_undefined_node_env();
95
+
96
+ t.true(console_log_calls.some(call => call.includes('WARNING: NODE_ENV is not set. Defaulting to secure mode.')));
97
+ });
98
+
99
+ test('warn_undefined_node_env does not warn when NODE_ENV is set', (t) => {
100
+ process.env.NODE_ENV = 'production';
101
+ console_log_calls = []; // Clear any previous calls
102
+
103
+ warn_undefined_node_env();
104
+
105
+ t.false(console_log_calls.some(call => call.includes('WARNING: NODE_ENV is not set. Defaulting to secure mode.')));
106
+ });
package/API_KEY DELETED
@@ -1 +0,0 @@
1
- 86ekGq5cicCbuNkiUUu6puoDlA98Yxvt
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.013e15b54597d05db4b4b53ecc37b10c92a72927-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378581,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/drop_index-2025-09-12.log",
11
- "hash": "bee5a28cd89d7839aea90b9dc9583f370c08e6c3eb143a1c7e614ac480d2106c"
12
- },
13
- {
14
- "date": 1757954354633,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/drop_index-2025-09-15.log",
16
- "hash": "307059f96ec17fd44dc5f42f4111fca1a5985a41d554f99437cb89c033fab7c1"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.02de550a67ea0f5961faa2dfd458a4d06f59ebd1-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378583,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/replication-2025-09-12.log",
11
- "hash": "a8f2b588bd7950be800c45b00ee886b4d6b5796f1ca7086f682f526aba4f32f4"
12
- },
13
- {
14
- "date": 1757954354640,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/replication-2025-09-15.log",
16
- "hash": "7f8d556c3128798f76d076a1d159314e56f2db439fd74a49098e7c86734d71cf"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.03494ba24eb3c72214b4068a77d54b8993bee651-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378582,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/api_key_manager-2025-09-12.log",
11
- "hash": "d0f59a1f55e9588539c8b7e26a28079b01d363c08d1f9c382e610044b56fd17e"
12
- },
13
- {
14
- "date": 1757954354636,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/api_key_manager-2025-09-15.log",
16
- "hash": "54836c1d856a85faa4a66ca4de74b27139c131a2699afa79206910b327c75f7d"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 30
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.06309ec60b339be1259a7993dd09c732f8907fbc-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692444600,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/master-error-2025-09-12.log",
11
- "hash": "b296ba3bb58f413ad19644ec155d2a541281933d2a0be94e1f41c1aa468c8cf5"
12
- },
13
- {
14
- "date": 1757954358731,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/master-error-2025-09-15.log",
16
- "hash": "eb4c5bbd8767de5c7b99cf4b3626edd08a93388cc7215004ee22541db2bd202e"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 30
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.0663a04dcfa17285661e5e1b8cfa51f41523b210-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378483,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/tcp_protocol-error-2025-09-12.log",
11
- "hash": "3df8475f700deb3b0fcf1534983058b62784b8e44f25e46b0e8536d0b72cab45"
12
- },
13
- {
14
- "date": 1757954354483,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/tcp_protocol-error-2025-09-15.log",
16
- "hash": "19ec7d60c3c51ab1b1b2ea4abfe44c50bb6cc521eee46903ce9761f32f04e239"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.0f06e6c4c9b824622729e13927587479e5060391-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378574,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/query_engine-2025-09-12.log",
11
- "hash": "982940c0232d329672c3cbaa0a5d714d86e94463c140b7989bab1abb96c9f133"
12
- },
13
- {
14
- "date": 1757954354613,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/query_engine-2025-09-15.log",
16
- "hash": "5099e004f6223a6a422a2190ed0a544fb75006f72c4d0110e8176a4a1817d91c"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.16ccf58682ecb22b3e3ec63f0da1b7fe9be56528-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378584,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/operation_dispatcher-2025-09-12.log",
11
- "hash": "6e769fe55232f30af33896f20afb03d34e8c8367d828fd82134c6471d36d0d2f"
12
- },
13
- {
14
- "date": 1757954354644,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/operation_dispatcher-2025-09-15.log",
16
- "hash": "b679936e296b62691cf8fca37d4bf78827d2e7b739965d6555c77b2a16ac0f36"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 30
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.1fa1a5d02f496474b1ab473524c65c984146a9ad-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692597197,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/test-error-2025-09-12.log",
11
- "hash": "9ab53cdeaecc308f4f36b4dcd5d3734e495829f0472cf94c1a4a4449e64e0971"
12
- },
13
- {
14
- "date": 1757954579438,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/test-error-2025-09-15.log",
16
- "hash": "2462c265be1b05801908f268cef31bd1d30c7fcaf96a4d6183b5e28f96453263"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.2223c0ae3bea6f0d62c62b1d319cc8634856abb7-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378588,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/server-2025-09-12.log",
11
- "hash": "2fe4dd9e32763bac84ce4562cef43076387dde94dfa0c348f94515da9b5c21db"
12
- },
13
- {
14
- "date": 1757954422423,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/server-2025-09-15.log",
16
- "hash": "75cfc33ddcf9f14330d538f8a4e68c90f37ab682573c254afc423c7efd673931"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.23dc79ffda3e083665e6f5993f59397adcbf4a46-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378584,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/admin-2025-09-12.log",
11
- "hash": "1c2719c6d515e113823579602be87e0489acec0c9ea696973e9edaf08af6104d"
12
- },
13
- {
14
- "date": 1757954354643,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/admin-2025-09-15.log",
16
- "hash": "4ccae0713f27ad8a4c4d69a011aa44d742429c4eaacb054af5b3eedb4f6691fd"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.28104f49b03906b189eefd1cd462cb46c3c0af22-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378581,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/create_index-2025-09-12.log",
11
- "hash": "c79451e383ef5544a8cff5bbad34ce512c173091bcda6a99b4fd79592d29b711"
12
- },
13
- {
14
- "date": 1757954354632,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/create_index-2025-09-15.log",
16
- "hash": "9ace5ae5362801cd4bef2e1aa70844bc8ad067d6353ff127d416a9551d69cab3"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 30
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.29cdbf13808abe6a0ce70ee2f2efdd680ce3fd8e-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378579,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/update_one-error-2025-09-12.log",
11
- "hash": "0a9adb63d5368bcded01309323494f6e2c7b64f4eb7d539e27e70293bd3c09da"
12
- },
13
- {
14
- "date": 1757954354627,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/update_one-error-2025-09-15.log",
16
- "hash": "868cf478047be56af4793ca0107c200bc32cf5552c7d9696699d3ddd7009915a"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 30
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.2a9889afd071f77f41f5170d08703a0afca866b7-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378581,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/drop_index-error-2025-09-12.log",
11
- "hash": "b6403c4f8b1384f8dcb710640564e8c02049474ab9d6da3810fa1700a9927e12"
12
- },
13
- {
14
- "date": 1757954354634,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/drop_index-error-2025-09-15.log",
16
- "hash": "1a60945741f7338358450595f5c08f7b00e1aa0f5e4cb8190b3ee29aa3cc955c"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.2acec3d1940a2bbed487528b703ee5948959a599-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378577,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/auth_manager-2025-09-12.log",
11
- "hash": "a67ae030065459fc0077dee0303145a093e07dc63f9143a480a1350efe2dd77c"
12
- },
13
- {
14
- "date": 1757954354623,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/auth_manager-2025-09-15.log",
16
- "hash": "f618f438dfae224aaad9eecc60bf73b28a898d9fa3b796234600890a0466fd39"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.2fb60ff326338c02bfedbcd0e936444e4a216750-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378574,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/backup_manager-2025-09-12.log",
11
- "hash": "502f382e62ec0140f7b418df8eb3ba11859a874439ff28616eaabebab6eb766f"
12
- },
13
- {
14
- "date": 1757954354615,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/backup_manager-2025-09-15.log",
16
- "hash": "53dc83dcefbbe87498a239008b3ecdf9e8472a07c2b967bae784a3d36eece370"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 30
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.318fc7a19530d76a345f030f7cad00dda15300e7-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378582,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/recovery_manager-error-2025-09-12.log",
11
- "hash": "e3a5c132c74ca97f8ca4f53c26bc0d21e4728c6c86b50ca36883f2a32b7371ef"
12
- },
13
- {
14
- "date": 1757954354636,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/recovery_manager-error-2025-09-15.log",
16
- "hash": "f5addea600b32ba52a67a871d590f64c4d45c3d23dd3cc5dc108281cd85017fe"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }
@@ -1,25 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 14
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.3cf27043e19085f908cedc7701e6d013463208ee-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378583,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/connection_manager-2025-09-12.log",
11
- "hash": "0733ec499fc67cdb105f1430d8ac091c30907c5bb031949a60f825f133750b53"
12
- },
13
- {
14
- "date": 1757954354638,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/connection_manager-2025-09-15.log",
16
- "hash": "e5e040d7d9ccc0a97fcfd15ffae9fa753f58fb4747a6c4b83c2247f833e45243"
17
- },
18
- {
19
- "date": 0,
20
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/connection_manager-1969-12-31.log",
21
- "hash": "803acbde2305c8e9cfc38304b398b8ca2b4149355dafdfa97406fae70d1b0595"
22
- }
23
- ],
24
- "hashType": "sha256"
25
- }
@@ -1,20 +0,0 @@
1
- {
2
- "keep": {
3
- "days": true,
4
- "amount": 30
5
- },
6
- "auditLog": "/Users/rglover/projects/cheatcode/joystick/db/logs/.3d90d785415817fc443402843b7c95f8371adc9b-audit.json",
7
- "files": [
8
- {
9
- "date": 1757692378573,
10
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/auto_index_manager-error-2025-09-12.log",
11
- "hash": "90d087cf37f001895f714c8190378aef258222d0632ad1b79a32f518dfd4df7f"
12
- },
13
- {
14
- "date": 1757954354611,
15
- "name": "/Users/rglover/projects/cheatcode/joystick/db/logs/auto_index_manager-error-2025-09-15.log",
16
- "hash": "84677f5c0af24f2c97317b42abe03dabc695515dfcec0d3e888999eb2c7f2c3b"
17
- }
18
- ],
19
- "hashType": "sha256"
20
- }