@package-broker/core 0.17.4 → 0.19.7
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 +0 -1
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +0 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/memory-driver.d.ts +1 -1
- package/dist/cache/memory-driver.d.ts.map +1 -1
- package/dist/cache/memory-driver.js +4 -2
- package/dist/cache/memory-driver.js.map +1 -1
- package/dist/db/create-database.d.ts +8 -0
- package/dist/db/create-database.d.ts.map +1 -0
- package/dist/db/create-database.js +13 -0
- package/dist/db/create-database.js.map +1 -0
- package/dist/db/index.d.ts +0 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +0 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema.d.ts +557 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +72 -2
- package/dist/db/schema.js.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +22 -2
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/jobs/processor.d.ts.map +1 -1
- package/dist/jobs/processor.js +16 -6
- package/dist/jobs/processor.js.map +1 -1
- package/dist/kernel/container.d.ts +12 -0
- package/dist/kernel/container.d.ts.map +1 -0
- package/dist/kernel/container.js +43 -0
- package/dist/kernel/container.js.map +1 -0
- package/dist/kernel/events.d.ts +17 -0
- package/dist/kernel/events.d.ts.map +1 -0
- package/dist/kernel/events.js +54 -0
- package/dist/kernel/events.js.map +1 -0
- package/dist/kernel/hooks.d.ts +14 -0
- package/dist/kernel/hooks.d.ts.map +1 -0
- package/dist/kernel/hooks.js +31 -0
- package/dist/kernel/hooks.js.map +1 -0
- package/dist/kernel/index.d.ts +5 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +5 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/plugin.d.ts +21 -0
- package/dist/kernel/plugin.d.ts.map +1 -0
- package/dist/kernel/plugin.js +30 -0
- package/dist/kernel/plugin.js.map +1 -0
- package/dist/middleware/auth.d.ts +2 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +20 -5
- package/dist/middleware/auth.js.map +1 -1
- package/dist/modules/admin/admin.handlers.d.ts +1 -1
- package/dist/modules/admin/admin.handlers.d.ts.map +1 -1
- package/dist/modules/artifacts/artifacts.handlers.d.ts +1 -1
- package/dist/modules/artifacts/artifacts.handlers.d.ts.map +1 -1
- package/dist/modules/auth/auth.handlers.js +1 -1
- package/dist/modules/auth/auth.handlers.js.map +1 -1
- package/dist/modules/composer/index.d.ts.map +1 -1
- package/dist/modules/composer/index.js +5 -0
- package/dist/modules/composer/index.js.map +1 -1
- package/dist/modules/composer/tenant-composer.d.ts +32 -0
- package/dist/modules/composer/tenant-composer.d.ts.map +1 -0
- package/dist/modules/composer/tenant-composer.js +198 -0
- package/dist/modules/composer/tenant-composer.js.map +1 -0
- package/dist/modules/import/import.handlers.d.ts +4 -0
- package/dist/modules/import/import.handlers.d.ts.map +1 -0
- package/dist/modules/import/import.handlers.js +16 -0
- package/dist/modules/import/import.handlers.js.map +1 -0
- package/dist/{routes/api/openapi/settings.d.ts → modules/import/import.routes.d.ts} +20 -35
- package/dist/modules/import/import.routes.d.ts.map +1 -0
- package/dist/modules/import/import.routes.js +63 -0
- package/dist/modules/import/import.routes.js.map +1 -0
- package/dist/modules/import/index.d.ts +8 -0
- package/dist/modules/import/index.d.ts.map +1 -0
- package/dist/modules/import/index.js +8 -0
- package/dist/modules/import/index.js.map +1 -0
- package/dist/modules/organizations/index.d.ts +8 -0
- package/dist/modules/organizations/index.d.ts.map +1 -0
- package/dist/modules/organizations/index.js +22 -0
- package/dist/modules/organizations/index.js.map +1 -0
- package/dist/modules/organizations/organizations.handlers.d.ts +24 -0
- package/dist/modules/organizations/organizations.handlers.d.ts.map +1 -0
- package/dist/modules/organizations/organizations.handlers.js +278 -0
- package/dist/modules/organizations/organizations.handlers.js.map +1 -0
- package/dist/modules/organizations/organizations.routes.d.ts +596 -0
- package/dist/modules/organizations/organizations.routes.d.ts.map +1 -0
- package/dist/modules/organizations/organizations.routes.js +263 -0
- package/dist/modules/organizations/organizations.routes.js.map +1 -0
- package/dist/modules/packages/packages.handlers.d.ts +1 -1
- package/dist/modules/packages/packages.handlers.d.ts.map +1 -1
- package/dist/modules/packages/packages.handlers.js +3 -69
- package/dist/modules/packages/packages.handlers.js.map +1 -1
- package/dist/modules/repositories/repositories.handlers.d.ts +1 -1
- package/dist/modules/repositories/repositories.handlers.d.ts.map +1 -1
- package/dist/modules/repositories/repositories.handlers.js +74 -3
- package/dist/modules/repositories/repositories.handlers.js.map +1 -1
- package/dist/modules/repositories/repositories.routes.d.ts +12 -0
- package/dist/modules/repositories/repositories.routes.d.ts.map +1 -1
- package/dist/modules/system/index.d.ts.map +1 -1
- package/dist/modules/system/index.js +2 -1
- package/dist/modules/system/index.js.map +1 -1
- package/dist/modules/system/system.handlers.d.ts +11 -1
- package/dist/modules/system/system.handlers.d.ts.map +1 -1
- package/dist/modules/system/system.handlers.js +31 -1
- package/dist/modules/system/system.handlers.js.map +1 -1
- package/dist/modules/system/system.routes.d.ts +34 -4
- package/dist/modules/system/system.routes.d.ts.map +1 -1
- package/dist/modules/system/system.routes.js +21 -1
- package/dist/modules/system/system.routes.js.map +1 -1
- package/dist/modules/tenants/index.d.ts +8 -0
- package/dist/modules/tenants/index.d.ts.map +1 -0
- package/dist/modules/tenants/index.js +21 -0
- package/dist/modules/tenants/index.js.map +1 -0
- package/dist/modules/tenants/tenants.handlers.d.ts +24 -0
- package/dist/modules/tenants/tenants.handlers.d.ts.map +1 -0
- package/dist/modules/tenants/tenants.handlers.js +268 -0
- package/dist/modules/tenants/tenants.handlers.js.map +1 -0
- package/dist/modules/tenants/tenants.routes.d.ts +486 -0
- package/dist/modules/tenants/tenants.routes.d.ts.map +1 -0
- package/dist/modules/tenants/tenants.routes.js +227 -0
- package/dist/modules/tenants/tenants.routes.js.map +1 -0
- package/dist/modules/tokens/tokens.handlers.d.ts +1 -1
- package/dist/modules/tokens/tokens.handlers.d.ts.map +1 -1
- package/dist/modules/users/users.handlers.d.ts +1 -1
- package/dist/modules/users/users.handlers.d.ts.map +1 -1
- package/dist/modules/users/users.handlers.js +1 -1
- package/dist/modules/users/users.handlers.js.map +1 -1
- package/dist/plugins/security-advisories/advisory-db.d.ts +85 -0
- package/dist/plugins/security-advisories/advisory-db.d.ts.map +1 -0
- package/dist/plugins/security-advisories/advisory-db.js +161 -0
- package/dist/plugins/security-advisories/advisory-db.js.map +1 -0
- package/dist/plugins/security-advisories/advisory-service.d.ts +44 -0
- package/dist/plugins/security-advisories/advisory-service.d.ts.map +1 -0
- package/dist/plugins/security-advisories/advisory-service.js +122 -0
- package/dist/plugins/security-advisories/advisory-service.js.map +1 -0
- package/dist/plugins/security-advisories/advisory.handlers.d.ts +13 -0
- package/dist/plugins/security-advisories/advisory.handlers.d.ts.map +1 -0
- package/dist/plugins/security-advisories/advisory.handlers.js +87 -0
- package/dist/plugins/security-advisories/advisory.handlers.js.map +1 -0
- package/dist/plugins/security-advisories/advisory.module.d.ts +4 -0
- package/dist/plugins/security-advisories/advisory.module.d.ts.map +1 -0
- package/dist/plugins/security-advisories/advisory.module.js +13 -0
- package/dist/plugins/security-advisories/advisory.module.js.map +1 -0
- package/dist/plugins/security-advisories/advisory.routes.d.ts +73 -0
- package/dist/plugins/security-advisories/advisory.routes.d.ts.map +1 -0
- package/dist/plugins/security-advisories/advisory.routes.js +76 -0
- package/dist/plugins/security-advisories/advisory.routes.js.map +1 -0
- package/dist/plugins/security-advisories/index.d.ts +31 -0
- package/dist/plugins/security-advisories/index.d.ts.map +1 -0
- package/dist/plugins/security-advisories/index.js +100 -0
- package/dist/plugins/security-advisories/index.js.map +1 -0
- package/dist/ports.d.ts +39 -21
- package/dist/ports.d.ts.map +1 -1
- package/dist/queue/consumer.d.ts +0 -8
- package/dist/queue/consumer.d.ts.map +1 -1
- package/dist/queue/consumer.js +2 -23
- package/dist/queue/consumer.js.map +1 -1
- package/dist/queue/index.d.ts +2 -0
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +2 -0
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/memory-driver.d.ts +3 -2
- package/dist/queue/memory-driver.d.ts.map +1 -1
- package/dist/queue/memory-driver.js.map +1 -1
- package/dist/routes/composer.d.ts +7 -1
- package/dist/routes/composer.d.ts.map +1 -1
- package/dist/routes/composer.js +172 -70
- package/dist/routes/composer.js.map +1 -1
- package/dist/routes/dist.d.ts.map +1 -1
- package/dist/routes/dist.js +26 -80
- package/dist/routes/dist.js.map +1 -1
- package/dist/routes/index.d.ts +0 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +0 -1
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/package-revalidation.d.ts +38 -0
- package/dist/routes/package-revalidation.d.ts.map +1 -0
- package/dist/routes/package-revalidation.js +66 -0
- package/dist/routes/package-revalidation.js.map +1 -0
- package/dist/services/GitHubOrgImporter.d.ts +21 -0
- package/dist/services/GitHubOrgImporter.d.ts.map +1 -0
- package/dist/services/GitHubOrgImporter.js +51 -0
- package/dist/services/GitHubOrgImporter.js.map +1 -0
- package/dist/services/TokenScopeService.d.ts +15 -0
- package/dist/services/TokenScopeService.d.ts.map +1 -0
- package/dist/services/TokenScopeService.js +42 -0
- package/dist/services/TokenScopeService.js.map +1 -0
- package/dist/storage/index.d.ts +0 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +0 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/sync/repository-sync.d.ts.map +1 -1
- package/dist/sync/repository-sync.js +35 -23
- package/dist/sync/repository-sync.js.map +1 -1
- package/dist/sync/strategies/git-ssh.d.ts +17 -0
- package/dist/sync/strategies/git-ssh.d.ts.map +1 -0
- package/dist/sync/strategies/git-ssh.js +325 -0
- package/dist/sync/strategies/git-ssh.js.map +1 -0
- package/dist/{routes/api/types.d.ts → types/openapi.d.ts} +3 -4
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/{routes/api/types.js → types/openapi.js} +1 -1
- package/dist/types/openapi.js.map +1 -0
- package/dist/utils/background.d.ts +7 -0
- package/dist/utils/background.d.ts.map +1 -0
- package/dist/utils/background.js +11 -0
- package/dist/utils/background.js.map +1 -0
- package/dist/utils/environment.d.ts +15 -0
- package/dist/utils/environment.d.ts.map +1 -0
- package/dist/utils/environment.js +38 -0
- package/dist/utils/environment.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/package-filter.d.ts +7 -0
- package/dist/utils/package-filter.d.ts.map +1 -0
- package/dist/utils/package-filter.js +23 -0
- package/dist/utils/package-filter.js.map +1 -0
- package/dist/utils/package-validator.d.ts +3 -3
- package/dist/utils/package-validator.d.ts.map +1 -1
- package/dist/utils/package-validator.js +4 -37
- package/dist/utils/package-validator.js.map +1 -1
- package/dist/utils/upstream-fetch.d.ts +18 -0
- package/dist/utils/upstream-fetch.d.ts.map +1 -1
- package/dist/utils/upstream-fetch.js +76 -5
- package/dist/utils/upstream-fetch.js.map +1 -1
- package/dist/utils/zip-utils.d.ts +13 -0
- package/dist/utils/zip-utils.d.ts.map +1 -0
- package/dist/utils/zip-utils.js +66 -0
- package/dist/utils/zip-utils.js.map +1 -0
- package/dist/vcs/bitbucket-provider.d.ts +19 -0
- package/dist/vcs/bitbucket-provider.d.ts.map +1 -0
- package/dist/vcs/bitbucket-provider.js +249 -0
- package/dist/vcs/bitbucket-provider.js.map +1 -0
- package/dist/vcs/github-provider.d.ts +16 -0
- package/dist/vcs/github-provider.d.ts.map +1 -0
- package/dist/vcs/github-provider.js +117 -0
- package/dist/vcs/github-provider.js.map +1 -0
- package/dist/vcs/gitlab-provider.d.ts +17 -0
- package/dist/vcs/gitlab-provider.d.ts.map +1 -0
- package/dist/vcs/gitlab-provider.js +216 -0
- package/dist/vcs/gitlab-provider.js.map +1 -0
- package/dist/vcs/index.d.ts +10 -0
- package/dist/vcs/index.d.ts.map +1 -0
- package/dist/vcs/index.js +24 -0
- package/dist/vcs/index.js.map +1 -0
- package/dist/vcs/registry.d.ts +32 -0
- package/dist/vcs/registry.d.ts.map +1 -0
- package/dist/vcs/registry.js +47 -0
- package/dist/vcs/registry.js.map +1 -0
- package/dist/workflows/package-storage.d.ts.map +1 -1
- package/dist/workflows/package-storage.js +3 -3
- package/dist/workflows/package-storage.js.map +1 -1
- package/package.json +11 -8
- package/dist/cache/kv-driver.d.ts +0 -16
- package/dist/cache/kv-driver.d.ts.map +0 -1
- package/dist/cache/kv-driver.js +0 -23
- package/dist/cache/kv-driver.js.map +0 -1
- package/dist/db/d1-driver.d.ts +0 -3
- package/dist/db/d1-driver.d.ts.map +0 -1
- package/dist/db/d1-driver.js +0 -7
- package/dist/db/d1-driver.js.map +0 -1
- package/dist/routes/api/artifacts.d.ts +0 -27
- package/dist/routes/api/artifacts.d.ts.map +0 -1
- package/dist/routes/api/artifacts.js +0 -57
- package/dist/routes/api/artifacts.js.map +0 -1
- package/dist/routes/api/auth.d.ts +0 -52
- package/dist/routes/api/auth.d.ts.map +0 -1
- package/dist/routes/api/auth.js +0 -277
- package/dist/routes/api/auth.js.map +0 -1
- package/dist/routes/api/index.d.ts +0 -10
- package/dist/routes/api/index.d.ts.map +0 -1
- package/dist/routes/api/index.js +0 -11
- package/dist/routes/api/index.js.map +0 -1
- package/dist/routes/api/openapi/artifacts.d.ts +0 -80
- package/dist/routes/api/openapi/artifacts.d.ts.map +0 -1
- package/dist/routes/api/openapi/artifacts.js +0 -73
- package/dist/routes/api/openapi/artifacts.js.map +0 -1
- package/dist/routes/api/openapi/auth.d.ts +0 -187
- package/dist/routes/api/openapi/auth.d.ts.map +0 -1
- package/dist/routes/api/openapi/auth.js +0 -135
- package/dist/routes/api/openapi/auth.js.map +0 -1
- package/dist/routes/api/openapi/health.d.ts +0 -23
- package/dist/routes/api/openapi/health.d.ts.map +0 -1
- package/dist/routes/api/openapi/health.js +0 -25
- package/dist/routes/api/openapi/health.js.map +0 -1
- package/dist/routes/api/openapi/index.d.ts +0 -10
- package/dist/routes/api/openapi/index.d.ts.map +0 -1
- package/dist/routes/api/openapi/index.js +0 -16
- package/dist/routes/api/openapi/index.js.map +0 -1
- package/dist/routes/api/openapi/packages.d.ts +0 -172
- package/dist/routes/api/openapi/packages.d.ts.map +0 -1
- package/dist/routes/api/openapi/packages.js +0 -126
- package/dist/routes/api/openapi/packages.js.map +0 -1
- package/dist/routes/api/openapi/repositories.d.ts +0 -451
- package/dist/routes/api/openapi/repositories.d.ts.map +0 -1
- package/dist/routes/api/openapi/repositories.js +0 -238
- package/dist/routes/api/openapi/repositories.js.map +0 -1
- package/dist/routes/api/openapi/settings.d.ts.map +0 -1
- package/dist/routes/api/openapi/settings.js +0 -72
- package/dist/routes/api/openapi/settings.js.map +0 -1
- package/dist/routes/api/openapi/stats.d.ts +0 -59
- package/dist/routes/api/openapi/stats.d.ts.map +0 -1
- package/dist/routes/api/openapi/stats.js +0 -53
- package/dist/routes/api/openapi/stats.js.map +0 -1
- package/dist/routes/api/openapi/tokens.d.ts +0 -202
- package/dist/routes/api/openapi/tokens.d.ts.map +0 -1
- package/dist/routes/api/openapi/tokens.js +0 -132
- package/dist/routes/api/openapi/tokens.js.map +0 -1
- package/dist/routes/api/openapi/users.d.ts +0 -190
- package/dist/routes/api/openapi/users.d.ts.map +0 -1
- package/dist/routes/api/openapi/users.js +0 -126
- package/dist/routes/api/openapi/users.js.map +0 -1
- package/dist/routes/api/packages.d.ts +0 -50
- package/dist/routes/api/packages.d.ts.map +0 -1
- package/dist/routes/api/packages.js +0 -708
- package/dist/routes/api/packages.js.map +0 -1
- package/dist/routes/api/repositories.d.ts +0 -58
- package/dist/routes/api/repositories.d.ts.map +0 -1
- package/dist/routes/api/repositories.js +0 -321
- package/dist/routes/api/repositories.js.map +0 -1
- package/dist/routes/api/settings.d.ts +0 -29
- package/dist/routes/api/settings.d.ts.map +0 -1
- package/dist/routes/api/settings.js +0 -81
- package/dist/routes/api/settings.js.map +0 -1
- package/dist/routes/api/stats.d.ts +0 -21
- package/dist/routes/api/stats.d.ts.map +0 -1
- package/dist/routes/api/stats.js +0 -51
- package/dist/routes/api/stats.js.map +0 -1
- package/dist/routes/api/tokens.d.ts +0 -40
- package/dist/routes/api/tokens.d.ts.map +0 -1
- package/dist/routes/api/tokens.js +0 -187
- package/dist/routes/api/tokens.js.map +0 -1
- package/dist/routes/api/types.d.ts.map +0 -1
- package/dist/routes/api/types.js.map +0 -1
- package/dist/routes/api/users.d.ts +0 -6
- package/dist/routes/api/users.d.ts.map +0 -1
- package/dist/routes/api/users.js +0 -115
- package/dist/routes/api/users.js.map +0 -1
- package/dist/storage/r2-driver.d.ts +0 -16
- package/dist/storage/r2-driver.d.ts.map +0 -1
- package/dist/storage/r2-driver.js +0 -28
- package/dist/storage/r2-driver.js.map +0 -1
package/dist/routes/api/stats.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
// Stats API route
|
|
2
|
-
import { repositories, artifacts, packages } from '../../db/schema';
|
|
3
|
-
import { eq, sql, and } from 'drizzle-orm';
|
|
4
|
-
/**
|
|
5
|
-
* GET /api/stats
|
|
6
|
-
* Get dashboard statistics
|
|
7
|
-
*/
|
|
8
|
-
export async function getStats(c) {
|
|
9
|
-
const db = c.get('database');
|
|
10
|
-
// Active repositories count
|
|
11
|
-
const [activeReposResult] = await db
|
|
12
|
-
.select({ count: sql `count(*)` })
|
|
13
|
-
.from(repositories)
|
|
14
|
-
.where(eq(repositories.status, 'active'));
|
|
15
|
-
const activeRepos = activeReposResult?.count ?? 0;
|
|
16
|
-
// Total cached packages count
|
|
17
|
-
const [packagesResult] = await db.select({ count: sql `count(*)` }).from(packages);
|
|
18
|
-
const cachedPackages = packagesResult?.count ?? 0;
|
|
19
|
-
// Total downloads (sum of download_count from artifacts)
|
|
20
|
-
const [downloadsResult] = await db
|
|
21
|
-
.select({ total: sql `sum(${artifacts.download_count})` })
|
|
22
|
-
.from(artifacts);
|
|
23
|
-
const totalDownloads = downloadsResult?.total ?? 0;
|
|
24
|
-
return c.json({
|
|
25
|
-
active_repos: activeRepos,
|
|
26
|
-
cached_packages: cachedPackages,
|
|
27
|
-
total_downloads: totalDownloads,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* GET /packages/:name/:version/stats
|
|
32
|
-
* Get download stats for a specific package version
|
|
33
|
-
*/
|
|
34
|
-
export async function getPackageStats(c) {
|
|
35
|
-
const { name: nameParam, version } = c.req.valid('param');
|
|
36
|
-
const name = decodeURIComponent(nameParam);
|
|
37
|
-
const db = c.get('database');
|
|
38
|
-
const [artifact] = await db
|
|
39
|
-
.select({
|
|
40
|
-
downloads: artifacts.download_count,
|
|
41
|
-
last_downloaded: artifacts.last_downloaded_at
|
|
42
|
-
})
|
|
43
|
-
.from(artifacts)
|
|
44
|
-
.where(and(eq(artifacts.package_name, name), eq(artifacts.version, version)))
|
|
45
|
-
.limit(1);
|
|
46
|
-
return c.json({
|
|
47
|
-
downloads: artifact?.downloads || 0,
|
|
48
|
-
last_downloaded: artifact?.last_downloaded || null
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=stats.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/routes/api/stats.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAKlB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAW3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,CAAgC;IAC7D,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7B,4BAA4B;IAC5B,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,EAAE;SACjC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAQ,UAAU,EAAE,CAAC;SACxC,IAAI,CAAC,YAAY,CAAC;SAClB,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,iBAAiB,EAAE,KAAK,IAAI,CAAC,CAAC;IAElD,8BAA8B;IAC9B,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAQ,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1F,MAAM,cAAc,GAAG,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;IAElD,yDAAyD;IACzD,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,EAAE;SAC/B,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAQ,OAAO,SAAS,CAAC,cAAc,GAAG,EAAE,CAAC;SAChE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEnB,MAAM,cAAc,GAAG,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC;IAEnD,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,cAAc;QAC/B,eAAe,EAAE,cAAc;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAAgC;IACpE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE;SACxB,MAAM,CAAC;QACN,SAAS,EAAE,SAAS,CAAC,cAAc;QACnC,eAAe,EAAE,SAAS,CAAC,kBAAkB;KAC9C,CAAC;SACD,IAAI,CAAC,SAAS,CAAC;SACf,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,EAChC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAC/B,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAC;IAEZ,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,CAAC;QACnC,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,IAAI;KACnD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { OpenAPIContext } from './types';
|
|
2
|
-
import { createTokenSchema, updateTokenSchema } from '@package-broker/shared';
|
|
3
|
-
import type { DatabasePort } from '../../ports';
|
|
4
|
-
export interface TokensRouteEnv {
|
|
5
|
-
Bindings: {
|
|
6
|
-
DB: D1Database;
|
|
7
|
-
KV?: KVNamespace;
|
|
8
|
-
};
|
|
9
|
-
Variables: {
|
|
10
|
-
database: DatabasePort;
|
|
11
|
-
requestId?: string;
|
|
12
|
-
session?: {
|
|
13
|
-
userId: string;
|
|
14
|
-
email: string;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* GET /api/tokens
|
|
20
|
-
* List all tokens (without exposing actual tokens)
|
|
21
|
-
*/
|
|
22
|
-
export declare function listTokens(c: OpenAPIContext<TokensRouteEnv>): Promise<Response>;
|
|
23
|
-
/**
|
|
24
|
-
* POST /api/tokens
|
|
25
|
-
* Create a new token
|
|
26
|
-
* Returns the token ONCE - it cannot be retrieved again
|
|
27
|
-
*/
|
|
28
|
-
export declare function createToken(c: OpenAPIContext<TokensRouteEnv, ReturnType<typeof createTokenSchema.parse>>): Promise<Response>;
|
|
29
|
-
/**
|
|
30
|
-
* DELETE /api/tokens/:id
|
|
31
|
-
* Revoke a token
|
|
32
|
-
*/
|
|
33
|
-
export declare function deleteToken(c: OpenAPIContext<TokensRouteEnv>): Promise<Response>;
|
|
34
|
-
/**
|
|
35
|
-
* PATCH /api/tokens/:id
|
|
36
|
-
* Update token description and/or rate_limit_max
|
|
37
|
-
* Permissions cannot be changed after creation
|
|
38
|
-
*/
|
|
39
|
-
export declare function updateToken(c: OpenAPIContext<TokensRouteEnv, ReturnType<typeof updateTokenSchema.parse>>): Promise<Response>;
|
|
40
|
-
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/routes/api/tokens.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;QACf,EAAE,CAAC,EAAE,WAAW,CAAC;KAClB,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7C,CAAC;CACH;AAmBD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAerF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwDlI;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwBtF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmElI"}
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* PACKAGE.broker
|
|
3
|
-
* Copyright (C) 2025 Łukasz Bajsarowicz
|
|
4
|
-
* Licensed under AGPL-3.0
|
|
5
|
-
*/
|
|
6
|
-
import { tokens } from '../../db/schema';
|
|
7
|
-
import { eq } from 'drizzle-orm';
|
|
8
|
-
import { sha256 } from '@noble/hashes/sha2.js';
|
|
9
|
-
import { bytesToHex } from '@noble/hashes/utils.js';
|
|
10
|
-
import { nanoid, customAlphabet } from 'nanoid';
|
|
11
|
-
import { getAnalytics } from '../../utils/analytics';
|
|
12
|
-
// Generate high-entropy tokens (64 characters, URL-safe)
|
|
13
|
-
const generateToken = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 64);
|
|
14
|
-
/**
|
|
15
|
-
* Hash token using SHA-256
|
|
16
|
-
*/
|
|
17
|
-
function hashToken(token) {
|
|
18
|
-
const encoder = new TextEncoder();
|
|
19
|
-
const data = encoder.encode(token);
|
|
20
|
-
const hash = sha256(data);
|
|
21
|
-
return bytesToHex(hash);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Check if KV is available for rate limiting
|
|
25
|
-
*/
|
|
26
|
-
function isKvAvailableForRateLimiting(kv) {
|
|
27
|
-
return kv !== undefined && kv !== null;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* GET /api/tokens
|
|
31
|
-
* List all tokens (without exposing actual tokens)
|
|
32
|
-
*/
|
|
33
|
-
export async function listTokens(c) {
|
|
34
|
-
const db = c.get('database');
|
|
35
|
-
const allTokens = await db.select().from(tokens).orderBy(tokens.created_at);
|
|
36
|
-
const tokenList = allTokens.map((token) => ({
|
|
37
|
-
id: token.id,
|
|
38
|
-
description: token.description,
|
|
39
|
-
permissions: token.permissions || 'readonly', // Fallback for existing tokens
|
|
40
|
-
rate_limit_max: token.rate_limit_max,
|
|
41
|
-
created_at: token.created_at,
|
|
42
|
-
expires_at: token.expires_at,
|
|
43
|
-
last_used_at: token.last_used_at,
|
|
44
|
-
}));
|
|
45
|
-
return c.json(tokenList);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* POST /api/tokens
|
|
49
|
-
* Create a new token
|
|
50
|
-
* Returns the token ONCE - it cannot be retrieved again
|
|
51
|
-
*/
|
|
52
|
-
export async function createToken(c) {
|
|
53
|
-
const validated = c.req.valid('json');
|
|
54
|
-
// Validate: rate limiting requires KV
|
|
55
|
-
if (validated.rate_limit_max !== null &&
|
|
56
|
-
validated.rate_limit_max !== undefined &&
|
|
57
|
-
validated.rate_limit_max > 0) {
|
|
58
|
-
if (!isKvAvailableForRateLimiting(c.env.KV)) {
|
|
59
|
-
return c.json({
|
|
60
|
-
error: 'Bad Request',
|
|
61
|
-
message: 'Rate limiting requires KV namespace to be configured. Please set rate_limit_max to null or 0, or configure KV namespace in your wrangler.toml.'
|
|
62
|
-
}, 400);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const db = c.get('database');
|
|
66
|
-
const tokenId = nanoid();
|
|
67
|
-
const token = generateToken(); // Generate high-entropy token
|
|
68
|
-
const tokenHash = hashToken(token);
|
|
69
|
-
const rateLimitMax = validated.rate_limit_max && validated.rate_limit_max > 0 ? validated.rate_limit_max : null;
|
|
70
|
-
await db.insert(tokens).values({
|
|
71
|
-
id: tokenId,
|
|
72
|
-
description: validated.description,
|
|
73
|
-
token_hash: tokenHash,
|
|
74
|
-
permissions: validated.permissions || 'readonly',
|
|
75
|
-
rate_limit_max: rateLimitMax,
|
|
76
|
-
created_at: Math.floor(Date.now() / 1000),
|
|
77
|
-
expires_at: validated.expires_at || null,
|
|
78
|
-
});
|
|
79
|
-
// Track token creation
|
|
80
|
-
const analytics = getAnalytics();
|
|
81
|
-
const requestId = c.get('requestId');
|
|
82
|
-
const session = c.get('session');
|
|
83
|
-
analytics.trackTokenCreated({
|
|
84
|
-
requestId,
|
|
85
|
-
tokenId,
|
|
86
|
-
userId: session?.userId,
|
|
87
|
-
});
|
|
88
|
-
// Return token ONCE - it's never stored in plaintext
|
|
89
|
-
return c.json({
|
|
90
|
-
id: tokenId,
|
|
91
|
-
token: token, // Only time token is returned
|
|
92
|
-
description: validated.description,
|
|
93
|
-
permissions: validated.permissions || 'readonly',
|
|
94
|
-
rate_limit_max: rateLimitMax,
|
|
95
|
-
created_at: Math.floor(Date.now() / 1000),
|
|
96
|
-
expires_at: validated.expires_at || null,
|
|
97
|
-
}, 201);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* DELETE /api/tokens/:id
|
|
101
|
-
* Revoke a token
|
|
102
|
-
*/
|
|
103
|
-
export async function deleteToken(c) {
|
|
104
|
-
const { id } = c.req.valid('param');
|
|
105
|
-
const db = c.get('database');
|
|
106
|
-
// Check if exists
|
|
107
|
-
const [token] = await db.select().from(tokens).where(eq(tokens.id, id)).limit(1);
|
|
108
|
-
if (!token) {
|
|
109
|
-
return c.json({ error: 'Not Found', message: 'Token not found' }, 404);
|
|
110
|
-
}
|
|
111
|
-
await db.delete(tokens).where(eq(tokens.id, id));
|
|
112
|
-
// Track token revocation
|
|
113
|
-
const analytics = getAnalytics();
|
|
114
|
-
const requestId = c.get('requestId');
|
|
115
|
-
const session = c.get('session');
|
|
116
|
-
analytics.trackTokenDeleted({
|
|
117
|
-
requestId,
|
|
118
|
-
tokenId: id,
|
|
119
|
-
userId: session?.userId,
|
|
120
|
-
});
|
|
121
|
-
return c.json({ message: 'Token revoked' });
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* PATCH /api/tokens/:id
|
|
125
|
-
* Update token description and/or rate_limit_max
|
|
126
|
-
* Permissions cannot be changed after creation
|
|
127
|
-
*/
|
|
128
|
-
export async function updateToken(c) {
|
|
129
|
-
const { id } = c.req.valid('param');
|
|
130
|
-
const validated = c.req.valid('json');
|
|
131
|
-
// Validate: rate limiting requires KV
|
|
132
|
-
if (validated.rate_limit_max !== null &&
|
|
133
|
-
validated.rate_limit_max !== undefined &&
|
|
134
|
-
validated.rate_limit_max > 0) {
|
|
135
|
-
if (!isKvAvailableForRateLimiting(c.env.KV)) {
|
|
136
|
-
return c.json({
|
|
137
|
-
error: 'Bad Request',
|
|
138
|
-
message: 'Rate limiting requires KV namespace to be configured. Please set rate_limit_max to null or 0, or configure KV namespace in your wrangler.toml.'
|
|
139
|
-
}, 400);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
const db = c.get('database');
|
|
143
|
-
// Check if token exists
|
|
144
|
-
const [token] = await db.select().from(tokens).where(eq(tokens.id, id)).limit(1);
|
|
145
|
-
if (!token) {
|
|
146
|
-
return c.json({ error: 'Not Found', message: 'Token not found' }, 404);
|
|
147
|
-
}
|
|
148
|
-
// Build update object - only update provided fields
|
|
149
|
-
const updateData = {};
|
|
150
|
-
if (validated.description !== undefined) {
|
|
151
|
-
updateData.description = validated.description;
|
|
152
|
-
}
|
|
153
|
-
if (validated.rate_limit_max !== undefined) {
|
|
154
|
-
updateData.rate_limit_max =
|
|
155
|
-
validated.rate_limit_max && validated.rate_limit_max > 0 ? validated.rate_limit_max : null;
|
|
156
|
-
}
|
|
157
|
-
// Only update if there are fields to update
|
|
158
|
-
if (Object.keys(updateData).length > 0) {
|
|
159
|
-
await db
|
|
160
|
-
.update(tokens)
|
|
161
|
-
.set(updateData)
|
|
162
|
-
.where(eq(tokens.id, id));
|
|
163
|
-
}
|
|
164
|
-
// Fetch updated token
|
|
165
|
-
const [updatedToken] = await db.select().from(tokens).where(eq(tokens.id, id)).limit(1);
|
|
166
|
-
// Track token update (if analytics method exists)
|
|
167
|
-
const analytics = getAnalytics();
|
|
168
|
-
const requestId = c.get('requestId');
|
|
169
|
-
const session = c.get('session');
|
|
170
|
-
if (typeof analytics.trackTokenUpdated === 'function') {
|
|
171
|
-
analytics.trackTokenUpdated({
|
|
172
|
-
requestId,
|
|
173
|
-
tokenId: id,
|
|
174
|
-
userId: session?.userId,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
return c.json({
|
|
178
|
-
id: updatedToken.id,
|
|
179
|
-
description: updatedToken.description,
|
|
180
|
-
permissions: updatedToken.permissions || 'readonly',
|
|
181
|
-
rate_limit_max: updatedToken.rate_limit_max,
|
|
182
|
-
created_at: updatedToken.created_at,
|
|
183
|
-
expires_at: updatedToken.expires_at,
|
|
184
|
-
last_used_at: updatedToken.last_used_at,
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
//# sourceMappingURL=tokens.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/routes/api/tokens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,yDAAyD;AACzD,MAAM,aAAa,GAAG,cAAc,CAAC,gEAAgE,EAAE,EAAE,CAAC,CAAC;AAc3G;;GAEG;AACH,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CAAC,EAA2B;IAC/D,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAiC;IAChE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE5E,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;QAC/C,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,UAAU,EAAE,+BAA+B;QAC7E,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAA6E;IAC7G,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtC,sCAAsC;IACtC,IAAI,SAAS,CAAC,cAAc,KAAK,IAAI;QACnC,SAAS,CAAC,cAAc,KAAK,SAAS;QACtC,SAAS,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,gJAAgJ;aAC1J,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,CAAC,8BAA8B;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,YAAY,GAChB,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7F,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAC7B,EAAE,EAAE,OAAO;QACX,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,UAAU,EAAE,SAAS;QACrB,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,UAAU;QAChD,cAAc,EAAE,YAAY;QAC5B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACzC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;KACzC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAuB,CAAC;IAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAkD,CAAC;IAClF,SAAS,CAAC,iBAAiB,CAAC;QAC1B,SAAS;QACT,OAAO;QACP,MAAM,EAAE,OAAO,EAAE,MAAM;KACxB,CAAC,CAAC;IAEH,qDAAqD;IACrD,OAAO,CAAC,CAAC,IAAI,CACX;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,KAAK,EAAE,8BAA8B;QAC5C,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,UAAU;QAChD,cAAc,EAAE,YAAY;QAC5B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACzC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;KACzC,EACD,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAAiC;IACjE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7B,kBAAkB;IAClB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEjD,yBAAyB;IACzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAuB,CAAC;IAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAkD,CAAC;IAClF,SAAS,CAAC,iBAAiB,CAAC;QAC1B,SAAS;QACT,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,OAAO,EAAE,MAAM;KACxB,CAAC,CAAC;IAEH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAA6E;IAC7G,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtC,sCAAsC;IACtC,IAAI,SAAS,CAAC,cAAc,KAAK,IAAI;QACnC,SAAS,CAAC,cAAc,KAAK,SAAS;QACtC,SAAS,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,gJAAgJ;aAC1J,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7B,wBAAwB;IACxB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,oDAAoD;IACpD,MAAM,UAAU,GAAwC,EAAE,CAAC;IAC3D,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACxC,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC3C,UAAU,CAAC,cAAc;YACvB,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,CAAC;IAED,4CAA4C;IAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,EAAE;aACL,MAAM,CAAC,MAAM,CAAC;aACd,GAAG,CAAC,UAAU,CAAC;aACf,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,sBAAsB;IACtB,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAExF,kDAAkD;IAClD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAuB,CAAC;IAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAkD,CAAC;IAClF,IAAI,OAAQ,SAAiB,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC9D,SAAiB,CAAC,iBAAiB,CAAC;YACnC,SAAS;YACT,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,EAAE,EAAE,YAAY,CAAC,EAAE;QACnB,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,UAAU;QACnD,cAAc,EAAE,YAAY,CAAC,cAAc;QAC3C,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,YAAY,EAAE,YAAY,CAAC,YAAY;KACxC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/routes/api/types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG;IAClK,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG;QAC1B,KAAK,EAAE;YACL,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;YACrB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;YACvB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;YACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACpB,CAAC;KACH,CAAC;CACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/routes/api/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { OpenAPIContext } from './types';
|
|
2
|
-
import { createUserRequestSchema } from '@package-broker/shared';
|
|
3
|
-
export declare function listUsers(c: OpenAPIContext): Promise<Response>;
|
|
4
|
-
export declare function createUser(c: OpenAPIContext<any, ReturnType<typeof createUserRequestSchema.parse>>): Promise<Response>;
|
|
5
|
-
export declare function deleteUser(c: OpenAPIContext): Promise<Response>;
|
|
6
|
-
//# sourceMappingURL=users.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/routes/api/users.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,wBAAsB,SAAS,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAYpE;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4F5H;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBrE"}
|
package/dist/routes/api/users.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { UserService } from '../../services/UserService';
|
|
2
|
-
export async function listUsers(c) {
|
|
3
|
-
const db = c.get('database');
|
|
4
|
-
const userService = new UserService(db);
|
|
5
|
-
// Check permissions (must be admin)
|
|
6
|
-
const session = c.get('session');
|
|
7
|
-
if (session.role !== 'admin') {
|
|
8
|
-
return c.json({ error: 'Forbidden' }, 403);
|
|
9
|
-
}
|
|
10
|
-
const users = await userService.list();
|
|
11
|
-
return c.json({ users });
|
|
12
|
-
}
|
|
13
|
-
export async function createUser(c) {
|
|
14
|
-
const db = c.get('database');
|
|
15
|
-
const userService = new UserService(db);
|
|
16
|
-
// Check permissions
|
|
17
|
-
const session = c.get('session');
|
|
18
|
-
if (session.role !== 'admin') {
|
|
19
|
-
return c.json({ error: 'Forbidden' }, 403);
|
|
20
|
-
}
|
|
21
|
-
const body = c.req.valid('json');
|
|
22
|
-
const { email, password, role } = body;
|
|
23
|
-
try {
|
|
24
|
-
const user = await userService.create({
|
|
25
|
-
email,
|
|
26
|
-
password,
|
|
27
|
-
role: role || 'viewer',
|
|
28
|
-
});
|
|
29
|
-
// Send invite email if SMTP is configured
|
|
30
|
-
if (c.env.SMTP_HOST && c.env.SMTP_USER && c.env.SMTP_PASS) {
|
|
31
|
-
try {
|
|
32
|
-
const { EmailService } = await import('../../services/EmailService');
|
|
33
|
-
const emailService = new EmailService({
|
|
34
|
-
host: c.env.SMTP_HOST,
|
|
35
|
-
port: parseInt(c.env.SMTP_PORT || '587'),
|
|
36
|
-
user: c.env.SMTP_USER,
|
|
37
|
-
pass: c.env.SMTP_PASS,
|
|
38
|
-
from: c.env.SMTP_FROM || c.env.SMTP_USER,
|
|
39
|
-
});
|
|
40
|
-
const subject = 'Welcome to Composer Proxy';
|
|
41
|
-
let text = '';
|
|
42
|
-
let html = '';
|
|
43
|
-
if (user?.invite_token) {
|
|
44
|
-
// Invite Flow
|
|
45
|
-
const origin = c.req.header('origin') || new URL(c.req.url).origin;
|
|
46
|
-
const inviteLink = `${origin}/invite/${user.invite_token}`;
|
|
47
|
-
text = `You have been invited to the Composer Proxy.\n\nPlease accept the invitation and set your password here:\n${inviteLink}`;
|
|
48
|
-
html = `
|
|
49
|
-
<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto; color: #334155;">
|
|
50
|
-
<h2 style="color: #0f172a;">Welcome to Composer Proxy</h2>
|
|
51
|
-
<p>You have been invited to join the Composer Proxy.</p>
|
|
52
|
-
<p>Please click the button below to accept the invitation and set your password:</p>
|
|
53
|
-
<p style="margin: 24px 0;">
|
|
54
|
-
<a href="${inviteLink}" style="background-color: #f97316; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; display: inline-block; font-weight: bold;">Accept Invitation</a>
|
|
55
|
-
</p>
|
|
56
|
-
<p style="font-size: 0.9em; color: #64748b;">Or copy this link to your browser: <br> ${inviteLink}</p>
|
|
57
|
-
<p style="font-size: 0.8em; color: #94a3b8; margin-top: 40px; border-top: 1px solid #e2e8f0; padding-top: 20px;">
|
|
58
|
-
This invite expires in 7 days.
|
|
59
|
-
</p>
|
|
60
|
-
</div>
|
|
61
|
-
`;
|
|
62
|
-
}
|
|
63
|
-
else if (password) {
|
|
64
|
-
// Legacy/Manual Password Flow (if admin provided password)
|
|
65
|
-
text = `You have been invited to the Composer Proxy.\n\nYour temporary password is: ${password}\n\nPlease log in and change your password immediately.`;
|
|
66
|
-
html = `
|
|
67
|
-
<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto; color: #334155;">
|
|
68
|
-
<h2>Welcome to Composer Proxy</h2>
|
|
69
|
-
<p>You have been invited to the Composer Proxy.</p>
|
|
70
|
-
<p>Your temporary password is: <strong>${password}</strong></p>
|
|
71
|
-
<p>Please log in and change your password immediately.</p>
|
|
72
|
-
</div>
|
|
73
|
-
`;
|
|
74
|
-
}
|
|
75
|
-
if (text && html) {
|
|
76
|
-
await emailService.send({ to: email, subject, text, html });
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (emailError) {
|
|
80
|
-
console.error('Failed to send invite email:', emailError);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return c.json({
|
|
84
|
-
message: 'User created',
|
|
85
|
-
user: {
|
|
86
|
-
id: user?.id,
|
|
87
|
-
email: user?.email,
|
|
88
|
-
role: user?.role
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
if (error.message === 'User already exists') {
|
|
94
|
-
return c.json({ error: 'User already exists' }, 409);
|
|
95
|
-
}
|
|
96
|
-
return c.json({ error: 'Failed to create user' }, 500);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export async function deleteUser(c) {
|
|
100
|
-
const db = c.get('database');
|
|
101
|
-
const userService = new UserService(db);
|
|
102
|
-
const { id: userId } = c.req.valid('param');
|
|
103
|
-
// Check permissions
|
|
104
|
-
const session = c.get('session');
|
|
105
|
-
if (session.role !== 'admin') {
|
|
106
|
-
return c.json({ error: 'Forbidden' }, 403);
|
|
107
|
-
}
|
|
108
|
-
// Prevent self-deletion
|
|
109
|
-
if (session.userId === userId) {
|
|
110
|
-
return c.json({ error: 'Cannot delete own account' }, 400);
|
|
111
|
-
}
|
|
112
|
-
await userService.delete(userId);
|
|
113
|
-
return c.json({ message: 'User deleted' });
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=users.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/routes/api/users.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { StorageDriver } from './driver';
|
|
2
|
-
export interface R2DriverConfig {
|
|
3
|
-
bucket: R2Bucket;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* R2 storage driver implementation
|
|
7
|
-
*/
|
|
8
|
-
export declare class R2Driver implements StorageDriver {
|
|
9
|
-
private config;
|
|
10
|
-
constructor(config: R2DriverConfig);
|
|
11
|
-
get(key: string): Promise<ReadableStream | null>;
|
|
12
|
-
put(key: string, data: ReadableStream | ArrayBuffer | Uint8Array): Promise<void>;
|
|
13
|
-
delete(key: string): Promise<void>;
|
|
14
|
-
exists(key: string): Promise<boolean>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=r2-driver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"r2-driver.d.ts","sourceRoot":"","sources":["../../src/storage/r2-driver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,QAAS,YAAW,aAAa;IAChC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAI5C"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// Cloudflare R2 storage driver
|
|
2
|
-
/**
|
|
3
|
-
* R2 storage driver implementation
|
|
4
|
-
*/
|
|
5
|
-
export class R2Driver {
|
|
6
|
-
config;
|
|
7
|
-
constructor(config) {
|
|
8
|
-
this.config = config;
|
|
9
|
-
}
|
|
10
|
-
async get(key) {
|
|
11
|
-
const object = await this.config.bucket.get(key);
|
|
12
|
-
if (!object) {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
return object.body;
|
|
16
|
-
}
|
|
17
|
-
async put(key, data) {
|
|
18
|
-
await this.config.bucket.put(key, data);
|
|
19
|
-
}
|
|
20
|
-
async delete(key) {
|
|
21
|
-
await this.config.bucket.delete(key);
|
|
22
|
-
}
|
|
23
|
-
async exists(key) {
|
|
24
|
-
const object = await this.config.bucket.head(key);
|
|
25
|
-
return object !== null;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=r2-driver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"r2-driver.js","sourceRoot":"","sources":["../../src/storage/r2-driver.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAQ/B;;GAEG;AACH,MAAM,OAAO,QAAQ;IACC;IAApB,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAE9C,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAA+C;QACpE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,MAAM,KAAK,IAAI,CAAC;IACzB,CAAC;CACF"}
|