s3db.js 13.6.1 → 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 (189) hide show
  1. package/README.md +56 -15
  2. package/dist/s3db.cjs +72446 -39022
  3. package/dist/s3db.cjs.map +1 -1
  4. package/dist/s3db.es.js +72172 -38790
  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 +85 -50
  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/route-context.js +601 -0
  34. package/src/plugins/api/index.js +168 -40
  35. package/src/plugins/api/routes/auth-routes.js +198 -30
  36. package/src/plugins/api/routes/resource-routes.js +19 -4
  37. package/src/plugins/api/server/health-manager.class.js +163 -0
  38. package/src/plugins/api/server/middleware-chain.class.js +310 -0
  39. package/src/plugins/api/server/router.class.js +472 -0
  40. package/src/plugins/api/server.js +280 -1303
  41. package/src/plugins/api/utils/custom-routes.js +17 -5
  42. package/src/plugins/api/utils/guards.js +76 -17
  43. package/src/plugins/api/utils/openapi-generator-cached.class.js +133 -0
  44. package/src/plugins/api/utils/openapi-generator.js +7 -6
  45. package/src/plugins/audit.plugin.js +30 -8
  46. package/src/plugins/backup.plugin.js +110 -14
  47. package/src/plugins/cache/cache.class.js +22 -5
  48. package/src/plugins/cache/filesystem-cache.class.js +116 -19
  49. package/src/plugins/cache/memory-cache.class.js +211 -57
  50. package/src/plugins/cache/multi-tier-cache.class.js +371 -0
  51. package/src/plugins/cache/partition-aware-filesystem-cache.class.js +168 -47
  52. package/src/plugins/cache/redis-cache.class.js +552 -0
  53. package/src/plugins/cache/s3-cache.class.js +17 -8
  54. package/src/plugins/cache.plugin.js +176 -61
  55. package/src/plugins/cloud-inventory/drivers/alibaba-driver.js +8 -1
  56. package/src/plugins/cloud-inventory/drivers/aws-driver.js +60 -29
  57. package/src/plugins/cloud-inventory/drivers/azure-driver.js +8 -1
  58. package/src/plugins/cloud-inventory/drivers/base-driver.js +16 -2
  59. package/src/plugins/cloud-inventory/drivers/cloudflare-driver.js +8 -1
  60. package/src/plugins/cloud-inventory/drivers/digitalocean-driver.js +8 -1
  61. package/src/plugins/cloud-inventory/drivers/hetzner-driver.js +8 -1
  62. package/src/plugins/cloud-inventory/drivers/linode-driver.js +8 -1
  63. package/src/plugins/cloud-inventory/drivers/mongodb-atlas-driver.js +8 -1
  64. package/src/plugins/cloud-inventory/drivers/vultr-driver.js +8 -1
  65. package/src/plugins/cloud-inventory/index.js +29 -8
  66. package/src/plugins/cloud-inventory/registry.js +64 -42
  67. package/src/plugins/cloud-inventory.plugin.js +240 -138
  68. package/src/plugins/concerns/plugin-dependencies.js +54 -0
  69. package/src/plugins/concerns/resource-names.js +100 -0
  70. package/src/plugins/consumers/index.js +10 -2
  71. package/src/plugins/consumers/sqs-consumer.js +12 -2
  72. package/src/plugins/cookie-farm-suite.plugin.js +278 -0
  73. package/src/plugins/cookie-farm.errors.js +73 -0
  74. package/src/plugins/cookie-farm.plugin.js +869 -0
  75. package/src/plugins/costs.plugin.js +7 -1
  76. package/src/plugins/eventual-consistency/analytics.js +94 -19
  77. package/src/plugins/eventual-consistency/config.js +15 -7
  78. package/src/plugins/eventual-consistency/consolidation.js +29 -11
  79. package/src/plugins/eventual-consistency/garbage-collection.js +3 -1
  80. package/src/plugins/eventual-consistency/helpers.js +39 -14
  81. package/src/plugins/eventual-consistency/install.js +21 -2
  82. package/src/plugins/eventual-consistency/utils.js +32 -10
  83. package/src/plugins/fulltext.plugin.js +38 -11
  84. package/src/plugins/geo.plugin.js +61 -9
  85. package/src/plugins/identity/concerns/config.js +61 -0
  86. package/src/plugins/identity/concerns/mfa-manager.js +15 -2
  87. package/src/plugins/identity/concerns/rate-limit.js +124 -0
  88. package/src/plugins/identity/concerns/resource-schemas.js +9 -1
  89. package/src/plugins/identity/concerns/token-generator.js +29 -4
  90. package/src/plugins/identity/drivers/auth-driver.interface.js +76 -0
  91. package/src/plugins/identity/drivers/client-credentials-driver.js +127 -0
  92. package/src/plugins/identity/drivers/index.js +18 -0
  93. package/src/plugins/identity/drivers/password-driver.js +122 -0
  94. package/src/plugins/identity/email-service.js +17 -2
  95. package/src/plugins/identity/index.js +413 -69
  96. package/src/plugins/identity/oauth2-server.js +413 -30
  97. package/src/plugins/identity/oidc-discovery.js +16 -8
  98. package/src/plugins/identity/rsa-keys.js +115 -35
  99. package/src/plugins/identity/server.js +166 -45
  100. package/src/plugins/identity/session-manager.js +53 -7
  101. package/src/plugins/identity/ui/pages/mfa-verification.js +17 -15
  102. package/src/plugins/identity/ui/routes.js +363 -255
  103. package/src/plugins/importer/index.js +153 -20
  104. package/src/plugins/index.js +9 -2
  105. package/src/plugins/kubernetes-inventory/index.js +6 -0
  106. package/src/plugins/kubernetes-inventory/k8s-driver.js +867 -0
  107. package/src/plugins/kubernetes-inventory/resource-types.js +274 -0
  108. package/src/plugins/kubernetes-inventory.plugin.js +980 -0
  109. package/src/plugins/metrics.plugin.js +64 -16
  110. package/src/plugins/ml/base-model.class.js +25 -15
  111. package/src/plugins/ml/regression-model.class.js +1 -1
  112. package/src/plugins/ml.errors.js +57 -25
  113. package/src/plugins/ml.plugin.js +28 -4
  114. package/src/plugins/namespace.js +210 -0
  115. package/src/plugins/plugin.class.js +180 -8
  116. package/src/plugins/puppeteer/console-monitor.js +729 -0
  117. package/src/plugins/puppeteer/cookie-manager.js +492 -0
  118. package/src/plugins/puppeteer/network-monitor.js +816 -0
  119. package/src/plugins/puppeteer/performance-manager.js +746 -0
  120. package/src/plugins/puppeteer/proxy-manager.js +478 -0
  121. package/src/plugins/puppeteer/stealth-manager.js +556 -0
  122. package/src/plugins/puppeteer.errors.js +81 -0
  123. package/src/plugins/puppeteer.plugin.js +1327 -0
  124. package/src/plugins/queue-consumer.plugin.js +69 -14
  125. package/src/plugins/recon/behaviors/uptime-behavior.js +691 -0
  126. package/src/plugins/recon/concerns/command-runner.js +148 -0
  127. package/src/plugins/recon/concerns/diff-detector.js +372 -0
  128. package/src/plugins/recon/concerns/fingerprint-builder.js +307 -0
  129. package/src/plugins/recon/concerns/process-manager.js +338 -0
  130. package/src/plugins/recon/concerns/report-generator.js +478 -0
  131. package/src/plugins/recon/concerns/security-analyzer.js +571 -0
  132. package/src/plugins/recon/concerns/target-normalizer.js +68 -0
  133. package/src/plugins/recon/config/defaults.js +321 -0
  134. package/src/plugins/recon/config/resources.js +370 -0
  135. package/src/plugins/recon/index.js +778 -0
  136. package/src/plugins/recon/managers/dependency-manager.js +174 -0
  137. package/src/plugins/recon/managers/scheduler-manager.js +179 -0
  138. package/src/plugins/recon/managers/storage-manager.js +745 -0
  139. package/src/plugins/recon/managers/target-manager.js +274 -0
  140. package/src/plugins/recon/stages/asn-stage.js +314 -0
  141. package/src/plugins/recon/stages/certificate-stage.js +84 -0
  142. package/src/plugins/recon/stages/dns-stage.js +107 -0
  143. package/src/plugins/recon/stages/dnsdumpster-stage.js +362 -0
  144. package/src/plugins/recon/stages/fingerprint-stage.js +71 -0
  145. package/src/plugins/recon/stages/google-dorks-stage.js +440 -0
  146. package/src/plugins/recon/stages/http-stage.js +89 -0
  147. package/src/plugins/recon/stages/latency-stage.js +148 -0
  148. package/src/plugins/recon/stages/massdns-stage.js +302 -0
  149. package/src/plugins/recon/stages/osint-stage.js +1373 -0
  150. package/src/plugins/recon/stages/ports-stage.js +169 -0
  151. package/src/plugins/recon/stages/screenshot-stage.js +94 -0
  152. package/src/plugins/recon/stages/secrets-stage.js +514 -0
  153. package/src/plugins/recon/stages/subdomains-stage.js +295 -0
  154. package/src/plugins/recon/stages/tls-audit-stage.js +78 -0
  155. package/src/plugins/recon/stages/vulnerability-stage.js +78 -0
  156. package/src/plugins/recon/stages/web-discovery-stage.js +113 -0
  157. package/src/plugins/recon/stages/whois-stage.js +349 -0
  158. package/src/plugins/recon.plugin.js +75 -0
  159. package/src/plugins/recon.plugin.js.backup +2635 -0
  160. package/src/plugins/relation.errors.js +87 -14
  161. package/src/plugins/replicator.plugin.js +514 -137
  162. package/src/plugins/replicators/base-replicator.class.js +89 -1
  163. package/src/plugins/replicators/bigquery-replicator.class.js +66 -22
  164. package/src/plugins/replicators/dynamodb-replicator.class.js +22 -15
  165. package/src/plugins/replicators/mongodb-replicator.class.js +22 -15
  166. package/src/plugins/replicators/mysql-replicator.class.js +52 -17
  167. package/src/plugins/replicators/planetscale-replicator.class.js +30 -4
  168. package/src/plugins/replicators/postgres-replicator.class.js +62 -27
  169. package/src/plugins/replicators/s3db-replicator.class.js +25 -18
  170. package/src/plugins/replicators/schema-sync.helper.js +3 -3
  171. package/src/plugins/replicators/sqs-replicator.class.js +8 -2
  172. package/src/plugins/replicators/turso-replicator.class.js +23 -3
  173. package/src/plugins/replicators/webhook-replicator.class.js +42 -4
  174. package/src/plugins/s3-queue.plugin.js +464 -65
  175. package/src/plugins/scheduler.plugin.js +20 -6
  176. package/src/plugins/state-machine.plugin.js +40 -9
  177. package/src/plugins/tfstate/base-driver.js +28 -4
  178. package/src/plugins/tfstate/errors.js +65 -10
  179. package/src/plugins/tfstate/filesystem-driver.js +52 -8
  180. package/src/plugins/tfstate/index.js +163 -90
  181. package/src/plugins/tfstate/s3-driver.js +64 -6
  182. package/src/plugins/ttl.plugin.js +72 -17
  183. package/src/plugins/vector/distances.js +18 -12
  184. package/src/plugins/vector/kmeans.js +26 -4
  185. package/src/resource.class.js +115 -19
  186. package/src/testing/factory.class.js +20 -3
  187. package/src/testing/seeder.class.js +7 -1
  188. package/src/clients/memory-client.md +0 -917
  189. package/src/plugins/cloud-inventory/drivers/mock-drivers.js +0 -449
@@ -1,3 +1,5 @@
1
+ import { PluginError } from '../errors.js';
2
+
1
3
  /**
2
4
  * RelationPlugin Error Classes
3
5
  * Custom errors for relation operations
@@ -6,12 +8,18 @@
6
8
  /**
7
9
  * Base error for all relation operations
8
10
  */
9
- export class RelationError extends Error {
11
+ export class RelationError extends PluginError {
10
12
  constructor(message, context = {}) {
11
- super(message);
13
+ const merged = {
14
+ pluginName: context.pluginName || 'RelationPlugin',
15
+ operation: context.operation || 'unknown',
16
+ statusCode: context.statusCode ?? 500,
17
+ retriable: context.retriable ?? false,
18
+ suggestion: context.suggestion ?? 'Inspect relation configuration (type, resource, foreign keys) before retrying.',
19
+ ...context
20
+ };
21
+ super(message, merged);
12
22
  this.name = 'RelationError';
13
- this.context = context;
14
- Error.captureStackTrace(this, this.constructor);
15
23
  }
16
24
  }
17
25
 
@@ -20,7 +28,12 @@ export class RelationError extends Error {
20
28
  */
21
29
  export class RelationConfigError extends RelationError {
22
30
  constructor(message, context = {}) {
23
- super(message, context);
31
+ super(message, {
32
+ statusCode: context.statusCode ?? 400,
33
+ retriable: context.retriable ?? false,
34
+ suggestion: context.suggestion ?? 'Review relation configuration fields (type, resource, localKey, foreignKey).',
35
+ ...context
36
+ });
24
37
  this.name = 'RelationConfigError';
25
38
  }
26
39
  }
@@ -30,7 +43,13 @@ export class RelationConfigError extends RelationError {
30
43
  */
31
44
  export class UnsupportedRelationTypeError extends RelationError {
32
45
  constructor(type, context = {}) {
33
- super(`Unsupported relation type: ${type}. Supported types: hasOne, hasMany, belongsTo, belongsToMany`, context);
46
+ super(`Unsupported relation type: ${type}. Supported types: hasOne, hasMany, belongsTo, belongsToMany`, {
47
+ statusCode: context.statusCode ?? 400,
48
+ retriable: false,
49
+ suggestion: context.suggestion ?? 'Use one of the supported relation types or implement a custom handler.',
50
+ relationType: type,
51
+ ...context
52
+ });
34
53
  this.name = 'UnsupportedRelationTypeError';
35
54
  this.relationType = type;
36
55
  }
@@ -41,7 +60,13 @@ export class UnsupportedRelationTypeError extends RelationError {
41
60
  */
42
61
  export class RelatedResourceNotFoundError extends RelationError {
43
62
  constructor(resourceName, context = {}) {
44
- super(`Related resource "${resourceName}" not found`, context);
63
+ super(`Related resource "${resourceName}" not found`, {
64
+ statusCode: context.statusCode ?? 404,
65
+ retriable: false,
66
+ suggestion: context.suggestion ?? 'Ensure the related resource is created and registered before defining the relation.',
67
+ resourceName,
68
+ ...context
69
+ });
45
70
  this.name = 'RelatedResourceNotFoundError';
46
71
  this.resourceName = resourceName;
47
72
  }
@@ -52,7 +77,13 @@ export class RelatedResourceNotFoundError extends RelationError {
52
77
  */
53
78
  export class JunctionTableNotFoundError extends RelationError {
54
79
  constructor(junctionTable, context = {}) {
55
- super(`Junction table "${junctionTable}" not found for belongsToMany relation`, context);
80
+ super(`Junction table "${junctionTable}" not found for belongsToMany relation`, {
81
+ statusCode: context.statusCode ?? 404,
82
+ retriable: false,
83
+ suggestion: context.suggestion ?? 'Create the junction resource or update belongsToMany configuration to reference an existing one.',
84
+ junctionTable,
85
+ ...context
86
+ });
56
87
  this.name = 'JunctionTableNotFoundError';
57
88
  this.junctionTable = junctionTable;
58
89
  }
@@ -65,7 +96,15 @@ export class CascadeError extends RelationError {
65
96
  constructor(operation, resourceName, recordId, originalError, context = {}) {
66
97
  super(
67
98
  `Cascade ${operation} failed for resource "${resourceName}" record "${recordId}": ${originalError.message}`,
68
- context
99
+ {
100
+ retriable: context.retriable ?? false,
101
+ suggestion: context.suggestion ?? 'Check cascade configuration and ensure dependent records allow deletion/update.',
102
+ operation,
103
+ resourceName,
104
+ recordId,
105
+ originalError,
106
+ ...context
107
+ }
69
108
  );
70
109
  this.name = 'CascadeError';
71
110
  this.operation = operation;
@@ -80,7 +119,14 @@ export class CascadeError extends RelationError {
80
119
  */
81
120
  export class MissingForeignKeyError extends RelationError {
82
121
  constructor(foreignKey, resourceName, context = {}) {
83
- super(`Foreign key "${foreignKey}" not found in resource "${resourceName}"`, context);
122
+ super(`Foreign key "${foreignKey}" not found in resource "${resourceName}"`, {
123
+ statusCode: context.statusCode ?? 422,
124
+ retriable: false,
125
+ suggestion: context.suggestion ?? 'Add the foreign key field to the resource schema or adjust relation configuration.',
126
+ foreignKey,
127
+ resourceName,
128
+ ...context
129
+ });
84
130
  this.name = 'MissingForeignKeyError';
85
131
  this.foreignKey = foreignKey;
86
132
  this.resourceName = resourceName;
@@ -92,7 +138,14 @@ export class MissingForeignKeyError extends RelationError {
92
138
  */
93
139
  export class RecordNotFoundError extends RelationError {
94
140
  constructor(recordId, resourceName, context = {}) {
95
- super(`Record "${recordId}" not found in resource "${resourceName}"`, context);
141
+ super(`Record "${recordId}" not found in resource "${resourceName}"`, {
142
+ statusCode: context.statusCode ?? 404,
143
+ retriable: false,
144
+ suggestion: context.suggestion ?? 'Ensure the primary record exists before loading relations.',
145
+ recordId,
146
+ resourceName,
147
+ ...context
148
+ });
96
149
  this.name = 'RecordNotFoundError';
97
150
  this.recordId = recordId;
98
151
  this.resourceName = resourceName;
@@ -104,7 +157,13 @@ export class RecordNotFoundError extends RelationError {
104
157
  */
105
158
  export class CircularRelationError extends RelationError {
106
159
  constructor(path, context = {}) {
107
- super(`Circular relation detected in path: ${path.join(' -> ')}`, context);
160
+ super(`Circular relation detected in path: ${path.join(' -> ')}`, {
161
+ statusCode: context.statusCode ?? 400,
162
+ retriable: false,
163
+ suggestion: context.suggestion ?? 'Adjust include paths to avoid circular references or limit recursion depth.',
164
+ relationPath: path,
165
+ ...context
166
+ });
108
167
  this.name = 'CircularRelationError';
109
168
  this.relationPath = path;
110
169
  }
@@ -115,7 +174,14 @@ export class CircularRelationError extends RelationError {
115
174
  */
116
175
  export class InvalidIncludePathError extends RelationError {
117
176
  constructor(path, reason, context = {}) {
118
- super(`Invalid include path "${path}": ${reason}`, context);
177
+ super(`Invalid include path "${path}": ${reason}`, {
178
+ statusCode: context.statusCode ?? 400,
179
+ retriable: false,
180
+ suggestion: context.suggestion ?? 'Verify include syntax (users.posts.comments) and ensure each relation exists.',
181
+ includePath: path,
182
+ reason,
183
+ ...context
184
+ });
119
185
  this.name = 'InvalidIncludePathError';
120
186
  this.includePath = path;
121
187
  this.reason = reason;
@@ -129,7 +195,14 @@ export class BatchLoadError extends RelationError {
129
195
  constructor(relation, batchSize, failedCount, context = {}) {
130
196
  super(
131
197
  `Batch loading failed for relation "${relation}". Failed ${failedCount} out of ${batchSize} records`,
132
- context
198
+ {
199
+ retriable: context.retriable ?? true,
200
+ suggestion: context.suggestion ?? 'Check batch size configuration and review individual errors to retry failed records.',
201
+ relation,
202
+ batchSize,
203
+ failedCount,
204
+ ...context
205
+ }
133
206
  );
134
207
  this.name = 'BatchLoadError';
135
208
  this.relation = relation;