@package-broker/core 0.7.2 → 0.8.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/factory.d.ts +2 -2
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +186 -66
- package/dist/factory.js.map +1 -1
- package/dist/modules/admin/admin.handlers.d.ts +25 -0
- package/dist/modules/admin/admin.handlers.d.ts.map +1 -0
- package/dist/modules/admin/admin.handlers.js +97 -0
- package/dist/modules/admin/admin.handlers.js.map +1 -0
- package/dist/modules/admin/admin.routes.d.ts +147 -0
- package/dist/modules/admin/admin.routes.d.ts.map +1 -0
- package/dist/modules/admin/admin.routes.js +130 -0
- package/dist/modules/admin/admin.routes.js.map +1 -0
- package/dist/modules/admin/index.d.ts +9 -0
- package/dist/modules/admin/index.d.ts.map +1 -0
- package/dist/modules/admin/index.js +19 -0
- package/dist/modules/admin/index.js.map +1 -0
- package/dist/modules/artifacts/artifacts.handlers.d.ts +18 -0
- package/dist/modules/artifacts/artifacts.handlers.d.ts.map +1 -0
- package/dist/modules/artifacts/artifacts.handlers.js +47 -0
- package/dist/modules/artifacts/artifacts.handlers.js.map +1 -0
- package/dist/modules/artifacts/artifacts.routes.d.ts +80 -0
- package/dist/modules/artifacts/artifacts.routes.d.ts.map +1 -0
- package/dist/modules/artifacts/artifacts.routes.js +79 -0
- package/dist/modules/artifacts/artifacts.routes.js.map +1 -0
- package/dist/modules/artifacts/index.d.ts +8 -0
- package/dist/modules/artifacts/index.d.ts.map +1 -0
- package/dist/modules/artifacts/index.js +14 -0
- package/dist/modules/artifacts/index.js.map +1 -0
- package/dist/modules/auth/auth.handlers.d.ts +51 -0
- package/dist/modules/auth/auth.handlers.d.ts.map +1 -0
- package/dist/modules/auth/auth.handlers.js +278 -0
- package/dist/modules/auth/auth.handlers.js.map +1 -0
- package/dist/modules/auth/auth.routes.d.ts +187 -0
- package/dist/modules/auth/auth.routes.d.ts.map +1 -0
- package/dist/modules/auth/auth.routes.js +136 -0
- package/dist/modules/auth/auth.routes.js.map +1 -0
- package/dist/modules/auth/index.d.ts +11 -0
- package/dist/modules/auth/index.d.ts.map +1 -0
- package/dist/modules/auth/index.js +34 -0
- package/dist/modules/auth/index.js.map +1 -0
- package/dist/modules/composer/composer.handlers.d.ts +3 -0
- package/dist/modules/composer/composer.handlers.d.ts.map +1 -0
- package/dist/modules/composer/composer.handlers.js +12 -0
- package/dist/modules/composer/composer.handlers.js.map +1 -0
- package/dist/modules/composer/index.d.ts +11 -0
- package/dist/modules/composer/index.d.ts.map +1 -0
- package/dist/modules/composer/index.js +40 -0
- package/dist/modules/composer/index.js.map +1 -0
- package/dist/modules/packages/index.d.ts +8 -0
- package/dist/modules/packages/index.d.ts.map +1 -0
- package/dist/modules/packages/index.js +19 -0
- package/dist/modules/packages/index.js.map +1 -0
- package/dist/modules/packages/packages.handlers.d.ts +50 -0
- package/dist/modules/packages/packages.handlers.d.ts.map +1 -0
- package/dist/modules/packages/packages.handlers.js +670 -0
- package/dist/modules/packages/packages.handlers.js.map +1 -0
- package/dist/modules/packages/packages.routes.d.ts +172 -0
- package/dist/modules/packages/packages.routes.d.ts.map +1 -0
- package/dist/modules/packages/packages.routes.js +160 -0
- package/dist/modules/packages/packages.routes.js.map +1 -0
- package/dist/modules/repositories/index.d.ts +8 -0
- package/dist/modules/repositories/index.d.ts.map +1 -0
- package/dist/modules/repositories/index.js +19 -0
- package/dist/modules/repositories/index.js.map +1 -0
- package/dist/modules/repositories/repositories.handlers.d.ts +29 -0
- package/dist/modules/repositories/repositories.handlers.d.ts.map +1 -0
- package/dist/modules/repositories/repositories.handlers.js +261 -0
- package/dist/modules/repositories/repositories.handlers.js.map +1 -0
- package/dist/modules/repositories/repositories.routes.d.ts +451 -0
- package/dist/modules/repositories/repositories.routes.d.ts.map +1 -0
- package/dist/modules/repositories/repositories.routes.js +264 -0
- package/dist/modules/repositories/repositories.routes.js.map +1 -0
- package/dist/modules/system/index.d.ts +8 -0
- package/dist/modules/system/index.d.ts.map +1 -0
- package/dist/modules/system/index.js +13 -0
- package/dist/modules/system/index.js.map +1 -0
- package/dist/modules/system/system.handlers.d.ts +9 -0
- package/dist/modules/system/system.handlers.d.ts.map +1 -0
- package/dist/modules/system/system.handlers.js +22 -0
- package/dist/modules/system/system.handlers.js.map +1 -0
- package/dist/modules/system/system.routes.d.ts +24 -0
- package/dist/modules/system/system.routes.d.ts.map +1 -0
- package/dist/modules/system/system.routes.js +27 -0
- package/dist/modules/system/system.routes.js.map +1 -0
- package/dist/modules/tokens/index.d.ts +8 -0
- package/dist/modules/tokens/index.d.ts.map +1 -0
- package/dist/modules/tokens/index.js +16 -0
- package/dist/modules/tokens/index.js.map +1 -0
- package/dist/modules/tokens/tokens.handlers.d.ts +22 -0
- package/dist/modules/tokens/tokens.handlers.d.ts.map +1 -0
- package/dist/modules/tokens/tokens.handlers.js +150 -0
- package/dist/modules/tokens/tokens.handlers.js.map +1 -0
- package/dist/modules/tokens/tokens.routes.d.ts +202 -0
- package/dist/modules/tokens/tokens.routes.d.ts.map +1 -0
- package/dist/modules/tokens/tokens.routes.js +143 -0
- package/dist/modules/tokens/tokens.routes.js.map +1 -0
- package/dist/modules/users/index.d.ts +8 -0
- package/dist/modules/users/index.d.ts.map +1 -0
- package/dist/modules/users/index.js +15 -0
- package/dist/modules/users/index.js.map +1 -0
- package/dist/modules/users/users.handlers.d.ts +6 -0
- package/dist/modules/users/users.handlers.d.ts.map +1 -0
- package/dist/modules/users/users.handlers.js +120 -0
- package/dist/modules/users/users.handlers.js.map +1 -0
- package/dist/modules/users/users.routes.d.ts +190 -0
- package/dist/modules/users/users.routes.d.ts.map +1 -0
- package/dist/modules/users/users.routes.js +132 -0
- package/dist/modules/users/users.routes.js.map +1 -0
- package/dist/routes/api/artifacts.d.ts +5 -3
- package/dist/routes/api/artifacts.d.ts.map +1 -1
- package/dist/routes/api/artifacts.js +2 -2
- package/dist/routes/api/artifacts.js.map +1 -1
- package/dist/routes/api/auth.d.ts +5 -3
- package/dist/routes/api/auth.d.ts.map +1 -1
- package/dist/routes/api/auth.js +2 -12
- package/dist/routes/api/auth.js.map +1 -1
- package/dist/routes/api/index.d.ts +1 -0
- package/dist/routes/api/index.d.ts.map +1 -1
- package/dist/routes/api/index.js +1 -0
- package/dist/routes/api/index.js.map +1 -1
- package/dist/routes/api/openapi/artifacts.d.ts +80 -0
- package/dist/routes/api/openapi/artifacts.d.ts.map +1 -0
- package/dist/routes/api/openapi/artifacts.js +73 -0
- package/dist/routes/api/openapi/artifacts.js.map +1 -0
- package/dist/routes/api/openapi/auth.d.ts +187 -0
- package/dist/routes/api/openapi/auth.d.ts.map +1 -0
- package/dist/routes/api/openapi/auth.js +135 -0
- package/dist/routes/api/openapi/auth.js.map +1 -0
- package/dist/routes/api/openapi/health.d.ts +24 -0
- package/dist/routes/api/openapi/health.d.ts.map +1 -0
- package/dist/routes/api/openapi/health.js +25 -0
- package/dist/routes/api/openapi/health.js.map +1 -0
- package/dist/routes/api/openapi/index.d.ts +10 -0
- package/dist/routes/api/openapi/index.d.ts.map +1 -0
- package/dist/routes/api/openapi/index.js +16 -0
- package/dist/routes/api/openapi/index.js.map +1 -0
- package/dist/routes/api/openapi/packages.d.ts +172 -0
- package/dist/routes/api/openapi/packages.d.ts.map +1 -0
- package/dist/routes/api/openapi/packages.js +126 -0
- package/dist/routes/api/openapi/packages.js.map +1 -0
- package/dist/routes/api/openapi/repositories.d.ts +451 -0
- package/dist/routes/api/openapi/repositories.d.ts.map +1 -0
- package/dist/routes/api/openapi/repositories.js +238 -0
- package/dist/routes/api/openapi/repositories.js.map +1 -0
- package/dist/routes/api/openapi/settings.d.ts +90 -0
- package/dist/routes/api/openapi/settings.d.ts.map +1 -0
- package/dist/routes/api/openapi/settings.js +72 -0
- package/dist/routes/api/openapi/settings.js.map +1 -0
- package/dist/routes/api/openapi/stats.d.ts +59 -0
- package/dist/routes/api/openapi/stats.d.ts.map +1 -0
- package/dist/routes/api/openapi/stats.js +53 -0
- package/dist/routes/api/openapi/stats.js.map +1 -0
- package/dist/routes/api/openapi/tokens.d.ts +202 -0
- package/dist/routes/api/openapi/tokens.d.ts.map +1 -0
- package/dist/routes/api/openapi/tokens.js +132 -0
- package/dist/routes/api/openapi/tokens.js.map +1 -0
- package/dist/routes/api/openapi/users.d.ts +190 -0
- package/dist/routes/api/openapi/users.d.ts.map +1 -0
- package/dist/routes/api/openapi/users.js +126 -0
- package/dist/routes/api/openapi/users.js.map +1 -0
- package/dist/routes/api/packages.d.ts +7 -4
- package/dist/routes/api/packages.d.ts.map +1 -1
- package/dist/routes/api/packages.js +6 -7
- package/dist/routes/api/packages.js.map +1 -1
- package/dist/routes/api/repositories.d.ts +8 -6
- package/dist/routes/api/repositories.d.ts.map +1 -1
- package/dist/routes/api/repositories.js +18 -22
- package/dist/routes/api/repositories.js.map +1 -1
- package/dist/routes/api/settings.d.ts +4 -3
- package/dist/routes/api/settings.d.ts.map +1 -1
- package/dist/routes/api/settings.js +1 -1
- package/dist/routes/api/settings.js.map +1 -1
- package/dist/routes/api/stats.d.ts +3 -3
- package/dist/routes/api/stats.d.ts.map +1 -1
- package/dist/routes/api/stats.js +1 -2
- package/dist/routes/api/stats.js.map +1 -1
- package/dist/routes/api/tokens.d.ts +6 -5
- package/dist/routes/api/tokens.d.ts.map +1 -1
- package/dist/routes/api/tokens.js +4 -7
- package/dist/routes/api/tokens.js.map +1 -1
- package/dist/routes/api/types.d.ts +17 -0
- package/dist/routes/api/types.d.ts.map +1 -0
- package/dist/routes/api/types.js +7 -0
- package/dist/routes/api/types.js.map +1 -0
- package/dist/routes/api/users.d.ts +5 -4
- package/dist/routes/api/users.d.ts.map +1 -1
- package/dist/routes/api/users.js +2 -12
- package/dist/routes/api/users.js.map +1 -1
- package/dist/routes/composer.js +1 -1
- package/dist/routes/composer.js.map +1 -1
- package/dist/routes/health.d.ts +3 -1
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js.map +1 -1
- package/package.json +3 -2
package/dist/factory.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OpenAPIHono } from '@hono/zod-openapi';
|
|
2
2
|
import { type StorageDriver, type DatabasePort, type CachePort } from './index';
|
|
3
3
|
export interface AppBindings {
|
|
4
4
|
DB?: any;
|
|
@@ -18,7 +18,7 @@ export interface AppVariables {
|
|
|
18
18
|
email: string;
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
export type AppInstance =
|
|
21
|
+
export type AppInstance = OpenAPIHono<{
|
|
22
22
|
Bindings: AppBindings;
|
|
23
23
|
Variables: AppVariables;
|
|
24
24
|
}>;
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAMH,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACjB,MAAM,SAAS,CAAC;AAcjB,MAAM,WAAW,WAAW;IAExB,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,SAAS,CAAC,EAAE,GAAG,CAAC;IAEhB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAE1F;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE;IAChC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACvC,GAAG,WAAW,CAyQd"}
|
package/dist/factory.js
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OpenAPIHono } from '@hono/zod-openapi';
|
|
2
2
|
import { cors } from 'hono/cors';
|
|
3
|
-
import {
|
|
3
|
+
import { VERSION } from '@package-broker/shared';
|
|
4
|
+
import { requestIdMiddleware, getLogger, } from './index';
|
|
5
|
+
import authModule, { setupHandler, sessionMiddleware } from './modules/auth';
|
|
6
|
+
import systemModule from './modules/system';
|
|
7
|
+
import usersModule from './modules/users';
|
|
8
|
+
import repositoriesModule from './modules/repositories';
|
|
9
|
+
import tokensModule from './modules/tokens';
|
|
10
|
+
import packagesModule from './modules/packages';
|
|
11
|
+
import artifactsModule from './modules/artifacts';
|
|
12
|
+
import adminModule from './modules/admin';
|
|
13
|
+
import { mountComposerRoutes } from './modules/composer';
|
|
14
|
+
import { getPackageStatsRouteDef } from './modules/admin/admin.routes';
|
|
15
|
+
import { getPackageStats } from './modules/admin/admin.handlers';
|
|
4
16
|
/**
|
|
5
17
|
* Create the generic Hono application
|
|
6
18
|
* This factory function expects drivers to be injected via middleware or arguments,
|
|
7
19
|
* or it sets up the structure for them to be set.
|
|
8
20
|
*/
|
|
9
21
|
export function createApp(options) {
|
|
10
|
-
const app = new
|
|
22
|
+
const app = new OpenAPIHono();
|
|
11
23
|
const logger = getLogger('info'); // Default logger, can vary per request if needed
|
|
12
24
|
// Global middleware
|
|
13
25
|
app.use('*', cors());
|
|
@@ -49,78 +61,186 @@ export function createApp(options) {
|
|
|
49
61
|
if (options?.onInit) {
|
|
50
62
|
options.onInit(app);
|
|
51
63
|
}
|
|
52
|
-
//
|
|
53
|
-
app.
|
|
64
|
+
// Mount system module (health check) at /health
|
|
65
|
+
app.route('/health', systemModule);
|
|
54
66
|
// API routes
|
|
55
|
-
const apiRoutes = new
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
apiRoutes.post('/
|
|
67
|
+
const apiRoutes = new OpenAPIHono();
|
|
68
|
+
// Mount auth module at /api/auth
|
|
69
|
+
// This includes: /api/auth/login, /api/auth/check, /api/auth/logout, /api/auth/me, /api/auth/2fa/*, /api/auth/invite/accept
|
|
70
|
+
app.route('/api/auth', authModule);
|
|
71
|
+
// Mount setup route separately at /api/setup (not under /api/auth)
|
|
72
|
+
apiRoutes.post('/setup', setupHandler);
|
|
73
|
+
// Define public paths that should be visible without authentication
|
|
74
|
+
const PUBLIC_OPENAPI_PATHS = [
|
|
75
|
+
'/health',
|
|
76
|
+
'/api/auth/login',
|
|
77
|
+
'/api/auth/check',
|
|
78
|
+
];
|
|
79
|
+
// Define admin-only paths (only visible to admin users)
|
|
80
|
+
const ADMIN_ONLY_PATHS = [
|
|
81
|
+
'/api/users', // All user management endpoints
|
|
82
|
+
'/api/users/{id}', // Delete user
|
|
83
|
+
];
|
|
84
|
+
// Helper function to check authentication and get user role
|
|
85
|
+
async function checkAuthentication(c) {
|
|
86
|
+
try {
|
|
87
|
+
const authHeader = c.req.header('Authorization');
|
|
88
|
+
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
89
|
+
return { authenticated: false };
|
|
90
|
+
}
|
|
91
|
+
const token = authHeader.slice(7);
|
|
92
|
+
let cache;
|
|
93
|
+
try {
|
|
94
|
+
cache = c.get('cache') || c.env?.KV;
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
// If cache access fails, return unauthenticated
|
|
98
|
+
return { authenticated: false };
|
|
99
|
+
}
|
|
100
|
+
if (!cache) {
|
|
101
|
+
return { authenticated: false };
|
|
102
|
+
}
|
|
103
|
+
// Try to get session - handle both CachePort (getJson) and KV (get with 'json' type)
|
|
104
|
+
let sessionData = null;
|
|
105
|
+
try {
|
|
106
|
+
if (typeof cache.getJson === 'function') {
|
|
107
|
+
sessionData = await cache.getJson(`session:${token}`);
|
|
108
|
+
}
|
|
109
|
+
else if (cache.get) {
|
|
110
|
+
sessionData = await cache.get(`session:${token}`, 'json');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
// Session retrieval failed, return unauthenticated
|
|
115
|
+
return { authenticated: false };
|
|
116
|
+
}
|
|
117
|
+
if (!sessionData) {
|
|
118
|
+
return { authenticated: false };
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
authenticated: true,
|
|
122
|
+
role: sessionData.role || 'viewer',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
// Any error means not authenticated
|
|
127
|
+
return { authenticated: false };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
61
130
|
// Protected routes - require session
|
|
62
|
-
const protectedRoutes = new
|
|
131
|
+
const protectedRoutes = new OpenAPIHono();
|
|
63
132
|
// ** SESSION MIDDLEWARE **
|
|
133
|
+
// Note: Auth routes now handle their own session middleware in the auth module
|
|
134
|
+
// This middleware is for all other protected routes (users, repositories, tokens, etc.)
|
|
64
135
|
protectedRoutes.use('*', async (c, next) => {
|
|
65
136
|
return sessionMiddleware(c, next);
|
|
66
137
|
});
|
|
67
|
-
//
|
|
68
|
-
protectedRoutes.
|
|
69
|
-
protectedRoutes.
|
|
70
|
-
protectedRoutes.
|
|
71
|
-
protectedRoutes.
|
|
72
|
-
protectedRoutes.
|
|
73
|
-
//
|
|
74
|
-
protectedRoutes.
|
|
75
|
-
protectedRoutes.
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
protectedRoutes.
|
|
84
|
-
protectedRoutes.post('/repositories/:id/sync', syncRepositoryNow);
|
|
85
|
-
// Token routes
|
|
86
|
-
protectedRoutes.get('/tokens', listTokens);
|
|
87
|
-
protectedRoutes.post('/tokens', createToken);
|
|
88
|
-
protectedRoutes.patch('/tokens/:id', updateToken);
|
|
89
|
-
protectedRoutes.delete('/tokens/:id', deleteToken);
|
|
90
|
-
// Package routes
|
|
91
|
-
protectedRoutes.get('/packages', listPackages);
|
|
92
|
-
protectedRoutes.get('/packages/:name', getPackage);
|
|
93
|
-
protectedRoutes.get('/packages/:name/:version/readme', getPackageReadme);
|
|
94
|
-
protectedRoutes.get('/packages/:name/:version/changelog', getPackageChangelog);
|
|
95
|
-
protectedRoutes.get('/packages/:name/:version/stats', getPackageStats);
|
|
96
|
-
protectedRoutes.post('/packages/add-from-mirror', addPackagesFromMirror);
|
|
97
|
-
// Stats
|
|
98
|
-
protectedRoutes.get('/stats', getStats);
|
|
99
|
-
// Settings
|
|
100
|
-
protectedRoutes.get('/settings', getSettings);
|
|
101
|
-
protectedRoutes.put('/settings/packagist-mirroring', updatePackagistMirroring);
|
|
102
|
-
// Artifacts
|
|
103
|
-
protectedRoutes.delete('/artifacts/:id', deleteArtifact);
|
|
104
|
-
protectedRoutes.post('/artifacts/cleanup', cleanupArtifacts);
|
|
105
|
-
protectedRoutes.post('/packages/cleanup-numeric-versions', cleanupNumericVersions);
|
|
138
|
+
// Mount all protected modules
|
|
139
|
+
protectedRoutes.route('/users', usersModule);
|
|
140
|
+
protectedRoutes.route('/repositories', repositoriesModule);
|
|
141
|
+
protectedRoutes.route('/tokens', tokensModule);
|
|
142
|
+
protectedRoutes.route('/packages', packagesModule);
|
|
143
|
+
protectedRoutes.route('/artifacts', artifactsModule);
|
|
144
|
+
// Admin module (stats and settings)
|
|
145
|
+
protectedRoutes.route('/stats', adminModule);
|
|
146
|
+
protectedRoutes.route('/settings', adminModule);
|
|
147
|
+
// Mount getPackageStats at correct path (temporary - should move to packages module)
|
|
148
|
+
// This route needs to be at /api/packages/:name/:version/stats
|
|
149
|
+
// Create a temporary route definition with the correct path
|
|
150
|
+
const packageStatsRoute = {
|
|
151
|
+
...getPackageStatsRouteDef,
|
|
152
|
+
path: '/packages/{name}/{version}/stats',
|
|
153
|
+
};
|
|
154
|
+
protectedRoutes.openapi(packageStatsRoute, getPackageStats);
|
|
106
155
|
// Mount protected routes under /api
|
|
107
156
|
apiRoutes.route('/', protectedRoutes);
|
|
157
|
+
// Register OpenAPI spec endpoint BEFORE mounting /api routes
|
|
158
|
+
// This ensures the handler takes precedence over the /api mount
|
|
159
|
+
// The handler executes at request time when all routes are registered
|
|
160
|
+
app.get('/api/openapi.json', async (c) => {
|
|
161
|
+
try {
|
|
162
|
+
const auth = await checkAuthentication(c);
|
|
163
|
+
const fullSpec = app.getOpenAPIDocument({
|
|
164
|
+
openapi: '3.0.0',
|
|
165
|
+
info: {
|
|
166
|
+
version: VERSION,
|
|
167
|
+
title: 'PACKAGE.broker API',
|
|
168
|
+
description: 'REST API for PACKAGE.broker - Composer Package Mirror',
|
|
169
|
+
},
|
|
170
|
+
servers: [
|
|
171
|
+
{
|
|
172
|
+
url: '/',
|
|
173
|
+
description: 'Current server',
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
});
|
|
177
|
+
// Filter paths based on authentication and role
|
|
178
|
+
if (!auth.authenticated) {
|
|
179
|
+
// Guest: only public endpoints
|
|
180
|
+
const filteredPaths = {};
|
|
181
|
+
for (const [path, pathItem] of Object.entries(fullSpec.paths || {})) {
|
|
182
|
+
if (PUBLIC_OPENAPI_PATHS.includes(path)) {
|
|
183
|
+
filteredPaths[path] = pathItem;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
fullSpec.paths = filteredPaths;
|
|
187
|
+
}
|
|
188
|
+
else if (auth.role === 'viewer') {
|
|
189
|
+
// Viewer (read-only): public + read-only endpoints (exclude admin-only)
|
|
190
|
+
const filteredPaths = {};
|
|
191
|
+
for (const [path, pathItem] of Object.entries(fullSpec.paths || {})) {
|
|
192
|
+
// Include public paths
|
|
193
|
+
if (PUBLIC_OPENAPI_PATHS.includes(path)) {
|
|
194
|
+
filteredPaths[path] = pathItem;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
// Exclude admin-only paths
|
|
198
|
+
const isAdminOnly = ADMIN_ONLY_PATHS.some(adminPath => {
|
|
199
|
+
// Handle parameterized paths like /api/users/{id}
|
|
200
|
+
const adminPathPattern = adminPath.replace(/\{[^}]+\}/g, '[^/]+');
|
|
201
|
+
const adminRegex = new RegExp(`^${adminPathPattern}$`);
|
|
202
|
+
return adminRegex.test(path);
|
|
203
|
+
});
|
|
204
|
+
if (isAdminOnly) {
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
// For protected paths, only include GET methods (read-only)
|
|
208
|
+
if (pathItem && typeof pathItem === 'object') {
|
|
209
|
+
const readOnlyMethods = ['get'];
|
|
210
|
+
const filteredPathItem = {};
|
|
211
|
+
let hasReadOnlyMethod = false;
|
|
212
|
+
for (const [method, operation] of Object.entries(pathItem)) {
|
|
213
|
+
if (readOnlyMethods.includes(method.toLowerCase())) {
|
|
214
|
+
filteredPathItem[method] = operation;
|
|
215
|
+
hasReadOnlyMethod = true;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Only include path if it has at least one read-only method
|
|
219
|
+
if (hasReadOnlyMethod) {
|
|
220
|
+
filteredPaths[path] = filteredPathItem;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
fullSpec.paths = filteredPaths;
|
|
225
|
+
}
|
|
226
|
+
// Admin users see all endpoints (no filtering needed)
|
|
227
|
+
return c.json(fullSpec);
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
logger.error('Error generating OpenAPI spec', {
|
|
231
|
+
error: error instanceof Error ? error.message : String(error),
|
|
232
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
233
|
+
}, error instanceof Error ? error : new Error(String(error)));
|
|
234
|
+
return c.json({
|
|
235
|
+
error: 'Internal Server Error',
|
|
236
|
+
message: error instanceof Error ? error.message : String(error),
|
|
237
|
+
}, 500);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
// Mount /api routes AFTER registering /api/openapi.json
|
|
108
241
|
app.route('/api', apiRoutes);
|
|
109
|
-
// Composer routes
|
|
110
|
-
|
|
111
|
-
await composerVersionMiddleware(c, next);
|
|
112
|
-
};
|
|
113
|
-
const composerTokenAuth = async (c, next) => {
|
|
114
|
-
return authMiddleware(c, next);
|
|
115
|
-
};
|
|
116
|
-
app.get('/packages.json', composerAuth, composerTokenAuth, packagesJsonRoute);
|
|
117
|
-
app.get('/p2/:vendor/:package', composerAuth, composerTokenAuth, p2PackageRoute);
|
|
118
|
-
const distAuth = async (c, next) => {
|
|
119
|
-
return distAuthMiddleware(c, next);
|
|
120
|
-
};
|
|
121
|
-
app.get('/dist/m/:vendor/:package/:version', composerAuth, distAuth, distMirrorRoute);
|
|
122
|
-
app.get('/dist/:vendor/:package/:version/:reference', composerAuth, distAuth, distLockfileRoute);
|
|
123
|
-
app.get('/dist/:repo_id/:vendor/:package/:version', composerAuth, distAuth, distRoute);
|
|
242
|
+
// Mount Composer routes at root level (CRITICAL: must stay at root for Composer protocol compatibility)
|
|
243
|
+
mountComposerRoutes(app);
|
|
124
244
|
return app;
|
|
125
245
|
}
|
|
126
246
|
//# sourceMappingURL=factory.js.map
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { OpenAPIContext } from '../../routes/api/types';
|
|
2
|
+
import type { DatabasePort } from '../../ports';
|
|
3
|
+
import { updatePackagistMirroringRequestSchema } from '@package-broker/shared';
|
|
4
|
+
export interface StatsRouteEnv {
|
|
5
|
+
Bindings: {
|
|
6
|
+
DB: D1Database;
|
|
7
|
+
};
|
|
8
|
+
Variables: {
|
|
9
|
+
database: DatabasePort;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface SettingsRouteEnv {
|
|
13
|
+
Bindings: {
|
|
14
|
+
KV?: KVNamespace;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare const PACKAGIST_MIRRORING_KEY = "settings:packagist_mirroring_enabled";
|
|
18
|
+
export declare const PACKAGE_CACHING_KEY = "settings:package_caching_enabled";
|
|
19
|
+
export declare function getStats(c: OpenAPIContext<StatsRouteEnv>): Promise<Response>;
|
|
20
|
+
export declare function getPackageStats(c: OpenAPIContext<StatsRouteEnv>): Promise<Response>;
|
|
21
|
+
export declare function getSettings(c: OpenAPIContext<SettingsRouteEnv>): Promise<Response>;
|
|
22
|
+
export declare function updatePackagistMirroring(c: OpenAPIContext<SettingsRouteEnv, ReturnType<typeof updatePackagistMirroringRequestSchema.parse>>): Promise<Response>;
|
|
23
|
+
export declare function isPackagistMirroringEnabled(kv: KVNamespace | undefined): Promise<boolean>;
|
|
24
|
+
export declare function isPackageCachingEnabled(kv: KVNamespace | undefined): Promise<boolean>;
|
|
25
|
+
//# sourceMappingURL=admin.handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.handlers.d.ts","sourceRoot":"","sources":["../../../src/modules/admin/admin.handlers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,qCAAqC,EAAE,MAAM,wBAAwB,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;KAChB,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,EAAE,CAAC,EAAE,WAAW,CAAC;KAClB,CAAC;CACH;AAGD,eAAO,MAAM,uBAAuB,yCAAkD,CAAC;AACvF,eAAO,MAAM,mBAAmB,qCAA8C,CAAC;AAM/E,wBAAsB,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwBlF;AAED,wBAAsB,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBzF;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAcxF;AAED,wBAAsB,wBAAwB,CAC5C,CAAC,EAAE,cAAc,CAAC,gBAAgB,EAAE,UAAU,CAAC,OAAO,qCAAqC,CAAC,KAAK,CAAC,CAAC,GAClG,OAAO,CAAC,QAAQ,CAAC,CAsBnB;AAED,wBAAsB,2BAA2B,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAM/F;AAED,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAM3F"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PACKAGE.broker
|
|
3
|
+
* Copyright (C) 2025 Łukasz Bajsarowicz
|
|
4
|
+
* Licensed under AGPL-3.0
|
|
5
|
+
*/
|
|
6
|
+
import { repositories, artifacts, packages } from '../../db/schema';
|
|
7
|
+
import { eq, sql, and } from 'drizzle-orm';
|
|
8
|
+
const SETTINGS_PREFIX = 'settings:';
|
|
9
|
+
export const PACKAGIST_MIRRORING_KEY = `${SETTINGS_PREFIX}packagist_mirroring_enabled`;
|
|
10
|
+
export const PACKAGE_CACHING_KEY = `${SETTINGS_PREFIX}package_caching_enabled`;
|
|
11
|
+
function isKvAvailable(kv) {
|
|
12
|
+
return kv !== undefined && kv !== null;
|
|
13
|
+
}
|
|
14
|
+
export async function getStats(c) {
|
|
15
|
+
const db = c.get('database');
|
|
16
|
+
const [activeReposResult] = await db
|
|
17
|
+
.select({ count: sql `count(*)` })
|
|
18
|
+
.from(repositories)
|
|
19
|
+
.where(eq(repositories.status, 'active'));
|
|
20
|
+
const activeRepos = activeReposResult?.count ?? 0;
|
|
21
|
+
const [packagesResult] = await db.select({ count: sql `count(*)` }).from(packages);
|
|
22
|
+
const cachedPackages = packagesResult?.count ?? 0;
|
|
23
|
+
const [downloadsResult] = await db
|
|
24
|
+
.select({ total: sql `sum(${artifacts.download_count})` })
|
|
25
|
+
.from(artifacts);
|
|
26
|
+
const totalDownloads = downloadsResult?.total ?? 0;
|
|
27
|
+
return c.json({
|
|
28
|
+
active_repos: activeRepos,
|
|
29
|
+
cached_packages: cachedPackages,
|
|
30
|
+
total_downloads: totalDownloads,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export async function getPackageStats(c) {
|
|
34
|
+
const { name: nameParam, version } = c.req.valid('param');
|
|
35
|
+
const name = decodeURIComponent(nameParam);
|
|
36
|
+
const db = c.get('database');
|
|
37
|
+
const [artifact] = await db
|
|
38
|
+
.select({
|
|
39
|
+
downloads: artifacts.download_count,
|
|
40
|
+
last_downloaded: artifacts.last_downloaded_at
|
|
41
|
+
})
|
|
42
|
+
.from(artifacts)
|
|
43
|
+
.where(and(eq(artifacts.package_name, name), eq(artifacts.version, version)))
|
|
44
|
+
.limit(1);
|
|
45
|
+
return c.json({
|
|
46
|
+
downloads: artifact?.downloads || 0,
|
|
47
|
+
last_downloaded: artifact?.last_downloaded || null
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
export async function getSettings(c) {
|
|
51
|
+
const kvAvailable = isKvAvailable(c.env.KV);
|
|
52
|
+
const packagistMirroringEnabled = kvAvailable && c.env.KV
|
|
53
|
+
? await c.env.KV.get(PACKAGIST_MIRRORING_KEY)
|
|
54
|
+
: null;
|
|
55
|
+
const packageCachingEnabled = kvAvailable && c.env.KV
|
|
56
|
+
? await c.env.KV.get(PACKAGE_CACHING_KEY)
|
|
57
|
+
: null;
|
|
58
|
+
return c.json({
|
|
59
|
+
kv_available: kvAvailable,
|
|
60
|
+
packagist_mirroring_enabled: packagistMirroringEnabled === 'true',
|
|
61
|
+
package_caching_enabled: packageCachingEnabled !== 'false',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export async function updatePackagistMirroring(c) {
|
|
65
|
+
const body = c.req.valid('json');
|
|
66
|
+
if (typeof body.enabled !== 'boolean') {
|
|
67
|
+
return c.json({ error: 'Bad Request', message: 'enabled must be a boolean' }, 400);
|
|
68
|
+
}
|
|
69
|
+
if (!isKvAvailable(c.env.KV) || !c.env.KV) {
|
|
70
|
+
return c.json({
|
|
71
|
+
error: 'Service Unavailable',
|
|
72
|
+
message: 'KV namespace is required for this setting. Please configure KV in your wrangler.toml.'
|
|
73
|
+
}, 503);
|
|
74
|
+
}
|
|
75
|
+
await c.env.KV.put(PACKAGIST_MIRRORING_KEY, String(body.enabled));
|
|
76
|
+
return c.json({
|
|
77
|
+
packagist_mirroring_enabled: body.enabled,
|
|
78
|
+
message: body.enabled
|
|
79
|
+
? 'Public Packagist mirroring enabled'
|
|
80
|
+
: 'Public Packagist mirroring disabled',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export async function isPackagistMirroringEnabled(kv) {
|
|
84
|
+
if (!isKvAvailable(kv) || !kv) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const value = await kv.get(PACKAGIST_MIRRORING_KEY);
|
|
88
|
+
return value === null || value === 'true';
|
|
89
|
+
}
|
|
90
|
+
export async function isPackageCachingEnabled(kv) {
|
|
91
|
+
if (!isKvAvailable(kv) || !kv) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
const value = await kv.get(PACKAGE_CACHING_KEY);
|
|
95
|
+
return value !== 'false';
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=admin.handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.handlers.js","sourceRoot":"","sources":["../../../src/modules/admin/admin.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { z } from '@hono/zod-openapi';
|
|
2
|
+
export declare const getStatsRouteDef: {
|
|
3
|
+
method: "get";
|
|
4
|
+
path: "/";
|
|
5
|
+
summary: string;
|
|
6
|
+
description: string;
|
|
7
|
+
security: {
|
|
8
|
+
Bearer: never[];
|
|
9
|
+
}[];
|
|
10
|
+
responses: {
|
|
11
|
+
200: {
|
|
12
|
+
content: {
|
|
13
|
+
'application/json': {
|
|
14
|
+
schema: z.ZodObject<{
|
|
15
|
+
active_repos: z.ZodNumber;
|
|
16
|
+
cached_packages: z.ZodNumber;
|
|
17
|
+
total_downloads: z.ZodNumber;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
tags: string[];
|
|
25
|
+
} & {
|
|
26
|
+
getRoutingPath(): "/";
|
|
27
|
+
};
|
|
28
|
+
export declare const getPackageStatsRouteDef: {
|
|
29
|
+
method: "get";
|
|
30
|
+
path: "/{name}/{version}/stats";
|
|
31
|
+
summary: string;
|
|
32
|
+
description: string;
|
|
33
|
+
security: {
|
|
34
|
+
Bearer: never[];
|
|
35
|
+
}[];
|
|
36
|
+
request: {
|
|
37
|
+
params: z.ZodObject<{
|
|
38
|
+
name: z.ZodString;
|
|
39
|
+
version: z.ZodString;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
};
|
|
42
|
+
responses: {
|
|
43
|
+
200: {
|
|
44
|
+
content: {
|
|
45
|
+
'application/json': {
|
|
46
|
+
schema: z.ZodObject<{
|
|
47
|
+
downloads: z.ZodNumber;
|
|
48
|
+
last_downloaded: z.ZodNullable<z.ZodNumber>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
tags: string[];
|
|
56
|
+
} & {
|
|
57
|
+
getRoutingPath(): "/:name/:version/stats";
|
|
58
|
+
};
|
|
59
|
+
export declare const getSettingsRouteDef: {
|
|
60
|
+
method: "get";
|
|
61
|
+
path: "/";
|
|
62
|
+
summary: string;
|
|
63
|
+
description: string;
|
|
64
|
+
security: {
|
|
65
|
+
Bearer: never[];
|
|
66
|
+
}[];
|
|
67
|
+
responses: {
|
|
68
|
+
200: {
|
|
69
|
+
content: {
|
|
70
|
+
'application/json': {
|
|
71
|
+
schema: z.ZodObject<{
|
|
72
|
+
kv_available: z.ZodBoolean;
|
|
73
|
+
packagist_mirroring_enabled: z.ZodBoolean;
|
|
74
|
+
package_caching_enabled: z.ZodBoolean;
|
|
75
|
+
}, z.core.$strip>;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
description: string;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
tags: string[];
|
|
82
|
+
} & {
|
|
83
|
+
getRoutingPath(): "/";
|
|
84
|
+
};
|
|
85
|
+
export declare const updatePackagistMirroringRouteDef: {
|
|
86
|
+
method: "put";
|
|
87
|
+
path: "/packagist-mirroring";
|
|
88
|
+
summary: string;
|
|
89
|
+
description: string;
|
|
90
|
+
security: {
|
|
91
|
+
Bearer: never[];
|
|
92
|
+
}[];
|
|
93
|
+
request: {
|
|
94
|
+
body: {
|
|
95
|
+
content: {
|
|
96
|
+
'application/json': {
|
|
97
|
+
schema: z.ZodObject<{
|
|
98
|
+
enabled: z.ZodBoolean;
|
|
99
|
+
}, z.core.$strip>;
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
responses: {
|
|
105
|
+
200: {
|
|
106
|
+
content: {
|
|
107
|
+
'application/json': {
|
|
108
|
+
schema: z.ZodObject<{
|
|
109
|
+
packagist_mirroring_enabled: z.ZodBoolean;
|
|
110
|
+
message: z.ZodString;
|
|
111
|
+
}, z.core.$strip>;
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
description: string;
|
|
115
|
+
};
|
|
116
|
+
400: {
|
|
117
|
+
content: {
|
|
118
|
+
'application/json': {
|
|
119
|
+
schema: z.ZodObject<{
|
|
120
|
+
error: z.ZodString;
|
|
121
|
+
message: z.ZodOptional<z.ZodString>;
|
|
122
|
+
code: z.ZodOptional<z.ZodString>;
|
|
123
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
description: string;
|
|
128
|
+
};
|
|
129
|
+
503: {
|
|
130
|
+
content: {
|
|
131
|
+
'application/json': {
|
|
132
|
+
schema: z.ZodObject<{
|
|
133
|
+
error: z.ZodString;
|
|
134
|
+
message: z.ZodOptional<z.ZodString>;
|
|
135
|
+
code: z.ZodOptional<z.ZodString>;
|
|
136
|
+
requestId: z.ZodOptional<z.ZodString>;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
description: string;
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
tags: string[];
|
|
144
|
+
} & {
|
|
145
|
+
getRoutingPath(): "/packagist-mirroring";
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=admin.routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.routes.d.ts","sourceRoot":"","sources":["../../../src/modules/admin/admin.routes.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAInD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;CAiB3B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoClC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;CAiB9B,CAAC;AAEH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C3C,CAAC"}
|