s3db.js 13.6.0 → 14.0.2

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 (193) hide show
  1. package/README.md +139 -43
  2. package/dist/s3db.cjs +72425 -38970
  3. package/dist/s3db.cjs.map +1 -1
  4. package/dist/s3db.es.js +72177 -38764
  5. package/dist/s3db.es.js.map +1 -1
  6. package/mcp/lib/base-handler.js +157 -0
  7. package/mcp/lib/handlers/connection-handler.js +280 -0
  8. package/mcp/lib/handlers/query-handler.js +533 -0
  9. package/mcp/lib/handlers/resource-handler.js +428 -0
  10. package/mcp/lib/tool-registry.js +336 -0
  11. package/mcp/lib/tools/connection-tools.js +161 -0
  12. package/mcp/lib/tools/query-tools.js +267 -0
  13. package/mcp/lib/tools/resource-tools.js +404 -0
  14. package/package.json +94 -49
  15. package/src/clients/memory-client.class.js +346 -191
  16. package/src/clients/memory-storage.class.js +300 -84
  17. package/src/clients/s3-client.class.js +7 -6
  18. package/src/concerns/geo-encoding.js +19 -2
  19. package/src/concerns/ip.js +59 -9
  20. package/src/concerns/money.js +8 -1
  21. package/src/concerns/password-hashing.js +49 -8
  22. package/src/concerns/plugin-storage.js +186 -18
  23. package/src/concerns/storage-drivers/filesystem-driver.js +284 -0
  24. package/src/database.class.js +139 -29
  25. package/src/errors.js +332 -42
  26. package/src/plugins/api/auth/oidc-auth.js +66 -17
  27. package/src/plugins/api/auth/strategies/base-strategy.class.js +74 -0
  28. package/src/plugins/api/auth/strategies/factory.class.js +63 -0
  29. package/src/plugins/api/auth/strategies/global-strategy.class.js +44 -0
  30. package/src/plugins/api/auth/strategies/path-based-strategy.class.js +83 -0
  31. package/src/plugins/api/auth/strategies/path-rules-strategy.class.js +118 -0
  32. package/src/plugins/api/concerns/failban-manager.js +106 -57
  33. package/src/plugins/api/concerns/opengraph-helper.js +116 -0
  34. package/src/plugins/api/concerns/route-context.js +601 -0
  35. package/src/plugins/api/concerns/state-machine.js +288 -0
  36. package/src/plugins/api/index.js +180 -41
  37. package/src/plugins/api/routes/auth-routes.js +198 -30
  38. package/src/plugins/api/routes/resource-routes.js +19 -4
  39. package/src/plugins/api/server/health-manager.class.js +163 -0
  40. package/src/plugins/api/server/middleware-chain.class.js +310 -0
  41. package/src/plugins/api/server/router.class.js +472 -0
  42. package/src/plugins/api/server.js +280 -1303
  43. package/src/plugins/api/utils/custom-routes.js +17 -5
  44. package/src/plugins/api/utils/guards.js +76 -17
  45. package/src/plugins/api/utils/openapi-generator-cached.class.js +133 -0
  46. package/src/plugins/api/utils/openapi-generator.js +7 -6
  47. package/src/plugins/api/utils/template-engine.js +77 -3
  48. package/src/plugins/audit.plugin.js +30 -8
  49. package/src/plugins/backup.plugin.js +110 -14
  50. package/src/plugins/cache/cache.class.js +22 -5
  51. package/src/plugins/cache/filesystem-cache.class.js +116 -19
  52. package/src/plugins/cache/memory-cache.class.js +211 -57
  53. package/src/plugins/cache/multi-tier-cache.class.js +371 -0
  54. package/src/plugins/cache/partition-aware-filesystem-cache.class.js +168 -47
  55. package/src/plugins/cache/redis-cache.class.js +552 -0
  56. package/src/plugins/cache/s3-cache.class.js +17 -8
  57. package/src/plugins/cache.plugin.js +176 -61
  58. package/src/plugins/cloud-inventory/drivers/alibaba-driver.js +8 -1
  59. package/src/plugins/cloud-inventory/drivers/aws-driver.js +60 -29
  60. package/src/plugins/cloud-inventory/drivers/azure-driver.js +8 -1
  61. package/src/plugins/cloud-inventory/drivers/base-driver.js +16 -2
  62. package/src/plugins/cloud-inventory/drivers/cloudflare-driver.js +8 -1
  63. package/src/plugins/cloud-inventory/drivers/digitalocean-driver.js +8 -1
  64. package/src/plugins/cloud-inventory/drivers/hetzner-driver.js +8 -1
  65. package/src/plugins/cloud-inventory/drivers/linode-driver.js +8 -1
  66. package/src/plugins/cloud-inventory/drivers/mongodb-atlas-driver.js +8 -1
  67. package/src/plugins/cloud-inventory/drivers/vultr-driver.js +8 -1
  68. package/src/plugins/cloud-inventory/index.js +29 -8
  69. package/src/plugins/cloud-inventory/registry.js +64 -42
  70. package/src/plugins/cloud-inventory.plugin.js +240 -138
  71. package/src/plugins/concerns/plugin-dependencies.js +54 -0
  72. package/src/plugins/concerns/resource-names.js +100 -0
  73. package/src/plugins/consumers/index.js +10 -2
  74. package/src/plugins/consumers/sqs-consumer.js +12 -2
  75. package/src/plugins/cookie-farm-suite.plugin.js +278 -0
  76. package/src/plugins/cookie-farm.errors.js +73 -0
  77. package/src/plugins/cookie-farm.plugin.js +869 -0
  78. package/src/plugins/costs.plugin.js +7 -1
  79. package/src/plugins/eventual-consistency/analytics.js +94 -19
  80. package/src/plugins/eventual-consistency/config.js +15 -7
  81. package/src/plugins/eventual-consistency/consolidation.js +29 -11
  82. package/src/plugins/eventual-consistency/garbage-collection.js +3 -1
  83. package/src/plugins/eventual-consistency/helpers.js +39 -14
  84. package/src/plugins/eventual-consistency/install.js +21 -2
  85. package/src/plugins/eventual-consistency/utils.js +32 -10
  86. package/src/plugins/fulltext.plugin.js +38 -11
  87. package/src/plugins/geo.plugin.js +61 -9
  88. package/src/plugins/identity/concerns/config.js +61 -0
  89. package/src/plugins/identity/concerns/mfa-manager.js +15 -2
  90. package/src/plugins/identity/concerns/rate-limit.js +124 -0
  91. package/src/plugins/identity/concerns/resource-schemas.js +9 -1
  92. package/src/plugins/identity/concerns/token-generator.js +29 -4
  93. package/src/plugins/identity/drivers/auth-driver.interface.js +76 -0
  94. package/src/plugins/identity/drivers/client-credentials-driver.js +127 -0
  95. package/src/plugins/identity/drivers/index.js +18 -0
  96. package/src/plugins/identity/drivers/password-driver.js +122 -0
  97. package/src/plugins/identity/email-service.js +17 -2
  98. package/src/plugins/identity/index.js +413 -69
  99. package/src/plugins/identity/oauth2-server.js +413 -30
  100. package/src/plugins/identity/oidc-discovery.js +16 -8
  101. package/src/plugins/identity/rsa-keys.js +115 -35
  102. package/src/plugins/identity/server.js +166 -45
  103. package/src/plugins/identity/session-manager.js +53 -7
  104. package/src/plugins/identity/ui/pages/mfa-verification.js +17 -15
  105. package/src/plugins/identity/ui/routes.js +363 -255
  106. package/src/plugins/importer/index.js +153 -20
  107. package/src/plugins/index.js +9 -2
  108. package/src/plugins/kubernetes-inventory/index.js +6 -0
  109. package/src/plugins/kubernetes-inventory/k8s-driver.js +867 -0
  110. package/src/plugins/kubernetes-inventory/resource-types.js +274 -0
  111. package/src/plugins/kubernetes-inventory.plugin.js +980 -0
  112. package/src/plugins/metrics.plugin.js +64 -16
  113. package/src/plugins/ml/base-model.class.js +25 -15
  114. package/src/plugins/ml/regression-model.class.js +1 -1
  115. package/src/plugins/ml.errors.js +57 -25
  116. package/src/plugins/ml.plugin.js +28 -4
  117. package/src/plugins/namespace.js +210 -0
  118. package/src/plugins/plugin.class.js +180 -8
  119. package/src/plugins/puppeteer/console-monitor.js +729 -0
  120. package/src/plugins/puppeteer/cookie-manager.js +492 -0
  121. package/src/plugins/puppeteer/network-monitor.js +816 -0
  122. package/src/plugins/puppeteer/performance-manager.js +746 -0
  123. package/src/plugins/puppeteer/proxy-manager.js +478 -0
  124. package/src/plugins/puppeteer/stealth-manager.js +556 -0
  125. package/src/plugins/puppeteer.errors.js +81 -0
  126. package/src/plugins/puppeteer.plugin.js +1327 -0
  127. package/src/plugins/queue-consumer.plugin.js +69 -14
  128. package/src/plugins/recon/behaviors/uptime-behavior.js +691 -0
  129. package/src/plugins/recon/concerns/command-runner.js +148 -0
  130. package/src/plugins/recon/concerns/diff-detector.js +372 -0
  131. package/src/plugins/recon/concerns/fingerprint-builder.js +307 -0
  132. package/src/plugins/recon/concerns/process-manager.js +338 -0
  133. package/src/plugins/recon/concerns/report-generator.js +478 -0
  134. package/src/plugins/recon/concerns/security-analyzer.js +571 -0
  135. package/src/plugins/recon/concerns/target-normalizer.js +68 -0
  136. package/src/plugins/recon/config/defaults.js +321 -0
  137. package/src/plugins/recon/config/resources.js +370 -0
  138. package/src/plugins/recon/index.js +778 -0
  139. package/src/plugins/recon/managers/dependency-manager.js +174 -0
  140. package/src/plugins/recon/managers/scheduler-manager.js +179 -0
  141. package/src/plugins/recon/managers/storage-manager.js +745 -0
  142. package/src/plugins/recon/managers/target-manager.js +274 -0
  143. package/src/plugins/recon/stages/asn-stage.js +314 -0
  144. package/src/plugins/recon/stages/certificate-stage.js +84 -0
  145. package/src/plugins/recon/stages/dns-stage.js +107 -0
  146. package/src/plugins/recon/stages/dnsdumpster-stage.js +362 -0
  147. package/src/plugins/recon/stages/fingerprint-stage.js +71 -0
  148. package/src/plugins/recon/stages/google-dorks-stage.js +440 -0
  149. package/src/plugins/recon/stages/http-stage.js +89 -0
  150. package/src/plugins/recon/stages/latency-stage.js +148 -0
  151. package/src/plugins/recon/stages/massdns-stage.js +302 -0
  152. package/src/plugins/recon/stages/osint-stage.js +1373 -0
  153. package/src/plugins/recon/stages/ports-stage.js +169 -0
  154. package/src/plugins/recon/stages/screenshot-stage.js +94 -0
  155. package/src/plugins/recon/stages/secrets-stage.js +514 -0
  156. package/src/plugins/recon/stages/subdomains-stage.js +295 -0
  157. package/src/plugins/recon/stages/tls-audit-stage.js +78 -0
  158. package/src/plugins/recon/stages/vulnerability-stage.js +78 -0
  159. package/src/plugins/recon/stages/web-discovery-stage.js +113 -0
  160. package/src/plugins/recon/stages/whois-stage.js +349 -0
  161. package/src/plugins/recon.plugin.js +75 -0
  162. package/src/plugins/recon.plugin.js.backup +2635 -0
  163. package/src/plugins/relation.errors.js +87 -14
  164. package/src/plugins/replicator.plugin.js +514 -137
  165. package/src/plugins/replicators/base-replicator.class.js +89 -1
  166. package/src/plugins/replicators/bigquery-replicator.class.js +66 -22
  167. package/src/plugins/replicators/dynamodb-replicator.class.js +22 -15
  168. package/src/plugins/replicators/mongodb-replicator.class.js +22 -15
  169. package/src/plugins/replicators/mysql-replicator.class.js +52 -17
  170. package/src/plugins/replicators/planetscale-replicator.class.js +30 -4
  171. package/src/plugins/replicators/postgres-replicator.class.js +62 -27
  172. package/src/plugins/replicators/s3db-replicator.class.js +25 -18
  173. package/src/plugins/replicators/schema-sync.helper.js +3 -3
  174. package/src/plugins/replicators/sqs-replicator.class.js +8 -2
  175. package/src/plugins/replicators/turso-replicator.class.js +23 -3
  176. package/src/plugins/replicators/webhook-replicator.class.js +42 -4
  177. package/src/plugins/s3-queue.plugin.js +464 -65
  178. package/src/plugins/scheduler.plugin.js +20 -6
  179. package/src/plugins/state-machine.plugin.js +40 -9
  180. package/src/plugins/tfstate/README.md +126 -126
  181. package/src/plugins/tfstate/base-driver.js +28 -4
  182. package/src/plugins/tfstate/errors.js +65 -10
  183. package/src/plugins/tfstate/filesystem-driver.js +52 -8
  184. package/src/plugins/tfstate/index.js +163 -90
  185. package/src/plugins/tfstate/s3-driver.js +64 -6
  186. package/src/plugins/ttl.plugin.js +72 -17
  187. package/src/plugins/vector/distances.js +18 -12
  188. package/src/plugins/vector/kmeans.js +26 -4
  189. package/src/resource.class.js +115 -19
  190. package/src/testing/factory.class.js +20 -3
  191. package/src/testing/seeder.class.js +7 -1
  192. package/src/clients/memory-client.md +0 -917
  193. package/src/plugins/cloud-inventory/drivers/mock-drivers.js +0 -449
@@ -80,7 +80,13 @@ import { SchedulerError } from "./scheduler.errors.js";
80
80
  * if (backupPlugin) {
81
81
  * return await backupPlugin.backup('incremental');
82
82
  * }
83
- * throw new Error('BackupPlugin not available');
83
+ * throw new PluginError('BackupPlugin not available', {
84
+ * pluginName: 'SchedulerPlugin',
85
+ * operation: 'backupJob',
86
+ * statusCode: 500,
87
+ * retriable: false,
88
+ * suggestion: 'Ensure BackupPlugin is installed before scheduling backup jobs.'
89
+ * });
84
90
  * },
85
91
  * retries: 2
86
92
  * },
@@ -94,7 +100,13 @@ import { SchedulerError } from "./scheduler.errors.js";
94
100
  * if (backupPlugin) {
95
101
  * return await backupPlugin.backup('full');
96
102
  * }
97
- * throw new Error('BackupPlugin not available');
103
+ * throw new PluginError('BackupPlugin not available', {
104
+ * pluginName: 'SchedulerPlugin',
105
+ * operation: 'backupJob',
106
+ * statusCode: 500,
107
+ * retriable: false,
108
+ * suggestion: 'Ensure BackupPlugin is installed before scheduling backup jobs.'
109
+ * });
98
110
  * }
99
111
  * },
100
112
  *
@@ -414,8 +426,8 @@ export class SchedulerPlugin extends Plugin {
414
426
 
415
427
  // Acquire distributed lock with TTL to prevent concurrent execution across instances
416
428
  const storage = this.getStorage();
417
- const lockKey = `job-${jobName}`;
418
- const lock = await storage.acquireLock(lockKey, {
429
+ const lockName = `job-${jobName}`;
430
+ const lock = await storage.acquireLock(lockName, {
419
431
  ttl: Math.ceil(job.timeout / 1000) + 60, // Job timeout + 60 seconds buffer
420
432
  timeout: 0, // Don't wait if locked
421
433
  workerId: process.pid ? String(process.pid) : 'unknown'
@@ -571,7 +583,9 @@ export class SchedulerPlugin extends Plugin {
571
583
  }
572
584
  } finally {
573
585
  // Always release the distributed lock
574
- await tryFn(() => storage.releaseLock(lockKey));
586
+ if (lock) {
587
+ await tryFn(() => storage.releaseLock(lock));
588
+ }
575
589
  }
576
590
  }
577
591
 
@@ -921,4 +935,4 @@ export class SchedulerPlugin extends Plugin {
921
935
  this.activeJobs.clear();
922
936
  this.removeAllListeners();
923
937
  }
924
- }
938
+ }
@@ -1,5 +1,6 @@
1
1
  import { Plugin } from "./plugin.class.js";
2
2
  import tryFn from "../concerns/try-fn.js";
3
+ import { resolveResourceNames } from "./concerns/resource-names.js";
3
4
  import { StateMachineError } from "./state-machine.errors.js";
4
5
  import { ErrorClassifier } from "../concerns/error-classifier.js";
5
6
 
@@ -102,13 +103,27 @@ export class StateMachinePlugin extends Plugin {
102
103
  constructor(options = {}) {
103
104
  super();
104
105
 
106
+ const resourceNamesOption = options.resourceNames || {};
107
+
108
+ this._resourceDescriptors = {
109
+ transitionLog: {
110
+ defaultName: 'plg_state_transitions',
111
+ override: resourceNamesOption.transitionLog || options.transitionLogResource
112
+ },
113
+ states: {
114
+ defaultName: 'plg_entity_states',
115
+ override: resourceNamesOption.states || options.stateResource
116
+ }
117
+ };
118
+ this.resourceNames = this._resolveResourceNames();
119
+
105
120
  this.config = {
106
121
  stateMachines: options.stateMachines || {},
107
122
  actions: options.actions || {},
108
123
  guards: options.guards || {},
109
124
  persistTransitions: options.persistTransitions !== false,
110
- transitionLogResource: options.transitionLogResource || 'plg_state_transitions',
111
- stateResource: options.stateResource || 'plg_entity_states',
125
+ transitionLogResource: this.resourceNames.transitionLog,
126
+ stateResource: this.resourceNames.states,
112
127
  retryAttempts: options.retryAttempts || 3,
113
128
  retryDelay: options.retryDelay || 100,
114
129
  verbose: options.verbose || false,
@@ -138,6 +153,20 @@ export class StateMachinePlugin extends Plugin {
138
153
  this._validateConfiguration();
139
154
  }
140
155
 
156
+ _resolveResourceNames() {
157
+ return resolveResourceNames('state_machine', this._resourceDescriptors, {
158
+ namespace: this.namespace
159
+ });
160
+ }
161
+
162
+ onNamespaceChanged() {
163
+ this.resourceNames = this._resolveResourceNames();
164
+ if (this.config) {
165
+ this.config.transitionLogResource = this.resourceNames.transitionLog;
166
+ this.config.stateResource = this.resourceNames.states;
167
+ }
168
+ }
169
+
141
170
  /**
142
171
  * Wait for all pending event handlers to complete
143
172
  * Useful when working with async events (asyncEvents: true)
@@ -290,7 +319,7 @@ export class StateMachinePlugin extends Plugin {
290
319
  }
291
320
 
292
321
  // Acquire distributed lock to prevent concurrent transitions
293
- const lockName = await this._acquireTransitionLock(machineId, entityId);
322
+ const lock = await this._acquireTransitionLock(machineId, entityId);
294
323
 
295
324
  try {
296
325
  const currentState = await this.getState(machineId, entityId);
@@ -366,7 +395,7 @@ export class StateMachinePlugin extends Plugin {
366
395
  };
367
396
  } finally {
368
397
  // Always release lock, even if transition fails
369
- await this._releaseTransitionLock(lockName);
398
+ await this._releaseTransitionLock(lock);
370
399
  }
371
400
  }
372
401
 
@@ -610,19 +639,21 @@ export class StateMachinePlugin extends Plugin {
610
639
  });
611
640
  }
612
641
 
613
- return lockName;
642
+ return lock;
614
643
  }
615
644
 
616
645
  /**
617
646
  * Release distributed lock for transition
618
647
  * @private
619
648
  */
620
- async _releaseTransitionLock(lockName) {
649
+ async _releaseTransitionLock(lock) {
650
+ if (!lock) return;
651
+
621
652
  const storage = this.getStorage();
622
- const [ok, err] = await tryFn(() => storage.releaseLock(lockName));
653
+ const [ok, err] = await tryFn(() => storage.releaseLock(lock));
623
654
 
624
655
  if (!ok && this.config.verbose) {
625
- console.warn(`[StateMachinePlugin] Failed to release lock '${lockName}':`, err.message);
656
+ console.warn(`[StateMachinePlugin] Failed to release lock '${lock?.name}':`, err.message);
626
657
  }
627
658
  }
628
659
 
@@ -1500,4 +1531,4 @@ export class StateMachinePlugin extends Plugin {
1500
1531
  this.machines.clear();
1501
1532
  this.removeAllListeners();
1502
1533
  }
1503
- }
1534
+ }