@package-broker/core 0.2.15
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/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-driver.d.ts +15 -0
- package/dist/cache/memory-driver.d.ts.map +1 -0
- package/dist/cache/memory-driver.js +56 -0
- package/dist/cache/memory-driver.js.map +1 -0
- package/dist/db/d1-driver.d.ts +3 -0
- package/dist/db/d1-driver.d.ts.map +1 -0
- package/dist/db/d1-driver.js +7 -0
- package/dist/db/d1-driver.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +696 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +99 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/factory.d.ts +34 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +121 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/index.d.ts +2 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +7 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/processor.d.ts +49 -0
- package/dist/jobs/processor.d.ts.map +1 -0
- package/dist/jobs/processor.js +118 -0
- package/dist/jobs/processor.js.map +1 -0
- package/dist/middleware/auth.d.ts +52 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +300 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/composer-version.d.ts +7 -0
- package/dist/middleware/composer-version.d.ts.map +1 -0
- package/dist/middleware/composer-version.js +18 -0
- package/dist/middleware/composer-version.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +7 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +45 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +5 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +6 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/request-id.d.ts +9 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +36 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/ports.d.ts +32 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +4 -0
- package/dist/ports.js.map +1 -0
- package/dist/queue/consumer.d.ts +18 -0
- package/dist/queue/consumer.d.ts.map +1 -0
- package/dist/queue/consumer.js +82 -0
- package/dist/queue/consumer.js.map +1 -0
- package/dist/queue/index.d.ts +2 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +2 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/memory-driver.d.ts +13 -0
- package/dist/queue/memory-driver.d.ts.map +1 -0
- package/dist/queue/memory-driver.js +22 -0
- package/dist/queue/memory-driver.js.map +1 -0
- package/dist/queue/types.d.ts +19 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +3 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/routes/api/artifacts.d.ts +25 -0
- package/dist/routes/api/artifacts.d.ts.map +1 -0
- package/dist/routes/api/artifacts.js +57 -0
- package/dist/routes/api/artifacts.js.map +1 -0
- package/dist/routes/api/auth.d.ts +50 -0
- package/dist/routes/api/auth.d.ts.map +1 -0
- package/dist/routes/api/auth.js +268 -0
- package/dist/routes/api/auth.js.map +1 -0
- package/dist/routes/api/index.d.ts +9 -0
- package/dist/routes/api/index.d.ts.map +1 -0
- package/dist/routes/api/index.js +10 -0
- package/dist/routes/api/index.js.map +1 -0
- package/dist/routes/api/packages.d.ts +47 -0
- package/dist/routes/api/packages.d.ts.map +1 -0
- package/dist/routes/api/packages.js +671 -0
- package/dist/routes/api/packages.js.map +1 -0
- package/dist/routes/api/repositories.d.ts +56 -0
- package/dist/routes/api/repositories.d.ts.map +1 -0
- package/dist/routes/api/repositories.js +317 -0
- package/dist/routes/api/repositories.js.map +1 -0
- package/dist/routes/api/settings.d.ts +28 -0
- package/dist/routes/api/settings.d.ts.map +1 -0
- package/dist/routes/api/settings.js +81 -0
- package/dist/routes/api/settings.js.map +1 -0
- package/dist/routes/api/stats.d.ts +21 -0
- package/dist/routes/api/stats.d.ts.map +1 -0
- package/dist/routes/api/stats.js +52 -0
- package/dist/routes/api/stats.js.map +1 -0
- package/dist/routes/api/tokens.d.ts +39 -0
- package/dist/routes/api/tokens.d.ts.map +1 -0
- package/dist/routes/api/tokens.js +191 -0
- package/dist/routes/api/tokens.js.map +1 -0
- package/dist/routes/api/users.d.ts +5 -0
- package/dist/routes/api/users.d.ts.map +1 -0
- package/dist/routes/api/users.js +125 -0
- package/dist/routes/api/users.js.map +1 -0
- package/dist/routes/composer.d.ts +133 -0
- package/dist/routes/composer.d.ts.map +1 -0
- package/dist/routes/composer.js +1179 -0
- package/dist/routes/composer.js.map +1 -0
- package/dist/routes/dist.d.ts +32 -0
- package/dist/routes/dist.d.ts.map +1 -0
- package/dist/routes/dist.js +761 -0
- package/dist/routes/dist.js.map +1 -0
- package/dist/routes/health.d.ts +7 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +22 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +5 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +6 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/services/EmailService.d.ts +20 -0
- package/dist/services/EmailService.d.ts.map +1 -0
- package/dist/services/EmailService.js +27 -0
- package/dist/services/EmailService.js.map +1 -0
- package/dist/services/UserService.d.ts +27 -0
- package/dist/services/UserService.d.ts.map +1 -0
- package/dist/services/UserService.js +164 -0
- package/dist/services/UserService.js.map +1 -0
- package/dist/storage/driver.d.ts +65 -0
- package/dist/storage/driver.d.ts.map +1 -0
- package/dist/storage/driver.js +59 -0
- package/dist/storage/driver.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/r2-driver.d.ts +16 -0
- package/dist/storage/r2-driver.d.ts.map +1 -0
- package/dist/storage/r2-driver.js +28 -0
- package/dist/storage/r2-driver.js.map +1 -0
- package/dist/storage/s3-driver.d.ts +22 -0
- package/dist/storage/s3-driver.d.ts.map +1 -0
- package/dist/storage/s3-driver.js +66 -0
- package/dist/storage/s3-driver.js.map +1 -0
- package/dist/sync/github-sync.d.ts +15 -0
- package/dist/sync/github-sync.d.ts.map +1 -0
- package/dist/sync/github-sync.js +39 -0
- package/dist/sync/github-sync.js.map +1 -0
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +6 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/repository-sync.d.ts +18 -0
- package/dist/sync/repository-sync.d.ts.map +1 -0
- package/dist/sync/repository-sync.js +214 -0
- package/dist/sync/repository-sync.js.map +1 -0
- package/dist/sync/strategies/composer-repo.d.ts +11 -0
- package/dist/sync/strategies/composer-repo.d.ts.map +1 -0
- package/dist/sync/strategies/composer-repo.js +269 -0
- package/dist/sync/strategies/composer-repo.js.map +1 -0
- package/dist/sync/strategies/github-api.d.ts +6 -0
- package/dist/sync/strategies/github-api.d.ts.map +1 -0
- package/dist/sync/strategies/github-api.js +137 -0
- package/dist/sync/strategies/github-api.js.map +1 -0
- package/dist/sync/strategies/github-packages.d.ts +7 -0
- package/dist/sync/strategies/github-packages.d.ts.map +1 -0
- package/dist/sync/strategies/github-packages.js +66 -0
- package/dist/sync/strategies/github-packages.js.map +1 -0
- package/dist/sync/strategies/index.d.ts +4 -0
- package/dist/sync/strategies/index.d.ts.map +1 -0
- package/dist/sync/strategies/index.js +5 -0
- package/dist/sync/strategies/index.js.map +1 -0
- package/dist/sync/types.d.ts +60 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +3 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/utils/analytics.d.ts +142 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +229 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/download.d.ts +10 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +34 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/encryption.d.ts +20 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +76 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +78 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +134 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/upstream-fetch.d.ts +15 -0
- package/dist/utils/upstream-fetch.d.ts.map +1 -0
- package/dist/utils/upstream-fetch.js +108 -0
- package/dist/utils/upstream-fetch.js.map +1 -0
- package/dist/workflows/index.d.ts +3 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +8 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/package-storage.d.ts +47 -0
- package/dist/workflows/package-storage.d.ts.map +1 -0
- package/dist/workflows/package-storage.js +136 -0
- package/dist/workflows/package-storage.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/queue/consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { QueuePort } from '../ports';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory queue driver
|
|
4
|
+
* Drains immediately or stores in array (simple implementation)
|
|
5
|
+
* For this implementation, we'll just log and maybe process if we had a processor interface,
|
|
6
|
+
* but since the Port only defines `send`, we effectively just "ack" it.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MemoryQueueDriver implements QueuePort {
|
|
9
|
+
private messages;
|
|
10
|
+
send(message: any): Promise<void>;
|
|
11
|
+
sendBatch(messages: any[]): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=memory-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-driver.d.ts","sourceRoot":"","sources":["../../src/queue/memory-driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IAC/C,OAAO,CAAC,QAAQ,CAAa;IAEvB,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory queue driver
|
|
3
|
+
* Drains immediately or stores in array (simple implementation)
|
|
4
|
+
* For this implementation, we'll just log and maybe process if we had a processor interface,
|
|
5
|
+
* but since the Port only defines `send`, we effectively just "ack" it.
|
|
6
|
+
*/
|
|
7
|
+
export class MemoryQueueDriver {
|
|
8
|
+
messages = [];
|
|
9
|
+
async send(message) {
|
|
10
|
+
// In a real local setup, you might want to process this immediately
|
|
11
|
+
// or have a background loop. For now, we store it.
|
|
12
|
+
this.messages.push({ message, timestamp: Date.now() });
|
|
13
|
+
// Simulate processing logging
|
|
14
|
+
console.log('[MemoryQueue] Message received:', message);
|
|
15
|
+
}
|
|
16
|
+
async sendBatch(messages) {
|
|
17
|
+
for (const msg of messages) {
|
|
18
|
+
await this.send(msg);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=memory-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-driver.js","sourceRoot":"","sources":["../../src/queue/memory-driver.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IAClB,QAAQ,GAAU,EAAE,CAAC;IAE7B,KAAK,CAAC,IAAI,CAAC,OAAY;QACnB,qEAAqE;QACrE,mDAAmD;QACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvD,8BAA8B;QAC9B,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAe;QAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue message types for async database updates
|
|
3
|
+
*/
|
|
4
|
+
export type QueueMessage = {
|
|
5
|
+
type: 'update_token_last_used';
|
|
6
|
+
tokenId: string;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
} | {
|
|
9
|
+
type: 'update_artifact_download';
|
|
10
|
+
artifactId: string;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'update_repository_sync';
|
|
14
|
+
repoId: string;
|
|
15
|
+
status: 'active' | 'error';
|
|
16
|
+
errorMessage?: string;
|
|
17
|
+
timestamp: number;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,0BAA0B,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA,sBAAsB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
import type { DatabasePort } from '../../ports';
|
|
3
|
+
import type { StorageDriver } from '../../storage/driver';
|
|
4
|
+
export interface ArtifactsRouteEnv {
|
|
5
|
+
Bindings: {
|
|
6
|
+
DB: D1Database;
|
|
7
|
+
STORAGE: StorageDriver;
|
|
8
|
+
};
|
|
9
|
+
Variables: {
|
|
10
|
+
database: DatabasePort;
|
|
11
|
+
storage: StorageDriver;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* DELETE /api/artifacts/:id
|
|
16
|
+
* Delete an artifact (from storage and database)
|
|
17
|
+
*/
|
|
18
|
+
export declare function deleteArtifact(c: Context<ArtifactsRouteEnv>): Promise<Response>;
|
|
19
|
+
/**
|
|
20
|
+
* POST /api/artifacts/cleanup
|
|
21
|
+
* Clean up old artifacts (on-demand cleanup)
|
|
22
|
+
* Deletes artifacts where last_downloaded_at is older than retention_days
|
|
23
|
+
*/
|
|
24
|
+
export declare function cleanupArtifacts(c: Context<ArtifactsRouteEnv>): Promise<Response>;
|
|
25
|
+
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/routes/api/artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;QACf,OAAO,EAAE,aAAa,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;QACvB,OAAO,EAAE,aAAa,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmBrF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgCvF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Artifacts API routes
|
|
2
|
+
import { artifacts } from '../../db/schema';
|
|
3
|
+
import { eq, lt } from 'drizzle-orm';
|
|
4
|
+
import { buildStorageKey } from '../../storage/driver';
|
|
5
|
+
/**
|
|
6
|
+
* DELETE /api/artifacts/:id
|
|
7
|
+
* Delete an artifact (from storage and database)
|
|
8
|
+
*/
|
|
9
|
+
export async function deleteArtifact(c) {
|
|
10
|
+
const id = c.req.param('id');
|
|
11
|
+
const db = c.get('database');
|
|
12
|
+
// Get artifact to find storage key
|
|
13
|
+
const [artifact] = await db.select().from(artifacts).where(eq(artifacts.id, id)).limit(1);
|
|
14
|
+
if (!artifact) {
|
|
15
|
+
return c.json({ error: 'Not Found', message: 'Artifact not found' }, 404);
|
|
16
|
+
}
|
|
17
|
+
// Delete from storage
|
|
18
|
+
const storageKey = buildStorageKey('private', artifact.repo_id, artifact.package_name, artifact.version);
|
|
19
|
+
await c.env.STORAGE.delete(storageKey);
|
|
20
|
+
// Delete from database
|
|
21
|
+
await db.delete(artifacts).where(eq(artifacts.id, id));
|
|
22
|
+
return c.json({ message: 'Artifact deleted' });
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* POST /api/artifacts/cleanup
|
|
26
|
+
* Clean up old artifacts (on-demand cleanup)
|
|
27
|
+
* Deletes artifacts where last_downloaded_at is older than retention_days
|
|
28
|
+
*/
|
|
29
|
+
export async function cleanupArtifacts(c) {
|
|
30
|
+
const body = await c.req.json();
|
|
31
|
+
const retentionDays = body.retention_days ?? 90; // Default 90 days
|
|
32
|
+
const cutoffTimestamp = Math.floor(Date.now() / 1000) - retentionDays * 24 * 60 * 60;
|
|
33
|
+
const db = c.get('database');
|
|
34
|
+
// Find old artifacts
|
|
35
|
+
const oldArtifacts = await db
|
|
36
|
+
.select()
|
|
37
|
+
.from(artifacts)
|
|
38
|
+
.where(lt(artifacts.last_downloaded_at, cutoffTimestamp));
|
|
39
|
+
let deletedCount = 0;
|
|
40
|
+
// Delete each artifact from storage and database
|
|
41
|
+
for (const artifact of oldArtifacts) {
|
|
42
|
+
const storageKey = buildStorageKey('private', artifact.repo_id, artifact.package_name, artifact.version);
|
|
43
|
+
try {
|
|
44
|
+
await c.env.STORAGE.delete(storageKey);
|
|
45
|
+
await db.delete(artifacts).where(eq(artifacts.id, artifact.id));
|
|
46
|
+
deletedCount++;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(`Error deleting artifact ${artifact.id}:`, error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return c.json({
|
|
53
|
+
message: 'Cleanup completed',
|
|
54
|
+
deleted_count: deletedCount,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/routes/api/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
/**
|
|
3
|
+
* POST /api/auth/login
|
|
4
|
+
* Authenticate admin user and return session token
|
|
5
|
+
*/
|
|
6
|
+
export declare function loginRoute(c: Context): Promise<Response>;
|
|
7
|
+
/**
|
|
8
|
+
* POST /api/auth/logout
|
|
9
|
+
* Invalidate session token
|
|
10
|
+
*/
|
|
11
|
+
export declare function logoutRoute(c: Context): Promise<Response>;
|
|
12
|
+
/**
|
|
13
|
+
* GET /api/auth/me
|
|
14
|
+
* Get current authenticated user
|
|
15
|
+
*/
|
|
16
|
+
export declare function meRoute(c: Context): Promise<Response>;
|
|
17
|
+
/**
|
|
18
|
+
* POST /api/setup
|
|
19
|
+
* Create initial admin user
|
|
20
|
+
*/
|
|
21
|
+
export declare function setupRoute(c: Context): Promise<Response>;
|
|
22
|
+
/**
|
|
23
|
+
* POST /api/auth/2fa/setup
|
|
24
|
+
* Start 2FA setup flow
|
|
25
|
+
*/
|
|
26
|
+
export declare function setup2FARoute(c: Context): Promise<Response>;
|
|
27
|
+
/**
|
|
28
|
+
* POST /api/auth/2fa/enable
|
|
29
|
+
* Confirm 2FA setup with code
|
|
30
|
+
*/
|
|
31
|
+
export declare function enable2FARoute(c: Context): Promise<Response>;
|
|
32
|
+
/**
|
|
33
|
+
* POST /api/auth/2fa/disable
|
|
34
|
+
* Disable 2FA
|
|
35
|
+
*/
|
|
36
|
+
export declare function disable2FARoute(c: Context): Promise<Response>;
|
|
37
|
+
/**
|
|
38
|
+
* POST /api/auth/invite/accept
|
|
39
|
+
* Accept invite and set password
|
|
40
|
+
*/
|
|
41
|
+
export declare function acceptInviteRoute(c: Context): Promise<Response>;
|
|
42
|
+
/**
|
|
43
|
+
* Middleware to verify session token
|
|
44
|
+
*/
|
|
45
|
+
export declare function sessionMiddleware(c: Context, next: () => Promise<void>): Promise<Response | void>;
|
|
46
|
+
/**
|
|
47
|
+
* Check if auth is required / setup is needed
|
|
48
|
+
*/
|
|
49
|
+
export declare function checkAuthRequired(c: Context): Promise<Response>;
|
|
50
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/routes/api/auth.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAapC;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4E9D;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAO/D;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuB3D;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqC9D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAUjE;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwBlE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAOnE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBrE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAoBvG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAUrE"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PACKAGE.broker
|
|
3
|
+
* Copyright (C) 2025 Łukasz Bajsarowicz
|
|
4
|
+
* Licensed under AGPL-3.0
|
|
5
|
+
*/
|
|
6
|
+
import { UserService } from '../../services/UserService';
|
|
7
|
+
import { getAnalytics } from '../../utils/analytics';
|
|
8
|
+
// Generate a session token
|
|
9
|
+
function generateSessionToken() {
|
|
10
|
+
const bytes = crypto.getRandomValues(new Uint8Array(32));
|
|
11
|
+
return btoa(String.fromCharCode(...bytes))
|
|
12
|
+
.replace(/\+/g, '-')
|
|
13
|
+
.replace(/\//g, '_')
|
|
14
|
+
.replace(/=/g, '');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* POST /api/auth/login
|
|
18
|
+
* Authenticate admin user and return session token
|
|
19
|
+
*/
|
|
20
|
+
export async function loginRoute(c) {
|
|
21
|
+
const db = c.get('database');
|
|
22
|
+
const userService = new UserService(db);
|
|
23
|
+
let body;
|
|
24
|
+
try {
|
|
25
|
+
body = await c.req.json();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return c.json({ error: 'Invalid JSON' }, 400);
|
|
29
|
+
}
|
|
30
|
+
const { email, password } = body;
|
|
31
|
+
if (!email || !password) {
|
|
32
|
+
return c.json({ error: 'Email and password required' }, 400);
|
|
33
|
+
}
|
|
34
|
+
const user = await userService.verifyCredentials(email, password);
|
|
35
|
+
const requestId = c.get('requestId');
|
|
36
|
+
const analytics = getAnalytics();
|
|
37
|
+
if (!user) {
|
|
38
|
+
analytics.trackAuthLogin({
|
|
39
|
+
requestId,
|
|
40
|
+
userId: 'unknown',
|
|
41
|
+
success: false,
|
|
42
|
+
});
|
|
43
|
+
return c.json({ error: 'Invalid credentials' }, 401);
|
|
44
|
+
}
|
|
45
|
+
// Check 2FA
|
|
46
|
+
if (user.two_factor_enabled) {
|
|
47
|
+
const { code } = body;
|
|
48
|
+
if (!code) {
|
|
49
|
+
return c.json({ error: '2FA required', code: '2fa_required' }, 403);
|
|
50
|
+
}
|
|
51
|
+
const isValid = await userService.validateTwoFactorLogin(user.id, code);
|
|
52
|
+
if (!isValid) {
|
|
53
|
+
analytics.trackAuthLogin({
|
|
54
|
+
requestId,
|
|
55
|
+
userId: user.id,
|
|
56
|
+
success: false,
|
|
57
|
+
});
|
|
58
|
+
return c.json({ error: 'Invalid 2FA code' }, 401);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Generate session token
|
|
62
|
+
const sessionToken = generateSessionToken();
|
|
63
|
+
analytics.trackAuthLogin({
|
|
64
|
+
requestId,
|
|
65
|
+
userId: user.id,
|
|
66
|
+
success: true,
|
|
67
|
+
});
|
|
68
|
+
// Store session in KV (expires in 24 hours)
|
|
69
|
+
await c.env.KV.put(`session:${sessionToken}`, JSON.stringify({
|
|
70
|
+
userId: user.id,
|
|
71
|
+
email: user.email,
|
|
72
|
+
role: user.role,
|
|
73
|
+
createdAt: Date.now(),
|
|
74
|
+
}), {
|
|
75
|
+
expirationTtl: 86400, // 24 hours
|
|
76
|
+
});
|
|
77
|
+
return c.json({
|
|
78
|
+
token: sessionToken,
|
|
79
|
+
user: {
|
|
80
|
+
id: user.id,
|
|
81
|
+
email: user.email,
|
|
82
|
+
role: user.role,
|
|
83
|
+
two_factor_enabled: user.two_factor_enabled,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* POST /api/auth/logout
|
|
89
|
+
* Invalidate session token
|
|
90
|
+
*/
|
|
91
|
+
export async function logoutRoute(c) {
|
|
92
|
+
const authHeader = c.req.header('Authorization');
|
|
93
|
+
if (authHeader?.startsWith('Bearer ')) {
|
|
94
|
+
const token = authHeader.slice(7);
|
|
95
|
+
await c.env.KV.delete(`session:${token}`);
|
|
96
|
+
}
|
|
97
|
+
return c.json({ message: 'Logged out' });
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* GET /api/auth/me
|
|
101
|
+
* Get current authenticated user
|
|
102
|
+
*/
|
|
103
|
+
export async function meRoute(c) {
|
|
104
|
+
const session = c.get('session');
|
|
105
|
+
if (!session) {
|
|
106
|
+
return c.json({ error: 'Not authenticated' }, 401);
|
|
107
|
+
}
|
|
108
|
+
// Refresh user data from DB to get latest status
|
|
109
|
+
const db = c.get('database');
|
|
110
|
+
const userService = new UserService(db);
|
|
111
|
+
const user = await userService.findById(session.userId);
|
|
112
|
+
if (!user) {
|
|
113
|
+
return c.json({ error: 'User not found' }, 404);
|
|
114
|
+
}
|
|
115
|
+
return c.json({
|
|
116
|
+
user: {
|
|
117
|
+
id: user.id,
|
|
118
|
+
email: user.email,
|
|
119
|
+
role: user.role,
|
|
120
|
+
two_factor_enabled: user.two_factor_enabled
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* POST /api/setup
|
|
126
|
+
* Create initial admin user
|
|
127
|
+
*/
|
|
128
|
+
export async function setupRoute(c) {
|
|
129
|
+
const db = c.get('database');
|
|
130
|
+
const userService = new UserService(db);
|
|
131
|
+
// Check if any user exists
|
|
132
|
+
const count = await userService.count();
|
|
133
|
+
if (count > 0) {
|
|
134
|
+
return c.json({ error: 'Setup already completed' }, 403);
|
|
135
|
+
}
|
|
136
|
+
let body;
|
|
137
|
+
try {
|
|
138
|
+
body = await c.req.json();
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return c.json({ error: 'Invalid JSON' }, 400);
|
|
142
|
+
}
|
|
143
|
+
const { email, password } = body;
|
|
144
|
+
if (!email || !password) {
|
|
145
|
+
return c.json({ error: 'Email and password required' }, 400);
|
|
146
|
+
}
|
|
147
|
+
// Create first admin
|
|
148
|
+
const user = await userService.create({
|
|
149
|
+
email,
|
|
150
|
+
password,
|
|
151
|
+
role: 'admin'
|
|
152
|
+
});
|
|
153
|
+
return c.json({
|
|
154
|
+
message: 'Setup complete',
|
|
155
|
+
user: {
|
|
156
|
+
id: user?.id,
|
|
157
|
+
email: user?.email
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* POST /api/auth/2fa/setup
|
|
163
|
+
* Start 2FA setup flow
|
|
164
|
+
*/
|
|
165
|
+
export async function setup2FARoute(c) {
|
|
166
|
+
const db = c.get('database');
|
|
167
|
+
const userService = new UserService(db);
|
|
168
|
+
const session = c.get('session');
|
|
169
|
+
// Generate new secret
|
|
170
|
+
const secret = await userService.setupTwoFactor(session.userId);
|
|
171
|
+
const qrCode = await userService.generateTwoFactorQrCode(session.email, secret);
|
|
172
|
+
return c.json({ secret, qrCode });
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* POST /api/auth/2fa/enable
|
|
176
|
+
* Confirm 2FA setup with code
|
|
177
|
+
*/
|
|
178
|
+
export async function enable2FARoute(c) {
|
|
179
|
+
const db = c.get('database');
|
|
180
|
+
const userService = new UserService(db);
|
|
181
|
+
const session = c.get('session');
|
|
182
|
+
let body;
|
|
183
|
+
try {
|
|
184
|
+
body = await c.req.json();
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return c.json({ error: 'Invalid JSON' }, 400);
|
|
188
|
+
}
|
|
189
|
+
const { secret, code } = body;
|
|
190
|
+
if (!secret || !code) {
|
|
191
|
+
return c.json({ error: 'Secret and code required' }, 400);
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
const recoveryCodes = await userService.enableTwoFactor(session.userId, secret, code);
|
|
195
|
+
return c.json({ recoveryCodes });
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
return c.json({ error: err.message }, 400);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* POST /api/auth/2fa/disable
|
|
203
|
+
* Disable 2FA
|
|
204
|
+
*/
|
|
205
|
+
export async function disable2FARoute(c) {
|
|
206
|
+
const db = c.get('database');
|
|
207
|
+
const userService = new UserService(db);
|
|
208
|
+
const session = c.get('session');
|
|
209
|
+
await userService.disableTwoFactor(session.userId);
|
|
210
|
+
return c.json({ message: '2FA disabled' });
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* POST /api/auth/invite/accept
|
|
214
|
+
* Accept invite and set password
|
|
215
|
+
*/
|
|
216
|
+
export async function acceptInviteRoute(c) {
|
|
217
|
+
const db = c.get('database');
|
|
218
|
+
const userService = new UserService(db);
|
|
219
|
+
let body;
|
|
220
|
+
try {
|
|
221
|
+
body = await c.req.json();
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
return c.json({ error: 'Invalid JSON' }, 400);
|
|
225
|
+
}
|
|
226
|
+
const { token, password } = body;
|
|
227
|
+
if (!token || !password) {
|
|
228
|
+
return c.json({ error: 'Token and password required' }, 400);
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
const user = await userService.acceptInvite(token, password);
|
|
232
|
+
return c.json({ message: 'Invite accepted', user: { email: user.email } });
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
return c.json({ error: err.message }, 400);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Middleware to verify session token
|
|
240
|
+
*/
|
|
241
|
+
export async function sessionMiddleware(c, next) {
|
|
242
|
+
const authHeader = c.req.header('Authorization');
|
|
243
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
244
|
+
return c.json({ error: 'Unauthorized', message: 'Session token required' }, 401);
|
|
245
|
+
}
|
|
246
|
+
const token = authHeader.slice(7);
|
|
247
|
+
// Check KV for session
|
|
248
|
+
const sessionData = await c.env.KV.get(`session:${token}`, 'json');
|
|
249
|
+
if (!sessionData) {
|
|
250
|
+
return c.json({ error: 'Unauthorized', message: 'Invalid or expired session' }, 401);
|
|
251
|
+
}
|
|
252
|
+
// Attach session to context
|
|
253
|
+
c.set('session', sessionData);
|
|
254
|
+
return await next();
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Check if auth is required / setup is needed
|
|
258
|
+
*/
|
|
259
|
+
export async function checkAuthRequired(c) {
|
|
260
|
+
const db = c.get('database');
|
|
261
|
+
const userService = new UserService(db);
|
|
262
|
+
const count = await userService.count();
|
|
263
|
+
return c.json({
|
|
264
|
+
authRequired: true,
|
|
265
|
+
setupRequired: count === 0
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/routes/api/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './repositories';
|
|
2
|
+
export * from './tokens';
|
|
3
|
+
export * from './packages';
|
|
4
|
+
export * from './stats';
|
|
5
|
+
export * from './artifacts';
|
|
6
|
+
export * from './auth';
|
|
7
|
+
export * from './users';
|
|
8
|
+
export * from './settings';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/api/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// API routes exports
|
|
2
|
+
export * from './repositories';
|
|
3
|
+
export * from './tokens';
|
|
4
|
+
export * from './packages';
|
|
5
|
+
export * from './stats';
|
|
6
|
+
export * from './artifacts';
|
|
7
|
+
export * from './auth';
|
|
8
|
+
export * from './users';
|
|
9
|
+
export * from './settings';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/api/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
import type { DatabasePort } from '../../ports';
|
|
3
|
+
import type { StorageDriver } from '../../storage/driver';
|
|
4
|
+
export interface PackagesRouteEnv {
|
|
5
|
+
Bindings: {
|
|
6
|
+
DB: D1Database;
|
|
7
|
+
KV: KVNamespace;
|
|
8
|
+
ENCRYPTION_KEY: string;
|
|
9
|
+
};
|
|
10
|
+
Variables: {
|
|
11
|
+
database: DatabasePort;
|
|
12
|
+
storage: StorageDriver;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* GET /api/packages
|
|
17
|
+
* List all packages (with optional search)
|
|
18
|
+
*/
|
|
19
|
+
export declare function listPackages(c: Context<PackagesRouteEnv>): Promise<Response>;
|
|
20
|
+
/**
|
|
21
|
+
* GET /api/packages/:name
|
|
22
|
+
* Get a single package with all versions
|
|
23
|
+
*/
|
|
24
|
+
export declare function getPackage(c: Context<PackagesRouteEnv>): Promise<Response>;
|
|
25
|
+
/**
|
|
26
|
+
* GET /api/packages/:name/:version/readme
|
|
27
|
+
* Get README.md content for a specific package version
|
|
28
|
+
* Uses R2/S3 storage instead of KV for better scalability
|
|
29
|
+
*/
|
|
30
|
+
export declare function getPackageReadme(c: Context<PackagesRouteEnv>): Promise<Response>;
|
|
31
|
+
/**
|
|
32
|
+
* GET /api/packages/:name/:version/changelog
|
|
33
|
+
* Get CHANGELOG.md content for a specific package version
|
|
34
|
+
* Uses R2/S3 storage instead of KV for better scalability
|
|
35
|
+
*/
|
|
36
|
+
export declare function getPackageChangelog(c: Context<PackagesRouteEnv>): Promise<Response>;
|
|
37
|
+
/**
|
|
38
|
+
* POST /api/packages/add-from-mirror
|
|
39
|
+
* Manually fetch and store packages from a selected mirror repository
|
|
40
|
+
*/
|
|
41
|
+
export declare function addPackagesFromMirror(c: Context<PackagesRouteEnv>): Promise<Response>;
|
|
42
|
+
/**
|
|
43
|
+
* POST /packages/cleanup-numeric-versions
|
|
44
|
+
* Temporary utility to fix versioning issues
|
|
45
|
+
*/
|
|
46
|
+
export declare function cleanupNumericVersions(c: Context<PackagesRouteEnv>): Promise<Response>;
|
|
47
|
+
//# sourceMappingURL=packages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../../../src/routes/api/packages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS1D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;QACf,EAAE,EAAE,WAAW,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;QACvB,OAAO,EAAE,aAAa,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgBlF;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoBhF;AA4ED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsRtF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqRzF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsF3F;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAI5F"}
|