@getstrata/core 0.4.0 → 0.5.0
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/dist/bootstrap/httpKernel.d.ts +2 -0
- package/dist/config/queue.d.ts +8 -0
- package/dist/config/rateLimit.d.ts +2 -1
- package/dist/core/database/baseRepository.d.ts +16 -4
- package/dist/core/database/index.d.ts +10 -4
- package/dist/core/database/migrations/advisoryLock.d.ts +6 -0
- package/dist/core/database/migrations/runner.d.ts +8 -2
- package/dist/core/database/migrations/types.d.ts +1 -0
- package/dist/core/database/model.d.ts +46 -17
- package/dist/core/database/query.d.ts +25 -14
- package/dist/core/database/relationships.d.ts +32 -2
- package/dist/core/database/repositoryQuery.d.ts +16 -1
- package/dist/core/database/schema/blueprint.d.ts +47 -0
- package/dist/core/database/schema/columnDefinition.d.ts +36 -0
- package/dist/core/database/schema/driver.d.ts +8 -0
- package/dist/core/database/schema/errors.d.ts +4 -0
- package/dist/core/database/schema/grammars/compileStatements.d.ts +8 -0
- package/dist/core/database/schema/grammars/createGrammar.d.ts +4 -0
- package/dist/core/database/schema/grammars/grammar.d.ts +10 -0
- package/dist/core/database/schema/grammars/index.d.ts +7 -0
- package/dist/core/database/schema/grammars/mysqlGrammar.d.ts +2 -0
- package/dist/core/database/schema/grammars/postgresGrammar.d.ts +2 -0
- package/dist/core/database/schema/grammars/sqliteGrammar.d.ts +2 -0
- package/dist/core/database/schema/index.d.ts +12 -0
- package/dist/core/database/schema/schema.d.ts +21 -0
- package/dist/core/database/seeders/runner.d.ts +6 -0
- package/dist/core/database/seeders/types.d.ts +8 -0
- package/dist/core/database/types.d.ts +39 -2
- package/dist/core/database/whereBuilder.d.ts +17 -0
- package/dist/core/http/index.d.ts +1 -1
- package/dist/core/http/securedRouteModelBinding.d.ts +2 -1
- package/dist/core/lifecycle/gracefulShutdown.d.ts +6 -0
- package/dist/core/pagination/index.d.ts +11 -1
- package/dist/core/queue/failedJobRepository.d.ts +6 -0
- package/dist/core/queue/failedJobService.d.ts +15 -0
- package/dist/core/queue/failedJobTable.d.ts +3 -0
- package/dist/core/queue/jobRegistry.d.ts +14 -0
- package/dist/core/queue/jobRunner.d.ts +9 -0
- package/dist/core/queue/publicQueue.d.ts +15 -0
- package/dist/core/queue/redisQueue.d.ts +29 -0
- package/dist/core/queue/resilientQueue.d.ts +9 -0
- package/dist/core/queue/types.d.ts +8 -0
- package/dist/core/scheduler/schedule.d.ts +15 -0
- package/dist/entries/auth/accessControl.js +113 -0
- package/dist/entries/auth/authContext.js +15 -0
- package/dist/entries/auth/guard.js +2870 -0
- package/dist/entries/auth/membershipContext.js +276 -0
- package/dist/entries/auth/membershipScope.js +390 -0
- package/dist/entries/auth/membershipService.js +477 -0
- package/dist/entries/auth/oauth/oidcProvider.js +49 -0
- package/dist/entries/auth/oauth/providers.js +71 -0
- package/dist/entries/auth/oauth/samlProvider.js +26 -0
- package/dist/entries/auth/oauth/types.js +1 -0
- package/dist/entries/auth/password.js +15 -0
- package/dist/entries/auth/policy.js +134 -0
- package/dist/entries/auth/sessionCookie.js +75 -0
- package/dist/entries/auth/tokenHash.js +17 -0
- package/dist/entries/cache/tags.js +13 -0
- package/dist/entries/crypto/fieldEncryption.js +93 -0
- package/dist/entries/crypto/mfaSecret.js +105 -0
- package/dist/entries/database/factory.js +17 -0
- package/dist/entries/database/seeders.js +30 -0
- package/dist/entries/database/types.js +1 -0
- package/dist/entries/database.js +2218 -0
- package/dist/entries/errors/http.js +78 -0
- package/dist/entries/http/contentNegotiation.js +26 -0
- package/dist/entries/http/csrfToken.js +147 -0
- package/dist/entries/http/etag.js +170 -0
- package/dist/entries/http/flashSession.js +106 -0
- package/dist/entries/http/middleware.js +68 -0
- package/dist/entries/http/parseFormBody.js +88 -0
- package/dist/entries/http/requestMetaContext.js +18 -0
- package/dist/entries/http/resources.js +19 -0
- package/dist/entries/http/webErrorResponse.js +3143 -0
- package/dist/entries/http/webFormRequest.js +293 -0
- package/dist/entries/http.js +3924 -0
- package/dist/entries/jobs/dispatchWebhookJob.js +342 -0
- package/dist/entries/lifecycle/gracefulShutdown.js +50 -0
- package/dist/entries/metrics/prometheus.js +70 -0
- package/dist/entries/pagination.js +14 -0
- package/dist/entries/queue/createAppQueue.js +2848 -0
- package/dist/entries/queue/failedJobService.js +38 -0
- package/dist/entries/queue/jobRegistry.js +32 -0
- package/dist/entries/queue/jobRunner.js +75 -0
- package/dist/entries/queue/publicQueue.js +2476 -0
- package/dist/entries/queue/queueMetrics.js +2898 -0
- package/dist/entries/queue/types.js +1 -0
- package/dist/entries/security/oauthState.js +75 -0
- package/dist/entries/security/publicReads.js +33 -0
- package/dist/entries/security/safeUrl.js +143 -0
- package/dist/entries/security/securityEvents.js +41 -0
- package/dist/entries/security/stripeWebhook.js +115 -0
- package/dist/entries/security/tokenExpiry.js +16 -0
- package/dist/entries/security/totp.js +51 -0
- package/dist/entries/storage/storage.js +123 -0
- package/dist/entries/tenant/tenantContext.js +30 -0
- package/dist/entries/tenant/tenantMiddleware.js +312 -0
- package/dist/entries/tracing/traceContext.js +15 -0
- package/dist/entries/validation/rules.js +232 -0
- package/dist/entries/view.js +3072 -0
- package/dist/framework/public-api.d.ts +65 -38
- package/dist/index.js +3198 -308
- package/dist/modules/user/apiTokenRepository.d.ts +1 -1
- package/dist/modules/user/apiTokenTable.d.ts +1 -1
- package/dist/modules/user/authService.d.ts +1 -1
- package/dist/modules/user/notificationRepository.d.ts +1 -1
- package/dist/modules/user/notificationService.d.ts +1 -1
- package/dist/modules/user/notificationTable.d.ts +1 -1
- package/dist/modules/user/oauthIdentityRepository.d.ts +2 -2
- package/dist/modules/user/provider.d.ts +1 -1
- package/dist/modules/user/repository.d.ts +1 -1
- package/dist/modules/user/table.d.ts +1 -1
- package/dist/modules/user/tokenService.d.ts +1 -1
- package/package.json +289 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// ../../src/core/queue/failedJobService.ts
|
|
3
|
+
class FailedJobService {
|
|
4
|
+
repository;
|
|
5
|
+
constructor(repository) {
|
|
6
|
+
this.repository = repository;
|
|
7
|
+
}
|
|
8
|
+
async recordFailure(input) {
|
|
9
|
+
return await this.repository.create({
|
|
10
|
+
job_name: input.jobName,
|
|
11
|
+
payload: input.payload,
|
|
12
|
+
exception: input.exception,
|
|
13
|
+
failed_at: new Date
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
listRecent(limit = 50) {
|
|
17
|
+
return this.repository.findAll({
|
|
18
|
+
limit,
|
|
19
|
+
orderBy: { column: "failed_at", direction: "DESC" }
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
async retry(id) {
|
|
23
|
+
const failedJob = await this.repository.findByIdOrThrow(id, (jobId) => new Error(`Failed job ${jobId} not found.`));
|
|
24
|
+
await this.repository.deleteById(id);
|
|
25
|
+
return failedJob;
|
|
26
|
+
}
|
|
27
|
+
async flush() {
|
|
28
|
+
const jobs = await this.repository.findAll();
|
|
29
|
+
let deleted = 0;
|
|
30
|
+
for (const job of jobs) {
|
|
31
|
+
if (await this.repository.deleteById(job.id)) {
|
|
32
|
+
deleted += 1;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return deleted;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
var failedJobService_default = FailedJobService;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// ../../src/core/queue/jobRegistry.ts
|
|
3
|
+
class JobRegistry {
|
|
4
|
+
constructor() {}
|
|
5
|
+
factories = new Map;
|
|
6
|
+
instances = new WeakMap;
|
|
7
|
+
register(name, factory) {
|
|
8
|
+
this.factories.set(name, factory);
|
|
9
|
+
}
|
|
10
|
+
resolveName(job) {
|
|
11
|
+
return this.instances.get(job);
|
|
12
|
+
}
|
|
13
|
+
track(name, job) {
|
|
14
|
+
this.instances.set(job, name);
|
|
15
|
+
return job;
|
|
16
|
+
}
|
|
17
|
+
create(name) {
|
|
18
|
+
const factory = this.factories.get(name);
|
|
19
|
+
if (!factory) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
return factory();
|
|
23
|
+
}
|
|
24
|
+
names() {
|
|
25
|
+
return [...this.factories.keys()];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
var jobRegistry = new JobRegistry;
|
|
29
|
+
export {
|
|
30
|
+
jobRegistry,
|
|
31
|
+
JobRegistry
|
|
32
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// ../../src/bootstrap/config.ts
|
|
3
|
+
var CORE_QUEUE_TOKEN = "core.queue";
|
|
4
|
+
var CORE_POLICY_GATE_TOKEN = "core.policyGate";
|
|
5
|
+
var CORE_AUTH_TOKEN = "core.auth";
|
|
6
|
+
var CORE_TOKEN_SERVICE_TOKEN = "core.tokenService";
|
|
7
|
+
var DEFAULT_QUEUE_DRIVER = "sync";
|
|
8
|
+
|
|
9
|
+
// ../../src/config/queue.ts
|
|
10
|
+
var queueConfig = {
|
|
11
|
+
driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
|
|
12
|
+
maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
|
|
13
|
+
backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// ../../src/core/queue/jobRegistry.ts
|
|
17
|
+
class JobRegistry {
|
|
18
|
+
constructor() {}
|
|
19
|
+
factories = new Map;
|
|
20
|
+
instances = new WeakMap;
|
|
21
|
+
register(name, factory) {
|
|
22
|
+
this.factories.set(name, factory);
|
|
23
|
+
}
|
|
24
|
+
resolveName(job) {
|
|
25
|
+
return this.instances.get(job);
|
|
26
|
+
}
|
|
27
|
+
track(name, job) {
|
|
28
|
+
this.instances.set(job, name);
|
|
29
|
+
return job;
|
|
30
|
+
}
|
|
31
|
+
create(name) {
|
|
32
|
+
const factory = this.factories.get(name);
|
|
33
|
+
if (!factory) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
return factory();
|
|
37
|
+
}
|
|
38
|
+
names() {
|
|
39
|
+
return [...this.factories.keys()];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
var jobRegistry = new JobRegistry;
|
|
43
|
+
|
|
44
|
+
// ../../src/core/queue/jobRunner.ts
|
|
45
|
+
async function runQueueJob(envelope, failedJobs) {
|
|
46
|
+
const job = jobRegistry.create(envelope.name);
|
|
47
|
+
if (!job) {
|
|
48
|
+
throw new Error(`Unknown job "${envelope.name}".`);
|
|
49
|
+
}
|
|
50
|
+
const attempts = envelope.attempts ?? 0;
|
|
51
|
+
try {
|
|
52
|
+
await job.handle(envelope.payload);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
const nextAttempt = attempts + 1;
|
|
55
|
+
const maxAttempts = job.maxAttempts ?? queueConfig.maxAttempts;
|
|
56
|
+
if (nextAttempt < maxAttempts) {
|
|
57
|
+
const backoffMs = job.backoffMs ?? queueConfig.backoffMs;
|
|
58
|
+
await new Promise((resolve) => setTimeout(resolve, backoffMs * nextAttempt));
|
|
59
|
+
await runQueueJob({
|
|
60
|
+
...envelope,
|
|
61
|
+
attempts: nextAttempt
|
|
62
|
+
}, failedJobs);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
await failedJobs.recordFailure({
|
|
66
|
+
jobName: envelope.name,
|
|
67
|
+
payload: envelope.payload,
|
|
68
|
+
exception: error instanceof Error ? error.stack ?? error.message : String(error)
|
|
69
|
+
});
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
runQueueJob
|
|
75
|
+
};
|