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.
- package/README.md +56 -15
- package/dist/s3db.cjs +72446 -39022
- package/dist/s3db.cjs.map +1 -1
- package/dist/s3db.es.js +72172 -38790
- package/dist/s3db.es.js.map +1 -1
- package/mcp/lib/base-handler.js +157 -0
- package/mcp/lib/handlers/connection-handler.js +280 -0
- package/mcp/lib/handlers/query-handler.js +533 -0
- package/mcp/lib/handlers/resource-handler.js +428 -0
- package/mcp/lib/tool-registry.js +336 -0
- package/mcp/lib/tools/connection-tools.js +161 -0
- package/mcp/lib/tools/query-tools.js +267 -0
- package/mcp/lib/tools/resource-tools.js +404 -0
- package/package.json +85 -50
- package/src/clients/memory-client.class.js +346 -191
- package/src/clients/memory-storage.class.js +300 -84
- package/src/clients/s3-client.class.js +7 -6
- package/src/concerns/geo-encoding.js +19 -2
- package/src/concerns/ip.js +59 -9
- package/src/concerns/money.js +8 -1
- package/src/concerns/password-hashing.js +49 -8
- package/src/concerns/plugin-storage.js +186 -18
- package/src/concerns/storage-drivers/filesystem-driver.js +284 -0
- package/src/database.class.js +139 -29
- package/src/errors.js +332 -42
- package/src/plugins/api/auth/oidc-auth.js +66 -17
- package/src/plugins/api/auth/strategies/base-strategy.class.js +74 -0
- package/src/plugins/api/auth/strategies/factory.class.js +63 -0
- package/src/plugins/api/auth/strategies/global-strategy.class.js +44 -0
- package/src/plugins/api/auth/strategies/path-based-strategy.class.js +83 -0
- package/src/plugins/api/auth/strategies/path-rules-strategy.class.js +118 -0
- package/src/plugins/api/concerns/failban-manager.js +106 -57
- package/src/plugins/api/concerns/route-context.js +601 -0
- package/src/plugins/api/index.js +168 -40
- package/src/plugins/api/routes/auth-routes.js +198 -30
- package/src/plugins/api/routes/resource-routes.js +19 -4
- package/src/plugins/api/server/health-manager.class.js +163 -0
- package/src/plugins/api/server/middleware-chain.class.js +310 -0
- package/src/plugins/api/server/router.class.js +472 -0
- package/src/plugins/api/server.js +280 -1303
- package/src/plugins/api/utils/custom-routes.js +17 -5
- package/src/plugins/api/utils/guards.js +76 -17
- package/src/plugins/api/utils/openapi-generator-cached.class.js +133 -0
- package/src/plugins/api/utils/openapi-generator.js +7 -6
- package/src/plugins/audit.plugin.js +30 -8
- package/src/plugins/backup.plugin.js +110 -14
- package/src/plugins/cache/cache.class.js +22 -5
- package/src/plugins/cache/filesystem-cache.class.js +116 -19
- package/src/plugins/cache/memory-cache.class.js +211 -57
- package/src/plugins/cache/multi-tier-cache.class.js +371 -0
- package/src/plugins/cache/partition-aware-filesystem-cache.class.js +168 -47
- package/src/plugins/cache/redis-cache.class.js +552 -0
- package/src/plugins/cache/s3-cache.class.js +17 -8
- package/src/plugins/cache.plugin.js +176 -61
- package/src/plugins/cloud-inventory/drivers/alibaba-driver.js +8 -1
- package/src/plugins/cloud-inventory/drivers/aws-driver.js +60 -29
- package/src/plugins/cloud-inventory/drivers/azure-driver.js +8 -1
- package/src/plugins/cloud-inventory/drivers/base-driver.js +16 -2
- package/src/plugins/cloud-inventory/drivers/cloudflare-driver.js +8 -1
- package/src/plugins/cloud-inventory/drivers/digitalocean-driver.js +8 -1
- package/src/plugins/cloud-inventory/drivers/hetzner-driver.js +8 -1
- package/src/plugins/cloud-inventory/drivers/linode-driver.js +8 -1
- package/src/plugins/cloud-inventory/drivers/mongodb-atlas-driver.js +8 -1
- package/src/plugins/cloud-inventory/drivers/vultr-driver.js +8 -1
- package/src/plugins/cloud-inventory/index.js +29 -8
- package/src/plugins/cloud-inventory/registry.js +64 -42
- package/src/plugins/cloud-inventory.plugin.js +240 -138
- package/src/plugins/concerns/plugin-dependencies.js +54 -0
- package/src/plugins/concerns/resource-names.js +100 -0
- package/src/plugins/consumers/index.js +10 -2
- package/src/plugins/consumers/sqs-consumer.js +12 -2
- package/src/plugins/cookie-farm-suite.plugin.js +278 -0
- package/src/plugins/cookie-farm.errors.js +73 -0
- package/src/plugins/cookie-farm.plugin.js +869 -0
- package/src/plugins/costs.plugin.js +7 -1
- package/src/plugins/eventual-consistency/analytics.js +94 -19
- package/src/plugins/eventual-consistency/config.js +15 -7
- package/src/plugins/eventual-consistency/consolidation.js +29 -11
- package/src/plugins/eventual-consistency/garbage-collection.js +3 -1
- package/src/plugins/eventual-consistency/helpers.js +39 -14
- package/src/plugins/eventual-consistency/install.js +21 -2
- package/src/plugins/eventual-consistency/utils.js +32 -10
- package/src/plugins/fulltext.plugin.js +38 -11
- package/src/plugins/geo.plugin.js +61 -9
- package/src/plugins/identity/concerns/config.js +61 -0
- package/src/plugins/identity/concerns/mfa-manager.js +15 -2
- package/src/plugins/identity/concerns/rate-limit.js +124 -0
- package/src/plugins/identity/concerns/resource-schemas.js +9 -1
- package/src/plugins/identity/concerns/token-generator.js +29 -4
- package/src/plugins/identity/drivers/auth-driver.interface.js +76 -0
- package/src/plugins/identity/drivers/client-credentials-driver.js +127 -0
- package/src/plugins/identity/drivers/index.js +18 -0
- package/src/plugins/identity/drivers/password-driver.js +122 -0
- package/src/plugins/identity/email-service.js +17 -2
- package/src/plugins/identity/index.js +413 -69
- package/src/plugins/identity/oauth2-server.js +413 -30
- package/src/plugins/identity/oidc-discovery.js +16 -8
- package/src/plugins/identity/rsa-keys.js +115 -35
- package/src/plugins/identity/server.js +166 -45
- package/src/plugins/identity/session-manager.js +53 -7
- package/src/plugins/identity/ui/pages/mfa-verification.js +17 -15
- package/src/plugins/identity/ui/routes.js +363 -255
- package/src/plugins/importer/index.js +153 -20
- package/src/plugins/index.js +9 -2
- package/src/plugins/kubernetes-inventory/index.js +6 -0
- package/src/plugins/kubernetes-inventory/k8s-driver.js +867 -0
- package/src/plugins/kubernetes-inventory/resource-types.js +274 -0
- package/src/plugins/kubernetes-inventory.plugin.js +980 -0
- package/src/plugins/metrics.plugin.js +64 -16
- package/src/plugins/ml/base-model.class.js +25 -15
- package/src/plugins/ml/regression-model.class.js +1 -1
- package/src/plugins/ml.errors.js +57 -25
- package/src/plugins/ml.plugin.js +28 -4
- package/src/plugins/namespace.js +210 -0
- package/src/plugins/plugin.class.js +180 -8
- package/src/plugins/puppeteer/console-monitor.js +729 -0
- package/src/plugins/puppeteer/cookie-manager.js +492 -0
- package/src/plugins/puppeteer/network-monitor.js +816 -0
- package/src/plugins/puppeteer/performance-manager.js +746 -0
- package/src/plugins/puppeteer/proxy-manager.js +478 -0
- package/src/plugins/puppeteer/stealth-manager.js +556 -0
- package/src/plugins/puppeteer.errors.js +81 -0
- package/src/plugins/puppeteer.plugin.js +1327 -0
- package/src/plugins/queue-consumer.plugin.js +69 -14
- package/src/plugins/recon/behaviors/uptime-behavior.js +691 -0
- package/src/plugins/recon/concerns/command-runner.js +148 -0
- package/src/plugins/recon/concerns/diff-detector.js +372 -0
- package/src/plugins/recon/concerns/fingerprint-builder.js +307 -0
- package/src/plugins/recon/concerns/process-manager.js +338 -0
- package/src/plugins/recon/concerns/report-generator.js +478 -0
- package/src/plugins/recon/concerns/security-analyzer.js +571 -0
- package/src/plugins/recon/concerns/target-normalizer.js +68 -0
- package/src/plugins/recon/config/defaults.js +321 -0
- package/src/plugins/recon/config/resources.js +370 -0
- package/src/plugins/recon/index.js +778 -0
- package/src/plugins/recon/managers/dependency-manager.js +174 -0
- package/src/plugins/recon/managers/scheduler-manager.js +179 -0
- package/src/plugins/recon/managers/storage-manager.js +745 -0
- package/src/plugins/recon/managers/target-manager.js +274 -0
- package/src/plugins/recon/stages/asn-stage.js +314 -0
- package/src/plugins/recon/stages/certificate-stage.js +84 -0
- package/src/plugins/recon/stages/dns-stage.js +107 -0
- package/src/plugins/recon/stages/dnsdumpster-stage.js +362 -0
- package/src/plugins/recon/stages/fingerprint-stage.js +71 -0
- package/src/plugins/recon/stages/google-dorks-stage.js +440 -0
- package/src/plugins/recon/stages/http-stage.js +89 -0
- package/src/plugins/recon/stages/latency-stage.js +148 -0
- package/src/plugins/recon/stages/massdns-stage.js +302 -0
- package/src/plugins/recon/stages/osint-stage.js +1373 -0
- package/src/plugins/recon/stages/ports-stage.js +169 -0
- package/src/plugins/recon/stages/screenshot-stage.js +94 -0
- package/src/plugins/recon/stages/secrets-stage.js +514 -0
- package/src/plugins/recon/stages/subdomains-stage.js +295 -0
- package/src/plugins/recon/stages/tls-audit-stage.js +78 -0
- package/src/plugins/recon/stages/vulnerability-stage.js +78 -0
- package/src/plugins/recon/stages/web-discovery-stage.js +113 -0
- package/src/plugins/recon/stages/whois-stage.js +349 -0
- package/src/plugins/recon.plugin.js +75 -0
- package/src/plugins/recon.plugin.js.backup +2635 -0
- package/src/plugins/relation.errors.js +87 -14
- package/src/plugins/replicator.plugin.js +514 -137
- package/src/plugins/replicators/base-replicator.class.js +89 -1
- package/src/plugins/replicators/bigquery-replicator.class.js +66 -22
- package/src/plugins/replicators/dynamodb-replicator.class.js +22 -15
- package/src/plugins/replicators/mongodb-replicator.class.js +22 -15
- package/src/plugins/replicators/mysql-replicator.class.js +52 -17
- package/src/plugins/replicators/planetscale-replicator.class.js +30 -4
- package/src/plugins/replicators/postgres-replicator.class.js +62 -27
- package/src/plugins/replicators/s3db-replicator.class.js +25 -18
- package/src/plugins/replicators/schema-sync.helper.js +3 -3
- package/src/plugins/replicators/sqs-replicator.class.js +8 -2
- package/src/plugins/replicators/turso-replicator.class.js +23 -3
- package/src/plugins/replicators/webhook-replicator.class.js +42 -4
- package/src/plugins/s3-queue.plugin.js +464 -65
- package/src/plugins/scheduler.plugin.js +20 -6
- package/src/plugins/state-machine.plugin.js +40 -9
- package/src/plugins/tfstate/base-driver.js +28 -4
- package/src/plugins/tfstate/errors.js +65 -10
- package/src/plugins/tfstate/filesystem-driver.js +52 -8
- package/src/plugins/tfstate/index.js +163 -90
- package/src/plugins/tfstate/s3-driver.js +64 -6
- package/src/plugins/ttl.plugin.js +72 -17
- package/src/plugins/vector/distances.js +18 -12
- package/src/plugins/vector/kmeans.js +26 -4
- package/src/resource.class.js +115 -19
- package/src/testing/factory.class.js +20 -3
- package/src/testing/seeder.class.js +7 -1
- package/src/clients/memory-client.md +0 -917
- 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
|
|
11
|
+
export class RelationError extends PluginError {
|
|
10
12
|
constructor(message, context = {}) {
|
|
11
|
-
|
|
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,
|
|
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`,
|
|
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`,
|
|
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`,
|
|
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
|
-
|
|
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}"`,
|
|
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}"`,
|
|
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(' -> ')}`,
|
|
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}`,
|
|
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
|
-
|
|
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;
|